Skip to content

Commit b91ab48

Browse files
committed
librbd: respect rbd_default_snapshot_quiesce_mode in group_snap_create()
Make group_snap_create() behave the same as snap_create() and mirror_image_create_snapshot(): APIs that don't take RBD_SNAP_CREATE_ flags explicitly should respect rbd_default_snapshot_quiesce_mode option. Fixes: https://tracker.ceph.com/issues/70632 Signed-off-by: Ilya Dryomov <[email protected]>
1 parent 538a576 commit b91ab48

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

src/librbd/Utils.cc

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,18 @@ namespace {
2929

3030
const std::string CONFIG_KEY_URI_PREFIX{"config://"};
3131

32+
uint32_t quiesce_mode_to_snap_create_flags(const std::string& mode) {
33+
if (mode == "required") {
34+
return 0;
35+
} else if (mode == "ignore-error") {
36+
return RBD_SNAP_CREATE_IGNORE_QUIESCE_ERROR;
37+
} else if (mode == "skip") {
38+
return RBD_SNAP_CREATE_SKIP_QUIESCE;
39+
} else {
40+
ceph_abort_msg("invalid rbd_default_snapshot_quiesce_mode");
41+
}
42+
}
43+
3244
} // anonymous namespace
3345

3446
const std::string group_header_name(const std::string &group_id)
@@ -181,15 +193,15 @@ uint32_t get_default_snap_create_flags(ImageCtx *ictx) {
181193
auto mode = ictx->config.get_val<std::string>(
182194
"rbd_default_snapshot_quiesce_mode");
183195

184-
if (mode == "required") {
185-
return 0;
186-
} else if (mode == "ignore-error") {
187-
return RBD_SNAP_CREATE_IGNORE_QUIESCE_ERROR;
188-
} else if (mode == "skip") {
189-
return RBD_SNAP_CREATE_SKIP_QUIESCE;
190-
} else {
191-
ceph_abort_msg("invalid rbd_default_snapshot_quiesce_mode");
192-
}
196+
return quiesce_mode_to_snap_create_flags(mode);
197+
}
198+
199+
uint32_t get_default_snap_create_flags(librados::IoCtx& group_ioctx) {
200+
auto cct = reinterpret_cast<CephContext*>(group_ioctx.cct());
201+
auto mode = cct->_conf.get_val<std::string>(
202+
"rbd_default_snapshot_quiesce_mode");
203+
204+
return quiesce_mode_to_snap_create_flags(mode);
193205
}
194206

195207
SnapContext get_snap_context(

src/librbd/Utils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ int snap_create_flags_api_to_internal(CephContext *cct, uint32_t api_flags,
268268
uint64_t *internal_flags);
269269

270270
uint32_t get_default_snap_create_flags(ImageCtx *ictx);
271+
uint32_t get_default_snap_create_flags(librados::IoCtx& group_ioctx);
271272

272273
SnapContext get_snap_context(
273274
const std::optional<

src/librbd/librbd.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,8 +1425,9 @@ namespace librbd {
14251425
tracepoint(librbd, group_snap_create_enter,
14261426
group_ioctx.get_pool_name().c_str(),
14271427
group_ioctx.get_id(), group_name, snap_name);
1428+
auto flags = librbd::util::get_default_snap_create_flags(group_ioctx);
14281429
int r = librbd::api::Group<>::snap_create(group_ioctx, group_name,
1429-
snap_name, 0);
1430+
snap_name, flags);
14301431
tracepoint(librbd, group_snap_create_exit, r);
14311432
return r;
14321433
}
@@ -7304,8 +7305,9 @@ extern "C" int rbd_group_snap_create(rados_ioctx_t group_p,
73047305
group_ioctx.get_pool_name().c_str(),
73057306
group_ioctx.get_id(), group_name, snap_name);
73067307

7308+
auto flags = librbd::util::get_default_snap_create_flags(group_ioctx);
73077309
int r = librbd::api::Group<>::snap_create(group_ioctx, group_name,
7308-
snap_name, 0);
7310+
snap_name, flags);
73097311
tracepoint(librbd, group_snap_create_exit, r);
73107312

73117313
return r;

0 commit comments

Comments
 (0)