From: Sage Weil Date: Mon, 19 Oct 2015 18:49:34 +0000 (-0400) Subject: os/MemStore: avoid STL map/set for omap_{setkeys,rmkeys} X-Git-Tag: v10.0.1~116^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=126ba59b787ae39b15df10e06c15d89de50487a5;p=ceph.git os/MemStore: avoid STL map/set for omap_{setkeys,rmkeys} Signed-off-by: Sage Weil --- diff --git a/src/os/MemStore.cc b/src/os/MemStore.cc index b0aa2069d32b..080f731e1a8f 100644 --- a/src/os/MemStore.cc +++ b/src/os/MemStore.cc @@ -851,18 +851,18 @@ void MemStore::_do_transaction(Transaction& t) { coll_t cid = i.get_cid(op->cid); ghobject_t oid = i.get_oid(op->oid); - map aset; - i.decode_attrset(aset); - r = _omap_setkeys(cid, oid, aset); + bufferlist aset_bl; + i.decode_attrset_bl(&aset_bl); + r = _omap_setkeys(cid, oid, aset_bl); } break; case Transaction::OP_OMAP_RMKEYS: { coll_t cid = i.get_cid(op->cid); ghobject_t oid = i.get_oid(op->oid); - set keys; - i.decode_keyset(keys); - r = _omap_rmkeys(cid, oid, keys); + bufferlist keys_bl; + i.decode_keyset_bl(&keys_bl); + r = _omap_rmkeys(cid, oid, keys_bl); } break; case Transaction::OP_OMAP_RMKEYRANGE: @@ -1158,7 +1158,7 @@ int MemStore::_omap_clear(coll_t cid, const ghobject_t &oid) } int MemStore::_omap_setkeys(coll_t cid, const ghobject_t &oid, - const map &aset) + bufferlist& aset_bl) { dout(10) << __func__ << " " << cid << " " << oid << dendl; CollectionRef c = get_collection(cid); @@ -1169,13 +1169,19 @@ int MemStore::_omap_setkeys(coll_t cid, const ghobject_t &oid, if (!o) return -ENOENT; std::lock_guard lock(o->omap_mutex); - for (map::const_iterator p = aset.begin(); p != aset.end(); ++p) - o->omap[p->first] = p->second; + bufferlist::iterator p = aset_bl.begin(); + __u32 num; + ::decode(num, p); + while (num--) { + string key; + ::decode(key, p); + ::decode(o->omap[key], p); + } return 0; } int MemStore::_omap_rmkeys(coll_t cid, const ghobject_t &oid, - const set &keys) + bufferlist& keys_bl) { dout(10) << __func__ << " " << cid << " " << oid << dendl; CollectionRef c = get_collection(cid); @@ -1186,8 +1192,14 @@ int MemStore::_omap_rmkeys(coll_t cid, const ghobject_t &oid, if (!o) return -ENOENT; std::lock_guard lock(o->omap_mutex); - for (set::const_iterator p = keys.begin(); p != keys.end(); ++p) - o->omap.erase(*p); + bufferlist::iterator p = keys_bl.begin(); + __u32 num; + ::decode(num, p); + while (num--) { + string key; + ::decode(key, p); + o->omap.erase(key); + } return 0; } diff --git a/src/os/MemStore.h b/src/os/MemStore.h index 734195fc8abf..187f067730b4 100644 --- a/src/os/MemStore.h +++ b/src/os/MemStore.h @@ -316,9 +316,8 @@ private: const ghobject_t& newoid, uint64_t srcoff, uint64_t len, uint64_t dstoff); int _omap_clear(coll_t cid, const ghobject_t &oid); - int _omap_setkeys(coll_t cid, const ghobject_t &oid, - const map &aset); - int _omap_rmkeys(coll_t cid, const ghobject_t &oid, const set &keys); + int _omap_setkeys(coll_t cid, const ghobject_t &oid, bufferlist& aset_bl); + int _omap_rmkeys(coll_t cid, const ghobject_t &oid, bufferlist& keys_bl); int _omap_rmkeyrange(coll_t cid, const ghobject_t &oid, const string& first, const string& last); int _omap_setheader(coll_t cid, const ghobject_t &oid, const bufferlist &bl);