From: "Daniel P. Berrangé" <berrange@redhat.com>
To: John Snow <jsnow@redhat.com>
Cc: qemu-devel@nongnu.org, Beraldo Leal <bleal@redhat.com>,
Cleber Rosa <crosa@redhat.com>
Subject: Re: [PATCH 1/2] python/machine: Add debug logging to key state changes
Date: Tue, 25 Oct 2022 09:24:37 +0100 [thread overview]
Message-ID: <Y1edRZ5nDcXu074W@redhat.com> (raw)
In-Reply-To: <20221024195355.860504-2-jsnow@redhat.com>
On Mon, Oct 24, 2022 at 03:53:54PM -0400, John Snow wrote:
> When key decisions are made about the lifetime of the VM process being
> managed, there's no log entry. Juxtaposed with the very verbose runstate
> change logging of the QMP module, machine seems a bit too introverted
> now.
>
> Season the machine.py module with logging statements to taste to help
> make a tastier soup.
>
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
> python/qemu/machine/machine.py | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/python/qemu/machine/machine.py b/python/qemu/machine/machine.py
> index 37191f433b2..c467f951d5d 100644
> --- a/python/qemu/machine/machine.py
> +++ b/python/qemu/machine/machine.py
> @@ -373,6 +373,7 @@ def _post_shutdown(self) -> None:
> Called to cleanup the VM instance after the process has exited.
> May also be called after a failed launch.
> """
> + LOG.debug("Cleaning up after VM process")
> try:
> self._close_qmp_connection()
> except Exception as err: # pylint: disable=broad-except
> @@ -497,6 +498,7 @@ def _early_cleanup(self) -> None:
> # for QEMU to exit, while QEMU is waiting for the socket to
> # become writable.
> if self._console_socket is not None:
> + LOG.debug("Closing console socket")
> self._console_socket.close()
> self._console_socket = None
>
> @@ -507,6 +509,7 @@ def _hard_shutdown(self) -> None:
> :raise subprocess.Timeout: When timeout is exceeds 60 seconds
> waiting for the QEMU process to terminate.
> """
> + LOG.debug("Performing hard shutdown")
> self._early_cleanup()
> self._subp.kill()
> self._subp.wait(timeout=60)
> @@ -523,6 +526,13 @@ def _soft_shutdown(self, timeout: Optional[int]) -> None:
> :raise subprocess.TimeoutExpired: When timeout is exceeded waiting for
> the QEMU process to terminate.
> """
> + LOG.debug("Attempting graceful termination")
> + if self._quit_issued:
> + LOG.debug(
> + "Anticipating QEMU termination due to prior 'quit' command, "
> + "or explicit call to wait()"
> + )
> +
> self._early_cleanup()
>
> if self._qmp_connection:
> @@ -553,6 +563,10 @@ def _do_shutdown(self, timeout: Optional[int]) -> None:
> try:
> self._soft_shutdown(timeout)
> except Exception as exc:
> + if isinstance(exc, subprocess.TimeoutExpired):
> + LOG.debug("Timed out waiting for QEMU process to exit")
> + LOG.debug("Graceful shutdown failed, "
> + "falling back to hard shutdown")
If you add 'exc_info=True' when logging from inside an 'except'
clause, it captures the stack trace which is often critical for
debugging unexpected exceptions, especially when you're catchintg
the top level 'Exception' class instead of a very specialized
class.
> self._hard_shutdown()
> raise AbnormalShutdown("Could not perform graceful shutdown") \
> from exc
> @@ -575,6 +589,10 @@ def shutdown(self,
> if not self._launched:
> return
>
> + LOG.debug("Shutting down VM appliance; timeout=%s", timeout)
> + if hard:
> + LOG.debug("Caller requests immediate termination of QEMU process.")
> +
> try:
> if hard:
> self._user_killed = True
> --
> 2.37.3
>
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2022-10-25 8:50 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-24 19:53 [PATCH 0/2] python: misc machine.py improvements John Snow
2022-10-24 19:53 ` [PATCH 1/2] python/machine: Add debug logging to key state changes John Snow
2022-10-25 8:24 ` Daniel P. Berrangé [this message]
2022-10-25 21:48 ` John Snow
2022-10-24 19:53 ` [PATCH 2/2] python/machine: Handle termination cases without QMP 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=Y1edRZ5nDcXu074W@redhat.com \
--to=berrange@redhat.com \
--cc=bleal@redhat.com \
--cc=crosa@redhat.com \
--cc=jsnow@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).