]> git-server-git.apps.pok.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)
committerPrasad Krishnan <prasad.krishnan@flipkart.com>
Fri, 20 Mar 2020 20:01:35 +0000 (20:01 +0000)
Signed-off-by: Prasad Krishnan <prasad.krishnan@flipkart.com>
qa/suites/rgw/multisite/overrides.yaml
src/rgw/rgw_etag_verifier.h
src/rgw/rgw_rados.cc

index 9c383fc78daef426284e63d4d1748736e6575dff..de0364adf82b4508f3d1b050c04d9cb72f7d643b 100644 (file)
@@ -11,5 +11,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 3153e41b0fc66e87e2dc3864893080dca19e549e..acd452ada20ad2533d5bfd9ad4a24f5d3eb5a849 100644 (file)
@@ -3259,7 +3259,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};
@@ -3353,10 +3354,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;
 
@@ -3444,15 +3446,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 "";
     }
   }
 };