// OMAP Read ops
case CEPH_OSD_OP_OMAPGETKEYS:
- if (pool.info.require_rollback()) {
- result = -EOPNOTSUPP;
- break;
- }
++ctx->num_read;
{
string start_after;
}
set<string> out_set;
- {
+ if (!pool.info.require_rollback()) {
ObjectMap::ObjectMapIterator iter = osd->store->get_omap_iterator(
coll, soid
);
++i, iter->next()) {
out_set.insert(iter->key());
}
- }
+ } // else return empty out_set
::encode(out_set, osd_op.outdata);
ctx->delta_stats.num_rd_kb += SHIFT_ROUND_UP(osd_op.outdata.length(), 10);
ctx->delta_stats.num_rd++;
break;
case CEPH_OSD_OP_OMAPGETVALS:
- if (pool.info.require_rollback()) {
- result = -EOPNOTSUPP;
- break;
- }
++ctx->num_read;
{
string start_after;
}
map<string, bufferlist> out_set;
- {
+ if (!pool.info.require_rollback()) {
ObjectMap::ObjectMapIterator iter = osd->store->get_omap_iterator(
coll, soid
);
dout(20) << "Found key " << iter->key() << dendl;
out_set.insert(make_pair(iter->key(), iter->value()));
}
- }
+ } // else return empty out_set
::encode(out_set, osd_op.outdata);
ctx->delta_stats.num_rd_kb += SHIFT_ROUND_UP(osd_op.outdata.length(), 10);
ctx->delta_stats.num_rd++;
case CEPH_OSD_OP_OMAPGETHEADER:
if (pool.info.require_rollback()) {
- result = -EOPNOTSUPP;
+ // return empty header
break;
}
++ctx->num_read;
break;
case CEPH_OSD_OP_OMAPGETVALSBYKEYS:
- if (pool.info.require_rollback()) {
- result = -EOPNOTSUPP;
- break;
- }
++ctx->num_read;
{
set<string> keys_to_get;
goto fail;
}
map<string, bufferlist> out;
- osd->store->omap_get_values(coll, soid, keys_to_get, &out);
+ if (!pool.info.require_rollback()) {
+ osd->store->omap_get_values(coll, soid, keys_to_get, &out);
+ } // else return empty omap entries
::encode(out, osd_op.outdata);
ctx->delta_stats.num_rd_kb += SHIFT_ROUND_UP(osd_op.outdata.length(), 10);
ctx->delta_stats.num_rd++;
break;
case CEPH_OSD_OP_OMAP_CMP:
- if (pool.info.require_rollback()) {
- result = -EOPNOTSUPP;
- break;
- }
++ctx->num_read;
{
if (!obs.exists || oi.is_whiteout()) {
}
map<string, bufferlist> out;
- set<string> to_get;
- for (map<string, pair<bufferlist, int> >::iterator i = assertions.begin();
- i != assertions.end();
- ++i)
- to_get.insert(i->first);
- int r = osd->store->omap_get_values(coll, soid, to_get, &out);
- if (r < 0) {
- result = r;
- break;
- }
+
+ if (!pool.info.require_rollback()) {
+ set<string> to_get;
+ for (map<string, pair<bufferlist, int> >::iterator i = assertions.begin();
+ i != assertions.end();
+ ++i)
+ to_get.insert(i->first);
+ int r = osd->store->omap_get_values(coll, soid, to_get, &out);
+ if (r < 0) {
+ result = r;
+ break;
+ }
+ } // else leave out empty
+
//Should set num_rd_kb based on encode length of map
ctx->delta_stats.num_rd++;
- r = 0;
+ int r = 0;
bufferlist empty;
for (map<string, pair<bufferlist, int> >::iterator i = assertions.begin();
i != assertions.end();