mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-17 03:50:51 +02:00
132 lines
4.0 KiB
Go
132 lines
4.0 KiB
Go
package vacuum
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/plugin_pb"
|
|
)
|
|
|
|
// ConfigurationSchema defines the schema for vacuum plugin configuration
|
|
type ConfigurationSchema struct {
|
|
AdminConfig AdminConfigSchema `json:"admin_config"`
|
|
WorkerConfig WorkerConfigSchema `json:"worker_config"`
|
|
}
|
|
|
|
// AdminConfigSchema defines admin-side configuration
|
|
type AdminConfigSchema struct {
|
|
VacuumInterval ConfigField `json:"vacuum_interval"`
|
|
MaxConcurrentJobs ConfigField `json:"max_concurrent_jobs"`
|
|
JobTimeout ConfigField `json:"job_timeout"`
|
|
HealthCheckInterval ConfigField `json:"health_check_interval"`
|
|
DeadSpaceThreshold ConfigField `json:"dead_space_threshold"`
|
|
}
|
|
|
|
// WorkerConfigSchema defines worker-side configuration
|
|
type WorkerConfigSchema struct {
|
|
MinVolumeSize ConfigField `json:"min_volume_size"`
|
|
MaxVolumeSize ConfigField `json:"max_volume_size"`
|
|
TargetUtilization ConfigField `json:"target_utilization"`
|
|
BatchSize ConfigField `json:"batch_size"`
|
|
}
|
|
|
|
// ConfigField describes a configuration field
|
|
type ConfigField struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
Type string `json:"type"`
|
|
Required bool `json:"required"`
|
|
Default interface{} `json:"default,omitempty"`
|
|
Min interface{} `json:"min,omitempty"`
|
|
Max interface{} `json:"max,omitempty"`
|
|
Options []interface{} `json:"options,omitempty"`
|
|
Unit string `json:"unit,omitempty"`
|
|
}
|
|
|
|
// GetConfigurationSchema returns the schema for vacuum plugin configuration
|
|
func GetConfigurationSchema() *plugin_pb.PluginConfig {
|
|
schema := ConfigurationSchema{
|
|
AdminConfig: AdminConfigSchema{
|
|
VacuumInterval: ConfigField{
|
|
Name: "vacuum_interval",
|
|
Description: "Time between vacuum detection scans",
|
|
Type: "duration",
|
|
Required: true,
|
|
Default: "6h",
|
|
Min: "1h",
|
|
Max: "24h",
|
|
Unit: "seconds",
|
|
},
|
|
MaxConcurrentJobs: ConfigField{
|
|
Name: "max_concurrent_jobs",
|
|
Description: "Maximum concurrent vacuum jobs",
|
|
Type: "integer",
|
|
Required: true,
|
|
Default: 3,
|
|
Min: 1,
|
|
Max: 10,
|
|
},
|
|
JobTimeout: ConfigField{
|
|
Name: "job_timeout",
|
|
Description: "Timeout for individual vacuum jobs",
|
|
Type: "duration",
|
|
Required: true,
|
|
Default: "8h",
|
|
Min: "1h",
|
|
Max: "48h",
|
|
Unit: "seconds",
|
|
},
|
|
HealthCheckInterval: ConfigField{
|
|
Name: "health_check_interval",
|
|
Description: "Health check interval",
|
|
Type: "duration",
|
|
Required: true,
|
|
Default: "1m",
|
|
Min: "10s",
|
|
Max: "10m",
|
|
Unit: "seconds",
|
|
},
|
|
DeadSpaceThreshold: ConfigField{
|
|
Name: "dead_space_threshold",
|
|
Description: "Percentage of dead space to trigger vacuum",
|
|
Type: "integer",
|
|
Required: true,
|
|
Default: 30,
|
|
Min: 5,
|
|
Max: 90,
|
|
Unit: "percent",
|
|
},
|
|
},
|
|
WorkerConfig: WorkerConfigSchema{
|
|
MinVolumeSize: ConfigField{
|
|
Name: "min_volume_size",
|
|
Description: "Minimum volume size to consider for vacuum",
|
|
Type: "integer",
|
|
Required: true,
|
|
Default: 500,
|
|
Min: 50,
|
|
Unit: "MB",
|
|
},
|
|
MaxVolumeSize: ConfigField{
|
|
Name: "max_volume_size",
|
|
Description: "Maximum volume size to consider for vacuum",
|
|
Type: "integer",
|
|
Required: true,
|
|
Default: 20000,
|
|
Max: 100000,
|
|
Unit: "MB",
|
|
},
|
|
TargetUtilization: ConfigField{
|
|
Name: "target_utilization",
|
|
Description: "Target storage utilization after vacuum",
|
|
Type: "integer",
|
|
Required: true,
|
|
Default: 80,
|
|
Min: 50,
|
|
Max: 95,
|
|
Unit: "percent",
|
|
},
|
|
BatchSize: ConfigField{
|
|
Name: "batch_size",
|
|
Description: "Number of volumes to process in a batch",
|
|
Type: "integer",
|