disallow EC:0 if not set during server startup (#17141)

This commit is contained in:
Harshavardhana
2023-05-04 14:44:30 -07:00
committed by GitHub
parent 1d0211d395
commit 5569acd95c
10 changed files with 100 additions and 42 deletions
+17 -6
View File
@@ -80,8 +80,9 @@ var ConfigLock sync.RWMutex
// Config storage class configuration
type Config struct {
Standard StorageClass `json:"standard"`
RRS StorageClass `json:"rrs"`
Standard StorageClass `json:"standard"`
RRS StorageClass `json:"rrs"`
initialized bool
}
// UnmarshalJSON - Validate SS and RRS parity when unmarshalling JSON.
@@ -217,11 +218,13 @@ func validateParity(ssParity, rrsParity, setDriveCount int) (err error) {
// returned.
//
// -- if input storage class is empty then standard is assumed
// -- if input is RRS but RRS is not configured default '2' parity
//
// for RRS is assumed
// -- if input is RRS but RRS is not configured/initialized '-1' parity
//
// -- if input is STANDARD but STANDARD is not configured '0' parity
// for RRS is assumed, the caller is expected to choose the right parity
// at that point.
//
// -- if input is STANDARD but STANDARD is not configured/initialized '-1' parity
//
// is returned, the caller is expected to choose the right parity
// at that point.
@@ -230,8 +233,14 @@ func (sCfg Config) GetParityForSC(sc string) (parity int) {
defer ConfigLock.RUnlock()
switch strings.TrimSpace(sc) {
case RRS:
if !sCfg.initialized {
return -1
}
return sCfg.RRS.Parity
default:
if !sCfg.initialized {
return -1
}
return sCfg.Standard.Parity
}
}
@@ -242,9 +251,10 @@ func (sCfg *Config) Update(newCfg Config) {
defer ConfigLock.Unlock()
sCfg.RRS = newCfg.RRS
sCfg.Standard = newCfg.Standard
sCfg.initialized = true
}
// Enabled returns if etcd is enabled.
// Enabled returns if storageClass is enabled is enabled.
func Enabled(kvs config.KVS) bool {
ssc := kvs.Get(ClassStandard)
rrsc := kvs.Get(ClassRRS)
@@ -307,5 +317,6 @@ func LookupConfig(kvs config.KVS, setDriveCount int) (cfg Config, err error) {
return Config{}, err
}
cfg.initialized = true
return cfg, nil
}
@@ -143,6 +143,7 @@ func TestParityCount(t *testing.T) {
RRS: StorageClass{
Parity: 2,
},
initialized: true,
}
// Set env var for test case 4
if i+1 == 4 {
+4
View File
@@ -177,6 +177,10 @@ const (
// Writes expected write quorum
MinIOWriteQuorum = "x-minio-write-quorum"
// Indicates if we are using default storage class and there was problem loading config
// if this header is set to "true"
MinIOStorageClassDefaults = "x-minio-storage-class-defaults"
// Reports number of drives currently healing
MinIOHealingDrives = "x-minio-healing-drives"