You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.8 KiB
124 lines
3.8 KiB
package maintenance
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/worker_pb"
|
|
)
|
|
|
|
// VerifyProtobufConfig demonstrates that the protobuf configuration system is working
|
|
func VerifyProtobufConfig() error {
|
|
// Create configuration manager
|
|
configManager := NewMaintenanceConfigManager()
|
|
config := configManager.GetConfig()
|
|
|
|
// Verify basic configuration
|
|
if !config.Enabled {
|
|
return fmt.Errorf("expected config to be enabled by default")
|
|
}
|
|
|
|
if config.ScanIntervalSeconds != 30*60 {
|
|
return fmt.Errorf("expected scan interval to be 1800 seconds, got %d", config.ScanIntervalSeconds)
|
|
}
|
|
|
|
// Verify policy configuration
|
|
if config.Policy == nil {
|
|
return fmt.Errorf("expected policy to be configured")
|
|
}
|
|
|
|
if config.Policy.GlobalMaxConcurrent != 4 {
|
|
return fmt.Errorf("expected global max concurrent to be 4, got %d", config.Policy.GlobalMaxConcurrent)
|
|
}
|
|
|
|
// Verify task policies
|
|
vacuumPolicy := config.Policy.TaskPolicies["vacuum"]
|
|
if vacuumPolicy == nil {
|
|
return fmt.Errorf("expected vacuum policy to be configured")
|
|
}
|
|
|
|
if !vacuumPolicy.Enabled {
|
|
return fmt.Errorf("expected vacuum policy to be enabled")
|
|
}
|
|
|
|
// Verify typed configuration access
|
|
vacuumConfig := vacuumPolicy.GetVacuumConfig()
|
|
if vacuumConfig == nil {
|
|
return fmt.Errorf("expected vacuum config to be accessible")
|
|
}
|
|
|
|
if vacuumConfig.GarbageThreshold != 0.3 {
|
|
return fmt.Errorf("expected garbage threshold to be 0.3, got %f", vacuumConfig.GarbageThreshold)
|
|
}
|
|
|
|
// Verify helper functions work
|
|
if !IsTaskEnabled(config.Policy, "vacuum") {
|
|
return fmt.Errorf("expected vacuum task to be enabled via helper function")
|
|
}
|
|
|
|
maxConcurrent := GetMaxConcurrent(config.Policy, "vacuum")
|
|
if maxConcurrent != 2 {
|
|
return fmt.Errorf("expected vacuum max concurrent to be 2, got %d", maxConcurrent)
|
|
}
|
|
|
|
// Verify erasure coding configuration
|
|
ecPolicy := config.Policy.TaskPolicies["erasure_coding"]
|
|
if ecPolicy == nil {
|
|
return fmt.Errorf("expected EC policy to be configured")
|
|
}
|
|
|
|
ecConfig := ecPolicy.GetErasureCodingConfig()
|
|
if ecConfig == nil {
|
|
return fmt.Errorf("expected EC config to be accessible")
|
|
}
|
|
|
|
// Verify configurable EC fields only
|
|
if ecConfig.FullnessRatio <= 0 || ecConfig.FullnessRatio > 1 {
|
|
return fmt.Errorf("expected EC config to have valid fullness ratio (0-1), got %f", ecConfig.FullnessRatio)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetProtobufConfigSummary returns a summary of the current protobuf configuration
|
|
func GetProtobufConfigSummary() string {
|
|
configManager := NewMaintenanceConfigManager()
|
|
config := configManager.GetConfig()
|
|
|
|
summary := fmt.Sprintf("SeaweedFS Protobuf Maintenance Configuration:\n")
|
|
summary += fmt.Sprintf(" Enabled: %v\n", config.Enabled)
|
|
summary += fmt.Sprintf(" Scan Interval: %d seconds\n", config.ScanIntervalSeconds)
|
|
summary += fmt.Sprintf(" Max Retries: %d\n", config.MaxRetries)
|
|
summary += fmt.Sprintf(" Global Max Concurrent: %d\n", config.Policy.GlobalMaxConcurrent)
|
|
summary += fmt.Sprintf(" Task Policies: %d configured\n", len(config.Policy.TaskPolicies))
|
|
|
|
for taskType, policy := range config.Policy.TaskPolicies {
|
|
summary += fmt.Sprintf(" %s: enabled=%v, max_concurrent=%d\n",
|
|
taskType, policy.Enabled, policy.MaxConcurrent)
|
|
}
|
|
|
|
return summary
|
|
}
|
|
|
|
// CreateCustomConfig demonstrates creating a custom protobuf configuration
|
|
func CreateCustomConfig() *worker_pb.MaintenanceConfig {
|
|
return &worker_pb.MaintenanceConfig{
|
|
Enabled: true,
|
|
ScanIntervalSeconds: 60 * 60, // 1 hour
|
|
MaxRetries: 5,
|
|
Policy: &worker_pb.MaintenancePolicy{
|
|
GlobalMaxConcurrent: 8,
|
|
TaskPolicies: map[string]*worker_pb.TaskPolicy{
|
|
"custom_vacuum": {
|
|
Enabled: true,
|
|
MaxConcurrent: 4,
|
|
TaskConfig: &worker_pb.TaskPolicy_VacuumConfig{
|
|
VacuumConfig: &worker_pb.VacuumTaskConfig{
|
|
GarbageThreshold: 0.5,
|
|
MinVolumeAgeHours: 48,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|