Bug #3731
rados.h: recent change to CEPH_OSD_OP_CALL constitutes an incompatible protocol change
0%
Description
CEPH_OSD_OP_CALL changed to remove the CEPH_OSD_OP_MODE_RD bit in
91e941aef9f55425cc12204146f26d79c444cfae; however, this means the call op
on the wire is now different, and older OSDs don't understand the new
call opcode.
We need more backward compatibility.
(one symptom is that rbd operations on old images now fail for anything
that needs do a class operation; there are doubtless others)
Related issues
Associated revisions
osd: special case CALL op to not have RD bit effects
In commit 20496b8d2b2c3779a771695c6f778abbdb66d92a we treat a CALL as
different from a normal "read", but we did not adjust the behavior
determined by the RD bit in the op. We tried to fix that in
91e941aef9f55425cc12204146f26d79c444cfae, but changing the op code breaks
compatibility, so that was reverted.
Instead, special-case CALL in the helper--the only point in the code that
actually checks for the RD bit. (And fix one lingering user to use that
helper appropriately.)
Fixes: #3731
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Dan Mick <dan.mick@inktank.com>
osd: special case CALL op to not have RD bit effects
In commit 20496b8d2b2c3779a771695c6f778abbdb66d92a we treat a CALL as
different from a normal "read", but we did not adjust the behavior
determined by the RD bit in the op. We tried to fix that in
91e941aef9f55425cc12204146f26d79c444cfae, but changing the op code breaks
compatibility, so that was reverted.
Instead, special-case CALL in the helper--the only point in the code that
actually checks for the RD bit. (And fix one lingering user to use that
helper appropriately.)
Fixes: #3731
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Dan Mick <dan.mick@inktank.com>
(cherry picked from commit 988a52173522e9a410ba975a4e8b7c25c7801123)
History
#1 Updated by Greg Farnum about 11 years ago
Discussed this with Dan and Sam and I think we just want to roll this patch back and tell people not to use v0.56 for anything that uses class methods, and then hack the init_op_flags function to not set the read flag on class calls. The other option is feature bits and then having both ends do bit twiddles based on what the other end looks like, but that wouldn't work for v0.56 stuff anyway since its feature bits wouldn't match the op codes it's using...
#2 Updated by Sage Weil about 11 years ago
Agreed. And let's make sure it's fixed for 0.56.1.
#4 Updated by Sage Weil about 11 years ago
- Status changed from Fix Under Review to Resolved
#5 Updated by Alex Elder about 11 years ago
Do we have a test that checks our interfaces to
automatically catch inadvertent protocol changes?
If not, we should.