]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/librados_test_stub/TestRadosClient.h
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_RADOS_CLIENT_H
5 #define CEPH_TEST_RADOS_CLIENT_H
13 #include <boost/function.hpp>
14 #include <boost/functional/hash.hpp>
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"
27 class TestRadosClient
{
30 static void Deallocate(librados::TestRadosClient
* client
)
35 typedef boost::function
<int()> AioFunction
;
45 Transaction(TestRadosClient
*rados_client
, const std::string
&oid
)
46 : rados_client(rados_client
), oid(oid
) {
47 rados_client
->transaction_start(oid
);
50 rados_client
->transaction_finish(oid
);
53 TestRadosClient
*rados_client
;
57 TestRadosClient(CephContext
*cct
, TestWatchNotify
*watch_notify
);
62 virtual CephContext
*cct();
64 virtual uint32_t get_nonce() = 0;
65 virtual uint64_t get_instance_id() = 0;
67 virtual int connect();
68 virtual void shutdown();
69 virtual int wait_for_latest_osdmap();
71 virtual TestIoCtxImpl
*create_ioctx(int64_t pool_id
,
72 const std::string
&pool_name
) = 0;
74 virtual int mon_command(const std::vector
<std::string
>& cmd
,
75 const bufferlist
&inbl
,
76 bufferlist
*outbl
, std::string
*outs
);
78 virtual void object_list(int64_t pool_id
,
79 std::list
<librados::TestRadosClient::Object
> *list
) = 0;
81 virtual int pool_create(const std::string
&pool_name
) = 0;
82 virtual int pool_delete(const std::string
&pool_name
) = 0;
83 virtual int pool_get_base_tier(int64_t pool_id
, int64_t* base_tier
) = 0;
84 virtual int pool_list(std::list
<std::pair
<int64_t, std::string
> >& v
) = 0;
85 virtual int64_t pool_lookup(const std::string
&name
) = 0;
86 virtual int pool_reverse_lookup(int64_t id
, std::string
*name
) = 0;
88 virtual int aio_watch_flush(AioCompletionImpl
*c
);
89 virtual int watch_flush() = 0;
91 virtual bool is_blacklisted() const = 0;
92 virtual int blacklist_add(const std::string
& client_address
,
93 uint32_t expire_seconds
) = 0;
95 Finisher
*get_aio_finisher() {
96 return m_aio_finisher
;
98 TestWatchNotify
*get_watch_notify() {
99 return m_watch_notify
;
102 void add_aio_operation(const std::string
& oid
, bool queue_callback
,
103 const AioFunction
&aio_function
, AioCompletionImpl
*c
);
104 void flush_aio_operations();
105 void flush_aio_operations(AioCompletionImpl
*c
);
107 void finish_aio_completion(AioCompletionImpl
*c
, int r
);
110 virtual ~TestRadosClient();
112 virtual void transaction_start(const std::string
&oid
) = 0;
113 virtual void transaction_finish(const std::string
&oid
) = 0;
118 std::atomic
<uint64_t> m_refcount
= { 0 };
120 TestWatchNotify
*m_watch_notify
;
122 Finisher
*get_finisher(const std::string
& oid
);
124 Finisher
*m_aio_finisher
;
125 std::vector
<Finisher
*> m_finishers
;
126 boost::hash
<std::string
> m_hash
;
130 } // namespace librados
132 #endif // CEPH_TEST_RADOS_CLIENT_H