Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Vladimir Sementsov-Ogievskiy authored and Juan Quintela committed May 10, 2023
1 parent 43c71fe commit 4332ffc
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 15 deletions.
9 changes: 8 additions & 1 deletion include/migration/colo.h
Expand Up @@ -36,6 +36,13 @@ COLOMode get_colo_mode(void);
/* failover */
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);
#endif
29 changes: 18 additions & 11 deletions migration/colo.c
Expand Up @@ -65,6 +65,24 @@ static bool colo_runstate_is_stopped(void)
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)
{
/* COLO needs enable block-replication */
Expand Down Expand Up @@ -644,17 +662,6 @@ static void colo_process_checkpoint(MigrationState *s)
}
}

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)
{
qemu_mutex_unlock_iothread();
Expand Down
4 changes: 1 addition & 3 deletions migration/options.c
Expand Up @@ -1253,9 +1253,7 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)

if (params->has_x_checkpoint_delay) {
s->parameters.x_checkpoint_delay = params->x_checkpoint_delay;
if (migration_in_colo_state()) {
colo_checkpoint_notify(s);
}
colo_checkpoint_delay_set();
}

if (params->has_block_incremental) {
Expand Down

0 comments on commit 4332ffc

Please sign in to comment.