From a0fb0c18351f9795d80581f2ff59b785bdc0f68c Mon Sep 17 00:00:00 2001 From: Poorna Date: Tue, 13 Sep 2022 21:23:33 -0700 Subject: [PATCH] panic if replication config could not be read from disk (#15685) If replication config could not be read from bucket metadata for some reason, issue a panic so that unexpected replication outcomes can be avoided for replicated buckets. For similar reasons, adding a panic while fetching object-lock config if it failed for reason other than non-existence of config. --- cmd/bucket-object-lock.go | 8 ++++++-- cmd/bucket-replication.go | 8 +++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/cmd/bucket-object-lock.go b/cmd/bucket-object-lock.go index 28aa8fb20..eb8b0daff 100644 --- a/cmd/bucket-object-lock.go +++ b/cmd/bucket-object-lock.go @@ -19,6 +19,7 @@ package cmd import ( "context" + "errors" "math" "net/http" @@ -46,11 +47,14 @@ func (sys *BucketObjectLockSys) Get(bucketName string) (r objectlock.Retention, config, _, err := globalBucketMetadataSys.GetObjectLockConfig(bucketName) if err != nil { - if _, ok := err.(BucketObjectLockConfigNotFound); ok { + if errors.Is(err, BucketObjectLockConfigNotFound{Bucket: bucketName}) { return r, nil } + if errors.Is(err, errInvalidArgument) { + return r, err + } + logger.CriticalIf(context.Background(), err) return r, err - } return config.ToRetention(), nil } diff --git a/cmd/bucket-replication.go b/cmd/bucket-replication.go index 578ba97d9..9ce885475 100644 --- a/cmd/bucket-replication.go +++ b/cmd/bucket-replication.go @@ -81,6 +81,12 @@ func getReplicationConfig(ctx context.Context, bucketName string) (rc *replicati } rCfg, _, err := globalBucketMetadataSys.GetReplicationConfig(ctx, bucketName) + if err != nil { + if errors.Is(err, BucketReplicationConfigNotFound{Bucket: bucketName}) || errors.Is(err, errInvalidArgument) { + return rCfg, err + } + logger.CriticalIf(ctx, err) + } return rCfg, err } @@ -2325,7 +2331,7 @@ func QueueReplicationHeal(ctx context.Context, bucket string, oi ObjectInfo) { if oi.VersionID == "" || oi.ModTime.IsZero() { return } - rcfg, _, _ := globalBucketMetadataSys.GetReplicationConfig(ctx, bucket) + rcfg, _ := getReplicationConfig(ctx, bucket) tgts, _ := globalBucketTargetSys.ListBucketTargets(ctx, bucket) queueReplicationHeal(ctx, bucket, oi, replicationConfig{ Config: rcfg,