]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/lba_manager/btree: implement apply_delta for lba nodes
authorSamuel Just <sjust@redhat.com>
Mon, 15 Jun 2020 20:32:17 +0000 (13:32 -0700)
committerSamuel Just <sjust@redhat.com>
Fri, 19 Jun 2020 19:59:26 +0000 (12:59 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/lba_manager/btree/lba_btree_node_impl.h

index 1184f64527725fa3c25490c5f5b699d893d0b943..5cbbdddca881dc0fa6b3c30b5328c471351c7730 100644 (file)
@@ -165,13 +165,24 @@ struct LBAInternalNode
   std::ostream &print_detail(std::ostream &out) const final;
 
   ceph::bufferlist get_delta() final {
-    // TODO
-    return ceph::bufferlist();
+    assert(!delta_buffer.empty());
+    ceph::buffer::ptr bptr(delta_buffer.get_bytes());
+    delta_buffer.copy_out(bptr.c_str(), bptr.length());
+    ceph::bufferlist bl;
+    bl.push_back(bptr);
+    return bl;
   }
 
   void apply_delta_and_adjust_crc(
     paddr_t base, const ceph::bufferlist &_bl) final {
-    ceph_assert(0 == "TODO");
+    assert(_bl.length());
+    ceph::bufferlist bl = _bl;
+    bl.rebuild();
+    delta_buffer_t buffer;
+    buffer.copy_in(bl.front().c_str(), bl.front().length());
+    buffer.replay(*this);
+    set_last_committed_crc(get_crc32c());
+    resolve_relative_addrs(base);
   }
 
   bool at_max_capacity() const final {
@@ -368,13 +379,24 @@ struct LBALeafNode
   }
 
   ceph::bufferlist get_delta() final {
-    // TODO
-    return ceph::bufferlist();
+    assert(!delta_buffer.empty());
+    ceph::buffer::ptr bptr(delta_buffer.get_bytes());
+    delta_buffer.copy_out(bptr.c_str(), bptr.length());
+    ceph::bufferlist bl;
+    bl.push_back(bptr);
+    return bl;
   }
 
   void apply_delta_and_adjust_crc(
     paddr_t base, const ceph::bufferlist &_bl) final {
-    ceph_assert(0 == "TODO");
+    assert(_bl.length());
+    ceph::bufferlist bl = _bl;
+    bl.rebuild();
+    delta_buffer_t buffer;
+    buffer.copy_in(bl.front().c_str(), bl.front().length());
+    buffer.replay(*this);
+    set_last_committed_crc(get_crc32c());
+    resolve_relative_addrs(base);
   }
 
   extent_types_t get_type() const final {