diff options
author | Samuel Just <samuel.just@dreamhost.com> | 2011-08-31 14:10:02 -0700 |
---|---|---|
committer | Samuel Just <samuel.just@dreamhost.com> | 2011-08-31 14:48:07 -0700 |
commit | 00e0b77e8b4efdfaf181e010be25cec777005e73 (patch) | |
tree | 61f480c6acc893be6373630971858623e9b42c91 /src/messages | |
parent | 39fa9d8deb139111a1feabacc5d4e5b224b413c9 (diff) | |
download | ceph-00e0b77e8b4efdfaf181e010be25cec777005e73.tar.gz |
OSD: Fix encoding versions affected by hobject switch
PG log did not previously store the object locator. To get the hash for
the hobject, scan the collection for the object during read_log if we
encouter an old style log entry.
Signed-off-by: Samuel Just <samuel.just@dreamhost.com>
Diffstat (limited to 'src/messages')
-rw-r--r-- | src/messages/MOSDSubOp.h | 14 | ||||
-rw-r--r-- | src/messages/MOSDSubOpReply.h | 5 |
2 files changed, 16 insertions, 3 deletions
diff --git a/src/messages/MOSDSubOp.h b/src/messages/MOSDSubOp.h index 597278c0c09..b5612574f62 100644 --- a/src/messages/MOSDSubOp.h +++ b/src/messages/MOSDSubOp.h @@ -69,10 +69,14 @@ public: virtual void decode_payload(CephContext *cct) { bufferlist::iterator p = payload.begin(); + sobject_t soid; ::decode(map_epoch, p); ::decode(reqid, p); ::decode(pgid, p); - ::decode(poid, p); + if (header.version < 4) + ::decode(soid, p); + else + ::decode(poid, p); __u32 num_ops; ::decode(num_ops, p); @@ -104,12 +108,16 @@ public: ::decode(first, p); ::decode(complete, p); } - if (header.version >= 3) + if (header.version == 3) { ::decode(oloc, p); + poid.oid = soid.oid; + poid.snap = soid.snap; + poid.hash = object_info_t::legacy_object_locator_to_ps(poid.oid, oloc); + } } virtual void encode_payload(CephContext *cct) { - header.version = 3; + header.version = 4; ::encode(map_epoch, payload); ::encode(reqid, payload); diff --git a/src/messages/MOSDSubOpReply.h b/src/messages/MOSDSubOpReply.h index 2603cdd1392..d7f115c013d 100644 --- a/src/messages/MOSDSubOpReply.h +++ b/src/messages/MOSDSubOpReply.h @@ -52,6 +52,9 @@ public: virtual void decode_payload(CephContext *cct) { bufferlist::iterator p = payload.begin(); + __u8 version; + ::decode(version, payload); + assert(version == 1); ::decode(map_epoch, p); ::decode(reqid, p); ::decode(pgid, p); @@ -70,6 +73,8 @@ public: ::decode(attrset, p); } virtual void encode_payload(CephContext *cct) { + __u8 version = 1; + ::encode(version, payload); ::encode(map_epoch, payload); ::encode(reqid, payload); ::encode(pgid, payload); |