Skip to content

Commit d818d46

Browse files
authored
Merge pull request ceph#62464 from idryomov/wip-70632
librbd: respect rbd_default_snapshot_quiesce_mode in group_snap_create() Reviewed-by: Prasanna Kumar Kalever <[email protected]>
2 parents a53e858 + f33bb08 commit d818d46

File tree

4 files changed

+29
-15
lines changed

4 files changed

+29
-15
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/api/Group.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -922,8 +922,6 @@ int Group<I>::snap_create(librados::IoCtx& group_ioctx,
922922
if (r < 0) {
923923
return r;
924924
}
925-
internal_flags &= ~(SNAP_CREATE_FLAG_SKIP_NOTIFY_QUIESCE |
926-
SNAP_CREATE_FLAG_IGNORE_NOTIFY_QUIESCE_ERROR);
927925

928926
r = cls_client::dir_get_id(&group_ioctx, RBD_GROUP_DIRECTORY, group_name,
929927
&group_id);
@@ -1012,10 +1010,11 @@ int Group<I>::snap_create(librados::IoCtx& group_ioctx,
10121010
goto remove_record;
10131011
}
10141012

1015-
if ((flags & RBD_SNAP_CREATE_SKIP_QUIESCE) == 0) {
1013+
if ((internal_flags & SNAP_CREATE_FLAG_SKIP_NOTIFY_QUIESCE) == 0) {
10161014
ldout(cct, 20) << "Sending quiesce notification" << dendl;
10171015
ret_code = notify_quiesce(ictxs, prog_ctx, &quiesce_requests);
1018-
if (ret_code != 0 && (flags & RBD_SNAP_CREATE_IGNORE_QUIESCE_ERROR) == 0) {
1016+
if (ret_code != 0 &&
1017+
(internal_flags & SNAP_CREATE_FLAG_IGNORE_NOTIFY_QUIESCE_ERROR) == 0) {
10191018
goto remove_record;
10201019
}
10211020
}

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)