]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: ETagVerifier_MPU takes existing offset vector
authorCasey Bodley <cbodley@redhat.com>
Thu, 17 Sep 2020 23:26:51 +0000 (19:26 -0400)
committerCasey Bodley <cbodley@redhat.com>
Tue, 22 Sep 2020 18:40:36 +0000 (14:40 -0400)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_etag_verifier.h
src/rgw/rgw_rados.cc

index b7fa71f4ef5f8b1f411124d4c32a23969b7c6e7e..65fccae051975b1d74bf179b928a08515d2e5b43 100644 (file)
@@ -60,12 +60,15 @@ class RGWPutObj_ETagVerifier_MPU : public RGWPutObj_ETagVerifier
   void process_end_of_MPU_part();
 
 public:
-  RGWPutObj_ETagVerifier_MPU(CephContext* cct_, rgw::putobj::DataProcessor *next)
-    : RGWPutObj_ETagVerifier(cct_, next) {}
+  RGWPutObj_ETagVerifier_MPU(CephContext* cct,
+                             std::vector<uint64_t> part_ofs,
+                             rgw::putobj::DataProcessor *next)
+    : RGWPutObj_ETagVerifier(cct, next),
+      part_ofs(std::move(part_ofs))
+  {}
 
   int process(bufferlist&& data, uint64_t logical_offset) override;
   void calculate_etag() override;
-  void append_part_ofs(uint64_t ofs) { part_ofs.emplace_back(ofs); }
 
 }; /* RGWPutObj_ETagVerifier_MPU */
 
index 2be91a7266a4ed22e878358b6c0fb5da8a6010a2..bcc5606e0d63bc9c496a3e85bc5e89857e167b7e 100644 (file)
@@ -3391,9 +3391,8 @@ public:
         etag_verifier_atomic = boost::in_place(cct, filter);
         filter = &*etag_verifier_atomic;
       } else {
-        obj_type = OBJ_TYPE_MPU;
-        etag_verifier_mpu = boost::in_place(cct, filter);
         uint64_t cur_part_ofs = UINT64_MAX;
+        std::vector<uint64_t> part_ofs;
 
         /*
          * We must store the offset of each part to calculate the ETAGs for each
@@ -3405,8 +3404,11 @@ public:
             continue;
           cur_part_ofs = mi.get_part_ofs();
           ldout(cct, 20) << "MPU Part offset:" << cur_part_ofs << dendl;
-          etag_verifier_mpu->append_part_ofs(cur_part_ofs);
+          part_ofs.push_back(cur_part_ofs);
         }
+
+        obj_type = OBJ_TYPE_MPU;
+        etag_verifier_mpu = boost::in_place(cct, std::move(part_ofs), filter);
         filter = &*etag_verifier_mpu;
       }
     }