From: Sage Weil Date: Thu, 23 Jul 2015 14:20:00 +0000 (-0400) Subject: explicitly specify comparator for all ghobject_t maps and sets X-Git-Tag: v9.1.0~346^2~33 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7624125d09e99d2bbe802cb98a75df482aa3e006;p=ceph.git explicitly specify comparator for all ghobject_t maps and sets We no longer have operator< Signed-off-by: Sage Weil --- diff --git a/src/os/DBObjectMap.h b/src/os/DBObjectMap.h index de80d6f547cc..ee252c1ccb1a 100644 --- a/src/os/DBObjectMap.h +++ b/src/os/DBObjectMap.h @@ -68,7 +68,7 @@ public: * Set of headers currently in use */ set in_use; - set map_header_in_use; + set map_header_in_use; /** * Takes the map_header_in_use entry in constructor, releases in @@ -327,7 +327,7 @@ private: /// Implicit lock on Header->seq typedef ceph::shared_ptr<_Header> Header; Mutex cache_lock; - SimpleLRU caches; + SimpleLRU caches; string map_header_key(const ghobject_t &oid); string header_key(uint64_t seq); diff --git a/src/os/FDCache.h b/src/os/FDCache.h index 8597265bbf12..635043b7e061 100644 --- a/src/os/FDCache.h +++ b/src/os/FDCache.h @@ -52,14 +52,14 @@ public: private: CephContext *cct; const int registry_shards; - SharedLRU *registry; + SharedLRU *registry; public: FDCache(CephContext *cct) : cct(cct), registry_shards(cct->_conf->filestore_fd_cache_shards) { assert(cct); cct->_conf->add_observer(this); - registry = new SharedLRU[registry_shards]; + registry = new SharedLRU[registry_shards]; for (int i = 0; i < registry_shards; ++i) { registry[i].set_cct(cct); registry[i].set_size( diff --git a/src/os/FileStore.h b/src/os/FileStore.h index 95882d3c7f3a..744bdbd23f07 100644 --- a/src/os/FileStore.h +++ b/src/os/FileStore.h @@ -585,8 +585,8 @@ public: // DEBUG read error injection, an object is removed from both on delete() Mutex read_error_lock; - set data_error_set; // read() will return -EIO - set mdata_error_set; // getattr(),stat() will return -EIO + set data_error_set; // read() will return -EIO + set mdata_error_set; // getattr(),stat() will return -EIO void inject_data_error(const ghobject_t &oid); void inject_mdata_error(const ghobject_t &oid); void debug_obj_on_delete(const ghobject_t &oid); diff --git a/src/os/HashIndex.cc b/src/os/HashIndex.cc index 9ee86ff88123..06894782004b 100644 --- a/src/os/HashIndex.cc +++ b/src/os/HashIndex.cc @@ -830,7 +830,7 @@ int HashIndex::get_path_contents_by_hash_bitwise( const vector &path, const ghobject_t *next_object, set *hash_prefixes, - set > *objects) + set, CmpPairBitwise> *objects) { map rev_objects; int r; @@ -963,7 +963,7 @@ int HashIndex::list_by_hash_bitwise( vector next_path = path; next_path.push_back(""); set hash_prefixes; - set > objects; + set, CmpPairBitwise> objects; int r = get_path_contents_by_hash_bitwise(path, next, &hash_prefixes, @@ -974,7 +974,7 @@ int HashIndex::list_by_hash_bitwise( i != hash_prefixes.end(); ++i) { dout(20) << __func__ << " prefix " << *i << dendl; - set >::iterator j = objects.lower_bound( + set, CmpPairBitwise>::iterator j = objects.lower_bound( make_pair(*i, ghobject_t())); if (j == objects.end() || j->first != *i) { *(next_path.rbegin()) = *(i->rbegin()); @@ -1029,7 +1029,7 @@ int HashIndex::list_by_hash_nibblewise( vector next_path = path; next_path.push_back(""); set hash_prefixes; - set, CmpPairNibblewise > objects; + set, CmpPairNibblewise> objects; int r = get_path_contents_by_hash_nibblewise(path, next, &hash_prefixes, diff --git a/src/os/HashIndex.h b/src/os/HashIndex.h index d6f605635a02..cacdbc840f39 100644 --- a/src/os/HashIndex.h +++ b/src/os/HashIndex.h @@ -365,6 +365,20 @@ private: } }; + struct CmpPairBitwise { + bool operator()(const pair& l, + const pair& r) + { + if (l.first < r.first) + return true; + if (l.first > r.first) + return false; + if (cmp_bitwise(l.second, r.second) < 0) + return true; + return false; + } + }; + struct CmpHexdigitStringBitwise { bool operator()(const string& l, const string& r) { return reverse_hexdigit_bits_string(l) < reverse_hexdigit_bits_string(r); @@ -376,13 +390,13 @@ private: const vector &path, /// [in] Path to list const ghobject_t *next_object, /// [in] list > *next_object set *hash_prefixes, /// [out] prefixes in dir - set > *objects /// [out] objects + set, CmpPairBitwise> *objects /// [out] objects ); int get_path_contents_by_hash_nibblewise( const vector &path, /// [in] Path to list const ghobject_t *next_object, /// [in] list > *next_object set *hash_prefixes, /// [out] prefixes in dir - set, CmpPairNibblewise > *objects /// [out] objects + set, CmpPairNibblewise> *objects /// [out] objects ); /// List objects in collection in ghobject_t order diff --git a/src/os/KeyValueStore.h b/src/os/KeyValueStore.h index ca4e09cd186d..ae481030c810 100644 --- a/src/os/KeyValueStore.h +++ b/src/os/KeyValueStore.h @@ -234,11 +234,27 @@ class KeyValueStore : public ObjectStore, // 4. Clone or rename struct BufferTransaction { typedef pair uniq_id; - typedef map StripHeaderMap; + + struct CollGhobjectPairBitwiseComparator { + bool operator()(const uniq_id& l, + const uniq_id& r) const { + if (l.first < r.first) + return true; + if (l.first != r.first) + return false; + if (cmp_bitwise(l.second, r.second) < 0) + return true; + return false; + } + }; + + typedef map StripHeaderMap; //Dirty records StripHeaderMap strip_headers; - map< uniq_id, map, bufferlist> > buffers; // pair(prefix, key),to buffer updated data in one transaction + map< uniq_id, map, bufferlist>, + CollGhobjectPairBitwiseComparator> buffers; // pair(prefix, key),to buffer updated data in one transaction list finishes; diff --git a/src/os/MemStore.cc b/src/os/MemStore.cc index be6fc77630cb..781564438729 100644 --- a/src/os/MemStore.cc +++ b/src/os/MemStore.cc @@ -132,7 +132,7 @@ void MemStore::dump(Formatter *f) f->close_section(); f->open_array_section("objects"); - for (map::iterator q = p->second->object_map.begin(); + for (map::iterator q = p->second->object_map.begin(); q != p->second->object_map.end(); ++q) { f->open_object_section("object"); @@ -432,7 +432,7 @@ int MemStore::collection_list(coll_t cid, ghobject_t start, ghobject_t end, return -ENOENT; RWLock::RLocker l(c->lock); - map::iterator p = c->object_map.lower_bound(start); + map::iterator p = c->object_map.lower_bound(start); while (p != c->object_map.end() && ls->size() < (unsigned)max && p->first < end) { @@ -1384,7 +1384,7 @@ int MemStore::_split_collection(coll_t cid, uint32_t bits, uint32_t match, RWLock::WLocker l1(MIN(&(*sc), &(*dc))->lock); RWLock::WLocker l2(MAX(&(*sc), &(*dc))->lock); - map::iterator p = sc->object_map.begin(); + map::iterator p = sc->object_map.begin(); while (p != sc->object_map.end()) { if (p->first.match(bits, match)) { dout(20) << " moving " << p->first << dendl; diff --git a/src/os/MemStore.h b/src/os/MemStore.h index 6852bc11edc0..477e8fde63ed 100644 --- a/src/os/MemStore.h +++ b/src/os/MemStore.h @@ -78,7 +78,7 @@ public: struct Collection { ceph::unordered_map object_hash; ///< for lookup - map object_map; ///< for iteration + map object_map; ///< for iteration map xattr; RWLock lock; ///< for object_{map,hash} @@ -99,7 +99,7 @@ public: ::encode(xattr, bl); uint32_t s = object_map.size(); ::encode(s, bl); - for (map::const_iterator p = object_map.begin(); + for (map::const_iterator p = object_map.begin(); p != object_map.end(); ++p) { ::encode(p->first, bl); @@ -125,7 +125,7 @@ public: uint64_t used_bytes() const { uint64_t result = 0; - for (map::const_iterator p = object_map.begin(); + for (map::const_iterator p = object_map.begin(); p != object_map.end(); ++p) { result += p->second->data.length(); diff --git a/src/os/ObjectStore.h b/src/os/ObjectStore.h index 5ae7949b0970..7dc94094920e 100644 --- a/src/os/ObjectStore.h +++ b/src/os/ObjectStore.h @@ -434,7 +434,7 @@ public: bufferlist tbl; map coll_index; - map object_index; + map object_index; __le32 coll_id; __le32 object_id; @@ -660,7 +660,7 @@ public: } vector<__le32> om(other.object_index.size()); - map::iterator object_index_p; + map::iterator object_index_p; for (object_index_p = other.object_index.begin(); object_index_p != other.object_index.end(); ++object_index_p) { @@ -796,7 +796,7 @@ public: colls[coll_index_p->second] = coll_index_p->first; } - map::iterator object_index_p; + map::iterator object_index_p; for (object_index_p = t->object_index.begin(); object_index_p != t->object_index.end(); ++object_index_p) { @@ -892,7 +892,7 @@ private: return index_id; } __le32 _get_object_id(const ghobject_t& oid) { - map::iterator o = object_index.find(oid); + map::iterator o = object_index.find(oid); if (o != object_index.end()) return o->second; diff --git a/src/test/objectstore/store_test.cc b/src/test/objectstore/store_test.cc index 2da47e7f39c6..b21d6a7cc19f 100644 --- a/src/test/objectstore/store_test.cc +++ b/src/test/objectstore/store_test.cc @@ -265,7 +265,7 @@ TEST_P(StoreTest, SimpleListTest) { r = store->apply_transaction(t); ASSERT_EQ(r, 0); } - set all; + set all; { ObjectStore::Transaction t; for (int i=0; i<200; ++i) { @@ -282,7 +282,7 @@ TEST_P(StoreTest, SimpleListTest) { ASSERT_EQ(r, 0); } for (int bitwise=0; bitwise<2; ++bitwise) { - set saw; + set saw; vector objects; ghobject_t next, current; while (!next.is_max()) { @@ -313,7 +313,7 @@ TEST_P(StoreTest, SimpleListTest) { } { ObjectStore::Transaction t; - for (set::iterator p = all.begin(); p != all.end(); ++p) + for (set::iterator p = all.begin(); p != all.end(); ++p) t.remove(cid, *p); t.remove_collection(cid); cerr << "Cleaning" << std::endl; @@ -360,7 +360,7 @@ TEST_P(StoreTest, MultipoolListTest) { r = store->apply_transaction(t); ASSERT_EQ(r, 0); } - set all, saw; + set all, saw; { ObjectStore::Transaction t; for (int i=0; i<200; ++i) { @@ -398,7 +398,7 @@ TEST_P(StoreTest, MultipoolListTest) { } { ObjectStore::Transaction t; - for (set::iterator p = all.begin(); p != all.end(); ++p) + for (set::iterator p = all.begin(); p != all.end(); ++p) t.remove(cid, *p); t.remove_collection(cid); cerr << "Cleaning" << std::endl; @@ -572,7 +572,7 @@ TEST_P(StoreTest, ManyObjectTest) { coll_t cid; string base = ""; for (int i = 0; i < 100; ++i) base.append("aaaaa"); - set created; + set created; { ObjectStore::Transaction t; t.create_collection(cid); @@ -593,14 +593,14 @@ TEST_P(StoreTest, ManyObjectTest) { ASSERT_EQ(r, 0); } - for (set::iterator i = created.begin(); + for (set::iterator i = created.begin(); i != created.end(); ++i) { struct stat buf; ASSERT_TRUE(!store->stat(cid, *i, &buf)); } - set listed, listed2; + set listed, listed2; vector objects; r = store->collection_list(cid, ghobject_t(), ghobject_t::get_max(), true, INT_MAX, &objects, 0); ASSERT_EQ(r, 0); @@ -668,13 +668,13 @@ TEST_P(StoreTest, ManyObjectTest) { ASSERT_TRUE(listed.size() == created.size()); if (listed2.size()) ASSERT_EQ(listed.size(), listed2.size()); - for (set::iterator i = listed.begin(); + for (set::iterator i = listed.begin(); i != listed.end(); ++i) { ASSERT_TRUE(created.count(*i)); } - for (set::iterator i = created.begin(); + for (set::iterator i = created.begin(); i != created.end(); ++i) { ObjectStore::Transaction t; @@ -736,9 +736,9 @@ public: static const unsigned max_attr_value_len = 1024 * 4; coll_t cid; unsigned in_flight; - map contents; - set available_objects; - set in_flight_objects; + map contents; + set available_objects; + set in_flight_objects; ObjectGenerator *object_gen; gen_type *rng; ObjectStore *store; @@ -830,7 +830,7 @@ public: cond.Wait(lock); boost::uniform_int<> choose(0, available_objects.size() - 1); int index = choose(*rng); - set::iterator i = available_objects.begin(); + set::iterator i = available_objects.begin(); for ( ; index > 0; --index, ++i) ; ghobject_t ret = *i; return ret; @@ -1133,7 +1133,7 @@ public: while (in_flight) cond.Wait(lock); vector objects; - set objects_set, objects_set2; + set objects_set, objects_set2; ghobject_t next, current; while (1) { cerr << "scanning..." << std::endl; @@ -1148,7 +1148,7 @@ public: current = next; } ASSERT_EQ(objects_set.size(), available_objects.size()); - for (set::iterator i = objects_set.begin(); + for (set::iterator i = objects_set.begin(); i != objects_set.end(); ++i) { ASSERT_GT(available_objects.count(*i), (unsigned)0); @@ -1158,7 +1158,7 @@ public: ASSERT_EQ(r, 0); objects_set2.insert(objects.begin(), objects.end()); ASSERT_EQ(objects_set2.size(), available_objects.size()); - for (set::iterator i = objects_set2.begin(); + for (set::iterator i = objects_set2.begin(); i != objects_set2.end(); ++i) { ASSERT_GT(available_objects.count(*i), (unsigned)0); @@ -1329,7 +1329,7 @@ TEST_P(StoreTest, HashCollisionTest) { } string base = ""; for (int i = 0; i < 100; ++i) base.append("aaaaa"); - set created; + set created; for (int n = 0; n < 10; ++n) { char nbuf[100]; sprintf(nbuf, "n%d", n); @@ -1352,7 +1352,7 @@ TEST_P(StoreTest, HashCollisionTest) { vector objects; r = store->collection_list(cid, ghobject_t(), ghobject_t::get_max(), true, INT_MAX, &objects, 0); ASSERT_EQ(r, 0); - set listed(objects.begin(), objects.end()); + set listed(objects.begin(), objects.end()); cerr << "listed.size() is " << listed.size() << " and created.size() is " << created.size() << std::endl; ASSERT_TRUE(listed.size() == created.size()); objects.clear(); @@ -1379,13 +1379,13 @@ TEST_P(StoreTest, HashCollisionTest) { } cerr << "listed.size() is " << listed.size() << std::endl; ASSERT_TRUE(listed.size() == created.size()); - for (set::iterator i = listed.begin(); + for (set::iterator i = listed.begin(); i != listed.end(); ++i) { ASSERT_TRUE(created.count(*i)); } - for (set::iterator i = created.begin(); + for (set::iterator i = created.begin(); i != created.end(); ++i) { ObjectStore::Transaction t; @@ -1409,7 +1409,7 @@ TEST_P(StoreTest, ScrubTest) { ASSERT_EQ(r, 0); } string base = "aaaaa"; - set created; + set created; for (int i = 0; i < 1000; ++i) { char buf[100]; sprintf(buf, "%d", i); @@ -1448,7 +1448,7 @@ TEST_P(StoreTest, ScrubTest) { r = store->collection_list(cid, ghobject_t(), ghobject_t::get_max(), true, INT_MAX, &objects, 0); ASSERT_EQ(r, 0); - set listed(objects.begin(), objects.end()); + set listed(objects.begin(), objects.end()); cerr << "listed.size() is " << listed.size() << " and created.size() is " << created.size() << std::endl; ASSERT_TRUE(listed.size() == created.size()); objects.clear(); @@ -1474,13 +1474,13 @@ TEST_P(StoreTest, ScrubTest) { } cerr << "listed.size() is " << listed.size() << std::endl; ASSERT_TRUE(listed.size() == created.size()); - for (set::iterator i = listed.begin(); + for (set::iterator i = listed.begin(); i != listed.end(); ++i) { ASSERT_TRUE(created.count(*i)); } - for (set::iterator i = created.begin(); + for (set::iterator i = created.begin(); i != created.end(); ++i) { ObjectStore::Transaction t;