]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/librados_test_stub/TestIoCtxImpl.h
1bab05089585dc2b2b4f9b1f6fe685ecb20d43a9
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_TEST_IO_CTX_IMPL_H
5 #define CEPH_TEST_IO_CTX_IMPL_H
10 #include <boost/function.hpp>
12 #include "include/rados/librados.hpp"
13 #include "include/Context.h"
14 #include "common/snap_types.h"
18 class TestClassHandler
;
20 class TestRadosClient
;
22 typedef boost::function
<int(TestIoCtxImpl
*,
25 const SnapContext
&)> ObjectOperationTestImpl
;
26 typedef std::list
<ObjectOperationTestImpl
> ObjectOperations
;
28 struct TestObjectOperationImpl
{
35 std::atomic
<uint64_t> m_refcount
= { 0 };
40 typedef boost::function
<int(TestIoCtxImpl
*, const std::string
&)> Operation
;
44 explicit TestIoCtxImpl(TestRadosClient
*client
, int64_t m_pool_id
,
45 const std::string
& pool_name
);
47 TestRadosClient
*get_rados_client() {
54 inline int64_t get_pool_id() const {
58 virtual TestIoCtxImpl
*clone() = 0;
60 virtual uint64_t get_instance_id() const;
61 virtual int64_t get_id();
62 virtual uint64_t get_last_version();
63 virtual std::string
get_pool_name();
64 snap_t
get_snap_read() const {
68 inline void set_snap_context(const SnapContext
& snapc
) {
71 const SnapContext
&get_snap_context() const {
75 virtual int aio_flush();
76 virtual void aio_flush_async(AioCompletionImpl
*c
);
77 virtual void aio_notify(const std::string
& oid
, AioCompletionImpl
*c
,
78 bufferlist
& bl
, uint64_t timeout_ms
, bufferlist
*pbl
);
79 virtual int aio_operate(const std::string
& oid
, TestObjectOperationImpl
&ops
,
80 AioCompletionImpl
*c
, SnapContext
*snap_context
,
82 virtual int aio_operate_read(const std::string
& oid
, TestObjectOperationImpl
&ops
,
83 AioCompletionImpl
*c
, int flags
,
85 virtual int aio_remove(const std::string
& oid
, AioCompletionImpl
*c
) = 0;
86 virtual int aio_watch(const std::string
& o
, AioCompletionImpl
*c
,
87 uint64_t *handle
, librados::WatchCtx2
*ctx
);
88 virtual int aio_unwatch(uint64_t handle
, AioCompletionImpl
*c
);
89 virtual int append(const std::string
& oid
, const bufferlist
&bl
,
90 const SnapContext
&snapc
) = 0;
91 virtual int assert_exists(const std::string
&oid
) = 0;
93 virtual int create(const std::string
& oid
, bool exclusive
) = 0;
94 virtual int exec(const std::string
& oid
, TestClassHandler
*handler
,
95 const char *cls
, const char *method
,
96 bufferlist
& inbl
, bufferlist
* outbl
,
97 const SnapContext
&snapc
);
98 virtual int list_snaps(const std::string
& o
, snap_set_t
*out_snaps
) = 0;
99 virtual int list_watchers(const std::string
& o
,
100 std::list
<obj_watch_t
> *out_watchers
);
101 virtual int notify(const std::string
& o
, bufferlist
& bl
,
102 uint64_t timeout_ms
, bufferlist
*pbl
);
103 virtual void notify_ack(const std::string
& o
, uint64_t notify_id
,
104 uint64_t handle
, bufferlist
& bl
);
105 virtual int omap_get_vals(const std::string
& oid
,
106 const std::string
& start_after
,
107 const std::string
&filter_prefix
,
109 std::map
<std::string
, bufferlist
> *out_vals
) = 0;
110 virtual int omap_get_vals2(const std::string
& oid
,
111 const std::string
& start_after
,
112 const std::string
&filter_prefix
,
114 std::map
<std::string
, bufferlist
> *out_vals
,
116 virtual int omap_rm_keys(const std::string
& oid
,
117 const std::set
<std::string
>& keys
) = 0;
118 virtual int omap_set(const std::string
& oid
,
119 const std::map
<std::string
, bufferlist
> &map
) = 0;
120 virtual int operate(const std::string
& oid
, TestObjectOperationImpl
&ops
);
121 virtual int operate_read(const std::string
& oid
, TestObjectOperationImpl
&ops
,
123 virtual int read(const std::string
& oid
, size_t len
, uint64_t off
,
125 virtual int remove(const std::string
& oid
, const SnapContext
&snapc
) = 0;
126 virtual int selfmanaged_snap_create(uint64_t *snapid
) = 0;
127 virtual void aio_selfmanaged_snap_create(uint64_t *snapid
,
128 AioCompletionImpl
*c
);
129 virtual int selfmanaged_snap_remove(uint64_t snapid
) = 0;
130 virtual void aio_selfmanaged_snap_remove(uint64_t snapid
,
131 AioCompletionImpl
*c
);
132 virtual int selfmanaged_snap_rollback(const std::string
& oid
,
133 uint64_t snapid
) = 0;
134 virtual int selfmanaged_snap_set_write_ctx(snap_t seq
,
135 std::vector
<snap_t
>& snaps
);
136 virtual int set_alloc_hint(const std::string
& oid
,
137 uint64_t expected_object_size
,
138 uint64_t expected_write_size
,
139 const SnapContext
&snapc
);
140 virtual void set_snap_read(snap_t seq
);
141 virtual int sparse_read(const std::string
& oid
, uint64_t off
, uint64_t len
,
142 std::map
<uint64_t,uint64_t> *m
,
143 bufferlist
*data_bl
) = 0;
144 virtual int stat(const std::string
& oid
, uint64_t *psize
, time_t *pmtime
) = 0;
145 virtual int truncate(const std::string
& oid
, uint64_t size
,
146 const SnapContext
&snapc
) = 0;
147 virtual int tmap_update(const std::string
& oid
, bufferlist
& cmdbl
);
148 virtual int unwatch(uint64_t handle
);
149 virtual int watch(const std::string
& o
, uint64_t *handle
,
150 librados::WatchCtx
*ctx
, librados::WatchCtx2
*ctx2
);
151 virtual int write(const std::string
& oid
, bufferlist
& bl
, size_t len
,
152 uint64_t off
, const SnapContext
&snapc
) = 0;
153 virtual int write_full(const std::string
& oid
, bufferlist
& bl
,
154 const SnapContext
&snapc
) = 0;
155 virtual int writesame(const std::string
& oid
, bufferlist
& bl
, size_t len
,
156 uint64_t off
, const SnapContext
&snapc
) = 0;
157 virtual int cmpext(const std::string
& oid
, uint64_t off
, bufferlist
& cmp_bl
) = 0;
158 virtual int xattr_get(const std::string
& oid
,
159 std::map
<std::string
, bufferlist
>* attrset
) = 0;
160 virtual int xattr_set(const std::string
& oid
, const std::string
&name
,
162 virtual int zero(const std::string
& oid
, uint64_t off
, uint64_t len
,
163 const SnapContext
&snapc
) = 0;
165 int execute_operation(const std::string
& oid
,
166 const Operation
&operation
);
169 TestIoCtxImpl(const TestIoCtxImpl
& rhs
);
170 virtual ~TestIoCtxImpl();
172 int execute_aio_operations(const std::string
& oid
,
173 TestObjectOperationImpl
*ops
,
174 bufferlist
*pbl
, const SnapContext
&snapc
);
177 struct C_AioNotify
: public Context
{
178 TestIoCtxImpl
*io_ctx
;
179 AioCompletionImpl
*aio_comp
;
180 C_AioNotify(TestIoCtxImpl
*_io_ctx
, AioCompletionImpl
*_aio_comp
)
181 : io_ctx(_io_ctx
), aio_comp(_aio_comp
) {
183 void finish(int r
) override
{
184 io_ctx
->handle_aio_notify_complete(aio_comp
, r
);
188 TestRadosClient
*m_client
;
190 std::string m_pool_name
;
193 std::atomic
<uint64_t> m_refcount
= { 0 };
194 std::atomic
<uint64_t> m_pending_ops
= { 0 };
196 void handle_aio_notify_complete(AioCompletionImpl
*aio_comp
, int r
);
199 } // namespace librados
201 #endif // CEPH_TEST_IO_CTX_IMPL_H