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
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);
}
void decode_meta(bufferlist::const_iterator &it) {
DECODE_START(1, it);
decode(origin, it);
+ sanitize_entity_inst(&origin);
DECODE_FINISH(it);
}
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;