migration: Read state once
commit552de79bfdd5e9e53847eb3c6d6e4cd898a4370e
authorDr. David Alan Gilbert <dgilbert@redhat.com>
Wed, 13 Apr 2022 11:33:29 +0000 (13 12:33 +0100)
committerDr. David Alan Gilbert <dgilbert@redhat.com>
Thu, 21 Apr 2022 18:36:46 +0000 (21 19:36 +0100)
tree29525db4e6f26d8d078603a31b0f4b006b6df259
parentf912ec5b2d65644116ff496b58d7c9145c19e4c0
migration: Read state once

The 'status' field for the migration is updated normally using
an atomic operation from the migration thread.
Most readers of it aren't that careful, and in most cases it doesn't
matter.

In query_migrate->fill_source_migration_info the 'state'
is read twice; the first time to decide which state fields to fill in,
and then secondly to copy the state to the status field; that can end up
with a status that's inconsistent; e.g. setting up the fields
for 'setup' and then having an 'active' status.  In that case
libvirt gets upset by the lack of ram info.
The symptom is:
   libvirt.libvirtError: internal error: migration was active, but no RAM info was set

Read the state exactly once in fill_source_migration_info.

This is a possible fix for:
https://bugzilla.redhat.com/show_bug.cgi?id=2074205

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <20220413113329.103696-1-dgilbert@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
migration/migration.c