package shardconfig import ( "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config" blobstorconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/engine/shard/blobstor" gcconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/engine/shard/gc" metabaseconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/engine/shard/metabase" piloramaconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/engine/shard/pilorama" writecacheconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/engine/shard/writecache" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode" ) // Config is a wrapper over the config section // which provides access to Shard configurations. type Config config.Config const ( // SmallSizeLimitDefault is a default limit of small objects payload in bytes. SmallSizeLimitDefault = 1 << 20 EstimateCompressibilityThresholdDefault = 0.1 RefillMetabaseWorkersCountDefault = 500 ) // From wraps config section into Config. func From(c *config.Config) *Config { return (*Config)(c) } // Compress returns the value of "compress" config parameter. // // Returns false if the value is not a valid bool. func (x *Config) Compress() bool { return config.BoolSafe( (*config.Config)(x), "compress", ) } // UncompressableContentTypes returns the value of "compress_skip_content_types" config parameter. // // Returns nil if a the value is missing or is invalid. func (x *Config) UncompressableContentTypes() []string { return config.StringSliceSafe( (*config.Config)(x), "compression_exclude_content_types") } // EstimateCompressibility returns the value of "estimate_compressibility" config parameter. // // Returns false if the value is not a valid bool. func (x *Config) EstimateCompressibility() bool { return config.BoolSafe( (*config.Config)(x), "compression_estimate_compressibility", ) } // EstimateCompressibilityThreshold returns the value of "estimate_compressibility_threshold" config parameter. // // Returns EstimateCompressibilityThresholdDefault if the value is not defined, not valid float or not in range [0.0; 1.0]. func (x *Config) EstimateCompressibilityThreshold() float64 { v := config.FloatOrDefault( (*config.Config)(x), "compression_estimate_compressibility_threshold", EstimateCompressibilityThresholdDefault) if v < 0.0 || v > 1.0 { return EstimateCompressibilityThresholdDefault } return v } // SmallSizeLimit returns the value of "small_object_size" config parameter. // // Returns SmallSizeLimitDefault if the value is not a positive number. func (x *Config) SmallSizeLimit() uint64 { l := config.SizeInBytesSafe( (*config.Config)(x), "small_object_size", ) if l > 0 { return l } return SmallSizeLimitDefault } // BlobStor returns "blobstor" subsection as a blobstorconfig.Config. func (x *Config) BlobStor() *blobstorconfig.Config { return blobstorconfig.From( (*config.Config)(x). Sub("blobstor"), ) } // Metabase returns "metabase" subsection as a metabaseconfig.Config. func (x *Config) Metabase() *metabaseconfig.Config { return metabaseconfig.From( (*config.Config)(x). Sub("metabase"), ) } // WriteCache returns "writecache" subsection as a writecacheconfig.Config. func (x *Config) WriteCache() *writecacheconfig.Config { return writecacheconfig.From( (*config.Config)(x). Sub("writecache"), ) } // Pilorama returns "pilorama" subsection as a piloramaconfig.Config. func (x *Config) Pilorama() *piloramaconfig.Config { return piloramaconfig.From( (*config.Config)(x). Sub("pilorama"), ) } // GC returns "gc" subsection as a gcconfig.Config. func (x *Config) GC() *gcconfig.Config { return gcconfig.From( (*config.Config)(x). Sub("gc"), ) } // RefillMetabase returns the value of "resync_metabase" config parameter. // // Returns false if the value is not a valid bool. func (x *Config) RefillMetabase() bool { return config.BoolSafe( (*config.Config)(x), "resync_metabase", ) } // RefillMetabaseWorkersCount returns the value of "resync_metabase_worker_count" config parameter. // // Returns RefillMetabaseWorkersCountDefault if the value is not a positive number. func (x *Config) RefillMetabaseWorkersCount() int { v := config.IntSafe( (*config.Config)(x), "resync_metabase_worker_count", ) if v > 0 { return int(v) } return RefillMetabaseWorkersCountDefault } // Mode return the value of "mode" config parameter. // // Panics if read the value is not one of predefined // shard modes. func (x *Config) Mode() (m mode.Mode) { s := config.StringSafe( (*config.Config)(x), "mode", ) switch s { case "read-write", "": m = mode.ReadWrite case "read-only": m = mode.ReadOnly case "degraded": m = mode.Degraded case "degraded-read-only": m = mode.DegradedReadOnly case "disabled": m = mode.Disabled default: panic("unknown shard mode: " + s) } return }