From 4e21b3de7842adb4303d27a710de936800eb5059 Mon Sep 17 00:00:00 2001 From: chrislu Date: Sat, 26 Jul 2025 20:10:22 -0700 Subject: [PATCH] ensure correct default value --- weed/admin/dash/admin_server.go | 79 +++++++++++++++++++ weed/admin/maintenance/maintenance_types.go | 5 +- weed/admin/view/app/maintenance_config.templ | 22 +----- .../view/app/maintenance_config_templ.go | 4 +- 4 files changed, 85 insertions(+), 25 deletions(-) diff --git a/weed/admin/dash/admin_server.go b/weed/admin/dash/admin_server.go index 5431b7f23..5c762762a 100644 --- a/weed/admin/dash/admin_server.go +++ b/weed/admin/dash/admin_server.go @@ -1134,6 +1134,55 @@ func (as *AdminServer) getMaintenanceConfig() (*maintenance.MaintenanceConfigDat config = DefaultMaintenanceConfig() } + // Ensure policy is properly initialized and fix zero values with meaningful defaults + defaultConfig := DefaultMaintenanceConfig() + configUpdated := false + + if config.Policy == nil { + config.Policy = defaultConfig.Policy + configUpdated = true + glog.V(1).Infof("Initialized null policy with defaults") + } + + // Replace zero values with meaningful defaults + if config.ScanIntervalSeconds == 0 { + config.ScanIntervalSeconds = defaultConfig.ScanIntervalSeconds + configUpdated = true + } + if config.WorkerTimeoutSeconds == 0 { + config.WorkerTimeoutSeconds = defaultConfig.WorkerTimeoutSeconds + configUpdated = true + } + if config.TaskTimeoutSeconds == 0 { + config.TaskTimeoutSeconds = defaultConfig.TaskTimeoutSeconds + configUpdated = true + } + if config.RetryDelaySeconds == 0 { + config.RetryDelaySeconds = defaultConfig.RetryDelaySeconds + configUpdated = true + } + if config.MaxRetries == 0 { + config.MaxRetries = defaultConfig.MaxRetries + configUpdated = true + } + if config.CleanupIntervalSeconds == 0 { + config.CleanupIntervalSeconds = defaultConfig.CleanupIntervalSeconds + configUpdated = true + } + if config.TaskRetentionSeconds == 0 { + config.TaskRetentionSeconds = defaultConfig.TaskRetentionSeconds + configUpdated = true + } + + // Save the corrected configuration if any updates were made + if configUpdated { + if saveErr := as.configPersistence.SaveMaintenanceConfig(config); saveErr != nil { + glog.Errorf("Failed to save corrected configuration: %v", saveErr) + } else { + glog.V(1).Infof("Updated configuration with meaningful defaults and saved to persistent storage") + } + } + // Get system stats from maintenance manager if available var systemStats *MaintenanceStats if as.maintenanceManager != nil { @@ -1170,6 +1219,36 @@ func (as *AdminServer) getMaintenanceConfig() (*maintenance.MaintenanceConfigDat // updateMaintenanceConfig updates maintenance configuration func (as *AdminServer) updateMaintenanceConfig(config *maintenance.MaintenanceConfig) error { + // Apply meaningful defaults for zero values before saving + defaultConfig := DefaultMaintenanceConfig() + + if config.Policy == nil { + config.Policy = defaultConfig.Policy + } + + // Replace zero values with meaningful defaults + if config.ScanIntervalSeconds == 0 { + config.ScanIntervalSeconds = defaultConfig.ScanIntervalSeconds + } + if config.WorkerTimeoutSeconds == 0 { + config.WorkerTimeoutSeconds = defaultConfig.WorkerTimeoutSeconds + } + if config.TaskTimeoutSeconds == 0 { + config.TaskTimeoutSeconds = defaultConfig.TaskTimeoutSeconds + } + if config.RetryDelaySeconds == 0 { + config.RetryDelaySeconds = defaultConfig.RetryDelaySeconds + } + if config.MaxRetries == 0 { + config.MaxRetries = defaultConfig.MaxRetries + } + if config.CleanupIntervalSeconds == 0 { + config.CleanupIntervalSeconds = defaultConfig.CleanupIntervalSeconds + } + if config.TaskRetentionSeconds == 0 { + config.TaskRetentionSeconds = defaultConfig.TaskRetentionSeconds + } + // Save configuration to persistent storage if err := as.configPersistence.SaveMaintenanceConfig(config); err != nil { return fmt.Errorf("failed to save maintenance configuration: %w", err) diff --git a/weed/admin/maintenance/maintenance_types.go b/weed/admin/maintenance/maintenance_types.go index 6b8c2e9a0..8aa4e88b6 100644 --- a/weed/admin/maintenance/maintenance_types.go +++ b/weed/admin/maintenance/maintenance_types.go @@ -137,9 +137,10 @@ func (mp *MaintenancePolicy) GetTaskPolicy(taskType MaintenanceTaskType) *TaskPo policy, exists := mp.TaskPolicies[taskType] if !exists { - // Create generic default policy using global settings - no hardcoded fallbacks + // Create default policy - enabled by default for registered task types + // This provides a better user experience where available tasks are enabled by default policy = &TaskPolicy{ - Enabled: false, // Conservative default - require explicit enabling + Enabled: true, // Default to enabled for registered task types MaxConcurrent: 1, // Conservative default concurrency RepeatInterval: mp.DefaultRepeatInterval, // Use configured default, 0 if not set CheckInterval: mp.DefaultCheckInterval, // Use configured default, 0 if not set diff --git a/weed/admin/view/app/maintenance_config.templ b/weed/admin/view/app/maintenance_config.templ index 7f2872586..65ef565af 100644 --- a/weed/admin/view/app/maintenance_config.templ +++ b/weed/admin/view/app/maintenance_config.templ @@ -150,7 +150,7 @@ templ MaintenanceConfig(data *maintenance.MaintenanceConfigData) { {menuItem.DisplayName} - if data.Config.Policy.IsTaskEnabled(menuItem.TaskType) { + if menuItem.IsEnabled { Enabled } else { Disabled @@ -250,26 +250,6 @@ templ MaintenanceConfig(data *maintenance.MaintenanceConfigData) { }); } - fetch('/api/maintenance/config', { - method: 'PUT', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(config) - }) - .then(response => response.json()) - .then(data => { - if (data.success) { - alert('Configuration saved successfully'); - } else { - alert('Failed to save configuration: ' + (data.error || 'Unknown error')); - } - }) - .catch(error => { - alert('Error: ' + error.message); - }); - } - function resetToDefaults() { if (confirm('Are you sure you want to reset to default configuration? This will overwrite your current settings.')) { // Reset form to defaults (matching DefaultMaintenanceConfig values) diff --git a/weed/admin/view/app/maintenance_config_templ.go b/weed/admin/view/app/maintenance_config_templ.go index c4010c3b9..924e2facd 100644 --- a/weed/admin/view/app/maintenance_config_templ.go +++ b/weed/admin/view/app/maintenance_config_templ.go @@ -192,7 +192,7 @@ func MaintenanceConfig(data *maintenance.MaintenanceConfigData) templ.Component if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - if data.Config.Policy.IsTaskEnabled(menuItem.TaskType) { + if menuItem.IsEnabled { templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "Enabled") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err @@ -273,7 +273,7 @@ func MaintenanceConfig(data *maintenance.MaintenanceConfigData) templ.Component if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err }