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
}