From 641150f2a242d911d6418d1936b11a7129c605e1 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Sat, 10 Apr 2021 09:13:12 -0700 Subject: [PATCH] change updateVersion to only update keys, no deletes (#12032) there are situations where metadata can have keys with empty values, preserve existing behavior --- cmd/bucket-lifecycle.go | 8 ++++++-- cmd/erasure-metadata.go | 5 ++++- cmd/xl-storage-format-v2.go | 12 ++---------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/cmd/bucket-lifecycle.go b/cmd/bucket-lifecycle.go index 666f650fa..5bcc29698 100644 --- a/cmd/bucket-lifecycle.go +++ b/cmd/bucket-lifecycle.go @@ -623,7 +623,9 @@ func putRestoreOpts(bucket, object string, rreq *RestoreObjectRequest, objInfo O } meta[v.Name] = v.Value } - meta[xhttp.AmzObjectTagging] = rreq.OutputLocation.S3.Tagging.String() + if tags := rreq.OutputLocation.S3.Tagging.String(); tags != "" { + meta[xhttp.AmzObjectTagging] = tags + } if rreq.OutputLocation.S3.Encryption.EncryptionType != "" { meta[xhttp.AmzServerSideEncryption] = xhttp.AmzEncryptionAES } @@ -636,7 +638,9 @@ func putRestoreOpts(bucket, object string, rreq *RestoreObjectRequest, objInfo O for k, v := range objInfo.UserDefined { meta[k] = v } - meta[xhttp.AmzObjectTagging] = objInfo.UserTags + if len(objInfo.UserTags) != 0 { + meta[xhttp.AmzObjectTagging] = objInfo.UserTags + } return ObjectOptions{ Versioned: globalBucketVersioningSys.Enabled(bucket), diff --git a/cmd/erasure-metadata.go b/cmd/erasure-metadata.go index 9d07b8dd0..ddbee9ce3 100644 --- a/cmd/erasure-metadata.go +++ b/cmd/erasure-metadata.go @@ -138,7 +138,10 @@ func (fi FileInfo) ToObjectInfo(bucket, object string) ObjectInfo { objInfo.ETag = extractETag(fi.Metadata) // Add user tags to the object info - objInfo.UserTags = fi.Metadata[xhttp.AmzObjectTagging] + tags := fi.Metadata[xhttp.AmzObjectTagging] + if len(tags) != 0 { + objInfo.UserTags = tags + } // Add replication status to the object info objInfo.ReplicationStatus = replication.StatusType(fi.Metadata[xhttp.AmzBucketReplicationStatus]) diff --git a/cmd/xl-storage-format-v2.go b/cmd/xl-storage-format-v2.go index 820cecea1..a77e5f9f8 100644 --- a/cmd/xl-storage-format-v2.go +++ b/cmd/xl-storage-format-v2.go @@ -739,17 +739,9 @@ func (z *xlMetaV2) UpdateObjectVersion(fi FileInfo) error { if version.ObjectV2.VersionID == uv { for k, v := range fi.Metadata { if strings.HasPrefix(strings.ToLower(k), ReservedMetadataPrefixLower) { - if v == "" { - delete(z.Versions[i].ObjectV2.MetaSys, k) - } else { - z.Versions[i].ObjectV2.MetaSys[k] = []byte(v) - } + z.Versions[i].ObjectV2.MetaSys[k] = []byte(v) } else { - if v == "" { - delete(z.Versions[i].ObjectV2.MetaUser, k) - } else { - z.Versions[i].ObjectV2.MetaUser[k] = v - } + z.Versions[i].ObjectV2.MetaUser[k] = v } } if !fi.ModTime.IsZero() {