}
void finish(int r) override {
- if (r < 0 && r != -ENOENT) {
+ if (r < 0) {
on_finish->complete(r);
return;
}
}
if (m_group_id.empty()) {
+ m_enoent_is_group_dne = true;
get_id();
} else {
get_info();
}
if (r == -ENOENT) {
- ldout(cct, 20) << "mirroring is disabled" << dendl;
- finish(r);
+ ldout(cct, 20) << "mirroring is disabled, enoent_is_group_dne="
+ << m_enoent_is_group_dne << dendl;
+ finish(m_enoent_is_group_dne ? 0 : -ENOENT);
return;
}
if (r < 0) {
Context *m_on_finish;
bufferlist m_outbl;
+ bool m_enoent_is_group_dne = false;
void get_id();
void handle_get_id(int r);
def group_validator(group: rbd.Group) -> None:
- try:
- info = group.mirror_group_get_info()
- except rbd.ObjectNotFound:
- raise rbd.InvalidArgument("Error getting mirror group info")
- if (info['state'] != rbd.RBD_MIRROR_GROUP_ENABLED
- or info['image_mode'] != rbd.RBD_MIRROR_IMAGE_MODE_SNAPSHOT):
- raise rbd.InvalidArgument("Group not enabled for snapshot mirroring")
+ info = group.mirror_group_get_info()
+ if info['state'] != rbd.RBD_MIRROR_GROUP_ENABLED:
+ raise rbd.InvalidArgument("Mirroring is not enabled")
+ if info['image_mode'] != rbd.RBD_MIRROR_IMAGE_MODE_SNAPSHOT:
+ raise rbd.InvalidArgument("Invalid mirror image mode")
class GroupSpec(NamedTuple):
group_name))
except rbd.InvalidArgument:
raise ValueError(
- "group {} not enabled for snapshot mirroring".format(
- group_name))
+ "group {} is not in snapshot mirror mode".format(
+ group_id))
else:
image_name = match.group(3)
try:
mirror_group_info.state = RBD_MIRROR_GROUP_DISABLED;
r = rbd.mirror_group_get_info(io_ctx, group_name.c_str(), &mirror_group_info,
sizeof(mirror_group_info));
- if (r < 0 && r != -ENOENT) {
+ if (r < 0) {
return r;
}
int validate_mirroring_enabled(librados::IoCtx io_ctx,
const std::string group_name) {
librbd::RBD rbd;
- std::string group_id;
- int r = rbd.group_get_id(io_ctx, group_name.c_str(), &group_id);
- if (r < 0) {
- std::cerr << "rbd: failed to get mirror info for group: "
- << cpp_strerror(r) << std::endl;
- return r;
- }
-
librbd::mirror_group_info_t info;
- r = rbd.mirror_group_get_info(io_ctx, group_name.c_str(), &info,
- sizeof(info));
- if (r < 0 && r != -ENOENT) {
+ int r = rbd.mirror_group_get_info(io_ctx, group_name.c_str(), &info,
+ sizeof(info));
+ if (r < 0) {
std::cerr << "rbd: failed to get mirror info for group: "
<< cpp_strerror(r) << std::endl;
return r;
}
- if (r == -ENOENT || info.state != RBD_MIRROR_GROUP_ENABLED) {
+ if (info.state != RBD_MIRROR_GROUP_ENABLED) {
std::cerr << "rbd: mirroring not enabled on the group" << std::endl;
return -EINVAL;
}