]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
RGW Zipper - chunk/stripe size are RadosStore only 42922/head
authorDaniel Gryniewicz <dang@redhat.com>
Wed, 25 Aug 2021 17:02:12 +0000 (13:02 -0400)
committerDaniel Gryniewicz <dang@redhat.com>
Wed, 25 Aug 2021 17:02:12 +0000 (13:02 -0400)
Signed-off-by: Daniel Gryniewicz <dang@redhat.com>
src/rgw/rgw_putobj_processor.cc
src/rgw/rgw_sal.h
src/rgw/rgw_sal_rados.h

index d4b600cfe90f2f118d1721ced7e8362f6c3a8ae5..58cff298028859ed4870e4c3fd8d2ed841739929 100644 (file)
@@ -212,7 +212,8 @@ int AtomicObjectProcessor::prepare(optional_yield y)
   uint64_t chunk_size = 0;
   uint64_t alignment;
 
-  int r = head_obj->get_max_chunk_size(dpp, head_obj->get_bucket()->get_placement_rule(),
+  int r = dynamic_cast<rgw::sal::RadosObject*>(head_obj.get())->get_max_chunk_size(
+                                      dpp, head_obj->get_bucket()->get_placement_rule(),
                                       &max_head_chunk_size, &alignment);
   if (r < 0) {
     return r;
@@ -222,7 +223,7 @@ int AtomicObjectProcessor::prepare(optional_yield y)
   if (head_obj->get_bucket()->get_placement_rule() != tail_placement_rule) {
     if (!head_obj->placement_rules_match(head_obj->get_bucket()->get_placement_rule(), tail_placement_rule)) {
       same_pool = false;
-      r = head_obj->get_max_chunk_size(dpp, tail_placement_rule, &chunk_size);
+      r = dynamic_cast<rgw::sal::RadosObject*>(head_obj.get())->get_max_chunk_size(dpp, tail_placement_rule, &chunk_size);
       if (r < 0) {
         return r;
       }
@@ -238,7 +239,8 @@ int AtomicObjectProcessor::prepare(optional_yield y)
   uint64_t stripe_size;
   const uint64_t default_stripe_size = store->ctx()->_conf->rgw_obj_stripe_size;
 
-  head_obj->get_max_aligned_size(default_stripe_size, alignment, &stripe_size);
+  dynamic_cast<rgw::sal::RadosObject*>(head_obj.get())->get_max_aligned_size(
+                                       default_stripe_size, alignment, &stripe_size);
 
   manifest.set_trivial_rule(head_max_size, stripe_size);
 
@@ -361,12 +363,14 @@ int MultipartObjectProcessor::prepare_head()
   uint64_t stripe_size;
   uint64_t alignment;
 
-  int r = target_obj->get_max_chunk_size(dpp, tail_placement_rule, &chunk_size, &alignment);
+  int r = dynamic_cast<rgw::sal::RadosObject*>(target_obj.get())->get_max_chunk_size(dpp,
+                                         tail_placement_rule, &chunk_size, &alignment);
   if (r < 0) {
     ldpp_dout(dpp, 0) << "ERROR: unexpected: get_max_chunk_size(): placement_rule=" << tail_placement_rule.to_str() << " obj=" << target_obj << " returned r=" << r << dendl;
     return r;
   }
-  target_obj->get_max_aligned_size(default_stripe_size, alignment, &stripe_size);
+  dynamic_cast<rgw::sal::RadosObject*>(target_obj.get())->get_max_aligned_size(
+                                       default_stripe_size, alignment, &stripe_size);
 
   manifest.set_multipart_part_rule(stripe_size, part_num);
 
index 2ee306a512191dcfe67b0a691dd241139b68d788..b1b9922f8bd10922c2b5d2c52183bae74f71dd4e 100644 (file)
@@ -704,11 +704,6 @@ class Object {
                           uint64_t olh_epoch,
                           const DoutPrefixProvider* dpp,
                           optional_yield y) = 0;
-    virtual int get_max_chunk_size(const DoutPrefixProvider* dpp,
-                                   rgw_placement_rule placement_rule,
-                                  uint64_t* max_chunk_size,
-                                  uint64_t* alignment = nullptr) = 0;
-    virtual void get_max_aligned_size(uint64_t size, uint64_t alignment, uint64_t* max_size) = 0;
     virtual bool placement_rules_match(rgw_placement_rule& r1, rgw_placement_rule& r2) = 0;
     virtual int get_obj_layout(const DoutPrefixProvider *dpp, optional_yield y, Formatter* f, RGWObjectCtx* obj_ctx) = 0;
 
index f1c73c39745c205647d69db7948cf1f842b3afee..d7472886d7612f88ed97bf089dc5a977ed46d309 100644 (file)
@@ -171,11 +171,6 @@ class RadosObject : public Object {
                           uint64_t olh_epoch,
                           const DoutPrefixProvider* dpp,
                           optional_yield y) override;
-    virtual int get_max_chunk_size(const DoutPrefixProvider* dpp,
-                                   rgw_placement_rule placement_rule,
-                                  uint64_t* max_chunk_size,
-                                  uint64_t* alignment = nullptr) override;
-    virtual void get_max_aligned_size(uint64_t size, uint64_t alignment, uint64_t* max_size) override;
     virtual bool placement_rules_match(rgw_placement_rule& r1, rgw_placement_rule& r2) override;
     virtual int get_obj_layout(const DoutPrefixProvider *dpp, optional_yield y, Formatter* f, RGWObjectCtx* obj_ctx) override;
 
@@ -204,6 +199,11 @@ class RadosObject : public Object {
                                    bool must_exist, optional_yield y) override;
 
     /* Internal to RadosStore */
+    int get_max_chunk_size(const DoutPrefixProvider* dpp,
+                          rgw_placement_rule placement_rule,
+                          uint64_t* max_chunk_size,
+                          uint64_t* alignment = nullptr);
+    void get_max_aligned_size(uint64_t size, uint64_t alignment, uint64_t* max_size);
     void raw_obj_to_obj(const rgw_raw_obj& raw_obj);
 
   private: