{
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:
}
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);
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);
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;
}
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);