Graceful shutdown request signal
Maria Matejka
maria.matejka at nic.cz
Wed Jun 21 13:57:57 CEST 2023
Hello Alexander,
you're right, catching up with all the running session and restoring the
full internal state would be a nightmare. I think it is doable but too
difficult (and labour-costly) to get it right. Regarding the need for
graceful restart support anyway, I don't see much of a good reason to
prefer this over a regular graceful restart.
Maria
On 6/21/23 13:41, Alexander Zubkov wrote:
> Hello Maria,
>
> Regarding restarts, I think the killer feature might be some sort of
> restart, when bird execs a new binary, keeping all the file
> descriptors open and its state somehow. So the new instance could
> transparently catch up with all the running sessions, etc. It can
> serialize the internal state somehow and then reinitialize it from
> that. But I'm afraid it would require a great effort to implement
> something like that.
>
> On Wed, Jun 21, 2023, 08:58 Maria Matejka via Bird-users
> <bird-users at network.cz> wrote:
>
> Hello Daniel,
>
> On 21 June 2023 01:03:50 CEST, "Daniel Gröber"
> <dxld at darkboxed.org> wrote:
> >Hi Erin,
> >
> >On Tue, Jun 20, 2023 at 08:20:50PM +0200, Erin Shepherd wrote:
> >> I run bird on a system which uses systemd as a service
> supervisor, and
> >> would like to implement graceful restart in a way which works
> well with
> >> it.
> >
> >I'm also interested in getting this working. I'm wondering how
> graceful
> >restart is supposed to behave to begin with though. Last time I
> just tried
> >`birdc graceful restart` I was surprised that this actually makes
> bird exit
> >with rv=0 instead of ... well actually restarting.
> >
> >Is that normal or a bug in the Debian packaging/systemd service?
>
> You're supposed to start BIRD again on your terms. It's a
> misleading command wording, kind of. I don't know whether it's a
> good idea to actually exec from the shutdown cycle. Will think
> about it. It may be a nice feature.
>
> >I suppose if you're supposed to use graceful restart just before
> rebooting
> >the system it makes sense but at the time I just wanted to do a full
> >restart to update the running bird executable without causing traffic
> >disruption and was rather surprised when it didn't come back up.
>
> Yes, these two different use cases were what we were choosing from
> when implementing this.
>
>
> >> In particular, what I'd like to do is:
> >> • If I restart the bird service (e.g. for an upgrade), Bird
> performs a graceful restart
> >> • If I manually stop bird (systemctl stop bird2), shutdown the
> system, or any other action which is liable to cause a longer
> period of downtime, perform a graceful restart (for BGP at least)
> >
> >When you want to tickle special behaviour out of systemd I found
> it best to
> >not try and do everything in one unit. Using the dependency
> system you can
> >stop another unit before bird.service gets stopped, this can then
> call
> >birdc graceful restart, like this:
> >
> >bird-graceful-restart.service:
> >
> > [Unit]
> > After=bird.service
> > Requires=bird.service
> > [Service]
> > Type=oneshot
> > RemainAfterExit=yes
> > ExecStop=birdc graceful restart
> > [Install]
> > WantedBy=bird.service
> >
> >That way you can enable/disable system wide graceful bird restart by
> >`systemctl enable bird-graceful-restart.service`.
> >
> >The BindsTo+After means stopping bird.service (which is part of
> restart)
> >will first stop bird-graceful-restart.service, which can then
> casually
> >signal bird to perform graceful restart without a race (I
> >think). WanteBy=bird.service is needed as ExecStop will only run
> when a
> >service has actually been started.
> >
> >Also some special handling for the case where bird is already
> gone (crashed
> >or exited) and birdc would fail might be needed. Excercise for
> the reader :)
> >
> >Doing some quick testing this actually seems to do what I want.
> Somewhat
> >unexpectedly `systemctl restart bird.servce` with the above
> enabled does
> >then actually do what you'd expect since restart is just
> stop+start. Bird
> >will exit on getting the graceful restart command so systemd
> can't try to
> >stop it some more but the subsequent start will make it come back
> up. Neat.
> >
> >On system shutdown only the stop part will happen so bird exiting is
> >actully useful now and that too should work as expected.
>
> If there was somebody to implement this additional Systemd unit
> and provide it as a patch, we'd happily merge it.
>
> Thank you for all the ideas!
> Maria
>
> --
> Maria Matejka (she/her) | BIRD Team Leader | CZ.NIC, z.s.p.o.
>
--
Maria Matejka (she/her) | BIRD Team Leader | CZ.NIC, z.s.p.o.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20230621/eb87bc5d/attachment.htm>
More information about the Bird-users
mailing list