cpp_strerror(r).c_str());
return r;
}
+
+ // make sure this was not a race for disabling
+ if (mirror_image.state == cls::rbd::MIRROR_IMAGE_STATE_DISABLING) {
+ CLS_ERR("image '%s' is already disabled", image_id.c_str());
+ return r;
+ }
} else if (r < 0) {
CLS_ERR("error reading mirrored image '%s': '%s'", image_id.c_str(),
cpp_strerror(r).c_str());
cls::rbd::MirrorImage image3("uuid3", cls::rbd::MIRROR_IMAGE_STATE_ENABLED);
ASSERT_EQ(0, mirror_image_set(&ioctx, "image_id1", image1));
+ ASSERT_EQ(-ENOENT, mirror_image_set(&ioctx, "image_id2", image2));
+ image2.state = cls::rbd::MIRROR_IMAGE_STATE_ENABLED;
+ ASSERT_EQ(0, mirror_image_set(&ioctx, "image_id2", image2));
+ image2.state = cls::rbd::MIRROR_IMAGE_STATE_DISABLING;
ASSERT_EQ(0, mirror_image_set(&ioctx, "image_id2", image2));
ASSERT_EQ(-EINVAL, mirror_image_set(&ioctx, "image_id1", image2));
ASSERT_EQ(-EEXIST, mirror_image_set(&ioctx, "image_id3", image2));