]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
RGW:Multisite: Convert is_mpu_obj into an enum SourceObjType
authorPrasad Krishnan <prasad.krishnan@flipkart.com>
Fri, 20 Mar 2020 20:01:35 +0000 (20:01 +0000)
committerYang Honggang <yanghonggang@kuaishou.com>
Wed, 10 Feb 2021 11:59:28 +0000 (19:59 +0800)
Signed-off-by: Prasad Krishnan <prasad.krishnan@flipkart.com>
(cherry picked from commit fa5422597837032d97f9afceff8b5a22fad0cda7)

qa/suites/rgw/multisite/overrides.yaml
src/rgw/rgw_etag_verifier.h
src/rgw/rgw_rados.cc

index 11b0232fd3ce1525749751169967a2c1fe8706b6..a04bae9ab58a4eda7fce3acf8202b5bfa01ecf2b 100644 (file)
@@ -10,5 +10,6 @@ overrides:
         rgw curl low speed time: 300
         rgw md log max shards: 4
         rgw data log num shards: 4
+        rgw sync obj etag verify: true
   rgw:
     compression type: random
index b55f277ed5b2304348a26b80b7a83763b74e6e3d..560d54805af527acb781d45f8659ab505a16879f 100644 (file)
 #include "rgw_putobj.h"
 #include "rgw_op.h"
 
+enum SourceObjType {
+  OBJ_TYPE_UNINIT, /* Object type is not initialised yet */
+  OBJ_TYPE_ATOMIC,
+  OBJ_TYPE_MPU, /* Object at source was created through MPU */
+};
+
 class RGWPutObj_ETagVerifier : public rgw::putobj::Pipe
 {
 protected:
index c30a64996abd5e29ba5125067958d093045068b4..3d3719576ea56dde33e254f495fcf633a5c00b28 100644 (file)
@@ -3929,7 +3929,8 @@ class RGWRadosPutObj : public RGWHTTPStreamRWRequest::ReceiveCB
   void *progress_data;
   bufferlist extra_data_bl, manifest_bl;
   uint64_t extra_data_left{0};
-  bool need_to_process_attrs{true}, is_mpu_obj{false};
+  bool need_to_process_attrs{true};
+  SourceObjType obj_type{OBJ_TYPE_UNINIT};
   uint64_t data_len{0};
   map<string, bufferlist> src_attrs;
   uint64_t ofs{0};
@@ -4023,10 +4024,11 @@ public:
 
       if (rule.part_size == 0) {
         /* Atomic object */
+        obj_type = OBJ_TYPE_ATOMIC;
         etag_verifier_atomic = boost::in_place(cct, filter);
         filter = &*etag_verifier_atomic;
       } else {
-        is_mpu_obj = true;
+        obj_type = OBJ_TYPE_MPU;
         etag_verifier_mpu = boost::in_place(cct, filter);
         uint64_t cur_part_ofs = UINT64_MAX;
 
@@ -4114,15 +4116,14 @@ public:
   }
 
   string get_calculated_etag() {
-    if (!cct->_conf->rgw_sync_obj_etag_verify)
-      return "";
-
-    if (is_mpu_obj) {
+    if (obj_type == OBJ_TYPE_ATOMIC) {
+      etag_verifier_atomic->calculate_etag();
+      return etag_verifier_atomic->get_calculated_etag();
+    } else if (obj_type == OBJ_TYPE_MPU) {
       etag_verifier_mpu->calculate_etag();
       return etag_verifier_mpu->get_calculated_etag();
     } else {
-      etag_verifier_atomic->calculate_etag();
-      return etag_verifier_atomic->get_calculated_etag();
+      return "";
     }
   }
 };