]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson: exclude oid when encode/decode object_info_t to/from object store
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 10 Sep 2021 08:34:10 +0000 (16:34 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 15 Sep 2021 02:39:26 +0000 (10:39 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/osd/pg_backend.cc
src/crimson/osd/replicated_recovery_backend.cc
src/osd/osd_types.h

index 5f2ddfcef6a13df2e958c7041cbd31ca311220ce..d4b6e3ca6a2ee848b0b574982baa114a7949919f 100644 (file)
@@ -83,7 +83,7 @@ PGBackend::load_metadata(const hobject_t& oid)
        if (auto oiiter = attrs.find(OI_ATTR); oiiter != attrs.end()) {
          bufferlist bl = std::move(oiiter->second);
          ret->os = ObjectState(
-           object_info_t(bl),
+           object_info_t(bl, oid),
            true);
        } else {
          logger().error(
@@ -151,7 +151,7 @@ PGBackend::mutate_object(
     // object_info_t
     {
       ceph::bufferlist osv;
-      encode(obc->obs.oi, osv, CEPH_FEATURES_ALL);
+      obc->obs.oi.encode_no_oid(osv, CEPH_FEATURES_ALL);
       // TODO: get_osdmap()->get_features(CEPH_ENTITY_TYPE_OSD, nullptr));
       txn.setattr(coll->get_cid(), ghobject_t{obc->obs.oi.soid}, OI_ATTR, osv);
     }
index 6eccf8d1a11f08a81ac83001eb56855c8d861506..19cf5d2ef27a377f1f1a35fe2a324f2aabfd690e 100644 (file)
@@ -462,7 +462,7 @@ ReplicatedRecoveryBackend::read_metadata_for_push_op(
     }
     logger().debug("read_metadata_for_push_op: {}", push_op->attrset[OI_ATTR]);
     object_info_t oi;
-    oi.decode(push_op->attrset[OI_ATTR]);
+    oi.decode_no_oid(push_op->attrset[OI_ATTR]);
     new_progress.first = false;
     return oi.version;
   });
@@ -656,7 +656,7 @@ ReplicatedRecoveryBackend::_handle_pull_response(
       pi.recovery_info.soid, [&pi, &recovery_waiter, &pop](auto obc) {
         pi.obc = obc;
         recovery_waiter.obc = obc;
-        obc->obs.oi.decode(pop.attrset.at(OI_ATTR));
+        obc->obs.oi.decode_no_oid(pop.attrset.at(OI_ATTR), pop.soid);
         pi.recovery_info.oi = obc->obs.oi;
         return crimson::osd::PG::load_obc_ertr::now();
       }).handle_error_interruptible(crimson::ct_error::assert_all{});
@@ -955,7 +955,8 @@ ReplicatedRecoveryBackend::prep_push_target(
   if (!complete || !recovery_info.object_exist) {
     t->remove(coll->get_cid(), target_oid);
     t->touch(coll->get_cid(), target_oid);
-    object_info_t oi(attrs.at(OI_ATTR));
+    object_info_t oi;
+    oi.decode_no_oid(attrs.at(OI_ATTR));
     t->set_alloc_hint(coll->get_cid(), target_oid,
                       oi.expected_object_size,
                       oi.expected_write_size,
index 43b969c9e3428fd33090a31bd322eab541b75adb..dd70cf75a8baeb33772068d7bb695db60778d55e 100644 (file)
@@ -5912,6 +5912,28 @@ struct object_info_t {
     auto p = std::cbegin(bl);
     decode(p);
   }
+
+  void encode_no_oid(ceph::buffer::list& bl, uint64_t features) {
+    // TODO: drop soid field and remove the denc no_oid methods
+    auto tmp_oid = hobject_t(hobject_t::get_max());
+    tmp_oid.swap(soid);
+    encode(bl, features);
+    soid = tmp_oid;
+  }
+  void decode_no_oid(ceph::buffer::list::const_iterator& bl) {
+    decode(bl);
+    ceph_assert(soid.is_max());
+  }
+  void decode_no_oid(const ceph::buffer::list& bl) {
+    auto p = std::cbegin(bl);
+    decode_no_oid(p);
+  }
+  void decode_no_oid(const ceph::buffer::list& bl, const hobject_t& _soid) {
+    auto p = std::cbegin(bl);
+    decode_no_oid(p);
+    soid = _soid;
+  }
+
   void dump(ceph::Formatter *f) const;
   static void generate_test_instances(std::list<object_info_t*>& o);
 
@@ -5935,6 +5957,11 @@ struct object_info_t {
   explicit object_info_t(const ceph::buffer::list& bl) {
     decode(bl);
   }
+
+  explicit object_info_t(const ceph::buffer::list& bl, const hobject_t& _soid) {
+    decode_no_oid(bl);
+    soid = _soid;
+  }
 };
 WRITE_CLASS_ENCODER_FEATURES(object_info_t)