m_use_p_features = false;
}
- std::string default_clone_format = m_config.get_val<std::string>(
- "rbd_default_clone_format");
- if (default_clone_format == "1") {
- m_clone_format = 1;
- } else if (default_clone_format == "auto") {
- librados::Rados rados(m_ioctx);
- int8_t min_compat_client;
- int8_t require_min_compat_client;
- int r = rados.get_min_compatible_client(&min_compat_client,
- &require_min_compat_client);
- if (r < 0) {
- complete(r);
- return;
- }
- if (std::max(min_compat_client, require_min_compat_client) <
- CEPH_RELEASE_MIMIC) {
+ if (m_opts.get(RBD_IMAGE_OPTION_CLONE_FORMAT, &m_clone_format) < 0) {
+ std::string default_clone_format = m_config.get_val<std::string>(
+ "rbd_default_clone_format");
+ if (default_clone_format == "1") {
m_clone_format = 1;
+ } else if (default_clone_format == "auto") {
+ librados::Rados rados(m_ioctx);
+ int8_t min_compat_client;
+ int8_t require_min_compat_client;
+ int r = rados.get_min_compatible_client(&min_compat_client,
+ &require_min_compat_client);
+ if (r < 0) {
+ complete(r);
+ return;
+ }
+ if (std::max(min_compat_client, require_min_compat_client) <
+ CEPH_RELEASE_MIMIC) {
+ m_clone_format = 1;
+ }
}
}
{RBD_IMAGE_OPTION_FEATURES_CLEAR, UINT64},
{RBD_IMAGE_OPTION_DATA_POOL, STR},
{RBD_IMAGE_OPTION_FLATTEN, UINT64},
+ {RBD_IMAGE_OPTION_CLONE_FORMAT, UINT64},
};
std::string image_option_name(int optname) {
return "data_pool";
case RBD_IMAGE_OPTION_FLATTEN:
return "flatten";
+ case RBD_IMAGE_OPTION_CLONE_FORMAT:
+ return "clone_format";
default:
return "unknown (" + stringify(optname) + ")";
}
}
CephContext *cct = (CephContext *)io_ctx.cct();
- uint64_t flatten;
- if (opts.get(RBD_IMAGE_OPTION_FLATTEN, &flatten) == 0) {
+ uint64_t option;
+ if (opts.get(RBD_IMAGE_OPTION_FLATTEN, &option) == 0) {
lderr(cct) << "create does not support 'flatten' image option" << dendl;
return -EINVAL;
}
+ if (opts.get(RBD_IMAGE_OPTION_CLONE_FORMAT, &option) == 0) {
+ lderr(cct) << "create does not support 'clone_format' image option"
+ << dendl;
+ return -EINVAL;
+ }
ldout(cct, 10) << __func__ << " name=" << image_name << ", "
<< "id= " << id << ", "
ImageOptions& opts, ProgressContext &prog_ctx, size_t sparse_size)
{
CephContext *cct = (CephContext *)dest_md_ctx.cct();
- uint64_t flatten;
- if (opts.get(RBD_IMAGE_OPTION_FLATTEN, &flatten) == 0) {
+ uint64_t option;
+ if (opts.get(RBD_IMAGE_OPTION_FLATTEN, &option) == 0) {
lderr(cct) << "copy does not support 'flatten' image option" << dendl;
return -EINVAL;
}
+ if (opts.get(RBD_IMAGE_OPTION_CLONE_FORMAT, &option) == 0) {
+ lderr(cct) << "copy does not support 'clone_format' image option"
+ << dendl;
+ return -EINVAL;
+ }
ldout(cct, 20) << "copy " << src->name
<< (src->snap_name.length() ? "@" + src->snap_name : "")