osd: does not fill in OSDOp::rval member
We provide an interface via the Objecter (and librados) for getting the return code of specific ops within a compound operation. Right now, the OSD never fills those in, so they're always set to zero!
This is often appropriate, since most operations fail as soon as one of the individual Ops fail. However, some can be marked as okay to fail, and sometimes we can desire the individual return values (containing, eg, the amount of data read).
A (very small) patch that probably solves the problem is in wip-rval, but before merging we of course need to add tests to detect this problem, and make sure we haven't broken anything else.
Objecter: keep ObjectOperation rval pointers for writes
Just before sending an op, prepare_mutate_op() is called, creating a
new Op. prepare_read_op() already copied over all the out-params
correctly, but for write operations the individual op return value
pointers were not copied, so they would not be filled in. With this
fixed, librados users can get the per-op return codes again.
ReplicatedPG: set individual osd op rvals
This takes care of things that can fail before transaction is
executed, like omap comparison. Getting individual rvals from a
transaction requires more refactoring, so I'm leaving it for a later