]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fixup compressor_message didn't store in some cases 58046/head
authorhualong feng <hualong.feng@intel>
Fri, 14 Jun 2024 07:50:53 +0000 (15:50 +0800)
committerFeng,Hualong <hualong.feng@intel.com>
Fri, 19 Jul 2024 08:03:17 +0000 (08:03 +0000)
When I upload a object to RGW by multipart, the head object
xattr(user.rgw.compression) don't have compressor_message
when the value should be valid and part object xattr
have the value.

Signed-off-by: Feng,Hualong <hualong.feng@intel.com>
src/rgw/driver/daos/rgw_sal_daos.cc
src/rgw/driver/motr/rgw_sal_motr.cc
src/rgw/driver/rados/rgw_sal_rados.cc
src/rgw/rgw_file.cc
src/rgw/rgw_op.cc

index b105d9684b7200ee30a36bb0efc2d0b49c0a8eac..8b4d8e6e4174639dd02ad5ec06fb11481cef7312 100644 (file)
@@ -1760,11 +1760,14 @@ int DaosMultipartUpload::complete(
       bool part_compressed = (obj_part.cs_info.compression_type != "none");
       if ((handled_parts > 0) &&
           ((part_compressed != compressed) ||
-           (cs_info.compression_type != obj_part.cs_info.compression_type))) {
+           (cs_info.compression_type != obj_part.cs_info.compression_type) ||
+           (cs_info.compressor_message.has_value() &&
+           (cs_info.compressor_message != obj_part.cs_info.compressor_message)))) {
         ldpp_dout(dpp, 0)
-            << "ERROR: compression type was changed during multipart upload ("
-            << cs_info.compression_type << ">>"
-            << obj_part.cs_info.compression_type << ")" << dendl;
+            << "ERROR: compression type or compressor message was changed during multipart upload ("
+            << cs_info.compression_type << ">>" << obj_part.cs_info.compression_type << "),"
+            << cs_info.compressor_message << ">>" << obj_part.cs_info.compressor_message << ") "
+            << dendl;
         ret = -ERR_INVALID_PART;
         return ret;
       }
@@ -1785,8 +1788,11 @@ int DaosMultipartUpload::complete(
           cs_info.blocks.push_back(cb);
           new_ofs = cb.new_ofs + cb.len;
         }
-        if (!compressed)
+        if (!compressed) {
           cs_info.compression_type = obj_part.cs_info.compression_type;
+          if (obj_part.cs_info.compressor_message.has_value())
+            cs_info.compressor_message = obj_part.cs_info.compressor_message;
+       }
         cs_info.orig_size += obj_part.cs_info.orig_size;
         compressed = true;
       }
index 740d82a330cc59f31bbfb3a5066dbc00f1e2d81a..851e9109c0d7ce55884085cd564acc421a518a75 100644 (file)
@@ -2762,9 +2762,13 @@ int MotrMultipartUpload::complete(const DoutPrefixProvider *dpp,
       bool part_compressed = (part->cs_info.compression_type != "none");
       if ((handled_parts > 0) &&
           ((part_compressed != compressed) ||
-            (cs_info.compression_type != part->cs_info.compression_type))) {
-          ldpp_dout(dpp, 0) << "ERROR: compression type was changed during multipart upload ("
-                           << cs_info.compression_type << ">>" << part->cs_info.compression_type << ")" << dendl;
+           (cs_info.compression_type != obj_part.cs_info.compression_type) ||
+           (cs_info.compressor_message.has_value() &&
+           (cs_info.compressor_message != obj_part.cs_info.compressor_message)))) {
+          ldpp_dout(dpp, 0) << "ERROR: compression type or compressor message was changed during multipart upload ("
+                           << cs_info.compression_type << ">>" << part->cs_info.compression_type << "),"
+                           << cs_info.compressor_message << ">>" << obj_part.cs_info.compressor_message << ")"
+                           << dendl;
           rc = -ERR_INVALID_PART;
           return rc;
       }
@@ -2784,8 +2788,11 @@ int MotrMultipartUpload::complete(const DoutPrefixProvider *dpp,
           cs_info.blocks.push_back(cb);
           new_ofs = cb.new_ofs + cb.len;
         }
-        if (!compressed)
+        if (!compressed) {
           cs_info.compression_type = part->cs_info.compression_type;
+          if (obj_part.cs_info.compressor_message.has_value())
+            cs_info.compressor_message = obj_part.cs_info.compressor_message;
+        }
         cs_info.orig_size += part->cs_info.orig_size;
         compressed = true;
       }
index b478d4bde7a353c18090fd1222270d70ca154868..56b8b22f0d8dda79d52d81773508db5f53833a4b 100644 (file)
@@ -3319,9 +3319,13 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp,
       bool part_compressed = (obj_part.cs_info.compression_type != "none");
       if ((handled_parts > 0) &&
           ((part_compressed != compressed) ||
-            (cs_info.compression_type != obj_part.cs_info.compression_type))) {
-          ldpp_dout(dpp, 0) << "ERROR: compression type was changed during multipart upload ("
-                           << cs_info.compression_type << ">>" << obj_part.cs_info.compression_type << ")" << dendl;
+           (cs_info.compression_type != obj_part.cs_info.compression_type) ||
+           (cs_info.compressor_message.has_value() &&
+           (cs_info.compressor_message != obj_part.cs_info.compressor_message)))) {
+          ldpp_dout(dpp, 0) << "ERROR: compression type or compressor message was changed during multipart upload ("
+                            << cs_info.compression_type << ">>" << obj_part.cs_info.compression_type << "), "
+                            << cs_info.compressor_message << ">>" << obj_part.cs_info.compressor_message << ") "
+                            << dendl;
           ret = -ERR_INVALID_PART;
           return ret;
       }
@@ -3340,8 +3344,11 @@ int RadosMultipartUpload::complete(const DoutPrefixProvider *dpp,
           cs_info.blocks.push_back(cb);
           new_ofs = cb.new_ofs + cb.len;
         }
-        if (!compressed)
+        if (!compressed) {
           cs_info.compression_type = obj_part.cs_info.compression_type;
+          if (obj_part.cs_info.compressor_message.has_value())
+            cs_info.compressor_message = obj_part.cs_info.compressor_message;
+        }
         cs_info.orig_size += obj_part.cs_info.orig_size;
         compressed = true;
       }
index 66e883e7257a787b4f4a91885aa7164f05ebfee7..a2d9f5e783623759774f37948915c1a6f373fa0b 100644 (file)
@@ -1967,12 +1967,14 @@ namespace rgw {
       RGWCompressionInfo cs_info;
       cs_info.compression_type = plugin->get_type_name();
       cs_info.orig_size = state->obj_size;
+      cs_info.compressor_message = compressor->get_compressor_message();
       cs_info.blocks = std::move(compressor->get_compression_blocks());
       encode(cs_info, tmp);
       attrs[RGW_ATTR_COMPRESSION] = tmp;
       ldpp_dout(this, 20) << "storing " << RGW_ATTR_COMPRESSION
                        << " with type=" << cs_info.compression_type
                        << ", orig_size=" << cs_info.orig_size
+                       << ", compressor_message=" << cs_info.compressor_message
                        << ", blocks=" << cs_info.blocks.size() << dendl;
     }
 
index e924784770582339c0a226bcdf3cf6d10d51d0e7..6b93a49e6cb10c9378077a60b3cd161df15e23db 100644 (file)
@@ -4420,6 +4420,7 @@ void RGWPutObj::execute(optional_yield y)
     ldpp_dout(this, 20) << "storing " << RGW_ATTR_COMPRESSION
         << " with type=" << cs_info.compression_type
         << ", orig_size=" << cs_info.orig_size
+        << ", compressor_message=" << cs_info.compressor_message
         << ", blocks=" << cs_info.blocks.size() << dendl;
   }
   if (torrent) {