From: Cleber Rosa <crosa@redhat.com>
To: John Snow <jsnow@redhat.com>
Cc: kwolf@redhat.com,
"Aleksandar Rikalo" <aleksandar.rikalo@syrmia.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
qemu-devel@nongnu.org,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Aleksandar Markovic" <aleksandar.qemu.devel@gmail.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Aurelien Jarno" <aurelien@aurel32.net>
Subject: Re: [PATCH v5 05/12] python/machine.py: Prohibit multiple shutdown() calls
Date: Mon, 13 Jul 2020 22:48:58 -0400 [thread overview]
Message-ID: <20200714024858.GA2983508@localhost.localdomain> (raw)
In-Reply-To: <20200710050649.32434-6-jsnow@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 3263 bytes --]
On Fri, Jul 10, 2020 at 01:06:42AM -0400, John Snow wrote:
> If the VM is not launched, don't try to shut it down. As a change,
> _post_shutdown now unconditionally also calls _early_cleanup in order to
> offer comprehensive object cleanup in failure cases.
>
> As a courtesy, treat it as a NOP instead of rejecting it as an
> error. This is slightly nicer for acceptance tests where vm.shutdown()
> is issued unconditionally in tearDown callbacks.
>
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
> python/qemu/machine.py | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/python/qemu/machine.py b/python/qemu/machine.py
> index cac466fbe6..e66a7d66dd 100644
> --- a/python/qemu/machine.py
> +++ b/python/qemu/machine.py
> @@ -283,6 +283,13 @@ def _post_launch(self):
> self._qmp.accept()
>
> def _post_shutdown(self):
> + """
> + Called to cleanup the VM instance after the process has exited.
> + May also be called after a failed launch.
> + """
> + # Comprehensive reset for the failed launch case:
> + self._early_cleanup()
> +
I'm not following why this is needed here. AFAICT, the closing of the
console socket file was introduced when the QEMU process was alive,
and doing I/O on the serial device attached to the console file (and
was only necessary because of that). In those scenarios, a race
between the time of sending the QMP command to quit, and getting a
response from QMP could occur.
But here, IIUC, there's no expectations for the QEMU process to be alive.
To the best of my understanding and testing, this line did not contribute
to the robustness of the shutdown behavior.
Finally, given that currently, only the closing of the console socket
is done within _early_cleanup(), and that is conditional, this also does
no harm AFAICT. If more early cleanups operations were needed, then I
would feel less bothered about calling it here.
> if self._qmp:
> self._qmp.close()
> self._qmp = None
> @@ -328,7 +335,7 @@ def launch(self):
> self._launch()
> self._launched = True
> except:
> - self.shutdown()
> + self._post_shutdown()
>
> LOG.debug('Error launching VM')
> if self._qemu_full_args:
> @@ -357,6 +364,8 @@ def _launch(self):
> def _early_cleanup(self) -> None:
> """
> Perform any cleanup that needs to happen before the VM exits.
> +
> + Called additionally by _post_shutdown for comprehensive cleanup.
> """
> # If we keep the console socket open, we may deadlock waiting
> # for QEMU to exit, while QEMU is waiting for the socket to
> @@ -377,6 +386,9 @@ def shutdown(self, has_quit=False, hard=False):
> """
> Terminate the VM and clean up
> """
> + if not self._launched:
> + return
> +
Because of the additional logic, it'd be a good opportunity to make
the docstring more accurate. This method may now *not* do *any* of if
termination and cleaning (while previously it would attempt those
anyhow).
- Cleber.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2020-07-14 2:49 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-10 5:06 [PATCH v5 00/12] python/machine.py: refactor shutdown John Snow
2020-07-10 5:06 ` [PATCH v5 01/12] python/machine.py: consolidate _post_shutdown() John Snow
2020-07-13 15:11 ` Cleber Rosa
2020-07-13 17:23 ` Philippe Mathieu-Daudé
2020-07-10 5:06 ` [PATCH v5 02/12] python/machine.py: Close QMP socket in cleanup John Snow
2020-07-13 9:26 ` Philippe Mathieu-Daudé
2020-07-13 15:34 ` Cleber Rosa
2020-07-10 5:06 ` [PATCH v5 03/12] python/machine.py: Add _early_cleanup hook John Snow
2020-07-13 17:22 ` Philippe Mathieu-Daudé
2020-07-13 20:30 ` Cleber Rosa
2020-07-10 5:06 ` [PATCH v5 04/12] python/machine.py: Perform early cleanup for wait() calls, too John Snow
2020-07-13 17:24 ` Philippe Mathieu-Daudé
2020-07-13 20:31 ` Cleber Rosa
2020-07-10 5:06 ` [PATCH v5 05/12] python/machine.py: Prohibit multiple shutdown() calls John Snow
2020-07-13 9:27 ` Philippe Mathieu-Daudé
2020-07-14 2:48 ` Cleber Rosa [this message]
2020-07-14 18:09 ` John Snow
2020-07-14 18:47 ` John Snow
2020-07-10 5:06 ` [PATCH v5 06/12] python/machine.py: Add a configurable timeout to shutdown() John Snow
2020-07-13 9:28 ` Philippe Mathieu-Daudé
2020-07-14 2:50 ` Cleber Rosa
2020-07-10 5:06 ` [PATCH v5 07/12] python/machine.py: Make wait() call shutdown() John Snow
2020-07-13 9:29 ` Philippe Mathieu-Daudé
2020-07-14 3:05 ` Cleber Rosa
2020-07-10 5:06 ` [PATCH v5 08/12] tests/acceptance: wait() instead of shutdown() where appropriate John Snow
2020-07-13 9:57 ` Philippe Mathieu-Daudé
2020-07-14 3:37 ` Cleber Rosa
2020-07-10 5:06 ` [PATCH v5 09/12] tests/acceptance: Don't test reboot on cubieboard John Snow
2020-07-13 9:56 ` Philippe Mathieu-Daudé
2020-07-13 15:12 ` John Snow
2020-07-13 15:15 ` Philippe Mathieu-Daudé
2020-07-14 3:41 ` Cleber Rosa
2020-07-10 5:06 ` [PATCH v5 10/12] python/machine.py: split shutdown into hard and soft flavors John Snow
2020-07-13 9:54 ` Philippe Mathieu-Daudé
2020-07-14 4:13 ` Cleber Rosa
2020-07-14 18:13 ` John Snow
2020-07-14 19:10 ` Philippe Mathieu-Daudé
2020-07-10 5:06 ` [PATCH v5 11/12] python/machine.py: re-add sigkill warning suppression John Snow
2020-07-13 9:30 ` Philippe Mathieu-Daudé
2020-07-14 4:14 ` Cleber Rosa
2020-07-10 5:06 ` [PATCH v5 12/12] python/machine.py: change default wait timeout to 3 seconds John Snow
2020-07-13 9:30 ` Philippe Mathieu-Daudé
2020-07-14 4:20 ` Cleber Rosa
2020-07-14 18:15 ` John Snow
2020-07-14 19:17 ` [PATCH v5 00/12] python/machine.py: refactor shutdown Philippe Mathieu-Daudé
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=20200714024858.GA2983508@localhost.localdomain \
--to=crosa@redhat.com \
--cc=aleksandar.qemu.devel@gmail.com \
--cc=aleksandar.rikalo@syrmia.com \
--cc=aurelien@aurel32.net \
--cc=ehabkost@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=wainersm@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).