]>
Commit | Line | Data |
---|---|---|
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_RADOS_CLIENT_H | |
5 | #define CEPH_TEST_RADOS_CLIENT_H | |
6 | ||
7 | #include <map> | |
8 | #include <list> | |
9 | #include <string> | |
10 | #include <vector> | |
11 | #include <atomic> | |
12 | ||
13 | #include <boost/function.hpp> | |
14 | #include <boost/functional/hash.hpp> | |
15 | ||
16 | #include "include/rados/librados.hpp" | |
17 | #include "common/config.h" | |
18 | #include "include/buffer_fwd.h" | |
19 | #include "test/librados_test_stub/TestWatchNotify.h" | |
20 | ||
21 | class Finisher; | |
22 | ||
23 | namespace librados { | |
24 | ||
25 | class TestIoCtxImpl; | |
26 | ||
27 | class TestRadosClient { | |
28 | public: | |
29 | ||
30 | static void Deallocate(librados::TestRadosClient* client) | |
31 | { | |
32 | client->put(); | |
33 | } | |
34 | ||
35 | typedef boost::function<int()> AioFunction; | |
36 | ||
37 | struct Object { | |
38 | std::string oid; | |
39 | std::string locator; | |
40 | std::string nspace; | |
41 | }; | |
42 | ||
43 | class Transaction { | |
44 | public: | |
45 | Transaction(TestRadosClient *rados_client, const std::string &oid) | |
46 | : rados_client(rados_client), oid(oid) { | |
47 | rados_client->transaction_start(oid); | |
48 | } | |
49 | ~Transaction() { | |
50 | rados_client->transaction_finish(oid); | |
51 | } | |
52 | private: | |
53 | TestRadosClient *rados_client; | |
54 | std::string oid; | |
55 | }; | |
56 | ||
57 | TestRadosClient(CephContext *cct, TestWatchNotify *watch_notify); | |
58 | ||
59 | void get(); | |
60 | void put(); | |
61 | ||
62 | virtual CephContext *cct(); | |
63 | ||
64 | virtual uint32_t get_nonce() = 0; | |
65 | virtual uint64_t get_instance_id() = 0; | |
66 | ||
67 | virtual int connect(); | |
68 | virtual void shutdown(); | |
69 | virtual int wait_for_latest_osdmap(); | |
70 | ||
71 | virtual TestIoCtxImpl *create_ioctx(int64_t pool_id, | |
72 | const std::string &pool_name) = 0; | |
73 | ||
74 | virtual int mon_command(const std::vector<std::string>& cmd, | |
75 | const bufferlist &inbl, | |
76 | bufferlist *outbl, std::string *outs); | |
77 | ||
78 | virtual void object_list(int64_t pool_id, | |
79 | std::list<librados::TestRadosClient::Object> *list) = 0; | |
80 | ||
81 | virtual int service_daemon_register(const std::string& service, | |
82 | const std::string& name, | |
83 | const std::map<std::string,std::string>& metadata) = 0; | |
84 | virtual int service_daemon_update_status(const std::map<std::string,std::string>& status) = 0; | |
85 | ||
86 | virtual int pool_create(const std::string &pool_name) = 0; | |
87 | virtual int pool_delete(const std::string &pool_name) = 0; | |
88 | virtual int pool_get_base_tier(int64_t pool_id, int64_t* base_tier) = 0; | |
89 | virtual int pool_list(std::list<std::pair<int64_t, std::string> >& v) = 0; | |
90 | virtual int64_t pool_lookup(const std::string &name) = 0; | |
91 | virtual int pool_reverse_lookup(int64_t id, std::string *name) = 0; | |
92 | ||
93 | virtual int aio_watch_flush(AioCompletionImpl *c); | |
94 | virtual int watch_flush() = 0; | |
95 | ||
96 | virtual bool is_blacklisted() const = 0; | |
97 | virtual int blacklist_add(const std::string& client_address, | |
98 | uint32_t expire_seconds) = 0; | |
99 | ||
100 | Finisher *get_aio_finisher() { | |
101 | return m_aio_finisher; | |
102 | } | |
103 | TestWatchNotify *get_watch_notify() { | |
104 | return m_watch_notify; | |
105 | } | |
106 | ||
107 | void add_aio_operation(const std::string& oid, bool queue_callback, | |
108 | const AioFunction &aio_function, AioCompletionImpl *c); | |
109 | void flush_aio_operations(); | |
110 | void flush_aio_operations(AioCompletionImpl *c); | |
111 | ||
112 | void finish_aio_completion(AioCompletionImpl *c, int r); | |
113 | ||
114 | protected: | |
115 | virtual ~TestRadosClient(); | |
116 | ||
117 | virtual void transaction_start(const std::string &oid) = 0; | |
118 | virtual void transaction_finish(const std::string &oid) = 0; | |
119 | ||
120 | private: | |
121 | ||
122 | CephContext *m_cct; | |
123 | std::atomic<uint64_t> m_refcount = { 0 }; | |
124 | ||
125 | TestWatchNotify *m_watch_notify; | |
126 | ||
127 | Finisher *get_finisher(const std::string& oid); | |
128 | ||
129 | Finisher *m_aio_finisher; | |
130 | std::vector<Finisher *> m_finishers; | |
131 | boost::hash<std::string> m_hash; | |
132 | ||
133 | }; | |
134 | ||
135 | } // namespace librados | |
136 | ||
137 | #endif // CEPH_TEST_RADOS_CLIENT_H |