All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/33] migration: capture error reports into Error object
@ 2021-02-04 17:18 Daniel P. Berrangé
  2021-02-04 17:18 ` [PATCH 01/33] migration: push Error **errp into qemu_loadvm_state() Daniel P. Berrangé
                   ` (33 more replies)
  0 siblings, 34 replies; 64+ messages in thread
From: Daniel P. Berrangé @ 2021-02-04 17:18 UTC (permalink / raw)
  To: qemu-devel
  Cc: Juan Quintela, Daniel P. Berrangé,
	Dr. David Alan Gilbert, Hailiang Zhang

Due to its long term heritage most of the migration code just invokes
'error_report' when problems hit. This was fine for HMP, since the
messages get redirected from stderr, into the HMP console. It is not
OK for QMP because the errors will not be fed back to the QMP client.

This wasn't a terrible real world problem with QMP so far because
live migration happens in the background, so at least on the target side
there is not a QMP command that needs to capture the incoming migration.
It is a problem on the source side but it doesn't hit frequently as the
source side has fewer failure scenarios. None the less on both sides it
would be desirable if 'query-migrate' can report errors correctly.
With the introduction of the load-snapshot QMP commands, the need for
error reporting becomes more pressing.

Wiring up good error reporting is a large and difficult job, which
this series does NOT complete. The focus here has been on converting
all methods in savevm.c which have an 'int' return value capable of
reporting errors. This covers most of the infrastructure for controlling
the migration state serialization / protocol.

The remaining part that is missing error reporting are the callbacks in
the VMStateDescription struct which can return failure codes, but have
no "Error **errp" parameter. Thinking about how this might be dealt with
in future, a big bang conversion is likely non-viable. We'll probably
want to introduce a duplicate set of callbacks with the "Error **errp"
parameter and convert impls in batches, eventually removing the
original callbacks. I don't intend todo that myself in the immediate
future.

IOW, this patch series probably solves 50% of the problem, but we
still do need the rest to get ideal error reporting.

In doing this savevm conversion I noticed a bunch of places which
see and then ignore errors. I only fixed one or two of them which
were clearly dubious. Other places in savevm.c where it seemed it
was probably ok to ignore errors, I've left using error_report()
on the basis that those are really warnings. Perhaps they could
be changed to warn_report() instead.

There are alot of patches here, but I felt it was easier to review
for correctness if I converted 1 function at a time. The series
does not neccessarily have to be reviewed/appied in 1 go.

Daniel P. Berrangé (33):
  migration: push Error **errp into qemu_loadvm_state()
  migration: push Error **errp into qemu_loadvm_state_header()
  migration: push Error **errp into qemu_loadvm_state_setup()
  migration: push Error **errp into qemu_load_device_state()
  migration: push Error **errp into qemu_loadvm_state_main()
  migration: push Error **errp into qemu_loadvm_section_start_full()
  migration: push Error **errp into qemu_loadvm_section_part_end()
  migration: push Error **errp into loadvm_process_command()
  migration: push Error **errp into loadvm_handle_cmd_packaged()
  migration: push Error **errp into loadvm_postcopy_handle_advise()
  migration: push Error **errp into ram_postcopy_incoming_init()
  migration: push Error **errp into loadvm_postcopy_handle_listen()
  migration: push Error **errp into loadvm_postcopy_handle_run()
  migration: push Error **errp into loadvm_postcopy_ram_handle_discard()
  migration: make loadvm_postcopy_handle_resume() void
  migration: push Error **errp into loadvm_handle_recv_bitmap()
  migration: push Error **errp into loadvm_process_enable_colo()
  migration: push Error **errp into colo_init_ram_cache()
  migration: push Error **errp into check_section_footer()
  migration: push Error **errp into global_state_store()
  migration: remove error reporting from qemu_fopen_bdrv() callers
  migration: push Error **errp into qemu_savevm_state_iterate()
  migration: simplify some error reporting in save_snapshot()
  migration: push Error **errp into qemu_savevm_state_setup()
  migration: push Error **errp into qemu_savevm_state_complete_precopy()
  migration: push Error **errp into
    qemu_savevm_state_complete_precopy_non_iterable()
  migration: push Error **errp into qemu_savevm_state_complete_precopy()
  migration: push Error **errp into qemu_savevm_send_packaged()
  migration: push Error **errp into qemu_savevm_live_state()
  migration: push Error **errp into qemu_save_device_state()
  migration: push Error **errp into qemu_savevm_state_resume_prepare()
  migration: push Error **errp into postcopy_resume_handshake()
  migration: push Error **errp into postcopy_do_resume()

 include/migration/colo.h                      |   2 +-
 include/migration/global_state.h              |   2 +-
 migration/colo.c                              |  12 +-
 migration/global_state.c                      |   6 +-
 migration/migration.c                         |  80 ++-
 migration/postcopy-ram.c                      |   8 +-
 migration/postcopy-ram.h                      |   2 +-
 migration/ram.c                               |  17 +-
 migration/ram.h                               |   4 +-
 migration/savevm.c                            | 594 ++++++++++--------
 migration/savevm.h                            |  23 +-
 .../tests/internal-snapshots-qapi.out         |   3 +-
 12 files changed, 427 insertions(+), 326 deletions(-)

-- 
2.29.2




^ permalink raw reply	[flat|nested] 64+ messages in thread

end of thread, other threads:[~2021-03-11 12:41 UTC | newest]

Thread overview: 64+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-04 17:18 [PATCH 00/33] migration: capture error reports into Error object Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 01/33] migration: push Error **errp into qemu_loadvm_state() Daniel P. Berrangé
2021-02-04 21:57   ` Philippe Mathieu-Daudé
2021-02-05  9:33     ` Daniel P. Berrangé
2021-02-05  9:35       ` Philippe Mathieu-Daudé
2021-03-11 12:38         ` Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 02/33] migration: push Error **errp into qemu_loadvm_state_header() Daniel P. Berrangé
2021-02-04 21:58   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 03/33] migration: push Error **errp into qemu_loadvm_state_setup() Daniel P. Berrangé
2021-02-04 21:59   ` Philippe Mathieu-Daudé
2021-02-05  7:50   ` Markus Armbruster
2021-02-04 17:18 ` [PATCH 04/33] migration: push Error **errp into qemu_load_device_state() Daniel P. Berrangé
2021-02-04 22:01   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 05/33] migration: push Error **errp into qemu_loadvm_state_main() Daniel P. Berrangé
2021-02-15 18:35   ` Dr. David Alan Gilbert
2021-02-15 18:58     ` Daniel P. Berrangé
2021-03-11 12:17     ` Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 06/33] migration: push Error **errp into qemu_loadvm_section_start_full() Daniel P. Berrangé
2021-02-04 22:04   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 07/33] migration: push Error **errp into qemu_loadvm_section_part_end() Daniel P. Berrangé
2021-02-05 16:16   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 08/33] migration: push Error **errp into loadvm_process_command() Daniel P. Berrangé
2021-02-05 16:18   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 09/33] migration: push Error **errp into loadvm_handle_cmd_packaged() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 10/33] migration: push Error **errp into loadvm_postcopy_handle_advise() Daniel P. Berrangé
2021-02-05 16:21   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 11/33] migration: push Error **errp into ram_postcopy_incoming_init() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 12/33] migration: push Error **errp into loadvm_postcopy_handle_listen() Daniel P. Berrangé
2021-02-05 16:23   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 13/33] migration: push Error **errp into loadvm_postcopy_handle_run() Daniel P. Berrangé
2021-02-05 16:23   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 14/33] migration: push Error **errp into loadvm_postcopy_ram_handle_discard() Daniel P. Berrangé
2021-02-05 16:24   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 15/33] migration: make loadvm_postcopy_handle_resume() void Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 16/33] migration: push Error **errp into loadvm_handle_recv_bitmap() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 17/33] migration: push Error **errp into loadvm_process_enable_colo() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 18/33] migration: push Error **errp into colo_init_ram_cache() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 19/33] migration: push Error **errp into check_section_footer() Daniel P. Berrangé
2021-02-05 16:26   ` Philippe Mathieu-Daudé
2021-02-04 17:18 ` [PATCH 20/33] migration: push Error **errp into global_state_store() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 21/33] migration: remove error reporting from qemu_fopen_bdrv() callers Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 22/33] migration: push Error **errp into qemu_savevm_state_iterate() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 23/33] migration: simplify some error reporting in save_snapshot() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 24/33] migration: push Error **errp into qemu_savevm_state_setup() Daniel P. Berrangé
2021-02-04 17:18 ` [PATCH 25/33] migration: push Error **errp into qemu_savevm_state_complete_precopy() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 26/33] migration: push Error **errp into qemu_savevm_state_complete_precopy_non_iterable() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 27/33] migration: push Error **errp into qemu_savevm_state_complete_precopy() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 28/33] migration: push Error **errp into qemu_savevm_send_packaged() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 29/33] migration: push Error **errp into qemu_savevm_live_state() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 30/33] migration: push Error **errp into qemu_save_device_state() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 31/33] migration: push Error **errp into qemu_savevm_state_resume_prepare() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 32/33] migration: push Error **errp into postcopy_resume_handshake() Daniel P. Berrangé
2021-02-04 17:19 ` [PATCH 33/33] migration: push Error **errp into postcopy_do_resume() Daniel P. Berrangé
2021-02-04 18:22 ` [PATCH 00/33] migration: capture error reports into Error object Dr. David Alan Gilbert
2021-02-04 19:09   ` Daniel P. Berrangé
2021-02-08 13:29     ` Dr. David Alan Gilbert
2021-02-08 13:42       ` Daniel P. Berrangé
2021-02-08 14:29         ` Dr. David Alan Gilbert
2021-02-08 14:36           ` Daniel P. Berrangé
2021-02-15 18:38         ` Dr. David Alan Gilbert
2021-02-15 18:58           ` Daniel P. Berrangé
2021-02-15 19:01             ` Dr. David Alan Gilbert
2021-02-16  9:30               ` Daniel P. Berrangé
2021-02-16 19:32                 ` Dr. David Alan Gilbert

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.