diff options
author | Samuel Just <rexludorum@gmail.com> | 2012-03-13 09:43:21 -0700 |
---|---|---|
committer | Samuel Just <samuel.just@dreamhost.com> | 2012-03-16 11:29:00 -0700 |
commit | b09fb15dc47ec65b5bb432a979cb7572a60bcad8 (patch) | |
tree | 2443aeb56289a3f7475ea1a54fbde1934bbd15ed | |
parent | ecd875febe4a04d8c8f419c9684ad900f6a4da31 (diff) | |
download | ceph-b09fb15dc47ec65b5bb432a979cb7572a60bcad8.tar.gz |
ObjectMap: use Index object for locking rather than path object
Signed-off-by: Samuel Just <samuel.just@dreamhost.com>
-rw-r--r-- | src/os/CollectionIndex.h | 5 | ||||
-rw-r--r-- | src/os/DBObjectMap.cc | 90 | ||||
-rw-r--r-- | src/os/DBObjectMap.h | 38 | ||||
-rw-r--r-- | src/os/FileStore.cc | 27 | ||||
-rw-r--r-- | src/os/HashIndex.cc | 1 | ||||
-rw-r--r-- | src/os/IndexManager.cc | 2 | ||||
-rw-r--r-- | src/os/LFNIndex.h | 1 | ||||
-rw-r--r-- | src/os/ObjectMap.h | 38 | ||||
-rw-r--r-- | src/test/ObjectMap/test_object_map.cc | 58 |
9 files changed, 140 insertions, 120 deletions
diff --git a/src/os/CollectionIndex.h b/src/os/CollectionIndex.h index 0efa6459ec8..30e877c4923 100644 --- a/src/os/CollectionIndex.h +++ b/src/os/CollectionIndex.h @@ -64,6 +64,11 @@ protected: /// Getter for collection coll_t coll() const { return parent_coll; } + + /// Getter for parent + std::tr1::shared_ptr<CollectionIndex> get_index() const { + return parent_ref; + } }; public: /// Type of returned paths diff --git a/src/os/DBObjectMap.cc b/src/os/DBObjectMap.cc index 0586cd719e8..f425d88223c 100644 --- a/src/os/DBObjectMap.cc +++ b/src/os/DBObjectMap.cc @@ -12,7 +12,7 @@ #include <vector> #include <tr1/memory> -#include "CollectionIndex.h" +#include "IndexManager.h" #include "ObjectMap.h" #include "KeyValueDB.h" #include "DBObjectMap.h" @@ -193,9 +193,9 @@ int DBObjectMap::DBObjectMapIteratorImpl::init() ObjectMap::ObjectMapIterator DBObjectMap::get_iterator( const hobject_t &hoid, - CollectionIndex::IndexedPath path) + Index index) { - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) return ObjectMapIterator(new EmptyIteratorImpl()); return _get_iterator(header); @@ -379,11 +379,11 @@ int DBObjectMap::DBObjectMapIteratorImpl::status() } int DBObjectMap::set_keys(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const map<string, bufferlist> &set) { KeyValueDB::Transaction t = db->get_transaction(); - Header header = lookup_create_map_header(path->coll(), hoid, t); + Header header = lookup_create_map_header(index->coll(), hoid, t); if (!header) return -EINVAL; @@ -393,11 +393,11 @@ int DBObjectMap::set_keys(const hobject_t &hoid, } int DBObjectMap::set_header(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const bufferlist &bl) { KeyValueDB::Transaction t = db->get_transaction(); - Header header = lookup_create_map_header(path->coll(), hoid, t); + Header header = lookup_create_map_header(index->coll(), hoid, t); if (!header) return -EINVAL; _set_header(header, bl, t); @@ -413,10 +413,10 @@ void DBObjectMap::_set_header(Header header, const bufferlist &bl, } int DBObjectMap::get_header(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, bufferlist *bl) { - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) { return 0; } @@ -449,13 +449,13 @@ int DBObjectMap::_get_header(Header header, } int DBObjectMap::clear(const hobject_t &hoid, - CollectionIndex::IndexedPath path) + Index index) { KeyValueDB::Transaction t = db->get_transaction(); - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) return -ENOENT; - remove_map_header(path->coll(), hoid, header, t); + remove_map_header(index->coll(), hoid, header, t); assert(header->num_children > 0); header->num_children--; int r = _clear(header, t); @@ -568,10 +568,10 @@ int DBObjectMap::need_parent(DBObjectMapIterator iter) } int DBObjectMap::rm_keys(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const set<string> &to_clear) { - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) return -ENOENT; KeyValueDB::Transaction t = db->get_transaction(); @@ -641,11 +641,11 @@ int DBObjectMap::rm_keys(const hobject_t &hoid, } int DBObjectMap::get(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, bufferlist *_header, map<string, bufferlist> *out) { - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) return -ENOENT; _get_header(header, _header); @@ -659,13 +659,13 @@ int DBObjectMap::get(const hobject_t &hoid, } int DBObjectMap::get_keys(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, set<string> *keys) { - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) return -ENOENT; - ObjectMapIterator iter = get_iterator(hoid, path); + ObjectMapIterator iter = get_iterator(hoid, index); for (; iter->valid(); iter->next()) { if (iter->status()) return iter->status(); @@ -697,43 +697,43 @@ int DBObjectMap::scan(Header header, } int DBObjectMap::get_values(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const set<string> &keys, map<string, bufferlist> *out) { - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) return -ENOENT; return scan(header, keys, 0, out);; } int DBObjectMap::check_keys(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const set<string> &keys, set<string> *out) { - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) return -ENOENT; return scan(header, keys, out, 0); } int DBObjectMap::get_xattrs(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const set<string> &to_get, map<string, bufferlist> *out) { - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) return -ENOENT; return db->get(xattr_prefix(header), to_get, out); } int DBObjectMap::get_all_xattrs(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, set<string> *out) { - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) return -ENOENT; KeyValueDB::Iterator iter = db->get_iterator(xattr_prefix(header)); @@ -745,11 +745,11 @@ int DBObjectMap::get_all_xattrs(const hobject_t &hoid, } int DBObjectMap::set_xattrs(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const map<string, bufferlist> &to_set) { KeyValueDB::Transaction t = db->get_transaction(); - Header header = lookup_create_map_header(path->coll(), hoid, t); + Header header = lookup_create_map_header(index->coll(), hoid, t); if (!header) return -EINVAL; t->set(xattr_prefix(header), to_set); @@ -757,11 +757,11 @@ int DBObjectMap::set_xattrs(const hobject_t &hoid, } int DBObjectMap::remove_xattrs(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const set<string> &to_remove) { KeyValueDB::Transaction t = db->get_transaction(); - Header header = lookup_map_header(path->coll(), hoid); + Header header = lookup_map_header(index->coll(), hoid); if (!header) return -ENOENT; t->rmkeys(xattr_prefix(header), to_remove); @@ -769,26 +769,26 @@ int DBObjectMap::remove_xattrs(const hobject_t &hoid, } int DBObjectMap::clone(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const hobject_t &target, - CollectionIndex::IndexedPath target_path) + Index target_index) { KeyValueDB::Transaction t = db->get_transaction(); { - Header destination = lookup_map_header(target_path->coll(), target); + Header destination = lookup_map_header(target_index->coll(), target); if (destination) { - remove_map_header(target_path->coll(), target, destination, t); + remove_map_header(target_index->coll(), target, destination, t); destination->num_children--; _clear(destination, t); } } - Header parent = lookup_map_header(path->coll(), hoid); + Header parent = lookup_map_header(index->coll(), hoid); if (!parent) return db->submit_transaction(t); - Header source = generate_new_header(path->coll(), hoid, parent); - Header destination = generate_new_header(target_path->coll(), target, parent); + Header source = generate_new_header(index->coll(), hoid, parent); + Header destination = generate_new_header(target_index->coll(), target, parent); _Header lsource, ldestination; source->num_children = parent->num_children; lsource.parent = source->seq; @@ -797,7 +797,7 @@ int DBObjectMap::clone(const hobject_t &hoid, set_header(parent, t); set_header(source, t); set_header(destination, t); - set_map_header(target_path->coll(), target, ldestination, t); + set_map_header(target_index->coll(), target, ldestination, t); map<string, bufferlist> to_set; KeyValueDB::Iterator xattr_iter = db->get_iterator(xattr_prefix(parent)); @@ -827,27 +827,27 @@ int DBObjectMap::clone(const hobject_t &hoid, } int DBObjectMap::link(const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const hobject_t &target, - CollectionIndex::IndexedPath target_path) + Index target_index) { KeyValueDB::Transaction t = db->get_transaction(); { - Header destination = lookup_map_header(target_path->coll(), target); + Header destination = lookup_map_header(target_index->coll(), target); if (destination) { - remove_map_header(target_path->coll(), target, destination, t); + remove_map_header(target_index->coll(), target, destination, t); destination->num_children--; _clear(destination, t); } } - Header header = lookup_create_map_header(path->coll(), hoid, t); + Header header = lookup_create_map_header(index->coll(), hoid, t); assert(header->num_children > 0); header->num_children++; set_header(header, t); _Header ldestination; ldestination.parent = header->seq; - set_map_header(target_path->coll(), target, ldestination, t); + set_map_header(target_index->coll(), target, ldestination, t); return db->submit_transaction(t); } diff --git a/src/os/DBObjectMap.h b/src/os/DBObjectMap.h index e26d7351fb6..2c3e66d1c51 100644 --- a/src/os/DBObjectMap.h +++ b/src/os/DBObjectMap.h @@ -12,7 +12,7 @@ #include <tr1/memory> #include <boost/scoped_ptr.hpp> -#include "CollectionIndex.h" +#include "IndexManager.h" #include "ObjectMap.h" #include "KeyValueDB.h" #include "osd/osd_types.h" @@ -82,97 +82,97 @@ public: int set_keys( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const map<string, bufferlist> &set ); int set_header( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const bufferlist &bl ); int get_header( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, bufferlist *bl ); int clear( const hobject_t &hoid, - CollectionIndex::IndexedPath path + Index index ); int rm_keys( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const set<string> &to_clear ); int get( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, bufferlist *header, map<string, bufferlist> *out ); int get_keys( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, set<string> *keys ); int get_values( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const set<string> &keys, map<string, bufferlist> *out ); int check_keys( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const set<string> &keys, set<string> *out ); int get_xattrs( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const set<string> &to_get, map<string, bufferlist> *out ); int get_all_xattrs( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, set<string> *out ); int set_xattrs( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const map<string, bufferlist> &to_set ); int remove_xattrs( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const set<string> &to_remove ); int clone( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const hobject_t &target, - CollectionIndex::IndexedPath target_path + Index target_index ); int link( const hobject_t &hoid, - CollectionIndex::IndexedPath path, + Index index, const hobject_t &target, - CollectionIndex::IndexedPath target_path + Index target_index ); /// Read initial state from backing store @@ -185,7 +185,7 @@ public: int sync(); ObjectMapIterator get_iterator(const hobject_t &hoid, - CollectionIndex::IndexedPath path); + Index index); static const string USER_PREFIX; static const string XATTR_PREFIX; diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index f0833631f2c..5b5f72d8b67 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -345,7 +345,8 @@ int FileStore::lfn_link(coll_t c, coll_t cid, const hobject_t& o) if (r < 0) return -errno; - r = object_map->link(o, path_old, o, path_new); + r = object_map->link(o, path_old->get_index(), + o, path_new->get_index()); if (r < 0) return r; @@ -367,7 +368,7 @@ int FileStore::lfn_unlink(coll_t cid, const hobject_t& o) r = index->lookup(o, &path, &exist); if (r < 0) return r; - object_map->clear(o, path); + object_map->clear(o, path->get_index()); if (r < 0 && r != -ENOENT) return r; } @@ -3061,7 +3062,7 @@ int FileStore::_clone(coll_t cid, const hobject_t& oldoid, const hobject_t& newo if (r < 0) r = -errno; dout(20) << "objectmap clone" << dendl; - r = object_map->clone(oldoid, from, newoid, to); + r = object_map->clone(oldoid, from->get_index(), newoid, to->get_index()); // clone is non-idempotent; record our work. _set_replay_guard(n, spos); @@ -4153,7 +4154,7 @@ int FileStore::omap_get(coll_t c, const hobject_t &hoid, int r = lfn_find(c, hoid, &path); if (r < 0) return r; - return object_map->get(hoid, path, header, out); + return object_map->get(hoid, path->get_index(), header, out); } int FileStore::omap_get_header(coll_t c, const hobject_t &hoid, @@ -4164,7 +4165,7 @@ int FileStore::omap_get_header(coll_t c, const hobject_t &hoid, int r = lfn_find(c, hoid, &path); if (r < 0) return r; - return object_map->get_header(hoid, path, bl); + return object_map->get_header(hoid, path->get_index(), bl); } int FileStore::omap_get_keys(coll_t c, const hobject_t &hoid, set<string> *keys) @@ -4174,7 +4175,7 @@ int FileStore::omap_get_keys(coll_t c, const hobject_t &hoid, set<string> *keys) int r = lfn_find(c, hoid, &path); if (r < 0) return r; - return object_map->get_keys(hoid, path, keys); + return object_map->get_keys(hoid, path->get_index(), keys); } int FileStore::omap_get_values(coll_t c, const hobject_t &hoid, @@ -4186,7 +4187,7 @@ int FileStore::omap_get_values(coll_t c, const hobject_t &hoid, int r = lfn_find(c, hoid, &path); if (r < 0) return r; - return object_map->get_values(hoid, path, keys, out); + return object_map->get_values(hoid, path->get_index(), keys, out); } int FileStore::omap_check_keys(coll_t c, const hobject_t &hoid, @@ -4198,7 +4199,7 @@ int FileStore::omap_check_keys(coll_t c, const hobject_t &hoid, int r = lfn_find(c, hoid, &path); if (r < 0) return r; - return object_map->check_keys(hoid, path, keys, out); + return object_map->check_keys(hoid, path->get_index(), keys, out); } ObjectMap::ObjectMapIterator FileStore::get_omap_iterator(coll_t c, @@ -4209,7 +4210,7 @@ ObjectMap::ObjectMapIterator FileStore::get_omap_iterator(coll_t c, int r = lfn_find(c, hoid, &path); if (r < 0) return ObjectMap::ObjectMapIterator(); - return object_map->get_iterator(hoid, path); + return object_map->get_iterator(hoid, path->get_index()); } int FileStore::_create_collection(coll_t c) @@ -4283,7 +4284,7 @@ int FileStore::_omap_clear(coll_t cid, const hobject_t &hoid) { int r = lfn_find(cid, hoid, &path); if (r < 0) return r; - return object_map->clear(hoid, path); + return object_map->clear(hoid, path->get_index()); } int FileStore::_omap_setkeys(coll_t cid, const hobject_t &hoid, const map<string, bufferlist> &aset) { @@ -4292,7 +4293,7 @@ int FileStore::_omap_setkeys(coll_t cid, const hobject_t &hoid, int r = lfn_find(cid, hoid, &path); if (r < 0) return r; - return object_map->set_keys(hoid, path, aset); + return object_map->set_keys(hoid, path->get_index(), aset); } int FileStore::_omap_rmkeys(coll_t cid, const hobject_t &hoid, const set<string> &keys) { @@ -4301,7 +4302,7 @@ int FileStore::_omap_rmkeys(coll_t cid, const hobject_t &hoid, int r = lfn_find(cid, hoid, &path); if (r < 0) return r; - return object_map->rm_keys(hoid, path, keys); + return object_map->rm_keys(hoid, path->get_index(), keys); } int FileStore::_omap_setheader(coll_t cid, const hobject_t &hoid, const bufferlist &bl) @@ -4311,7 +4312,7 @@ int FileStore::_omap_setheader(coll_t cid, const hobject_t &hoid, int r = lfn_find(cid, hoid, &path); if (r < 0) return r; - return object_map->set_header(hoid, path, bl); + return object_map->set_header(hoid, path->get_index(), bl); } diff --git a/src/os/HashIndex.cc b/src/os/HashIndex.cc index c51f9d65927..a47f457e83b 100644 --- a/src/os/HashIndex.cc +++ b/src/os/HashIndex.cc @@ -15,6 +15,7 @@ #include "include/types.h" #include "include/buffer.h" #include "osd/osd_types.h" +#include <errno.h> #include "HashIndex.h" diff --git a/src/os/IndexManager.cc b/src/os/IndexManager.cc index 808525edcc7..e1e226397b7 100644 --- a/src/os/IndexManager.cc +++ b/src/os/IndexManager.cc @@ -19,6 +19,8 @@ #include <sys/param.h> #endif +#include <errno.h> + #include "common/Mutex.h" #include "common/Cond.h" #include "common/config.h" diff --git a/src/os/LFNIndex.h b/src/os/LFNIndex.h index 54578a68dcf..542da55c3c1 100644 --- a/src/os/LFNIndex.h +++ b/src/os/LFNIndex.h @@ -25,7 +25,6 @@ #include "osd/osd_types.h" #include "include/object.h" #include "common/ceph_crypto.h" -#include "ObjectStore.h" #include "CollectionIndex.h" diff --git a/src/os/ObjectMap.h b/src/os/ObjectMap.h index d274fdbabc1..0f3088e641e 100644 --- a/src/os/ObjectMap.h +++ b/src/os/ObjectMap.h @@ -19,7 +19,7 @@ #include <vector> #include <tr1/memory> -#include "CollectionIndex.h" +#include "IndexManager.h" /** * Encapsulates the FileStore key value store @@ -31,41 +31,41 @@ public: /// Set keys and values from specified map virtual int set_keys( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path, ///< [in] Path to hoid + Index index, ///< [in] Path to hoid const map<string, bufferlist> &set ///< [in] key to value map to set ) = 0; /// Set header virtual int set_header( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path, ///< [in] Path to hoid + Index index, ///< [in] Path to hoid const bufferlist &bl ///< [in] header to set ) = 0; /// Retrieve header virtual int get_header( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path, ///< [in] Path to hoid + Index index, ///< [in] Path to hoid bufferlist *bl ///< [out] header to set ) = 0; /// Clear all map keys and values from hoid virtual int clear( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path ///< [in] Path to hoid + Index index ///< [in] Path to hoid ) = 0; /// Clear all map keys and values from hoid virtual int rm_keys( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path, ///< [in] Path to hoid + Index index, ///< [in] Path to hoid const set<string> &to_clear ///< [in] Keys to clear ) = 0; /// Get all keys and values virtual int get( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path, ///< [in] Path to hoid + Index index, ///< [in] Path to hoid bufferlist *header, ///< [out] Returned Header map<string, bufferlist> *out ///< [out] Returned keys and values ) = 0; @@ -73,14 +73,14 @@ public: /// Get values for supplied keys virtual int get_keys( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path, ///< [in] Path to hoid + Index index, ///< [in] Path to hoid set<string> *keys ///< [out] Keys defined on hoid ) = 0; /// Get values for supplied keys virtual int get_values( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path, ///< [in] Path to hoid + Index index, ///< [in] Path to hoid const set<string> &keys, ///< [in] Keys to get map<string, bufferlist> *out ///< [out] Returned keys and values ) = 0; @@ -88,7 +88,7 @@ public: /// Check key existence virtual int check_keys( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path, ///< [in] Path to hoid + Index index, ///< [in] Path to hoid const set<string> &keys, ///< [in] Keys to check set<string> *out ///< [out] Subset of keys defined on hoid ) = 0; @@ -96,7 +96,7 @@ public: /// Get xattrs virtual int get_xattrs( const hobject_t &hoid, ///< [in] object - CollectionIndex::IndexedPath path, ///< [in] path to hoid + Index index, ///< [in] path to hoid const set<string> &to_get, ///< [in] keys to get map<string, bufferlist> *out ///< [out] subset of attrs/vals defined ) = 0; @@ -104,21 +104,21 @@ public: /// Get all xattrs virtual int get_all_xattrs( const hobject_t &hoid, ///< [in] object - CollectionIndex::IndexedPath path, ///< [in] path to hoid + Index index, ///< [in] path to hoid set<string> *out ///< [out] attrs and values ) = 0; /// set xattrs in to_set virtual int set_xattrs( const hobject_t &hoid, ///< [in] object - CollectionIndex::IndexedPath path, ///< [in] path to object + Index index, ///< [in] path to object const map<string, bufferlist> &to_set ///< [in] attrs/values to set ) = 0; /// remove xattrs in to_remove virtual int remove_xattrs( const hobject_t &hoid, ///< [in] object - CollectionIndex::IndexedPath path, ///< [in] path to hoid + Index index, ///< [in] path to hoid const set<string> &to_remove ///< [in] attrs to remove ) = 0; @@ -126,17 +126,17 @@ public: /// Clone keys efficiently from hoid map to target map virtual int clone( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path, ///< [in] Path to hoid + Index index, ///< [in] Path to hoid const hobject_t &target, ///< [in] target of clone - CollectionIndex::IndexedPath target_path ///< [in] path to target + Index target_index ///< [in] path to target ) { return 0; } /// Efficiently tie <target, target_path> to same key space as <hoid, path> virtual int link( const hobject_t &hoid, ///< [in] object containing map - CollectionIndex::IndexedPath path, ///< [in] Path to hoid + Index index, ///< [in] Path to hoid const hobject_t &target, ///< [in] target of link - CollectionIndex::IndexedPath target_path ///< [in] path to target + Index target_index ///< [in] path to target ) { return 0; } /// Ensure all previous writes are durable @@ -158,7 +158,7 @@ public: }; typedef std::tr1::shared_ptr<ObjectMapIteratorImpl> ObjectMapIterator; virtual ObjectMapIterator get_iterator(const hobject_t &hoid, - CollectionIndex::IndexedPath path) { + Index index) { return ObjectMapIterator(); } diff --git a/src/test/ObjectMap/test_object_map.cc b/src/test/ObjectMap/test_object_map.cc index ef91f1606d7..ac551f5dd1b 100644 --- a/src/test/ObjectMap/test_object_map.cc +++ b/src/test/ObjectMap/test_object_map.cc @@ -1,13 +1,15 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- #include <tr1/memory> #include <map> #include <set> #include <boost/scoped_ptr.hpp> -#include "os/CollectionIndex.h" +#include "os/IndexManager.h" #include "include/buffer.h" #include "test/ObjectMap/KeyValueDBMemory.h" #include "os/KeyValueDB.h" #include "os/DBObjectMap.h" +#include "os/HashIndex.h" #include "os/LevelDBStore.h" #include <sys/types.h> #include "global/global_init.h" @@ -45,7 +47,7 @@ public: map<string, map<string, string> > omap; map<string, string > hmap; map<string, map<string, string> > xattrs; - CollectionIndex::IndexedPath def_collection; + Index def_collection; unsigned seq; ObjectMapTest() : db(), seq(0) {} @@ -85,7 +87,7 @@ public: key, value); } - void set_key(hobject_t hoid, CollectionIndex::IndexedPath path, + void set_key(hobject_t hoid, Index path, string key, string value) { map<string, bufferlist> to_write; bufferptr bp(value.c_str(), value.size()); @@ -95,7 +97,7 @@ public: db->set_keys(hoid, path, to_write); } - void set_xattr(hobject_t hoid, CollectionIndex::IndexedPath path, + void set_xattr(hobject_t hoid, Index path, string key, string value) { map<string, bufferlist> to_write; bufferptr bp(value.c_str(), value.size()); @@ -110,7 +112,7 @@ public: value); } - void set_header(hobject_t hoid, CollectionIndex::IndexedPath path, + void set_header(hobject_t hoid, Index path, const string &value) { bufferlist header; header.append(bufferptr(value.c_str(), value.size() + 1)); @@ -122,7 +124,7 @@ public: value); } - int get_header(hobject_t hoid, CollectionIndex::IndexedPath path, + int get_header(hobject_t hoid, Index path, string *value) { bufferlist header; int r = db->get_header(hoid, path, &header); @@ -140,7 +142,7 @@ public: key, value); } - int get_xattr(hobject_t hoid, CollectionIndex::IndexedPath path, + int get_xattr(hobject_t hoid, Index path, string key, string *value) { set<string> to_get; to_get.insert(key); @@ -160,7 +162,7 @@ public: key, value); } - int get_key(hobject_t hoid, CollectionIndex::IndexedPath path, + int get_key(hobject_t hoid, Index path, string key, string *value) { set<string> to_get; to_get.insert(key); @@ -180,7 +182,7 @@ public: key); } - void remove_key(hobject_t hoid, CollectionIndex::IndexedPath path, + void remove_key(hobject_t hoid, Index path, string key) { set<string> to_remove; to_remove.insert(key); @@ -192,7 +194,7 @@ public: key); } - void remove_xattr(hobject_t hoid, CollectionIndex::IndexedPath path, + void remove_xattr(hobject_t hoid, Index path, string key) { set<string> to_remove; to_remove.insert(key); @@ -204,8 +206,8 @@ public: hobject_t(sobject_t(target, CEPH_NOSNAP)), def_collection); } - void clone(hobject_t hoid, CollectionIndex::IndexedPath path, - hobject_t hoid2, CollectionIndex::IndexedPath path2) { + void clone(hobject_t hoid, Index path, + hobject_t hoid2, Index path2) { db->clone(hoid, path, hoid2, path2); } @@ -213,7 +215,7 @@ public: clear(hobject_t(sobject_t(objname, CEPH_NOSNAP)), def_collection); } - void clear(hobject_t hoid, CollectionIndex::IndexedPath path) { + void clear(hobject_t hoid, Index path) { db->clear(hoid, path); } @@ -236,8 +238,11 @@ public: } void init_default_collection(const string &coll_name) { - def_collection = CollectionIndex::get_testing_path( - "/" + coll_name, coll_t(coll_name)); + def_collection = Index(new HashIndex(coll_t(coll_name), + ("/" + coll_name).c_str(), + 2, + 2, + CollectionIndex::HASH_INDEX_TAG_2)); } void auto_set_xattr(ostream &out) { @@ -542,9 +547,11 @@ int main(int argc, char **argv) { TEST_F(ObjectMapTest, CreateOneObject) { hobject_t hoid(sobject_t("foo", CEPH_NOSNAP)); - CollectionIndex::IndexedPath path = CollectionIndex::get_testing_path( - "/bar", coll_t("foo_coll")); - + Index path = Index(new HashIndex(coll_t("foo_coll"), + string("/bar").c_str(), + 2, + 2, + CollectionIndex::HASH_INDEX_TAG_2)); map<string, bufferlist> to_set; string key("test"); string val("test_val"); @@ -582,8 +589,11 @@ TEST_F(ObjectMapTest, CreateOneObject) { TEST_F(ObjectMapTest, CloneOneObject) { hobject_t hoid(sobject_t("foo", CEPH_NOSNAP)); hobject_t hoid2(sobject_t("foo2", CEPH_NOSNAP)); - CollectionIndex::IndexedPath path = CollectionIndex::get_testing_path( - "/bar", coll_t("foo_coll")); + Index path = Index(new HashIndex(coll_t("foo_coll"), + string("/bar").c_str(), + 2, + 2, + CollectionIndex::HASH_INDEX_TAG_2)); set_key(hoid, path, "foo", "bar"); set_key(hoid, path, "foo2", "bar2"); @@ -646,9 +656,11 @@ TEST_F(ObjectMapTest, OddEvenClone) { hobject_t hoid(sobject_t("foo", CEPH_NOSNAP)); hobject_t hoid2(sobject_t("foo2", CEPH_NOSNAP)); hobject_t hoid_link(sobject_t("foo_link", CEPH_NOSNAP)); - CollectionIndex::IndexedPath path = CollectionIndex::get_testing_path( - "/bar", coll_t("foo_coll")); - + Index path = Index(new HashIndex(coll_t("foo_coll"), + string("/bar").c_str(), + 2, + 2, + CollectionIndex::HASH_INDEX_TAG_2)); for (unsigned i = 0; i < 1000; ++i) { set_key(hoid, path, "foo" + num_str(i), "bar" + num_str(i)); |