mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
Factor out poll_mirror_progress and introduce progress_t.
This commit is contained in:
parent
1d707156cc
commit
42dd692bea
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.54 -
|
Version 2.02.54 -
|
||||||
=====================================
|
=====================================
|
||||||
|
Factor out poll_mirror_progress and introduce progress_t.
|
||||||
Distinguish between powers of 1000 and powers of 1024 in unit suffixes.
|
Distinguish between powers of 1000 and powers of 1024 in unit suffixes.
|
||||||
Restart lvconverts in vgchange by sharing lv_spawn_background_polling.
|
Restart lvconverts in vgchange by sharing lv_spawn_background_polling.
|
||||||
Generalise polldaemon code by changing mirror-specific variable names.
|
Generalise polldaemon code by changing mirror-specific variable names.
|
||||||
|
@ -63,6 +63,43 @@ static int _become_daemon(struct cmd_context *cmd)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
PROGRESS_CHECK_FAILED = 0,
|
||||||
|
PROGRESS_UNFINISHED = 1,
|
||||||
|
PROGRESS_FINISHED_SEGMENT = 2,
|
||||||
|
PROGRESS_FINISHED_ALL = 3
|
||||||
|
} progress_t;
|
||||||
|
|
||||||
|
progress_t poll_mirror_progress(struct cmd_context *cmd,
|
||||||
|
struct logical_volume *lv, const char *name,
|
||||||
|
struct daemon_parms *parms)
|
||||||
|
{
|
||||||
|
float segment_percent = 0.0, overall_percent = 0.0;
|
||||||
|
uint32_t event_nr = 0;
|
||||||
|
|
||||||
|
if (!lv_mirror_percent(cmd, lv, !parms->interval, &segment_percent,
|
||||||
|
&event_nr)) {
|
||||||
|
log_error("ABORTING: Mirror percentage check failed.");
|
||||||
|
return PROGRESS_CHECK_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
overall_percent = copy_percent(lv);
|
||||||
|
if (parms->progress_display)
|
||||||
|
log_print("%s: %s: %.1f%%", name, parms->progress_title,
|
||||||
|
overall_percent);
|
||||||
|
else
|
||||||
|
log_verbose("%s: %s: %.1f%%", name, parms->progress_title,
|
||||||
|
overall_percent);
|
||||||
|
|
||||||
|
if (segment_percent < 100.0)
|
||||||
|
return PROGRESS_UNFINISHED;
|
||||||
|
|
||||||
|
if (overall_percent >= 100.0)
|
||||||
|
return PROGRESS_FINISHED_ALL;
|
||||||
|
|
||||||
|
return PROGRESS_FINISHED_SEGMENT;
|
||||||
|
}
|
||||||
|
|
||||||
static int _check_lv_status(struct cmd_context *cmd,
|
static int _check_lv_status(struct cmd_context *cmd,
|
||||||
struct volume_group *vg,
|
struct volume_group *vg,
|
||||||
struct logical_volume *lv,
|
struct logical_volume *lv,
|
||||||
@ -70,8 +107,7 @@ static int _check_lv_status(struct cmd_context *cmd,
|
|||||||
int *finished)
|
int *finished)
|
||||||
{
|
{
|
||||||
struct dm_list *lvs_changed;
|
struct dm_list *lvs_changed;
|
||||||
float segment_percent = 0.0, overall_percent = 0.0;
|
progress_t progress;
|
||||||
uint32_t event_nr = 0;
|
|
||||||
|
|
||||||
/* By default, caller should not retry */
|
/* By default, caller should not retry */
|
||||||
*finished = 1;
|
*finished = 1;
|
||||||
@ -86,21 +122,11 @@ static int _check_lv_status(struct cmd_context *cmd,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lv_mirror_percent(cmd, lv, !parms->interval, &segment_percent,
|
progress = poll_mirror_progress(cmd, lv, name, parms);
|
||||||
&event_nr)) {
|
if (progress == PROGRESS_CHECK_FAILED)
|
||||||
log_error("ABORTING: Mirror percentage check failed.");
|
return_0;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
overall_percent = copy_percent(lv);
|
if (progress == PROGRESS_UNFINISHED) {
|
||||||
if (parms->progress_display)
|
|
||||||
log_print("%s: %s: %.1f%%", name, parms->progress_title,
|
|
||||||
overall_percent);
|
|
||||||
else
|
|
||||||
log_verbose("%s: %s: %.1f%%", name, parms->progress_title,
|
|
||||||
overall_percent);
|
|
||||||
|
|
||||||
if (segment_percent < 100.0) {
|
|
||||||
/* The only case the caller *should* try again later */
|
/* The only case the caller *should* try again later */
|
||||||
*finished = 0;
|
*finished = 0;
|
||||||
return 1;
|
return 1;
|
||||||
@ -112,7 +138,7 @@ static int _check_lv_status(struct cmd_context *cmd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Finished? Or progress to next segment? */
|
/* Finished? Or progress to next segment? */
|
||||||
if (overall_percent >= 100.0) {
|
if (progress == PROGRESS_FINISHED_ALL) {
|
||||||
if (!parms->poll_fns->finish_copy(cmd, vg, lv, lvs_changed))
|
if (!parms->poll_fns->finish_copy(cmd, vg, lv, lvs_changed))
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user