colo: make colo_checkpoint_notify static and provide simpler API
colo_checkpoint_notify() is mostly used in colo.c. Outside we use it once when x-checkpoint-delay migration parameter is set. So, let's simplify the external API to only that function - notify COLO that parameter was set. This make external API more robust and hides implementation details from external callers. Also this helps us to make COLO module optional in further patch (i.e. we are going to add possibility not build the COLO module). Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Reviewed-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: Zhang Chen <chen.zhang@intel.com> Message-Id: <20230428194928.1426370-3-vsementsov@yandex-team.ru> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
43c71fe3b8
commit
4332ffcd7b
@ -36,6 +36,13 @@ COLOMode get_colo_mode(void);
|
|||||||
/* failover */
|
/* failover */
|
||||||
void colo_do_failover(void);
|
void colo_do_failover(void);
|
||||||
|
|
||||||
void colo_checkpoint_notify(void *opaque);
|
/*
|
||||||
|
* colo_checkpoint_delay_set
|
||||||
|
*
|
||||||
|
* Handles change of x-checkpoint-delay migration parameter, called from
|
||||||
|
* migrate_params_apply() to notify COLO module about the change.
|
||||||
|
*/
|
||||||
|
void colo_checkpoint_delay_set(void);
|
||||||
|
|
||||||
void colo_shutdown(void);
|
void colo_shutdown(void);
|
||||||
#endif
|
#endif
|
||||||
|
@ -65,6 +65,24 @@ static bool colo_runstate_is_stopped(void)
|
|||||||
return runstate_check(RUN_STATE_COLO) || !runstate_is_running();
|
return runstate_check(RUN_STATE_COLO) || !runstate_is_running();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void colo_checkpoint_notify(void *opaque)
|
||||||
|
{
|
||||||
|
MigrationState *s = opaque;
|
||||||
|
int64_t next_notify_time;
|
||||||
|
|
||||||
|
qemu_event_set(&s->colo_checkpoint_event);
|
||||||
|
s->colo_checkpoint_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
|
||||||
|
next_notify_time = s->colo_checkpoint_time + migrate_checkpoint_delay();
|
||||||
|
timer_mod(s->colo_delay_timer, next_notify_time);
|
||||||
|
}
|
||||||
|
|
||||||
|
void colo_checkpoint_delay_set(void)
|
||||||
|
{
|
||||||
|
if (migration_in_colo_state()) {
|
||||||
|
colo_checkpoint_notify(migrate_get_current());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void secondary_vm_do_failover(void)
|
static void secondary_vm_do_failover(void)
|
||||||
{
|
{
|
||||||
/* COLO needs enable block-replication */
|
/* COLO needs enable block-replication */
|
||||||
@ -644,17 +662,6 @@ out:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void colo_checkpoint_notify(void *opaque)
|
|
||||||
{
|
|
||||||
MigrationState *s = opaque;
|
|
||||||
int64_t next_notify_time;
|
|
||||||
|
|
||||||
qemu_event_set(&s->colo_checkpoint_event);
|
|
||||||
s->colo_checkpoint_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
|
|
||||||
next_notify_time = s->colo_checkpoint_time + migrate_checkpoint_delay();
|
|
||||||
timer_mod(s->colo_delay_timer, next_notify_time);
|
|
||||||
}
|
|
||||||
|
|
||||||
void migrate_start_colo_process(MigrationState *s)
|
void migrate_start_colo_process(MigrationState *s)
|
||||||
{
|
{
|
||||||
qemu_mutex_unlock_iothread();
|
qemu_mutex_unlock_iothread();
|
||||||
|
@ -1253,9 +1253,7 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
|
|||||||
|
|
||||||
if (params->has_x_checkpoint_delay) {
|
if (params->has_x_checkpoint_delay) {
|
||||||
s->parameters.x_checkpoint_delay = params->x_checkpoint_delay;
|
s->parameters.x_checkpoint_delay = params->x_checkpoint_delay;
|
||||||
if (migration_in_colo_state()) {
|
colo_checkpoint_delay_set();
|
||||||
colo_checkpoint_notify(s);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params->has_block_incremental) {
|
if (params->has_block_incremental) {
|
||||||
|
Loading…
Reference in New Issue
Block a user