Fix CAS write return value (broken in 2.4.4)

This commit is contained in:
Vitaliy Filippov
2025-12-20 18:33:45 +03:00
parent d35727dbb7
commit db5eaa2eee
+7 -3
View File
@@ -868,7 +868,8 @@ void cluster_client_t::execute_cas(cluster_op_t *op)
{ {
int expected = part->req.hdr.opcode == OSD_OP_DELETE ? 0 : part->req.rw.len; int expected = part->req.hdr.opcode == OSD_OP_DELETE ? 0 : part->req.rw.len;
op->retval = part->reply.hdr.retval; op->retval = part->reply.hdr.retval;
op->retval = op->retval == expected ? 0 : (op->retval >= 0 ? -EIO : op->retval); if (op->retval != expected && op->retval >= 0)
op->retval = -EIO;
op->retval = op->retval == -EPIPE ? -EINTR : op->retval; op->retval = op->retval == -EPIPE ? -EINTR : op->retval;
auto peer_it = msgr.osd_peer_fds.find(op->parts[0].osd_num); auto peer_it = msgr.osd_peer_fds.find(op->parts[0].osd_num);
if (op->retval != 0 || (op->flags & OP_IMMEDIATE_COMMIT)) if (op->retval != 0 || (op->flags & OP_IMMEDIATE_COMMIT))
@@ -899,8 +900,11 @@ void cluster_client_t::execute_cas(cluster_op_t *op)
}, },
.callback = [this, op](osd_op_t *part) .callback = [this, op](osd_op_t *part)
{ {
op->retval = part->reply.hdr.retval; if (part->reply.hdr.retval != 0)
op->retval = op->retval == -EPIPE ? -EINTR : op->retval; {
op->retval = part->reply.hdr.retval;
op->retval = op->retval == -EPIPE ? -EINTR : op->retval;
}
auto cb = std::move(op->callback); auto cb = std::move(op->callback);
cb(op); cb(op);
}, },