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_MEM_CLUSTER_H
5 #define CEPH_TEST_MEM_CLUSTER_H
7 #include "test/librados_test_stub/TestCluster.h"
8 #include "include/buffer.h"
9 #include "include/interval_set.h"
10 #include "include/int_types.h"
11 #include "common/ceph_mutex.h"
12 #include "common/RefCountedObj.h"
13 #include <boost/shared_ptr.hpp>
21 class TestMemCluster
: public TestCluster
{
23 typedef std::map
<std::string
, bufferlist
> OMap
;
24 typedef std::map
<ObjectLocator
, OMap
> FileOMaps
;
25 typedef std::map
<ObjectLocator
, bufferlist
> FileTMaps
;
26 typedef std::map
<std::string
, bufferlist
> XAttrs
;
27 typedef std::map
<ObjectLocator
, XAttrs
> FileXAttrs
;
28 typedef std::set
<ObjectHandler
*> ObjectHandlers
;
29 typedef std::map
<ObjectLocator
, ObjectHandlers
> FileHandlers
;
33 File(const File
&rhs
);
40 std::vector
<uint64_t> snaps
;
41 interval_set
<uint64_t> snap_overlap
;
44 ceph::shared_mutex lock
=
45 ceph::make_shared_mutex("TestMemCluster::File::lock");
47 typedef boost::shared_ptr
<File
> SharedFile
;
49 typedef std::list
<SharedFile
> FileSnapshots
;
50 typedef std::map
<ObjectLocator
, FileSnapshots
> Files
;
52 typedef std::set
<uint64_t> SnapSeqs
;
53 struct Pool
: public RefCountedObject
{
61 ceph::shared_mutex file_lock
=
62 ceph::make_shared_mutex("TestMemCluster::Pool::file_lock");
66 FileXAttrs file_xattrs
;
67 FileHandlers file_handlers
;
71 ~TestMemCluster() override
;
73 TestRadosClient
*create_rados_client(CephContext
*cct
) override
;
75 int register_object_handler(int64_t pool_id
, const ObjectLocator
& locator
,
76 ObjectHandler
* object_handler
) override
;
77 void unregister_object_handler(int64_t pool_id
, const ObjectLocator
& locator
,
78 ObjectHandler
* object_handler
) override
;
80 int pool_create(const std::string
&pool_name
);
81 int pool_delete(const std::string
&pool_name
);
82 int pool_get_base_tier(int64_t pool_id
, int64_t* base_tier
);
83 int pool_list(std::list
<std::pair
<int64_t, std::string
> >& v
);
84 int64_t pool_lookup(const std::string
&name
);
85 int pool_reverse_lookup(int64_t id
, std::string
*name
);
87 Pool
*get_pool(int64_t pool_id
);
88 Pool
*get_pool(const std::string
&pool_name
);
90 void allocate_client(uint32_t *nonce
, uint64_t *global_id
);
91 void deallocate_client(uint32_t nonce
);
93 bool is_blocklisted(uint32_t nonce
) const;
94 void blocklist(uint32_t nonce
);
96 void transaction_start(const ObjectLocator
& locator
);
97 void transaction_finish(const ObjectLocator
& locator
);
101 typedef std::map
<std::string
, Pool
*> Pools
;
102 typedef std::set
<uint32_t> Blocklist
;
104 mutable ceph::mutex m_lock
=
105 ceph::make_mutex("TestMemCluster::m_lock");
108 int64_t m_pool_id
= 0;
110 uint32_t m_next_nonce
;
111 uint64_t m_next_global_id
= 1234;
113 Blocklist m_blocklist
;
115 ceph::condition_variable m_transaction_cond
;
116 std::set
<ObjectLocator
> m_transactions
;
118 Pool
*get_pool(const ceph::mutex
& lock
, int64_t pool_id
);
122 } // namespace librados
124 #endif // CEPH_TEST_MEM_CLUSTER_H