Project

General

Profile

Bug #3731

rados.h: recent change to CEPH_OSD_OP_CALL constitutes an incompatible protocol change

Added by Dan Mick about 11 years ago. Updated about 11 years ago.

Status:
Resolved
Priority:
Urgent
Assignee:
-
Category:
-
Target version:
-
% Done:

0%

Source:
Development
Tags:
Backport:
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Pull request ID:
Crash signature (v1):
Crash signature (v2):

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

Duplicated by Ceph - Bug #3715: Crash during 0.55 -> 0.56 upgrade Duplicate 01/02/2013

Associated revisions

Revision 988a5217 (diff)
Added by Sage Weil about 11 years ago

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 <>
Reviewed-by: Dan Mick <>

Revision cd194ef3 (diff)
Added by Sage Weil about 11 years ago

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 <>
Reviewed-by: Dan Mick <>
(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.

#3 Updated by Sage Weil about 11 years ago

  • Status changed from New to Fix Under Review

see wip-3731

#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.

Also available in: Atom PDF