From: Sage Weil Date: Mon, 19 Oct 2015 18:49:17 +0000 (-0400) Subject: os/newstore: avoid STL map/set for omap_{setkeys,rmkeys} X-Git-Tag: v10.0.1~116^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=332481eba0e326efcf5fb58b2308b12aad271f6d;p=ceph.git os/newstore: avoid STL map/set for omap_{setkeys,rmkeys} Signed-off-by: Sage Weil --- diff --git a/src/os/newstore/NewStore.cc b/src/os/newstore/NewStore.cc index bdc5d381372..150025bc0ed 100644 --- a/src/os/newstore/NewStore.cc +++ b/src/os/newstore/NewStore.cc @@ -3050,17 +3050,17 @@ int NewStore::_txc_add_transaction(TransContext *txc, Transaction *t) case Transaction::OP_OMAP_SETKEYS: { ghobject_t oid = i.get_oid(op->oid); - map aset; - i.decode_attrset(aset); - r = _omap_setkeys(txc, c, oid, aset); + bufferlist aset_bl; + i.decode_attrset_bl(&aset_bl); + r = _omap_setkeys(txc, c, oid, aset_bl); } break; case Transaction::OP_OMAP_RMKEYS: { ghobject_t oid = i.get_oid(op->oid); - set keys; - i.decode_keyset(keys); - r = _omap_rmkeys(txc, c, oid, keys); + bufferlist keys_bl; + i.decode_keyset_bl(&keys_bl); + r = _omap_rmkeys(txc, c, oid, keys_bl); } break; case Transaction::OP_OMAP_RMKEYRANGE: @@ -4031,10 +4031,12 @@ int NewStore::_omap_clear(TransContext *txc, int NewStore::_omap_setkeys(TransContext *txc, CollectionRef& c, const ghobject_t& oid, - const map& m) + bufferlist &bl) { dout(15) << __func__ << " " << c->cid << " " << oid << dendl; int r = 0; + bufferlist::iterator p = bl.begin(); + __u32 num; RWLock::WLocker l(c->lock); OnodeRef o = c->get_onode(oid, false); @@ -4046,11 +4048,16 @@ int NewStore::_omap_setkeys(TransContext *txc, o->onode.omap_head = o->onode.nid; txc->write_onode(o); } - for (map::const_iterator p = m.begin(); p != m.end(); ++p) { + ::decode(num, p); + while (num--) { string key; - get_omap_key(o->onode.omap_head, p->first, &key); - dout(30) << __func__ << " " << key << " <- " << p->first << dendl; - txc->t->set(PREFIX_OMAP, key, p->second); + bufferlist value; + ::decode(key, p); + ::decode(value, p); + string final_key; + get_omap_key(o->onode.omap_head, key, &final_key); + dout(30) << __func__ << " " << final_key << " <- " << value << dendl; + txc->t->set(PREFIX_OMAP, final_key, value); } r = 0; @@ -4090,10 +4097,12 @@ int NewStore::_omap_setheader(TransContext *txc, int NewStore::_omap_rmkeys(TransContext *txc, CollectionRef& c, const ghobject_t& oid, - const set& m) + bufferlist& bl) { dout(15) << __func__ << " " << c->cid << " " << oid << dendl; int r = 0; + bufferlist::iterator p = bl.begin(); + __u32 num; RWLock::WLocker l(c->lock); OnodeRef o = c->get_onode(oid, false); @@ -4109,11 +4118,14 @@ int NewStore::_omap_rmkeys(TransContext *txc, o->onode.omap_head = o->onode.nid; txc->write_onode(o); } - for (set::const_iterator p = m.begin(); p != m.end(); ++p) { + ::decode(num, p); + while (num--) { string key; - get_omap_key(o->onode.omap_head, *p, &key); - dout(30) << __func__ << " rm " << key << " <- " << *p << dendl; - txc->t->rmkey(PREFIX_OMAP, key); + ::decode(key, p); + string final_key; + get_omap_key(o->onode.omap_head, key, &final_key); + dout(30) << __func__ << " rm " << final_key << " <- " << key << dendl; + txc->t->rmkey(PREFIX_OMAP, final_key); } r = 0; diff --git a/src/os/newstore/NewStore.h b/src/os/newstore/NewStore.h index e81a47cac03..13847922383 100644 --- a/src/os/newstore/NewStore.h +++ b/src/os/newstore/NewStore.h @@ -788,7 +788,7 @@ private: int _omap_setkeys(TransContext *txc, CollectionRef& c, const ghobject_t& oid, - const map& m); + bufferlist& bl); int _omap_setheader(TransContext *txc, CollectionRef& c, const ghobject_t& oid, @@ -796,7 +796,7 @@ private: int _omap_rmkeys(TransContext *txc, CollectionRef& c, const ghobject_t& oid, - const set& m); + bufferlist& bl); int _omap_rmkey_range(TransContext *txc, CollectionRef& c, const ghobject_t& oid,