1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
6 #include "crimson/os/seastore/onode_manager/staged-fltree/node_delta_recorder.h"
7 #include "crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h"
11 * A special version of NodeExtent to help verify delta encode, decode and
12 * replay in recorder_t under debug build.
15 namespace crimson::os::seastore::onode
{
17 class TestReplayExtent final
: public NodeExtent
{
19 using Ref
= crimson::os::seastore::TCachedExtentRef
<TestReplayExtent
>;
21 void prepare_replay(NodeExtentRef from_extent
) {
22 assert(get_length() == from_extent
->get_length());
23 auto mut
= do_get_mutable();
24 std::memcpy(mut
.get_write(), from_extent
->get_read(), get_length());
27 void replay_and_verify(NodeExtentRef replayed_extent
) {
28 assert(get_length() == replayed_extent
->get_length());
29 auto mut
= do_get_mutable();
30 auto bl
= recorder
->get_delta();
33 recorder
->apply_delta(p
, mut
);
34 assert(p
== bl
.end());
35 auto cmp
= std::memcmp(get_read(), replayed_extent
->get_read(), get_length());
36 ceph_assert(cmp
== 0 && "replay mismatch!");
39 static Ref
create(extent_len_t length
, DeltaRecorderURef
&& recorder
) {
40 auto r
= ceph::buffer::create_aligned(length
, 4096);
41 auto bp
= ceph::bufferptr(std::move(r
));
42 return new TestReplayExtent(std::move(bp
), std::move(recorder
));
46 NodeExtentRef
mutate(context_t
, DeltaRecorderURef
&&) override
{
47 ceph_abort("impossible path"); }
48 DeltaRecorder
* get_recorder() const override
{
49 ceph_abort("impossible path"); }
50 CachedExtentRef
duplicate_for_write() override
{
51 ceph_abort("impossible path"); }
52 extent_types_t
get_type() const override
{
53 return extent_types_t::TEST_BLOCK
; }
54 ceph::bufferlist
get_delta() override
{
55 ceph_abort("impossible path"); }
56 void apply_delta(const ceph::bufferlist
&) override
{
57 ceph_abort("impossible path"); }
60 TestReplayExtent(ceph::bufferptr
&& ptr
, DeltaRecorderURef
&& recorder
)
61 : NodeExtent(std::move(ptr
)), recorder(std::move(recorder
)) {
62 state
= extent_state_t::MUTATION_PENDING
;
64 DeltaRecorderURef recorder
;