]> git.proxmox.com Git - ceph.git/blame - ceph/src/test/librados_test_stub/TestIoCtxImpl.h
update sources to v12.1.2
[ceph.git] / ceph / src / test / librados_test_stub / TestIoCtxImpl.h
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#ifndef CEPH_TEST_IO_CTX_IMPL_H
5#define CEPH_TEST_IO_CTX_IMPL_H
6
31f18b77
FG
7#include <list>
8#include <atomic>
9
10#include <boost/function.hpp>
11
7c673cae 12#include "include/rados/librados.hpp"
7c673cae
FG
13#include "include/Context.h"
14#include "common/snap_types.h"
7c673cae
FG
15
16namespace librados {
17
18class TestClassHandler;
19class TestIoCtxImpl;
20class TestRadosClient;
21
22typedef boost::function<int(TestIoCtxImpl*,
23 const std::string&,
24 bufferlist *,
25 const SnapContext &)> ObjectOperationTestImpl;
26typedef std::list<ObjectOperationTestImpl> ObjectOperations;
27
28struct TestObjectOperationImpl {
29public:
30 void get();
31 void put();
32
33 ObjectOperations ops;
34private:
31f18b77 35 std::atomic<uint64_t> m_refcount = { 0 };
7c673cae
FG
36};
37
38class TestIoCtxImpl {
39public:
40 typedef boost::function<int(TestIoCtxImpl *, const std::string &)> Operation;
41
42
43 TestIoCtxImpl();
44 explicit TestIoCtxImpl(TestRadosClient *client, int64_t m_pool_id,
45 const std::string& pool_name);
46
47 TestRadosClient *get_rados_client() {
48 return m_client;
49 }
50
51 void get();
52 void put();
53
54 inline int64_t get_pool_id() const {
55 return m_pool_id;
56 }
57
58 virtual TestIoCtxImpl *clone() = 0;
59
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 {
65 return m_snap_seq;
66 }
67
68 inline void set_snap_context(const SnapContext& snapc) {
69 m_snapc = snapc;
70 }
71 const SnapContext &get_snap_context() const {
72 return m_snapc;
73 }
74
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,
81 int flags);
82 virtual int aio_operate_read(const std::string& oid, TestObjectOperationImpl &ops,
83 AioCompletionImpl *c, int flags,
84 bufferlist *pbl);
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;
92
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,
108 uint64_t max_return,
109 std::map<std::string, bufferlist> *out_vals) = 0;
c07f9fc5
FG
110 virtual int omap_get_vals2(const std::string& oid,
111 const std::string& start_after,
112 const std::string &filter_prefix,
113 uint64_t max_return,
114 std::map<std::string, bufferlist> *out_vals,
115 bool *pmore) = 0;
7c673cae
FG
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,
122 bufferlist *pbl);
123 virtual int read(const std::string& oid, size_t len, uint64_t off,
124 bufferlist *bl) = 0;
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 virtual void set_snap_read(snap_t seq);
140 virtual int sparse_read(const std::string& oid, uint64_t off, uint64_t len,
141 std::map<uint64_t,uint64_t> *m,
142 bufferlist *data_bl) = 0;
143 virtual int stat(const std::string& oid, uint64_t *psize, time_t *pmtime) = 0;
144 virtual int truncate(const std::string& oid, uint64_t size,
145 const SnapContext &snapc) = 0;
146 virtual int tmap_update(const std::string& oid, bufferlist& cmdbl);
147 virtual int unwatch(uint64_t handle);
148 virtual int watch(const std::string& o, uint64_t *handle,
149 librados::WatchCtx *ctx, librados::WatchCtx2 *ctx2);
150 virtual int write(const std::string& oid, bufferlist& bl, size_t len,
151 uint64_t off, const SnapContext &snapc) = 0;
152 virtual int write_full(const std::string& oid, bufferlist& bl,
153 const SnapContext &snapc) = 0;
154 virtual int writesame(const std::string& oid, bufferlist& bl, size_t len,
155 uint64_t off, const SnapContext &snapc) = 0;
c07f9fc5 156 virtual int cmpext(const std::string& oid, uint64_t off, bufferlist& cmp_bl) = 0;
7c673cae
FG
157 virtual int xattr_get(const std::string& oid,
158 std::map<std::string, bufferlist>* attrset) = 0;
159 virtual int xattr_set(const std::string& oid, const std::string &name,
160 bufferlist& bl) = 0;
161 virtual int zero(const std::string& oid, uint64_t off, uint64_t len) = 0;
162
163 int execute_operation(const std::string& oid,
164 const Operation &operation);
165
166protected:
167 TestIoCtxImpl(const TestIoCtxImpl& rhs);
168 virtual ~TestIoCtxImpl();
169
170 int execute_aio_operations(const std::string& oid,
171 TestObjectOperationImpl *ops,
172 bufferlist *pbl, const SnapContext &snapc);
173
174private:
175 struct C_AioNotify : public Context {
176 TestIoCtxImpl *io_ctx;
177 AioCompletionImpl *aio_comp;
178 C_AioNotify(TestIoCtxImpl *_io_ctx, AioCompletionImpl *_aio_comp)
179 : io_ctx(_io_ctx), aio_comp(_aio_comp) {
180 }
181 void finish(int r) override {
182 io_ctx->handle_aio_notify_complete(aio_comp, r);
183 }
184 };
185
186 TestRadosClient *m_client;
187 int64_t m_pool_id;
188 std::string m_pool_name;
189 snap_t m_snap_seq;
190 SnapContext m_snapc;
31f18b77
FG
191 std::atomic<uint64_t> m_refcount = { 0 };
192 std::atomic<uint64_t> m_pending_ops = { 0 };
7c673cae
FG
193
194 void handle_aio_notify_complete(AioCompletionImpl *aio_comp, int r);
195};
196
197} // namespace librados
198
199#endif // CEPH_TEST_IO_CTX_IMPL_H