]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/MemStore: avoid STL map/set for omap_{setkeys,rmkeys}
authorSage Weil <sage@redhat.com>
Mon, 19 Oct 2015 18:49:34 +0000 (14:49 -0400)
committerSage Weil <sage@redhat.com>
Mon, 19 Oct 2015 19:05:49 +0000 (15:05 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/MemStore.cc
src/os/MemStore.h

index b0aa2069d32bfb0bb60adc61c9ad19428e19592d..080f731e1a8f40cc9b40629839993a5248f40ac6 100644 (file)
@@ -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<string, bufferlist> 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<string> 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<string, bufferlist> &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<std::mutex> lock(o->omap_mutex);
-  for (map<string,bufferlist>::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<string> &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<std::mutex> lock(o->omap_mutex);
-  for (set<string>::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;
 }
 
index 734195fc8abfb0dee98cd2a2ed6f4141d390a604..187f067730b414035c326d1879f6711d609492ad 100644 (file)
@@ -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<string, bufferlist> &aset);
-  int _omap_rmkeys(coll_t cid, const ghobject_t &oid, const set<string> &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);