]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd/api: disallow adding mirror enabled image to group
authorRamana Raja <rraja@redhat.com>
Thu, 20 Feb 2025 22:21:34 +0000 (17:21 -0500)
committerPrasanna Kumar Kalever <prasanna.kalever@redhat.com>
Thu, 24 Apr 2025 15:56:31 +0000 (21:26 +0530)
Signed-off-by: Ramana Raja <rraja@redhat.com>
src/librbd/api/Group.cc

index 9e6ca5d370050e49483ea8c8ef3c783345b855e8..94b63d98f11c14f0eeeb0a89ad8e9033528ce367 100644 (file)
@@ -545,6 +545,18 @@ int Group<I>::image_add(librados::IoCtx& group_ioctx, const char *group_name,
     return r;
   }
 
+  cls::rbd::MirrorImage mirror_image;
+  r = cls_client::mirror_image_get(&image_ioctx, image_id, &mirror_image);
+  if (r < 0 && r != -ENOENT && r != -ENOTSUP) {
+    lderr(cct) << "failed to retrieve mirroring state of image: " << cpp_strerror(r)
+               << dendl;
+    return r;
+  } else if (r == 0 &&
+             mirror_image.state != cls::rbd::MIRROR_IMAGE_STATE_DISABLED) {
+    lderr(cct) << "cannot add mirror enabled image to group" << dendl;
+    return -EINVAL;
+  }
+
   string image_header_oid = librbd::util::header_name(image_id);
 
   ldout(cct, 20) << "adding image " << image_name