From: Ramana Raja Date: Sun, 2 Feb 2025 17:28:52 +0000 (-0500) Subject: librbd: disallow add/remove image to/from mirror enabled group X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1b8a28dc6b4eba084740d1dd67d2325dd5995065;p=ceph.git librbd: disallow add/remove image to/from mirror enabled group Do not allow adding/removing images to/from a group that is configured for mirroring. Signed-off-by: Ramana Raja --- diff --git a/src/librbd/api/Group.cc b/src/librbd/api/Group.cc index ac630b823d1e6..6ba03c3aee650 100644 --- a/src/librbd/api/Group.cc +++ b/src/librbd/api/Group.cc @@ -525,6 +525,17 @@ int Group::image_add(librados::IoCtx& group_ioctx, const char *group_name, } string group_header_oid = librbd::util::group_header_name(group_id); + cls::rbd::MirrorGroup mirror_info; + r = cls_client::mirror_group_get(&group_ioctx, group_id, &mirror_info); + if (r < 0 && r != -ENOENT && r != -ENOTSUP) { + lderr(cct) << "error getting mirror info of group: " + << cpp_strerror(r) << dendl; + return r; + } else if (r == 0 && + mirror_info.state != cls::rbd::MIRROR_GROUP_STATE_DISABLED) { + lderr(cct) << "cannot add image to mirror enabled group" << dendl; + return -EINVAL; + } ldout(cct, 20) << "adding image to group name " << group_name << " group id " << group_header_oid << dendl; @@ -613,6 +624,19 @@ int Group::image_remove(librados::IoCtx& group_ioctx, const char *group_name, return r; } + cls::rbd::MirrorGroup mirror_info; + r = cls_client::mirror_group_get(&group_ioctx, group_id, &mirror_info); + if (r < 0 && r != -ENOENT && r != -ENOTSUP) { + lderr(cct) << "error getting mirror info of group: " + << cpp_strerror(r) << dendl; + return r; + } else if (r == 0 && + mirror_info.state != cls::rbd::MIRROR_GROUP_STATE_DISABLED) { + lderr(cct) << "cannot remove image from mirror enabled group" + << dendl; + return -EINVAL; + } + ldout(cct, 20) << "removing image from group name " << group_name << " group id " << group_id << dendl;