Skip to content

Commit

Permalink
ReplicatedPG: result code not correctly set in some cases.
Browse files Browse the repository at this point in the history
In ReplicatedPG::do_osd_ops(), the result code is not correctly set in some cases and may mislead caller.
Fixes: #13566
Signed-off-by: xie.xingguo@zte.com.cn
  • Loading branch information
xiexingguo committed Oct 22, 2015
1 parent 3868939 commit 40219ca
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions src/osd/ReplicatedPG.cc
Expand Up @@ -5050,7 +5050,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
newop.op.op = CEPH_OSD_OP_SYNC_READ;
newop.op.extent.offset = 0;
newop.op.extent.length = 0;
do_osd_ops(ctx, nops);
result = do_osd_ops(ctx, nops);
osd_op.outdata.claim(newop.outdata);
}
break;
Expand Down Expand Up @@ -5109,7 +5109,9 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
::encode(m, newbl);
newop.indata = newbl;
}
do_osd_ops(ctx, nops);
// shall never fail, but it does no harm to
// catch the result code.
result = do_osd_ops(ctx, nops);
}
break;

Expand Down Expand Up @@ -5216,7 +5218,11 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
}
++ctx->num_read;
{
osd->store->omap_get_header(coll, ghobject_t(soid), &osd_op.outdata);
int r = osd->store->omap_get_header(coll, ghobject_t(soid), &osd_op.outdata);
if (r < 0) {
result = r;
break;
}
ctx->delta_stats.num_rd_kb += SHIFT_ROUND_UP(osd_op.outdata.length(), 10);
ctx->delta_stats.num_rd++;
}
Expand All @@ -5237,7 +5243,11 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
tracepoint(osd, do_osd_op_pre_omapgetvalsbykeys, soid.oid.name.c_str(), soid.snap.val, list_entries(keys_to_get).c_str());
map<string, bufferlist> out;
if (pool.info.supports_omap()) {
osd->store->omap_get_values(coll, ghobject_t(soid), keys_to_get, &out);
int r = osd->store->omap_get_values(coll, ghobject_t(soid), keys_to_get, &out);
if (r < 0) {
result = r;
break;
}
} // else return empty omap entries
::encode(out, osd_op.outdata);
ctx->delta_stats.num_rd_kb += SHIFT_ROUND_UP(osd_op.outdata.length(), 10);
Expand Down

0 comments on commit 40219ca

Please sign in to comment.