config_verification.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package maintenance
  2. import (
  3. "fmt"
  4. "github.com/seaweedfs/seaweedfs/weed/pb/worker_pb"
  5. )
  6. // VerifyProtobufConfig demonstrates that the protobuf configuration system is working
  7. func VerifyProtobufConfig() error {
  8. // Create configuration manager
  9. configManager := NewMaintenanceConfigManager()
  10. config := configManager.GetConfig()
  11. // Verify basic configuration
  12. if !config.Enabled {
  13. return fmt.Errorf("expected config to be enabled by default")
  14. }
  15. if config.ScanIntervalSeconds != 30*60 {
  16. return fmt.Errorf("expected scan interval to be 1800 seconds, got %d", config.ScanIntervalSeconds)
  17. }
  18. // Verify policy configuration
  19. if config.Policy == nil {
  20. return fmt.Errorf("expected policy to be configured")
  21. }
  22. if config.Policy.GlobalMaxConcurrent != 4 {
  23. return fmt.Errorf("expected global max concurrent to be 4, got %d", config.Policy.GlobalMaxConcurrent)
  24. }
  25. // Verify task policies
  26. vacuumPolicy := config.Policy.TaskPolicies["vacuum"]
  27. if vacuumPolicy == nil {
  28. return fmt.Errorf("expected vacuum policy to be configured")
  29. }
  30. if !vacuumPolicy.Enabled {
  31. return fmt.Errorf("expected vacuum policy to be enabled")
  32. }
  33. // Verify typed configuration access
  34. vacuumConfig := vacuumPolicy.GetVacuumConfig()
  35. if vacuumConfig == nil {
  36. return fmt.Errorf("expected vacuum config to be accessible")
  37. }
  38. if vacuumConfig.GarbageThreshold != 0.3 {
  39. return fmt.Errorf("expected garbage threshold to be 0.3, got %f", vacuumConfig.GarbageThreshold)
  40. }
  41. // Verify helper functions work
  42. if !IsTaskEnabled(config.Policy, "vacuum") {
  43. return fmt.Errorf("expected vacuum task to be enabled via helper function")
  44. }
  45. maxConcurrent := GetMaxConcurrent(config.Policy, "vacuum")
  46. if maxConcurrent != 2 {
  47. return fmt.Errorf("expected vacuum max concurrent to be 2, got %d", maxConcurrent)
  48. }
  49. // Verify erasure coding configuration
  50. ecPolicy := config.Policy.TaskPolicies["erasure_coding"]
  51. if ecPolicy == nil {
  52. return fmt.Errorf("expected EC policy to be configured")
  53. }
  54. ecConfig := ecPolicy.GetErasureCodingConfig()
  55. if ecConfig == nil {
  56. return fmt.Errorf("expected EC config to be accessible")
  57. }
  58. // Verify configurable EC fields only
  59. if ecConfig.FullnessRatio <= 0 || ecConfig.FullnessRatio > 1 {
  60. return fmt.Errorf("expected EC config to have valid fullness ratio (0-1), got %f", ecConfig.FullnessRatio)
  61. }
  62. return nil
  63. }
  64. // GetProtobufConfigSummary returns a summary of the current protobuf configuration
  65. func GetProtobufConfigSummary() string {
  66. configManager := NewMaintenanceConfigManager()
  67. config := configManager.GetConfig()
  68. summary := fmt.Sprintf("SeaweedFS Protobuf Maintenance Configuration:\n")
  69. summary += fmt.Sprintf(" Enabled: %v\n", config.Enabled)
  70. summary += fmt.Sprintf(" Scan Interval: %d seconds\n", config.ScanIntervalSeconds)
  71. summary += fmt.Sprintf(" Max Retries: %d\n", config.MaxRetries)
  72. summary += fmt.Sprintf(" Global Max Concurrent: %d\n", config.Policy.GlobalMaxConcurrent)
  73. summary += fmt.Sprintf(" Task Policies: %d configured\n", len(config.Policy.TaskPolicies))
  74. for taskType, policy := range config.Policy.TaskPolicies {
  75. summary += fmt.Sprintf(" %s: enabled=%v, max_concurrent=%d\n",
  76. taskType, policy.Enabled, policy.MaxConcurrent)
  77. }
  78. return summary
  79. }
  80. // CreateCustomConfig demonstrates creating a custom protobuf configuration
  81. func CreateCustomConfig() *worker_pb.MaintenanceConfig {
  82. return &worker_pb.MaintenanceConfig{
  83. Enabled: true,
  84. ScanIntervalSeconds: 60 * 60, // 1 hour
  85. MaxRetries: 5,
  86. Policy: &worker_pb.MaintenancePolicy{
  87. GlobalMaxConcurrent: 8,
  88. TaskPolicies: map[string]*worker_pb.TaskPolicy{
  89. "custom_vacuum": {
  90. Enabled: true,
  91. MaxConcurrent: 4,
  92. TaskConfig: &worker_pb.TaskPolicy_VacuumConfig{
  93. VacuumConfig: &worker_pb.VacuumTaskConfig{
  94. GarbageThreshold: 0.5,
  95. MinVolumeAgeHours: 48,
  96. },
  97. },
  98. },
  99. },
  100. },
  101. }
  102. }