]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/osdc/FakeWriteback.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
8 #include "common/debug.h"
9 #include "common/Cond.h"
10 #include "common/Finisher.h"
11 #include "common/Mutex.h"
12 #include "include/ceph_assert.h"
13 #include "common/ceph_time.h"
15 #include "FakeWriteback.h"
17 #define dout_subsys ceph_subsys_objectcacher
19 #define dout_prefix *_dout << "FakeWriteback(" << this << ") "
21 class C_Delay
: public Context
{
24 ceph::timespan m_delay
;
30 C_Delay(CephContext
*cct
, Context
*c
, Mutex
*lock
, uint64_t off
,
31 bufferlist
*pbl
, uint64_t delay_ns
=0)
32 : m_cct(cct
), m_con(c
), m_delay(delay_ns
* std::chrono::nanoseconds(1)),
33 m_lock(lock
), m_bl(pbl
), m_off(off
) {}
34 void finish(int r
) override
{
35 std::this_thread::sleep_for(m_delay
);
40 ldout(m_cct
, 20) << "finished read " << m_off
<< "~" << r
<< dendl
;
48 FakeWriteback::FakeWriteback(CephContext
*cct
, Mutex
*lock
, uint64_t delay_ns
)
49 : m_cct(cct
), m_lock(lock
), m_delay_ns(delay_ns
)
51 m_finisher
= new Finisher(cct
);
55 FakeWriteback::~FakeWriteback()
61 void FakeWriteback::read(const object_t
& oid
, uint64_t object_no
,
62 const object_locator_t
& oloc
,
63 uint64_t off
, uint64_t len
, snapid_t snapid
,
64 bufferlist
*pbl
, uint64_t trunc_size
,
65 __u32 trunc_seq
, int op_flags
,
66 const ZTracer::Trace
&parent_trace
,
69 C_Delay
*wrapper
= new C_Delay(m_cct
, onfinish
, m_lock
, off
, pbl
,
71 m_finisher
->queue(wrapper
, len
);
74 ceph_tid_t
FakeWriteback::write(const object_t
& oid
,
75 const object_locator_t
& oloc
,
76 uint64_t off
, uint64_t len
,
77 const SnapContext
& snapc
,
78 const bufferlist
&bl
, ceph::real_time mtime
,
79 uint64_t trunc_size
, __u32 trunc_seq
,
80 ceph_tid_t journal_tid
,
81 const ZTracer::Trace
&parent_trace
,
84 C_Delay
*wrapper
= new C_Delay(m_cct
, oncommit
, m_lock
, off
, NULL
,
86 m_finisher
->queue(wrapper
, 0);
90 bool FakeWriteback::may_copy_on_write(const object_t
&, uint64_t, uint64_t,