const std::string CONFIG_KEY_URI_PREFIX{"config://"};
+uint32_t quiesce_mode_to_snap_create_flags(const std::string& mode) {
+ if (mode == "required") {
+ return 0;
+ } else if (mode == "ignore-error") {
+ return RBD_SNAP_CREATE_IGNORE_QUIESCE_ERROR;
+ } else if (mode == "skip") {
+ return RBD_SNAP_CREATE_SKIP_QUIESCE;
+ } else {
+ ceph_abort_msg("invalid rbd_default_snapshot_quiesce_mode");
+ }
+}
+
} // anonymous namespace
const std::string group_header_name(const std::string &group_id)
auto mode = ictx->config.get_val<std::string>(
"rbd_default_snapshot_quiesce_mode");
- if (mode == "required") {
- return 0;
- } else if (mode == "ignore-error") {
- return RBD_SNAP_CREATE_IGNORE_QUIESCE_ERROR;
- } else if (mode == "skip") {
- return RBD_SNAP_CREATE_SKIP_QUIESCE;
- } else {
- ceph_abort_msg("invalid rbd_default_snapshot_quiesce_mode");
- }
+ return quiesce_mode_to_snap_create_flags(mode);
+}
+
+uint32_t get_default_snap_create_flags(librados::IoCtx& group_ioctx) {
+ auto cct = reinterpret_cast<CephContext*>(group_ioctx.cct());
+ auto mode = cct->_conf.get_val<std::string>(
+ "rbd_default_snapshot_quiesce_mode");
+
+ return quiesce_mode_to_snap_create_flags(mode);
}
SnapContext get_snap_context(
uint64_t *internal_flags);
uint32_t get_default_snap_create_flags(ImageCtx *ictx);
+uint32_t get_default_snap_create_flags(librados::IoCtx& group_ioctx);
SnapContext get_snap_context(
const std::optional<
tracepoint(librbd, group_snap_create_enter,
group_ioctx.get_pool_name().c_str(),
group_ioctx.get_id(), group_name, snap_name);
+ auto flags = librbd::util::get_default_snap_create_flags(group_ioctx);
int r = librbd::api::Group<>::snap_create(group_ioctx, group_name,
- snap_name, 0);
+ snap_name, flags);
tracepoint(librbd, group_snap_create_exit, r);
return r;
}
group_ioctx.get_pool_name().c_str(),
group_ioctx.get_id(), group_name, snap_name);
+ auto flags = librbd::util::get_default_snap_create_flags(group_ioctx);
int r = librbd::api::Group<>::snap_create(group_ioctx, group_name,
- snap_name, 0);
+ snap_name, flags);
tracepoint(librbd, group_snap_create_exit, r);
return r;