CEPH_RBD_API int rbd_metadata_list(rbd_image_t image, const char *start, uint64_t max,
char *keys, size_t *key_len, char *values, size_t *vals_len);
-
+// RBD image mirroring support functions
CEPH_RBD_API int rbd_mirror_image_enable(rbd_image_t image);
CEPH_RBD_API int rbd_mirror_image_disable(rbd_image_t image, bool force);
+CEPH_RBD_API int rbd_mirror_image_promote(rbd_image_t image, bool force);
+CEPH_RBD_API int rbd_mirror_image_demote(rbd_image_t image);
+CEPH_RBD_API int rbd_mirror_image_resync(rbd_image_t image);
CEPH_RBD_API int rbd_mirror_image_get(rbd_image_t image,
rbd_mirror_image_t *mirror_image);
*/
int metadata_list(const std::string &start, uint64_t max, std::map<std::string, ceph::bufferlist> *pairs);
+ // RBD image mirroring support functions
int mirror_image_enable();
int mirror_image_disable(bool force);
+ int mirror_image_promote(bool force);
+ int mirror_image_demote();
+ int mirror_image_resync();
int mirror_image_get(mirror_image_t *mirror_image);
private:
return 0;
}
+ int mirror_image_promote(ImageCtx *ictx, bool force) {
+ CephContext *cct = ictx->cct;
+ ldout(cct, 20) << __func__ << ": ictx=" << ictx << ", "
+ << "force=" << force << dendl;
+ return -EOPNOTSUPP;
+ }
+
+ int mirror_image_demote(ImageCtx *ictx) {
+ CephContext *cct = ictx->cct;
+ ldout(cct, 20) << __func__ << ": ictx=" << ictx << dendl;
+ return -EOPNOTSUPP;
+ }
+
+ int mirror_image_resync(ImageCtx *ictx) {
+ CephContext *cct = ictx->cct;
+ ldout(cct, 20) << __func__ << ": ictx=" << ictx << dendl;
+ return -EOPNOTSUPP;
+ }
+
int mirror_image_get(ImageCtx *ictx, mirror_image_t *mirror_image) {
CephContext *cct = ictx->cct;
ldout(cct, 20) << "mirror_image_get " << ictx << dendl;
int mirror_image_enable(ImageCtx *ictx);
int mirror_image_disable(ImageCtx *ictx, bool force);
+ int mirror_image_promote(ImageCtx *ictx, bool force);
+ int mirror_image_demote(ImageCtx *ictx);
+ int mirror_image_resync(ImageCtx *ictx);
int mirror_image_get(ImageCtx *ictx, mirror_image_t *mirror_image);
}
return librbd::mirror_image_disable(ictx, force);
}
+ int Image::mirror_image_promote(bool force) {
+ ImageCtx *ictx = (ImageCtx *)ctx;
+ return librbd::mirror_image_promote(ictx, force);
+ }
+
+ int Image::mirror_image_demote() {
+ ImageCtx *ictx = (ImageCtx *)ctx;
+ return librbd::mirror_image_demote(ictx);
+ }
+
+ int Image::mirror_image_resync()
+ {
+ ImageCtx *ictx = (ImageCtx *)ctx;
+ return librbd::mirror_image_resync(ictx);
+ }
+
int Image::mirror_image_get(mirror_image_t *mirror_image) {
ImageCtx *ictx = (ImageCtx *)ctx;
return librbd::mirror_image_get(ictx, mirror_image);
return librbd::mirror_image_disable(ictx, force);
}
+extern "C" int rbd_mirror_image_promote(rbd_image_t image, bool force)
+{
+ librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ return librbd::mirror_image_promote(ictx, force);
+}
+
+extern "C" int rbd_mirror_image_demote(rbd_image_t image)
+{
+ librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ return librbd::mirror_image_demote(ictx);
+}
+
+extern "C" int rbd_mirror_image_resync(rbd_image_t image)
+{
+ librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+ return librbd::mirror_image_resync(ictx);
+}
+
extern "C" int rbd_mirror_image_get(rbd_image_t image,
rbd_mirror_image_t *mirror_image)
{
mirror_image->global_id = strdup(cpp_mirror_image.global_id.c_str());
mirror_image->state = cpp_mirror_image.state;
-
return 0;
}