]> git.apps.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)
committerNathan Cutler <ncutler@suse.com>
Thu, 28 Jan 2021 15:46:07 +0000 (16:46 +0100)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit 2c1934bd3746697249b95b3f79f4c05425d7b40e)

src/rgw/rgw_etag_verifier.h
src/rgw/rgw_rados.cc

index 560d54805af527acb781d45f8659ab505a16879f..418c695f2b6d40f38a47624c10989df4681913aa 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 8309804eb42ea4e6d48b1bff0430f1f1fcf806d5..4b31836c3c9d6b87f87e9f88861d4ab3821a69a3 100644 (file)
@@ -3365,9 +3365,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
@@ -3379,8 +3378,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;
       }
     }