From fc03be7891ed6ad2e8de86060ae714cafd52e93f Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Mon, 22 May 2023 12:05:14 -0700 Subject: [PATCH] simplify bucket metadata lookups for versioning/object locking (#17253) --- cmd/admin-bucket-handlers.go | 2 +- cmd/bucket-metadata.go | 10 ++++++++++ cmd/erasure-server-pool.go | 4 ++-- cmd/site-replication.go | 8 +++----- internal/bucket/object/lock/lock.go | 5 +++++ 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/cmd/admin-bucket-handlers.go b/cmd/admin-bucket-handlers.go index 2603c34f8..a83328979 100644 --- a/cmd/admin-bucket-handlers.go +++ b/cmd/admin-bucket-handlers.go @@ -705,7 +705,7 @@ func (a adminAPIHandlers) ImportBucketMetadataHandler(w http.ResponseWriter, r * } if _, ok := bucketMap[bucket]; !ok { opts := MakeBucketOptions{ - LockEnabled: config.ObjectLockEnabled == "Enabled", + LockEnabled: config.Enabled(), } err = objectAPI.MakeBucket(ctx, bucket, opts) if err != nil { diff --git a/cmd/bucket-metadata.go b/cmd/bucket-metadata.go index 4552db617..4e5c375e0 100644 --- a/cmd/bucket-metadata.go +++ b/cmd/bucket-metadata.go @@ -119,6 +119,16 @@ func newBucketMetadata(name string) BucketMetadata { } } +// Versioning returns true if versioning is enabled +func (b BucketMetadata) Versioning() bool { + return b.LockEnabled || (b.versioningConfig != nil && b.versioningConfig.Enabled()) || (b.objectLockConfig != nil && b.objectLockConfig.Enabled()) +} + +// ObjectLocking returns true if object locking is enabled +func (b BucketMetadata) ObjectLocking() bool { + return b.LockEnabled || (b.objectLockConfig != nil && b.objectLockConfig.Enabled()) +} + // SetCreatedAt preserves the CreatedAt time for bucket across sites in site replication. It defaults to // creation time of bucket on this cluster in all other cases. func (b *BucketMetadata) SetCreatedAt(createdAt time.Time) { diff --git a/cmd/erasure-server-pool.go b/cmd/erasure-server-pool.go index 23b611658..586cd0bdb 100644 --- a/cmd/erasure-server-pool.go +++ b/cmd/erasure-server-pool.go @@ -1627,8 +1627,8 @@ func (z *erasureServerPools) GetBucketInfo(ctx context.Context, bucket string, o meta, err := globalBucketMetadataSys.Get(bucket) if err == nil { bucketInfo.Created = meta.Created - bucketInfo.Versioning = meta.LockEnabled || globalBucketVersioningSys.Enabled(bucket) - bucketInfo.ObjectLocking = meta.LockEnabled + bucketInfo.Versioning = meta.Versioning() + bucketInfo.ObjectLocking = meta.ObjectLocking() } return bucketInfo, nil } diff --git a/cmd/site-replication.go b/cmd/site-replication.go index 5c3383059..546edd761 100644 --- a/cmd/site-replication.go +++ b/cmd/site-replication.go @@ -1615,13 +1615,11 @@ func (c *SiteReplicationSys) syncToAllPeers(ctx context.Context) error { return errSRBackendIssue(err) } - var opts MakeBucketOptions - if meta.objectLockConfig != nil { - opts.LockEnabled = meta.objectLockConfig.ObjectLockEnabled == "Enabled" + opts := MakeBucketOptions{ + LockEnabled: meta.ObjectLocking(), + CreatedAt: bucketInfo.Created.UTC(), } - opts.CreatedAt = bucketInfo.Created.UTC() - // Now call the MakeBucketHook on existing bucket - this will // create buckets and replication rules on peer clusters. if err = c.MakeBucketHook(ctx, bucket, opts); err != nil { diff --git a/internal/bucket/object/lock/lock.go b/internal/bucket/object/lock/lock.go index 222ec6864..4872b3f5a 100644 --- a/internal/bucket/object/lock/lock.go +++ b/internal/bucket/object/lock/lock.go @@ -229,6 +229,11 @@ type Config struct { } `xml:"Rule,omitempty"` } +// Enabled returns true if config.ObjectLockEnabled is set to Enabled +func (config *Config) Enabled() bool { + return config.ObjectLockEnabled == Enabled +} + // UnmarshalXML - decodes XML data. func (config *Config) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { // Make subtype to avoid recursive UnmarshalXML().