From 57379c81a26c40db25c5dc32cc89e1745ccefd9c Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Sat, 23 Nov 2019 10:36:31 -0500 Subject: [PATCH] cls/rbd: sanitize the mirror image status peer address after reading from disk 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 (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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cls/rbd/cls_rbd.cc b/src/cls/rbd/cls_rbd.cc index 22a261baac270..09f2e790126e3 100644 --- a/src/cls/rbd/cls_rbd.cc +++ b/src/cls/rbd/cls_rbd.cc @@ -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; -- 2.39.5