]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/.../fltree_onode_manager: fill in delta recorder
authorSamuel Just <sjust@redhat.com>
Tue, 9 Mar 2021 03:57:03 +0000 (19:57 -0800)
committerSamuel Just <sjust@redhat.com>
Wed, 10 Mar 2021 07:01:24 +0000 (23:01 -0800)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h

index f7e180e1b63d2f0f59c5147126ec8fe2f99ce382..48aeee7b98e21fc991e8948c9d2290ed0731814c 100644 (file)
@@ -28,6 +28,8 @@ struct FLTreeOnode : Onode, Value {
   template <typename... T>
   FLTreeOnode(T&&... args) : Value(std::forward<T>(args)...) {}
 
+
+
   struct Recorder : public ValueDeltaRecorder {
     Recorder(bufferlist &bl) : ValueDeltaRecorder(bl) {}
 
@@ -36,10 +38,19 @@ struct FLTreeOnode : Onode, Value {
     }
 
     void apply_value_delta(
-      ceph::bufferlist::const_iterator&,
-      NodeExtentMutable&,
+      ceph::bufferlist::const_iterator &bliter,
+      NodeExtentMutable &value,
       laddr_t) final {
-      // TODO
+      assert(value.get_length() == sizeof(onode_layout_t));
+      bliter.copy(value.get_length(), value.get_write());
+    }
+
+    void record_delta(NodeExtentMutable &value) {
+      // TODO: probably could use versioning, etc
+      assert(value.get_length() == sizeof(onode_layout_t));
+      ceph::buffer::ptr bptr(value.get_length());
+      memcpy(bptr.c_str(), value.get_read(), value.get_length());
+      get_encoded(value).append(bptr);
     }
   };
 
@@ -59,8 +70,9 @@ struct FLTreeOnode : Onode, Value {
     auto p = prepare_mutate_payload<
       onode_layout_t,
       Recorder>(t);
+    p.second->record_delta(
+      p.first);
     status = status_t::STABLE;
-    // TODO: fill in recorder
   }
 
   ~FLTreeOnode() final {}