diff --git a/cmd/bucket-handlers.go b/cmd/bucket-handlers.go index d6ae21bea..ce0ca1af0 100644 --- a/cmd/bucket-handlers.go +++ b/cmd/bucket-handlers.go @@ -47,7 +47,7 @@ import ( const ( getBucketVersioningResponse = `` objectLockConfig = "object-lock.xml" - bucketTaggingConfigFile = "tagging.xml" + bucketTaggingConfig = "tagging.xml" ) // Check if there are buckets on server without corresponding entry in etcd backend and @@ -1123,7 +1123,7 @@ func (api objectAPIHandlers) PutBucketTaggingHandler(w http.ResponseWriter, r *h return } - if err = globalBucketMetadataSys.Update(bucket, bucketTaggingConfigFile, configData); err != nil { + if err = globalBucketMetadataSys.Update(bucket, bucketTaggingConfig, configData); err != nil { writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL, guessIsBrowserReq(r)) return } @@ -1191,7 +1191,7 @@ func (api objectAPIHandlers) DeleteBucketTaggingHandler(w http.ResponseWriter, r return } - if err := globalBucketMetadataSys.Update(bucket, bucketTaggingConfigFile, nil); err != nil { + if err := globalBucketMetadataSys.Update(bucket, bucketTaggingConfig, nil); err != nil { writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL, guessIsBrowserReq(r)) return } diff --git a/cmd/bucket-metadata-sys.go b/cmd/bucket-metadata-sys.go index 55ab43d9f..6ee467c7e 100644 --- a/cmd/bucket-metadata-sys.go +++ b/cmd/bucket-metadata-sys.go @@ -76,7 +76,44 @@ func (sys *BucketMetadataSys) Update(bucket string, configFile string, configDat if globalIsGateway { // This code is needed only for gateway implementations. - if configFile == bucketPolicyConfig { + switch configFile { + case bucketSSEConfig: + if globalGatewayName == "nas" { + meta, err := loadBucketMetadata(GlobalContext, objAPI, bucket) + if err != nil { + return err + } + meta.EncryptionConfigXML = configData + return meta.Save(GlobalContext, objAPI) + } + case bucketLifecycleConfig: + if globalGatewayName == "nas" { + meta, err := loadBucketMetadata(GlobalContext, objAPI, bucket) + if err != nil { + return err + } + meta.LifecycleConfigXML = configData + return meta.Save(GlobalContext, objAPI) + } + case bucketTaggingConfig: + if globalGatewayName == "nas" { + meta, err := loadBucketMetadata(GlobalContext, objAPI, bucket) + if err != nil { + return err + } + meta.TaggingConfigXML = configData + return meta.Save(GlobalContext, objAPI) + } + case bucketNotificationConfig: + if globalGatewayName == "nas" { + meta, err := loadBucketMetadata(GlobalContext, objAPI, bucket) + if err != nil { + return err + } + meta.NotificationConfigXML = configData + return meta.Save(GlobalContext, objAPI) + } + case bucketPolicyConfig: if configData == nil { return objAPI.DeleteBucketPolicy(GlobalContext, bucket) } @@ -107,7 +144,7 @@ func (sys *BucketMetadataSys) Update(bucket string, configFile string, configDat meta.LifecycleConfigXML = configData case bucketSSEConfig: meta.EncryptionConfigXML = configData - case bucketTaggingConfigFile: + case bucketTaggingConfig: meta.TaggingConfigXML = configData case objectLockConfig: meta.ObjectLockConfigXML = configData diff --git a/cmd/bucket-metadata.go b/cmd/bucket-metadata.go index 681ebd2d7..d1366aa95 100644 --- a/cmd/bucket-metadata.go +++ b/cmd/bucket-metadata.go @@ -206,7 +206,7 @@ func (b *BucketMetadata) convertLegacyConfigs(ctx context.Context, objectAPI Obj bucketLifecycleConfig, bucketQuotaConfigFile, bucketSSEConfig, - bucketTaggingConfigFile, + bucketTaggingConfig, objectLockConfig, } @@ -255,7 +255,7 @@ func (b *BucketMetadata) convertLegacyConfigs(ctx context.Context, objectAPI Obj b.LifecycleConfigXML = configData case bucketSSEConfig: b.EncryptionConfigXML = configData - case bucketTaggingConfigFile: + case bucketTaggingConfig: b.TaggingConfigXML = configData case objectLockConfig: b.ObjectLockConfigXML = configData diff --git a/cmd/config-current.go b/cmd/config-current.go index 8ce9ceaef..56db549d8 100644 --- a/cmd/config-current.go +++ b/cmd/config-current.go @@ -311,6 +311,8 @@ func validateConfig(s config.Config) error { globalNotificationSys.ConfiguredTargetIDs()) } +var syncEtcdOnce sync.Once + func lookupConfigs(s config.Config) { ctx := GlobalContext @@ -325,14 +327,24 @@ func lookupConfigs(s config.Config) { etcdCfg, err := etcd.LookupConfig(s[config.EtcdSubSys][config.Default], globalRootCAs) if err != nil { - logger.LogIf(ctx, fmt.Errorf("Unable to initialize etcd config: %w", err)) + if globalIsGateway { + logger.FatalIf(err, "Unable to initialize etcd config") + } else { + logger.LogIf(ctx, fmt.Errorf("Unable to initialize etcd config: %w", err)) + } } if etcdCfg.Enabled { - globalEtcdClient, err = etcd.New(etcdCfg) - if err != nil { - logger.LogIf(ctx, fmt.Errorf("Unable to initialize etcd config: %w", err)) - } + syncEtcdOnce.Do(func() { + globalEtcdClient, err = etcd.New(etcdCfg) + if err != nil { + if globalIsGateway { + logger.FatalIf(err, "Unable to initialize etcd config") + } else { + logger.LogIf(ctx, fmt.Errorf("Unable to initialize etcd config: %w", err)) + } + } + }) } // Bucket federation is 'true' only when IAM assets are not namespaced @@ -377,7 +389,11 @@ func lookupConfigs(s config.Config) { globalCacheConfig, err = cache.LookupConfig(s[config.CacheSubSys][config.Default]) if err != nil { - logger.LogIf(ctx, fmt.Errorf("Unable to setup cache: %w", err)) + if globalIsGateway { + logger.FatalIf(err, "Unable to setup cache") + } else { + logger.LogIf(ctx, fmt.Errorf("Unable to setup cache: %w", err)) + } } if globalCacheConfig.Enabled {