1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-22 17:35:59 +03:00

lvmlockd: improve message for lock-start

Only print this for shared VGs, and include the
time it may take for sanlock.
This commit is contained in:
David Teigland 2016-07-25 10:40:48 -05:00
parent 94141c7797
commit 70bad99894

View File

@ -15,6 +15,11 @@
#include "tools.h" #include "tools.h"
struct vgchange_params {
int lock_start_count;
unsigned int lock_start_sanlock : 1;
};
/* /*
* Increments *count by the number of _new_ monitored devices. * Increments *count by the number of _new_ monitored devices.
*/ */
@ -849,10 +854,12 @@ static int _passes_lock_start_filter(struct cmd_context *cmd,
return 0; return 0;
} }
static int _vgchange_lock_start(struct cmd_context *cmd, struct volume_group *vg) static int _vgchange_lock_start(struct cmd_context *cmd, struct volume_group *vg,
struct vgchange_params *vp)
{ {
const char *start_opt = arg_str_value(cmd, lockopt_ARG, NULL); const char *start_opt = arg_str_value(cmd, lockopt_ARG, NULL);
int auto_opt = 0; int auto_opt = 0;
int r;
if (!is_lockd_type(vg->lock_type)) if (!is_lockd_type(vg->lock_type))
return 1; return 1;
@ -878,7 +885,14 @@ static int _vgchange_lock_start(struct cmd_context *cmd, struct volume_group *vg
} }
do_start: do_start:
return lockd_start_vg(cmd, vg, 0); r = lockd_start_vg(cmd, vg, 0);
if (r)
vp->lock_start_count++;
if (!strcmp(vg->lock_type, "sanlock"))
vp->lock_start_sanlock = 1;
return r;
} }
static int _vgchange_lock_stop(struct cmd_context *cmd, struct volume_group *vg) static int _vgchange_lock_stop(struct cmd_context *cmd, struct volume_group *vg)
@ -888,8 +902,9 @@ static int _vgchange_lock_stop(struct cmd_context *cmd, struct volume_group *vg)
static int vgchange_single(struct cmd_context *cmd, const char *vg_name, static int vgchange_single(struct cmd_context *cmd, const char *vg_name,
struct volume_group *vg, struct volume_group *vg,
struct processing_handle *handle __attribute__((unused))) struct processing_handle *handle)
{ {
struct vgchange_params *vp = (struct vgchange_params *)handle->custom_handle;
int ret = ECMD_PROCESSED; int ret = ECMD_PROCESSED;
unsigned i; unsigned i;
struct lv_list *lvl; struct lv_list *lvl;
@ -1002,7 +1017,7 @@ static int vgchange_single(struct cmd_context *cmd, const char *vg_name,
return_ECMD_FAILED; return_ECMD_FAILED;
if (arg_is_set(cmd, lockstart_ARG)) { if (arg_is_set(cmd, lockstart_ARG)) {
if (!_vgchange_lock_start(cmd, vg)) if (!_vgchange_lock_start(cmd, vg, vp))
return_ECMD_FAILED; return_ECMD_FAILED;
} else if (arg_is_set(cmd, lockstop_ARG)) { } else if (arg_is_set(cmd, lockstop_ARG)) {
if (!_vgchange_lock_stop(cmd, vg)) if (!_vgchange_lock_stop(cmd, vg))
@ -1092,6 +1107,8 @@ static int _lockd_vgchange(struct cmd_context *cmd, int argc, char **argv)
int vgchange(struct cmd_context *cmd, int argc, char **argv) int vgchange(struct cmd_context *cmd, int argc, char **argv)
{ {
struct processing_handle *handle;
struct vgchange_params vp = { 0 };
uint32_t flags = 0; uint32_t flags = 0;
int ret; int ret;
@ -1216,24 +1233,34 @@ int vgchange(struct cmd_context *cmd, int argc, char **argv)
if (arg_is_set(cmd, lockstart_ARG) || arg_is_set(cmd, lockstop_ARG)) if (arg_is_set(cmd, lockstart_ARG) || arg_is_set(cmd, lockstop_ARG))
flags |= READ_ALLOW_EXPORTED; flags |= READ_ALLOW_EXPORTED;
ret = process_each_vg(cmd, argc, argv, NULL, NULL, flags, 0, NULL, &vgchange_single); if (!(handle = init_processing_handle(cmd, NULL))) {
log_error("Failed to initialize processing handle.");
return ECMD_FAILED;
}
handle->custom_handle = &vp;
ret = process_each_vg(cmd, argc, argv, NULL, NULL, flags, 0, handle, &vgchange_single);
/* Wait for lock-start ops that were initiated in vgchange_lockstart. */ /* Wait for lock-start ops that were initiated in vgchange_lockstart. */
if (arg_is_set(cmd, lockstart_ARG)) { if (arg_is_set(cmd, lockstart_ARG) && vp.lock_start_count) {
const char *start_opt = arg_str_value(cmd, lockopt_ARG, NULL); const char *start_opt = arg_str_value(cmd, lockopt_ARG, NULL);
if (!lockd_gl(cmd, "un", 0)) if (!lockd_gl(cmd, "un", 0))
stack; stack;
if (!start_opt || !strcmp(start_opt, "auto")) { if (!start_opt || !strcmp(start_opt, "auto")) {
if (vp.lock_start_sanlock)
log_print_unless_silent("Starting locking. Waiting for sanlock may take 20 sec to 3 min...");
else
log_print_unless_silent("Starting locking. Waiting until locks are ready..."); log_print_unless_silent("Starting locking. Waiting until locks are ready...");
lockd_start_wait(cmd); lockd_start_wait(cmd);
} else if (!strcmp(start_opt, "nowait") || !strcmp(start_opt, "autonowait")) { } else if (!strcmp(start_opt, "nowait") || !strcmp(start_opt, "autonowait")) {
log_print_unless_silent("Starting locking. VG can only be read until locks are ready."); log_print_unless_silent("Starting locking. VG can only be read until locks are ready.");
} }
} }
destroy_processing_handle(cmd, handle);
return ret; return ret;
} }