Message ID | 20231009184326.15777-2-farosas@suse.de |
---|---|
State | New |
Headers | show |
Series | scripts/migration: Fix analyze-migration.py and add a test | expand |
Fabiano Rosas <farosas@suse.de> wrote: > From: Nikolay Borisov <nborisov@suse.com> > > Make the migration json writer part of MigrationState struct, allowing > the 'configuration' object be serialized to json. > > This will facilitate the parsing of the 'configuration' object in the > next patch that fixes analyze-migration.py for arm. > > Signed-off-by: Nikolay Borisov <nborisov@suse.com> > Signed-off-by: Fabiano Rosas <farosas@suse.de> Reviewed-by: Juan Quintela <quintela@redhat.com> queued. > qemu_put_byte(f, QEMU_VM_CONFIGURATION); > - vmstate_save_state(f, &vmstate_configuration, &savevm_state, 0); > + > + /* > + * This starts the main json object and is paired with the > + * json_writer_end_object in > + * qemu_savevm_state_complete_precopy_non_iterable > + */ > + json_writer_start_object(s->vmdesc, NULL); This don't depend of this patch, but it is ugly as hell. Can we create: json_write_start_main_object(s->vmdesc); (equivalent for end) And forbid json_writer_start_object() for taking a NULL parameter? Later, Juan.
Juan Quintela <quintela@redhat.com> writes: > Fabiano Rosas <farosas@suse.de> wrote: >> From: Nikolay Borisov <nborisov@suse.com> >> >> Make the migration json writer part of MigrationState struct, allowing >> the 'configuration' object be serialized to json. >> >> This will facilitate the parsing of the 'configuration' object in the >> next patch that fixes analyze-migration.py for arm. >> >> Signed-off-by: Nikolay Borisov <nborisov@suse.com> >> Signed-off-by: Fabiano Rosas <farosas@suse.de> > > Reviewed-by: Juan Quintela <quintela@redhat.com> > > queued. > >> qemu_put_byte(f, QEMU_VM_CONFIGURATION); >> - vmstate_save_state(f, &vmstate_configuration, &savevm_state, 0); >> + >> + /* >> + * This starts the main json object and is paired with the >> + * json_writer_end_object in >> + * qemu_savevm_state_complete_precopy_non_iterable >> + */ >> + json_writer_start_object(s->vmdesc, NULL); > > This don't depend of this patch, but it is ugly as hell. > > Can we create: > > json_write_start_main_object(s->vmdesc); > > (equivalent for end) > > And forbid json_writer_start_object() for taking a NULL parameter? > > Later, Juan. Yep, I'll look into it.
diff --git a/migration/migration.c b/migration/migration.c index 585d3c8f55..dde8471f83 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1430,6 +1430,7 @@ int migrate_init(MigrationState *s, Error **errp) error_free(s->error); s->error = NULL; s->hostname = NULL; + s->vmdesc = NULL; migrate_set_state(&s->state, MIGRATION_STATUS_NONE, MIGRATION_STATUS_SETUP); diff --git a/migration/savevm.c b/migration/savevm.c index 60eec7c31f..5343cbc234 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1217,13 +1217,27 @@ void qemu_savevm_non_migratable_list(strList **reasons) void qemu_savevm_state_header(QEMUFile *f) { + MigrationState *s = migrate_get_current(); + + s->vmdesc = json_writer_new(false); + trace_savevm_state_header(); qemu_put_be32(f, QEMU_VM_FILE_MAGIC); qemu_put_be32(f, QEMU_VM_FILE_VERSION); - if (migrate_get_current()->send_configuration) { + if (s->send_configuration) { qemu_put_byte(f, QEMU_VM_CONFIGURATION); - vmstate_save_state(f, &vmstate_configuration, &savevm_state, 0); + + /* + * This starts the main json object and is paired with the + * json_writer_end_object in + * qemu_savevm_state_complete_precopy_non_iterable + */ + json_writer_start_object(s->vmdesc, NULL); + + json_writer_start_object(s->vmdesc, "configuration"); + vmstate_save_state(f, &vmstate_configuration, &savevm_state, s->vmdesc); + json_writer_end_object(s->vmdesc); } } @@ -1272,8 +1286,6 @@ void qemu_savevm_state_setup(QEMUFile *f) Error *local_err = NULL; int ret; - ms->vmdesc = json_writer_new(false); - json_writer_start_object(ms->vmdesc, NULL); json_writer_int64(ms->vmdesc, "page_size", qemu_target_page_size()); json_writer_start_array(ms->vmdesc, "devices");