[PATCH] remote: Add libvirtd dependency to virt-guest-shutdown.target

Jim Fehlig posted 1 patch 3 years, 4 months ago
Test syntax-check failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20201104022418.19072-1-jfehlig@suse.com
src/remote/virt-guest-shutdown.target | 1 +
1 file changed, 1 insertion(+)
[PATCH] remote: Add libvirtd dependency to virt-guest-shutdown.target
Posted by Jim Fehlig 3 years, 4 months ago
When restarting libvirt services and sockets *and* libvirt-guests.service
is running, the latter will sometimes hang when trying to connect to
libvirtd. Even though libvirt-guests has 'Wants=libvirtd.service' and
'After=libvirtd.service', we can see via journalctl that it is not
shutdown before libvirtd when executing something like

systemctl try-restart libvirtd.service libvirtd.socket \
libvirtd-ro.socket virtlockd.service virtlockd.socket \
virtlogd.service virtlogd.socket virt-guest-shutdown.target

Oct 28 15:53:31 systemd[1]: Stopping Virtualization daemon...
Oct 28 15:53:31 systemd[1]: libvirtd.service: Succeeded.
Oct 28 15:53:31 systemd[1]: Stopped Virtualization daemon.
Oct 28 15:53:31 systemd[1]: libvirtd-admin.socket: Succeeded.
Oct 28 15:53:31 systemd[1]: Closed Libvirt admin socket.
Oct 28 15:53:31 systemd[1]: Stopping Libvirt admin socket.
Oct 28 15:53:31 systemd[1]: libvirtd-ro.socket: Succeeded.
Oct 28 15:53:31 systemd[1]: Closed Libvirt local read-only socket.
Oct 28 15:53:31 systemd[1]: Stopping Libvirt local read-only socket.
Oct 28 15:53:31 systemd[1]: libvirtd.socket: Succeeded.
Oct 28 15:53:31 systemd[1]: Closed Libvirt local socket.
Oct 28 15:53:31 systemd[1]: Stopping Libvirt local socket.
Oct 28 15:53:31 systemd[1]: Listening on Libvirt local socket.
Oct 28 15:53:31 systemd[1]: Listening on Libvirt admin socket.
Oct 28 15:53:31 systemd[1]: Listening on Libvirt local read-only socket.
Oct 28 15:53:31 systemd[1]: virtlockd.socket: Succeeded.
Oct 28 15:53:31 systemd[1]: Closed Virtual machine lock manager socket.
Oct 28 15:53:31 systemd[1]: Stopping Virtual machine lock manager socket.
Oct 28 15:53:31 systemd[1]: Listening on Virtual machine lock manager socket.
Oct 28 15:53:31 systemd[1]: virtlogd.socket: Succeeded.
Oct 28 15:53:31 systemd[1]: Closed Virtual machine log manager socket.
Oct 28 15:53:31 systemd[1]: Stopping Virtual machine log manager socket.
Oct 28 15:53:31 systemd[1]: Listening on Virtual machine log manager socket.
Oct 28 15:53:31 systemd[1]: Stopping Suspend/Resume Running libvirt Guests...

In this case, the try-restart command hung and libvirt-guests was stuck
trying to connect to libvirtd. In the following case, the try-restart
worked since libvirtd was started again before libvirt-guests was stopped!

Oct 28 15:19:02  systemd[1]: Stopping Virtualization daemon...
Oct 28 15:19:02  systemd[1]: Stopped Virtualization daemon.
Oct 28 15:19:02  systemd[1]: Closed Libvirt admin socket.
Oct 28 15:19:02  systemd[1]: Stopping Libvirt admin socket.
Oct 28 15:19:02  systemd[1]: Closed Virtual machine lock manager socket.
Oct 28 15:19:02  systemd[1]: Stopping Virtual machine lock manager socket.
Oct 28 15:19:02  systemd[1]: Listening on Virtual machine lock manager socket.
Oct 28 15:19:02  systemd[1]: Closed Libvirt local read-only socket.
Oct 28 15:19:02  systemd[1]: Stopping Libvirt local read-only socket.
Oct 28 15:19:02  systemd[1]: Closed Libvirt local socket.
Oct 28 15:19:02  systemd[1]: Stopping Libvirt local socket.
Oct 28 15:19:02  systemd[1]: Listening on Libvirt local socket.
Oct 28 15:19:02  systemd[1]: Listening on Libvirt admin socket.
Oct 28 15:19:02  systemd[1]: Listening on Libvirt local read-only socket.
Oct 28 15:19:02  systemd[1]: Closed Virtual machine log manager socket.
Oct 28 15:19:02  systemd[1]: Stopping Virtual machine log manager socket.
Oct 28 15:19:02  systemd[1]: Listening on Virtual machine log manager socket.
Oct 28 15:19:02  systemd[1]: Starting Virtualization daemon...
Oct 28 15:19:02  systemd[1]: Stopping Suspend/Resume Running libvirt Guests...
Oct 28 15:19:02  systemd[1]: Started Virtualization daemon.
Oct 28 15:19:02  libvirt-guests.sh[4912]: Running guests on default URI: no running guests.
Oct 28 15:19:02  systemd[1]: Stopped Suspend/Resume Running libvirt Guests.
Oct 28 15:19:02  systemd[1]: Stopped target Libvirt guests shutdown.
Oct 28 15:19:02  systemd[1]: Stopping Libvirt guests shutdown.
Oct 28 15:19:02  systemd[1]: Reached target Libvirt guests shutdown.
Oct 28 15:19:02  systemd[1]: Starting Suspend/Resume Running libvirt Guests...
Oct 28 15:19:02  systemd[1]: Started Suspend/Resume Running libvirt Guests.

Adding 'Requires=libvirtd.service' to virt-guest-shutdown.target results
in expected behavior

Oct 28 15:40:00  systemd[1]: Stopping Suspend/Resume Running libvirt Guests...
Oct 28 15:40:00  libvirt-guests.sh[5245]: Running guests on default URI: no running guests.
Oct 28 15:40:00  systemd[1]: Stopped Suspend/Resume Running libvirt Guests.
Oct 28 15:40:00  systemd[1]: Stopped target Libvirt guests shutdown.
Oct 28 15:40:00  systemd[1]: Stopping Libvirt guests shutdown.
Oct 28 15:40:00  systemd[1]: Stopping Virtualization daemon...
Oct 28 15:40:00  systemd[1]: Stopped Virtualization daemon.
Oct 28 15:40:00  systemd[1]: Closed Virtual machine log manager socket.
Oct 28 15:40:00  systemd[1]: Stopping Virtual machine log manager socket.
Oct 28 15:40:00  systemd[1]: Listening on Virtual machine log manager socket.
Oct 28 15:40:00  systemd[1]: Closed Libvirt admin socket.
Oct 28 15:40:00  systemd[1]: Stopping Libvirt admin socket.
Oct 28 15:40:00  systemd[1]: Closed Libvirt local read-only socket.
Oct 28 15:40:00  systemd[1]: Stopping Libvirt local read-only socket.
Oct 28 15:40:00  systemd[1]: Closed Libvirt local socket.
Oct 28 15:40:00  systemd[1]: Stopping Libvirt local socket.
Oct 28 15:40:00  systemd[1]: Listening on Libvirt local socket.
Oct 28 15:40:00  systemd[1]: Listening on Libvirt admin socket.
Oct 28 15:40:00  systemd[1]: Listening on Libvirt local read-only socket.
Oct 28 15:40:00  systemd[1]: Closed Virtual machine lock manager socket.
Oct 28 15:40:00  systemd[1]: Stopping Virtual machine lock manager socket.
Oct 28 15:40:00  systemd[1]: Listening on Virtual machine lock manager socket.
Oct 28 15:40:00  systemd[1]: Starting Virtualization daemon...
Oct 28 15:40:00  systemd[1]: Started Virtualization daemon.
Oct 28 15:40:00  systemd[1]: Reached target Libvirt guests shutdown.
Oct 28 15:40:00  systemd[1]: Starting Suspend/Resume Running libvirt Guests...
Oct 28 15:40:00  systemd[1]: Started Suspend/Resume Running libvirt Guests.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---

I asked about this on the dev list but it is probably best to send a
patch for discussion instead.

https://www.redhat.com/archives/libvir-list/2020-October/msg01492.html

 src/remote/virt-guest-shutdown.target | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/remote/virt-guest-shutdown.target b/src/remote/virt-guest-shutdown.target
index 25d4aaa267..e2efa3e63a 100644
--- a/src/remote/virt-guest-shutdown.target
+++ b/src/remote/virt-guest-shutdown.target
@@ -1,3 +1,4 @@
 [Unit]
 Description=Libvirt guests shutdown
+Requires=libvirtd.service
 Documentation=https://libvirt.org
-- 
2.28.0


Re: [PATCH] remote: Add libvirtd dependency to virt-guest-shutdown.target
Posted by Neal Gompa 3 years, 4 months ago
On Tue, Nov 3, 2020 at 9:26 PM Jim Fehlig <jfehlig@suse.com> wrote:
>
> When restarting libvirt services and sockets *and* libvirt-guests.service
> is running, the latter will sometimes hang when trying to connect to
> libvirtd. Even though libvirt-guests has 'Wants=libvirtd.service' and
> 'After=libvirtd.service', we can see via journalctl that it is not
> shutdown before libvirtd when executing something like
>
> systemctl try-restart libvirtd.service libvirtd.socket \
> libvirtd-ro.socket virtlockd.service virtlockd.socket \
> virtlogd.service virtlogd.socket virt-guest-shutdown.target
>
> Oct 28 15:53:31 systemd[1]: Stopping Virtualization daemon...
> Oct 28 15:53:31 systemd[1]: libvirtd.service: Succeeded.
> Oct 28 15:53:31 systemd[1]: Stopped Virtualization daemon.
> Oct 28 15:53:31 systemd[1]: libvirtd-admin.socket: Succeeded.
> Oct 28 15:53:31 systemd[1]: Closed Libvirt admin socket.
> Oct 28 15:53:31 systemd[1]: Stopping Libvirt admin socket.
> Oct 28 15:53:31 systemd[1]: libvirtd-ro.socket: Succeeded.
> Oct 28 15:53:31 systemd[1]: Closed Libvirt local read-only socket.
> Oct 28 15:53:31 systemd[1]: Stopping Libvirt local read-only socket.
> Oct 28 15:53:31 systemd[1]: libvirtd.socket: Succeeded.
> Oct 28 15:53:31 systemd[1]: Closed Libvirt local socket.
> Oct 28 15:53:31 systemd[1]: Stopping Libvirt local socket.
> Oct 28 15:53:31 systemd[1]: Listening on Libvirt local socket.
> Oct 28 15:53:31 systemd[1]: Listening on Libvirt admin socket.
> Oct 28 15:53:31 systemd[1]: Listening on Libvirt local read-only socket.
> Oct 28 15:53:31 systemd[1]: virtlockd.socket: Succeeded.
> Oct 28 15:53:31 systemd[1]: Closed Virtual machine lock manager socket.
> Oct 28 15:53:31 systemd[1]: Stopping Virtual machine lock manager socket.
> Oct 28 15:53:31 systemd[1]: Listening on Virtual machine lock manager socket.
> Oct 28 15:53:31 systemd[1]: virtlogd.socket: Succeeded.
> Oct 28 15:53:31 systemd[1]: Closed Virtual machine log manager socket.
> Oct 28 15:53:31 systemd[1]: Stopping Virtual machine log manager socket.
> Oct 28 15:53:31 systemd[1]: Listening on Virtual machine log manager socket.
> Oct 28 15:53:31 systemd[1]: Stopping Suspend/Resume Running libvirt Guests...
>
> In this case, the try-restart command hung and libvirt-guests was stuck
> trying to connect to libvirtd. In the following case, the try-restart
> worked since libvirtd was started again before libvirt-guests was stopped!
>
> Oct 28 15:19:02  systemd[1]: Stopping Virtualization daemon...
> Oct 28 15:19:02  systemd[1]: Stopped Virtualization daemon.
> Oct 28 15:19:02  systemd[1]: Closed Libvirt admin socket.
> Oct 28 15:19:02  systemd[1]: Stopping Libvirt admin socket.
> Oct 28 15:19:02  systemd[1]: Closed Virtual machine lock manager socket.
> Oct 28 15:19:02  systemd[1]: Stopping Virtual machine lock manager socket.
> Oct 28 15:19:02  systemd[1]: Listening on Virtual machine lock manager socket.
> Oct 28 15:19:02  systemd[1]: Closed Libvirt local read-only socket.
> Oct 28 15:19:02  systemd[1]: Stopping Libvirt local read-only socket.
> Oct 28 15:19:02  systemd[1]: Closed Libvirt local socket.
> Oct 28 15:19:02  systemd[1]: Stopping Libvirt local socket.
> Oct 28 15:19:02  systemd[1]: Listening on Libvirt local socket.
> Oct 28 15:19:02  systemd[1]: Listening on Libvirt admin socket.
> Oct 28 15:19:02  systemd[1]: Listening on Libvirt local read-only socket.
> Oct 28 15:19:02  systemd[1]: Closed Virtual machine log manager socket.
> Oct 28 15:19:02  systemd[1]: Stopping Virtual machine log manager socket.
> Oct 28 15:19:02  systemd[1]: Listening on Virtual machine log manager socket.
> Oct 28 15:19:02  systemd[1]: Starting Virtualization daemon...
> Oct 28 15:19:02  systemd[1]: Stopping Suspend/Resume Running libvirt Guests...
> Oct 28 15:19:02  systemd[1]: Started Virtualization daemon.
> Oct 28 15:19:02  libvirt-guests.sh[4912]: Running guests on default URI: no running guests.
> Oct 28 15:19:02  systemd[1]: Stopped Suspend/Resume Running libvirt Guests.
> Oct 28 15:19:02  systemd[1]: Stopped target Libvirt guests shutdown.
> Oct 28 15:19:02  systemd[1]: Stopping Libvirt guests shutdown.
> Oct 28 15:19:02  systemd[1]: Reached target Libvirt guests shutdown.
> Oct 28 15:19:02  systemd[1]: Starting Suspend/Resume Running libvirt Guests...
> Oct 28 15:19:02  systemd[1]: Started Suspend/Resume Running libvirt Guests.
>
> Adding 'Requires=libvirtd.service' to virt-guest-shutdown.target results
> in expected behavior
>
> Oct 28 15:40:00  systemd[1]: Stopping Suspend/Resume Running libvirt Guests...
> Oct 28 15:40:00  libvirt-guests.sh[5245]: Running guests on default URI: no running guests.
> Oct 28 15:40:00  systemd[1]: Stopped Suspend/Resume Running libvirt Guests.
> Oct 28 15:40:00  systemd[1]: Stopped target Libvirt guests shutdown.
> Oct 28 15:40:00  systemd[1]: Stopping Libvirt guests shutdown.
> Oct 28 15:40:00  systemd[1]: Stopping Virtualization daemon...
> Oct 28 15:40:00  systemd[1]: Stopped Virtualization daemon.
> Oct 28 15:40:00  systemd[1]: Closed Virtual machine log manager socket.
> Oct 28 15:40:00  systemd[1]: Stopping Virtual machine log manager socket.
> Oct 28 15:40:00  systemd[1]: Listening on Virtual machine log manager socket.
> Oct 28 15:40:00  systemd[1]: Closed Libvirt admin socket.
> Oct 28 15:40:00  systemd[1]: Stopping Libvirt admin socket.
> Oct 28 15:40:00  systemd[1]: Closed Libvirt local read-only socket.
> Oct 28 15:40:00  systemd[1]: Stopping Libvirt local read-only socket.
> Oct 28 15:40:00  systemd[1]: Closed Libvirt local socket.
> Oct 28 15:40:00  systemd[1]: Stopping Libvirt local socket.
> Oct 28 15:40:00  systemd[1]: Listening on Libvirt local socket.
> Oct 28 15:40:00  systemd[1]: Listening on Libvirt admin socket.
> Oct 28 15:40:00  systemd[1]: Listening on Libvirt local read-only socket.
> Oct 28 15:40:00  systemd[1]: Closed Virtual machine lock manager socket.
> Oct 28 15:40:00  systemd[1]: Stopping Virtual machine lock manager socket.
> Oct 28 15:40:00  systemd[1]: Listening on Virtual machine lock manager socket.
> Oct 28 15:40:00  systemd[1]: Starting Virtualization daemon...
> Oct 28 15:40:00  systemd[1]: Started Virtualization daemon.
> Oct 28 15:40:00  systemd[1]: Reached target Libvirt guests shutdown.
> Oct 28 15:40:00  systemd[1]: Starting Suspend/Resume Running libvirt Guests...
> Oct 28 15:40:00  systemd[1]: Started Suspend/Resume Running libvirt Guests.
>
> Signed-off-by: Jim Fehlig <jfehlig@suse.com>
> ---
>
> I asked about this on the dev list but it is probably best to send a
> patch for discussion instead.
>
> https://www.redhat.com/archives/libvir-list/2020-October/msg01492.html
>
>  src/remote/virt-guest-shutdown.target | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/src/remote/virt-guest-shutdown.target b/src/remote/virt-guest-shutdown.target
> index 25d4aaa267..e2efa3e63a 100644
> --- a/src/remote/virt-guest-shutdown.target
> +++ b/src/remote/virt-guest-shutdown.target
> @@ -1,3 +1,4 @@
>  [Unit]
>  Description=Libvirt guests shutdown
> +Requires=libvirtd.service
>  Documentation=https://libvirt.org
> --
> 2.28.0
>
>

LGTM.

Reviewed-by: Neal Gompa <ngompa13@gmail.com>


-- 
真実はいつも一つ!/ Always, there's only one truth!


Re: [PATCH] remote: Add libvirtd dependency to virt-guest-shutdown.target
Posted by Christian Ehrhardt 3 years, 2 months ago
On Wed, Nov 4, 2020 at 7:47 AM Neal Gompa <ngompa13@gmail.com> wrote:
>
> On Tue, Nov 3, 2020 at 9:26 PM Jim Fehlig <jfehlig@suse.com> wrote:
> >
> > When restarting libvirt services and sockets *and* libvirt-guests.service
> > is running, the latter will sometimes hang when trying to connect to
> > libvirtd. Even though libvirt-guests has 'Wants=libvirtd.service' and
> > 'After=libvirtd.service', we can see via journalctl that it is not
> > shutdown before libvirtd when executing something like
> >
> > systemctl try-restart libvirtd.service libvirtd.socket \
> > libvirtd-ro.socket virtlockd.service virtlockd.socket \
> > virtlogd.service virtlogd.socket virt-guest-shutdown.target
> >
...
> > Adding 'Requires=libvirtd.service' to virt-guest-shutdown.target results
> > in expected behavior

Hi Jim (and all others),
This change is accepted since 6.10 [1] - while testing 7.0 for Debian
I've found that this change
regresses us bringing back bug 955216 [2] for us.
Based on how the require statement works I think it is bringing the
same issue to everyone
(not just Debian/Ubuntu).
That issue is - once you restart libvirtd.service (common on upgrades)
it will now also always
cycle libvirt-guests.service through a restart.
But cycling libvirt-guests.service means shutting down and starting
all guests which suddenly
makes upgrading libvirt very disruptive.


For the time being I've suggested we revert this change in
Debian/Ubuntu, but I wonder if
there could be something that ensures the ordering Jim wanted to achieve without
hard-linking (via ) a libvirtd.service restart to also restart
libvirt-guests.service?


--- log showing that libvirtd.service now restarts libvirt-guests as well ---


root@h-libvirt-netcheck-up:~# systemctl status libvirt-guests.service
● libvirt-guests.service - Suspend/Resume Running libvirt Guests
     Loaded: loaded (/lib/systemd/system/libvirt-guests.service;
enabled; vendor preset: enabled)
     Active: active (exited) since Wed 2021-01-27 06:33:41 UTC; 1h 19min ago
       Docs: man:libvirtd(8)
             https://libvirt.org
   Main PID: 56753 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 38269)
     Memory: 0B
     CGroup: /system.slice/libvirt-guests.service

Jan 27 06:33:41 h-libvirt-netcheck-up systemd[1]: Starting
Suspend/Resume Running libvirt Guests...
Jan 27 06:33:41 h-libvirt-netcheck-up systemd[1]: Finished
Suspend/Resume Running libvirt Guests.

root@h-libvirt-netcheck-up:~# systemctl restart libvirtd

root@h-libvirt-netcheck-up:~# systemctl status libvirt-guests.service
● libvirt-guests.service - Suspend/Resume Running libvirt Guests
     Loaded: loaded (/lib/systemd/system/libvirt-guests.service;
enabled; vendor preset: enabled)
     Active: active (exited) since Wed 2021-01-27 07:52:57 UTC; 4s ago
       Docs: man:libvirtd(8)
             https://libvirt.org
    Process: 57626 ExecStart=/usr/lib/libvirt/libvirt-guests.sh start
(code=exited, status=0/SUCCESS)
   Main PID: 57626 (code=exited, status=0/SUCCESS)

Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Starting
Suspend/Resume Running libvirt Guests...
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Finished
Suspend/Resume Running libvirt Guests.

You see new PID, and entries that it stopped/started all guests.



--- journal while the above restarts happened  ---

Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopping
Suspend/Resume Running libvirt Guests...
Jan 27 07:52:57 h-libvirt-netcheck-up libvirt-guests.sh[57593]:
Running guests on default URI:
Jan 27 07:52:57 h-libvirt-netcheck-up libvirt-guests.sh[57602]: no
running guests.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]:
libvirt-guests.service: Succeeded.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopped
Suspend/Resume Running libvirt Guests.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopped target
Libvirt guests shutdown.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopping Libvirt
guests shutdown.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopping
Virtualization daemon...
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: libvirtd.service: Succeeded.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: libvirtd.service:
Unit process 343 (dnsmasq) remains running after unit stopped.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: libvirtd.service:
Unit process 344 (dnsmasq) remains running after unit stopped.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopped Virtualization daemon.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: libvirtd.service:
Found left-over process 343 (dnsmasq) in control group while starting
unit. Ignoring.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: This usually
indicates unclean termination of a previous run, or service
implementation deficiencies.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: libvirtd.service:
Found left-over process 344 (dnsmasq) in control group while starting
unit. Ignoring.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: This usually
indicates unclean termination of a previous run, or service
implementation deficiencies.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Starting
Virtualization daemon...
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Started Virtualization daemon.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Reached target
Libvirt guests shutdown.
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Starting
Suspend/Resume Running libvirt Guests...
Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Finished
Suspend/Resume Running libvirt Guests.


[1]: https://gitlab.com/libvirt/libvirt/-/commit/f035f53baa2e5dc00b8e866e594672a90b4cea78
[2]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=955216


Re: [PATCH] remote: Add libvirtd dependency to virt-guest-shutdown.target
Posted by Jim Fehlig 3 years, 2 months ago
On 1/27/21 12:58 AM, Christian Ehrhardt wrote:
> On Wed, Nov 4, 2020 at 7:47 AM Neal Gompa <ngompa13@gmail.com> wrote:
>>
>> On Tue, Nov 3, 2020 at 9:26 PM Jim Fehlig <jfehlig@suse.com> wrote:
>>>
>>> When restarting libvirt services and sockets *and* libvirt-guests.service
>>> is running, the latter will sometimes hang when trying to connect to
>>> libvirtd. Even though libvirt-guests has 'Wants=libvirtd.service' and
>>> 'After=libvirtd.service', we can see via journalctl that it is not
>>> shutdown before libvirtd when executing something like
>>>
>>> systemctl try-restart libvirtd.service libvirtd.socket \
>>> libvirtd-ro.socket virtlockd.service virtlockd.socket \
>>> virtlogd.service virtlogd.socket virt-guest-shutdown.target
>>>
> ...
>>> Adding 'Requires=libvirtd.service' to virt-guest-shutdown.target results
>>> in expected behavior
> 
> Hi Jim (and all others),
> This change is accepted since 6.10 [1] - while testing 7.0 for Debian
> I've found that this change
> regresses us bringing back bug 955216 [2] for us.
> Based on how the require statement works I think it is bringing the
> same issue to everyone
> (not just Debian/Ubuntu).

Nod. I verified the same behavior on SUSE :-(.

> That issue is - once you restart libvirtd.service (common on upgrades)
> it will now also always
> cycle libvirt-guests.service through a restart.
> But cycling libvirt-guests.service means shutting down and starting
> all guests which suddenly
> makes upgrading libvirt very disruptive.

Agreed!

> For the time being I've suggested we revert this change in
> Debian/Ubuntu, but I wonder if
> there could be something that ensures the ordering Jim wanted to achieve without
> hard-linking (via ) a libvirtd.service restart to also restart
> libvirt-guests.service?

Suggestions and/or comments very welcomed! I don't have other ideas ATM. In the 
meantime I've sent a patch to revert the commit

https://www.redhat.com/archives/libvir-list/2021-January/msg01198.html

Regards,
Jim

> 
> --- log showing that libvirtd.service now restarts libvirt-guests as well ---
> 
> 
> root@h-libvirt-netcheck-up:~# systemctl status libvirt-guests.service
> ● libvirt-guests.service - Suspend/Resume Running libvirt Guests
>       Loaded: loaded (/lib/systemd/system/libvirt-guests.service;
> enabled; vendor preset: enabled)
>       Active: active (exited) since Wed 2021-01-27 06:33:41 UTC; 1h 19min ago
>         Docs: man:libvirtd(8)
>               https://libvirt.org
>     Main PID: 56753 (code=exited, status=0/SUCCESS)
>        Tasks: 0 (limit: 38269)
>       Memory: 0B
>       CGroup: /system.slice/libvirt-guests.service
> 
> Jan 27 06:33:41 h-libvirt-netcheck-up systemd[1]: Starting
> Suspend/Resume Running libvirt Guests...
> Jan 27 06:33:41 h-libvirt-netcheck-up systemd[1]: Finished
> Suspend/Resume Running libvirt Guests.
> 
> root@h-libvirt-netcheck-up:~# systemctl restart libvirtd
> 
> root@h-libvirt-netcheck-up:~# systemctl status libvirt-guests.service
> ● libvirt-guests.service - Suspend/Resume Running libvirt Guests
>       Loaded: loaded (/lib/systemd/system/libvirt-guests.service;
> enabled; vendor preset: enabled)
>       Active: active (exited) since Wed 2021-01-27 07:52:57 UTC; 4s ago
>         Docs: man:libvirtd(8)
>               https://libvirt.org
>      Process: 57626 ExecStart=/usr/lib/libvirt/libvirt-guests.sh start
> (code=exited, status=0/SUCCESS)
>     Main PID: 57626 (code=exited, status=0/SUCCESS)
> 
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Starting
> Suspend/Resume Running libvirt Guests...
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Finished
> Suspend/Resume Running libvirt Guests.
> 
> You see new PID, and entries that it stopped/started all guests.
> 
> 
> 
> --- journal while the above restarts happened  ---
> 
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopping
> Suspend/Resume Running libvirt Guests...
> Jan 27 07:52:57 h-libvirt-netcheck-up libvirt-guests.sh[57593]:
> Running guests on default URI:
> Jan 27 07:52:57 h-libvirt-netcheck-up libvirt-guests.sh[57602]: no
> running guests.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]:
> libvirt-guests.service: Succeeded.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopped
> Suspend/Resume Running libvirt Guests.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopped target
> Libvirt guests shutdown.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopping Libvirt
> guests shutdown.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopping
> Virtualization daemon...
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: libvirtd.service: Succeeded.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: libvirtd.service:
> Unit process 343 (dnsmasq) remains running after unit stopped.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: libvirtd.service:
> Unit process 344 (dnsmasq) remains running after unit stopped.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Stopped Virtualization daemon.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: libvirtd.service:
> Found left-over process 343 (dnsmasq) in control group while starting
> unit. Ignoring.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: This usually
> indicates unclean termination of a previous run, or service
> implementation deficiencies.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: libvirtd.service:
> Found left-over process 344 (dnsmasq) in control group while starting
> unit. Ignoring.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: This usually
> indicates unclean termination of a previous run, or service
> implementation deficiencies.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Starting
> Virtualization daemon...
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Started Virtualization daemon.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Reached target
> Libvirt guests shutdown.
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Starting
> Suspend/Resume Running libvirt Guests...
> Jan 27 07:52:57 h-libvirt-netcheck-up systemd[1]: Finished
> Suspend/Resume Running libvirt Guests.
> 
> 
> [1]: https://gitlab.com/libvirt/libvirt/-/commit/f035f53baa2e5dc00b8e866e594672a90b4cea78
> [2]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=955216
>