qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: Eduardo Habkost <eduardo@habkost.net>,
	Kevin Wolf <kwolf@redhat.com>, Thomas Huth <thuth@redhat.com>,
	Beraldo Leal <bleal@redhat.com>,
	qemu-block@nongnu.org, Eric Blake <eblake@redhat.com>,
	Hanna Reitz <hreitz@redhat.com>, Cleber Rosa <crosa@redhat.com>,
	John Snow <jsnow@redhat.com>
Subject: [PATCH v2 00/18] iotests: add detailed tracebacks to qemu_img() failures
Date: Mon, 21 Feb 2022 17:33:55 -0500	[thread overview]
Message-ID: <20220221223413.2123003-1-jsnow@redhat.com> (raw)

This series does two things:

(1) Adds more detailed information to terminal output when qemu-img
    crashes or returns with a non-zero exit code

(2) Ensures that every last call to qemu-img made in the iotest test
    suite either returns a zero, *or* has its output logged.

This is accomplished by:

- Adding a new subprocess.CalledProcessError exception type that's more
  verbose than the standard, built-in one

- Rewriting the qemu_img() function to utilize that new Exception

- Modifying every last iotest helper that invokes qemu-img to use
  qemu_img() or a derivative thereof.

This patchset was inspired by Thomas Huth noticing that iotest 065 would
crash in a way that was largely silent, except for async QMP traces when
the VM failed to start. The root cause in that case is that iotest 065
did not tolerate zstd support being compiled out of QEMU, so the
qemu-img command fails - silently. (And subsequent test actions would
then explode nastily with confusing or misleading error messages.)

So, broadly, I rewrote qemu_img() to be a lot stricter by default, and
then rebased every other helper function that called into the qemu-img
process to use qemu_img().

RFC:

- 'enboxify()' text decoration does not support unicode too well. I
  think it's important to have some text decoration, but I haven't
  gotten around to making it smarter. I might remove it for something
  simpler to avoid having to learn more about unicode.

- At this point, every last qemu-img call is audited, but I did not
  extend the same treatment to qemu-io, qemu-nbd, etc. I intend to,
  later. Eventually, I plan to offer something like 'qemu_tool()' as a
  replacement for 'qemu_tool_pipe_and_status()', and qemu_img() will
  become a thin wrapper around qemu_tool().

V2:
 - Ensure *all* calls to qemu-img go through qemu_img()
 - Raise VerboseProcessError on negative return code,
   even when check=False
 - Check logging status for logged variants and revert to
   Exceptions when logging is off!

John Snow (18):
  python/utils: add enboxify() text decoration utility
  iotests: add VerboseProcessError
  iotests: Remove explicit checks for qemu_img() == 0
  iotests: make qemu_img raise on non-zero rc by default
  iotests: fortify compare_images() against crashes
  iotests: add qemu_img_json()
  iotests: use qemu_img_json() when applicable
  iotests: add qemu_img_info()
  iotests: remove-bitmap-from-backing: use qemu_img_info()
  iotests: add qemu_img_map() function
  iotests: change supports_quorum to use qemu_img
  iotests: replace unchecked calls to qemu_img_pipe()
  iotests: remove external calls to qemu_img_pipe()
  iotests: move has_working_luks onto qemu_img()
  iotests: remove qemu_img_log('create', ...) calls
  iotests: remove qemu_img_pipe()
  iotests: make qemu_img_log() check log level
  iotests: reimplement img_info_log in terms of qemu_img_log

 python/qemu/utils/__init__.py                 |  58 +++++
 tests/qemu-iotests/041                        |   5 +-
 tests/qemu-iotests/065                        |   7 +-
 tests/qemu-iotests/149                        |   8 +-
 tests/qemu-iotests/163                        |   9 +-
 tests/qemu-iotests/194                        |   4 +-
 tests/qemu-iotests/202                        |   4 +-
 tests/qemu-iotests/203                        |   4 +-
 tests/qemu-iotests/211                        |   6 +-
 tests/qemu-iotests/216                        |   6 +-
 tests/qemu-iotests/218                        |   2 +-
 tests/qemu-iotests/224                        |  11 +-
 tests/qemu-iotests/228                        |  12 +-
 tests/qemu-iotests/234                        |   4 +-
 tests/qemu-iotests/237                        |   3 +-
 tests/qemu-iotests/237.out                    |   3 -
 tests/qemu-iotests/242                        |   5 +-
 tests/qemu-iotests/255                        |   8 +-
 tests/qemu-iotests/255.out                    |   4 -
 tests/qemu-iotests/257                        |  11 +-
 tests/qemu-iotests/258                        |   4 +-
 tests/qemu-iotests/262                        |   2 +-
 tests/qemu-iotests/274                        |  17 +-
 tests/qemu-iotests/274.out                    |  29 ---
 tests/qemu-iotests/280                        |   2 +-
 tests/qemu-iotests/280.out                    |   1 -
 tests/qemu-iotests/296                        |  13 +-
 tests/qemu-iotests/303                        |   2 +-
 tests/qemu-iotests/310                        |  14 +-
 tests/qemu-iotests/iotests.py                 | 217 ++++++++++++++----
 tests/qemu-iotests/tests/block-status-cache   |  14 +-
 tests/qemu-iotests/tests/image-fleecing       |   4 +-
 .../tests/mirror-ready-cancel-error           |   6 +-
 tests/qemu-iotests/tests/mirror-top-perms     |   3 +-
 .../qemu-iotests/tests/parallels-read-bitmap  |   6 +-
 .../tests/remove-bitmap-from-backing          |  14 +-
 .../qemu-iotests/tests/stream-error-on-reset  |   4 +-
 37 files changed, 334 insertions(+), 192 deletions(-)

-- 
2.34.1




             reply	other threads:[~2022-02-21 22:36 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-21 22:33 John Snow [this message]
2022-02-21 22:33 ` [PATCH v2 01/18] python/utils: add enboxify() text decoration utility John Snow
2022-02-21 22:33 ` [PATCH v2 02/18] iotests: add VerboseProcessError John Snow
2022-02-21 22:33 ` [PATCH v2 03/18] iotests: Remove explicit checks for qemu_img() == 0 John Snow
2022-02-21 22:33 ` [PATCH v2 04/18] iotests: make qemu_img raise on non-zero rc by default John Snow
2022-02-21 22:34 ` [PATCH v2 05/18] iotests: fortify compare_images() against crashes John Snow
2022-02-21 22:34 ` [PATCH v2 06/18] iotests: add qemu_img_json() John Snow
2022-02-21 22:34 ` [PATCH v2 07/18] iotests: use qemu_img_json() when applicable John Snow
2022-02-21 22:34 ` [PATCH v2 08/18] iotests: add qemu_img_info() John Snow
2022-02-21 22:34 ` [PATCH v2 09/18] iotests: remove-bitmap-from-backing: use qemu_img_info() John Snow
2022-02-21 22:34 ` [PATCH v2 10/18] iotests: add qemu_img_map() function John Snow
2022-02-21 22:34 ` [PATCH v2 11/18] iotests: change supports_quorum to use qemu_img John Snow
2022-02-21 22:34 ` [PATCH v2 12/18] iotests: replace unchecked calls to qemu_img_pipe() John Snow
2022-02-21 22:34 ` [PATCH v2 13/18] iotests: remove external " John Snow
2022-02-21 22:34 ` [PATCH v2 14/18] iotests: move has_working_luks onto qemu_img() John Snow
2022-02-21 22:34 ` [PATCH v2 15/18] iotests: remove qemu_img_log('create', ...) calls John Snow
2022-02-21 22:34 ` [PATCH v2 16/18] iotests: remove qemu_img_pipe() John Snow
2022-02-21 22:34 ` [PATCH v2 17/18] iotests: make qemu_img_log() check log level John Snow
2022-02-21 22:34 ` [PATCH v2 18/18] iotests: reimplement img_info_log in terms of qemu_img_log John Snow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220221223413.2123003-1-jsnow@redhat.com \
    --to=jsnow@redhat.com \
    --cc=bleal@redhat.com \
    --cc=crosa@redhat.com \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=hreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).