Attempting to enable mirroring on an an image within a namespace bails
out without any useful msg.
$ rbd mirror image enable mi_pool/ns_0/big snapshot
2021-11-17T08:33:21.321+0000
7f4b36f9c2c0 -1 librbd::api::Mirror:
image_enable: cannot enable mirroring in the current pool mirroring mode
Fixes: https://tracker.ceph.com/issues/58895
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
return 0;
}
+template <typename I>
+const char *pool_or_namespace(I *ictx) {
+ if (!ictx->md_ctx.get_namespace().empty()) {
+ return "namespace";
+ } else {
+ return "pool";
+ }
+}
+
struct C_ImageGetInfo : public Context {
mirror_image_info_t *mirror_image_info;
mirror_image_mode_t *mirror_image_mode;
return r;
}
+ if (mirror_mode == cls::rbd::MIRROR_MODE_DISABLED) {
+ lderr(cct) << "cannot enable mirroring: mirroring is not enabled on a "
+ << pool_or_namespace(ictx) << dendl;
+ return -EINVAL;
+ }
+
if (mirror_mode != cls::rbd::MIRROR_MODE_IMAGE) {
- lderr(cct) << "cannot enable mirroring in the current pool mirroring mode"
- << dendl;
+ lderr(cct) << "cannot enable mirroring: " << pool_or_namespace(ictx)
+ << " is not in image mirror mode" << dendl;
return -EINVAL;
}