mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-02 01:18:26 +03:00
polldaemon: separate daemon_parms initialisation
This commit is contained in:
parent
3929b00466
commit
7abb7894e4
@ -276,50 +276,26 @@ static void _poll_for_all_vgs(struct cmd_context *cmd,
|
|||||||
* if it was requested.
|
* if it was requested.
|
||||||
*/
|
*/
|
||||||
static int _poll_daemon(struct cmd_context *cmd, const char *name,
|
static int _poll_daemon(struct cmd_context *cmd, const char *name,
|
||||||
const char *uuid, unsigned background, uint64_t lv_type,
|
const char *uuid, struct daemon_parms *parms)
|
||||||
struct poll_functions *poll_fns,
|
|
||||||
const char *progress_title)
|
|
||||||
{
|
{
|
||||||
struct processing_handle *handle = NULL;
|
struct processing_handle *handle = NULL;
|
||||||
struct daemon_parms parms;
|
|
||||||
int daemon_mode = 0;
|
int daemon_mode = 0;
|
||||||
int ret = ECMD_PROCESSED;
|
int ret = ECMD_PROCESSED;
|
||||||
sign_t interval_sign;
|
|
||||||
|
|
||||||
parms.aborting = arg_is_set(cmd, abort_ARG);
|
if (!parms->interval) {
|
||||||
parms.background = background;
|
parms->progress_display = 0;
|
||||||
interval_sign = arg_sign_value(cmd, interval_ARG, SIGN_NONE);
|
|
||||||
if (interval_sign == SIGN_MINUS) {
|
|
||||||
log_error("Argument to --interval cannot be negative");
|
|
||||||
return EINVALID_CMD_LINE;
|
|
||||||
}
|
|
||||||
parms.interval = arg_uint_value(cmd, interval_ARG,
|
|
||||||
find_config_tree_int(cmd, activation_polling_interval_CFG, NULL));
|
|
||||||
parms.wait_before_testing = (interval_sign == SIGN_PLUS);
|
|
||||||
parms.progress_display = 1;
|
|
||||||
parms.progress_title = progress_title;
|
|
||||||
parms.lv_type = lv_type;
|
|
||||||
parms.poll_fns = poll_fns;
|
|
||||||
|
|
||||||
if (parms.interval && !parms.aborting)
|
|
||||||
log_verbose("Checking progress %s waiting every %u seconds",
|
|
||||||
(parms.wait_before_testing ? "after" : "before"),
|
|
||||||
parms.interval);
|
|
||||||
|
|
||||||
if (!parms.interval) {
|
|
||||||
parms.progress_display = 0;
|
|
||||||
|
|
||||||
/* FIXME Disabled multiple-copy wait_event */
|
/* FIXME Disabled multiple-copy wait_event */
|
||||||
if (!name)
|
if (!name)
|
||||||
parms.interval = find_config_tree_int(cmd, activation_polling_interval_CFG, NULL);
|
parms->interval = find_config_tree_int(cmd, activation_polling_interval_CFG, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parms.background) {
|
if (parms->background) {
|
||||||
daemon_mode = become_daemon(cmd, 0);
|
daemon_mode = become_daemon(cmd, 0);
|
||||||
if (daemon_mode == 0)
|
if (daemon_mode == 0)
|
||||||
return ECMD_PROCESSED; /* Parent */
|
return ECMD_PROCESSED; /* Parent */
|
||||||
else if (daemon_mode == 1)
|
else if (daemon_mode == 1)
|
||||||
parms.progress_display = 0; /* Child */
|
parms->progress_display = 0; /* Child */
|
||||||
/* FIXME Use wait_event (i.e. interval = 0) and */
|
/* FIXME Use wait_event (i.e. interval = 0) and */
|
||||||
/* fork one daemon per copy? */
|
/* fork one daemon per copy? */
|
||||||
}
|
}
|
||||||
@ -328,7 +304,7 @@ static int _poll_daemon(struct cmd_context *cmd, const char *name,
|
|||||||
* Process one specific task or all incomplete tasks?
|
* Process one specific task or all incomplete tasks?
|
||||||
*/
|
*/
|
||||||
if (name) {
|
if (name) {
|
||||||
if (!_wait_for_single_lv(cmd, name, uuid, &parms)) {
|
if (!_wait_for_single_lv(cmd, name, uuid, parms)) {
|
||||||
stack;
|
stack;
|
||||||
ret = ECMD_FAILED;
|
ret = ECMD_FAILED;
|
||||||
}
|
}
|
||||||
@ -337,12 +313,12 @@ static int _poll_daemon(struct cmd_context *cmd, const char *name,
|
|||||||
log_error("Failed to initialize processing handle.");
|
log_error("Failed to initialize processing handle.");
|
||||||
ret = ECMD_FAILED;
|
ret = ECMD_FAILED;
|
||||||
} else {
|
} else {
|
||||||
handle->custom_handle = &parms;
|
handle->custom_handle = parms;
|
||||||
_poll_for_all_vgs(cmd, handle);
|
_poll_for_all_vgs(cmd, handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parms.background && daemon_mode == 1) {
|
if (parms->background && daemon_mode == 1) {
|
||||||
destroy_processing_handle(cmd, handle);
|
destroy_processing_handle(cmd, handle);
|
||||||
/*
|
/*
|
||||||
* child was successfully forked:
|
* child was successfully forked:
|
||||||
@ -358,10 +334,44 @@ static int _poll_daemon(struct cmd_context *cmd, const char *name,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _daemon_parms_init(struct cmd_context *cmd, struct daemon_parms *parms,
|
||||||
|
unsigned background, struct poll_functions *poll_fns,
|
||||||
|
const char *progress_title, uint64_t lv_type)
|
||||||
|
{
|
||||||
|
sign_t interval_sign;
|
||||||
|
|
||||||
|
parms->aborting = arg_is_set(cmd, abort_ARG);
|
||||||
|
parms->background = background;
|
||||||
|
interval_sign = arg_sign_value(cmd, interval_ARG, SIGN_NONE);
|
||||||
|
if (interval_sign == SIGN_MINUS) {
|
||||||
|
log_error("Argument to --interval cannot be negative.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
parms->interval = arg_uint_value(cmd, interval_ARG,
|
||||||
|
find_config_tree_int(cmd, activation_polling_interval_CFG, NULL));
|
||||||
|
parms->wait_before_testing = (interval_sign == SIGN_PLUS);
|
||||||
|
parms->progress_display = 1;
|
||||||
|
parms->progress_title = progress_title;
|
||||||
|
parms->lv_type = lv_type;
|
||||||
|
parms->poll_fns = poll_fns;
|
||||||
|
|
||||||
|
if (parms->interval && !parms->aborting)
|
||||||
|
log_verbose("Checking progress %s waiting every %u seconds.",
|
||||||
|
(parms->wait_before_testing ? "after" : "before"),
|
||||||
|
parms->interval);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int poll_daemon(struct cmd_context *cmd, const char *name, const char *uuid,
|
int poll_daemon(struct cmd_context *cmd, const char *name, const char *uuid,
|
||||||
unsigned background,
|
unsigned background,
|
||||||
uint64_t lv_type, struct poll_functions *poll_fns,
|
uint64_t lv_type, struct poll_functions *poll_fns,
|
||||||
const char *progress_title)
|
const char *progress_title)
|
||||||
{
|
{
|
||||||
return _poll_daemon(cmd, name, uuid, background, lv_type, poll_fns, progress_title);
|
struct daemon_parms parms;
|
||||||
|
|
||||||
|
if (!_daemon_parms_init(cmd, &parms, background, poll_fns, progress_title, lv_type))
|
||||||
|
return_EINVALID_CMD_LINE;
|
||||||
|
|
||||||
|
return _poll_daemon(cmd, name, uuid, &parms);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user