]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cls/rbd: sanitize the mirror image status peer address after reading from disk 31833/head
authorJason Dillaman <dillaman@redhat.com>
Sat, 23 Nov 2019 15:36:31 +0000 (10:36 -0500)
committerJason Dillaman <dillaman@redhat.com>
Sat, 23 Nov 2019 15:36:51 +0000 (10:36 -0500)
RADOS upgrade tests were failing when OSDs were partially upgraded since the
entity_addr_t::type overload wasn't being recovered when re-read. Now we will
always sanitize the on-disk entity address after reading it to avoid such
issues of on-disk encoding/decoding.

Fixes: https://tracker.ceph.com/issues/42891
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit 1542d12e1b893166a5bc7b7a4c9a4474078a98be)

Conflicts:
src/cls/rbd/cls_rbd(_types).[h|cc]: the MirrorImageStatusOnDisk struct has moved

src/cls/rbd/cls_rbd.cc

index 22a261baac270dc978c9bb94454481d3ac32b627..09f2e790126e3a1e1d0491286d0b4b4903fb02d5 100644 (file)
@@ -4814,7 +4814,9 @@ struct MirrorImageStatusOnDisk : cls::rbd::MirrorImageStatus {
 
   void encode_meta(bufferlist &bl, uint64_t features) const {
     ENCODE_START(1, 1, bl);
-    encode(origin, bl, features);
+    auto sanitized_origin = origin;
+    sanitize_entity_inst(&sanitized_origin);
+    encode(sanitized_origin, bl, features);
     ENCODE_FINISH(bl);
   }
 
@@ -4826,6 +4828,7 @@ struct MirrorImageStatusOnDisk : cls::rbd::MirrorImageStatus {
   void decode_meta(bufferlist::const_iterator &it) {
     DECODE_START(1, it);
     decode(origin, it);
+    sanitize_entity_inst(&origin);
     DECODE_FINISH(it);
   }
 
@@ -4843,7 +4846,6 @@ int image_status_set(cls_method_context_t hctx, const string &global_image_id,
   ondisk_status.last_update = ceph_clock_now();
 
   int r = cls_get_request_origin(hctx, &ondisk_status.origin);
-  sanitize_entity_inst(&ondisk_status.origin);
   ceph_assert(r == 0);
 
   bufferlist bl;