From 0c3bd0a8af8d1837e3408a013dcfd1ea2064fa43 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Mon, 8 Mar 2021 19:57:03 -0800 Subject: [PATCH] crimson/os/seastore/.../fltree_onode_manager: fill in delta recorder Signed-off-by: Samuel Just --- .../staged-fltree/fltree_onode_manager.h | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h index f7e180e1b63d2..48aeee7b98e21 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h @@ -28,6 +28,8 @@ struct FLTreeOnode : Onode, Value { template FLTreeOnode(T&&... args) : Value(std::forward(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 {} -- 2.39.5