From 9af7d627ace0d7bff67c8b6fb6dfdb527e8eddb8 Mon Sep 17 00:00:00 2001 From: Praveen raj Mani Date: Wed, 12 Dec 2018 01:35:41 +0530 Subject: [PATCH] Preserve the compression headers while copying (#6952) Fixes #6951 --- cmd/object-handlers.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/cmd/object-handlers.go b/cmd/object-handlers.go index afa57c4cc..fd17bca31 100644 --- a/cmd/object-handlers.go +++ b/cmd/object-handlers.go @@ -788,13 +788,15 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re length = actualSize } + var compressMetadata map[string]string // No need to compress for remote etcd calls // Pass the decompressed stream to such calls. isCompressed := objectAPI.IsCompressionSupported() && isCompressible(r.Header, srcObject) && !isRemoteCallRequired(ctx, srcBucket, dstBucket, objectAPI) if isCompressed { - // Storing the compression metadata. - srcInfo.UserDefined[ReservedMetadataPrefix+"compression"] = compressionAlgorithmV1 - srcInfo.UserDefined[ReservedMetadataPrefix+"actual-size"] = strconv.FormatInt(actualSize, 10) + compressMetadata = make(map[string]string, 2) + // Preserving the compression metadata. + compressMetadata[ReservedMetadataPrefix+"compression"] = compressionAlgorithmV1 + compressMetadata[ReservedMetadataPrefix+"actual-size"] = strconv.FormatInt(actualSize, 10) // Remove all source encrypted related metadata to // avoid copying them in target object. crypto.RemoveInternalEntries(srcInfo.UserDefined) @@ -937,6 +939,11 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re return } + // Store the preserved compression metadata. + for k, v := range compressMetadata { + srcInfo.UserDefined[k] = v + } + // We need to preserve the encryption headers set in EncryptRequest, // so we do not want to override them, copy them instead. for k, v := range encMetadata {