Networkmanager service is shutdown too early
Alan Cox
alan at redhat.com
Mon Jun 2 09:24:22 UTC 2008
On Sun, Jun 01, 2008 at 09:14:37AM -0400, Dan Williams wrote:
> Suddenly all the state dependent on a D-Bus service is suspect, because
> you have no idea what's going on while the bus is down. You have to
> re-synchronize your state after the bus comes back, and that's not a
> simple task.
No. This is a myth.
It is *desirable* to resynchronize state. Dbus clients come and go and get
restarted (or do you want to argue the farcical 'any dbus connected
service cannot be restarted' in which case have a spade and keep digging)
> > - Why isn't there a recovery mechanism
>
> The recovery mechanism would be in each service, because the service
> knows whether or not it needs recovery or not, and would know how to
> merge/synchronize it's state with the services that it depends on. Some
> don't need to. But ones with state dependent on other D-Bus services
> would.
For 99% of cases if dbus sent a 'dbus restart' message (or the dbus library
did that) then application behaviour would be acceptable but not ideal if
- Applications ignored it
- Some applications just restarted themselves from scratch
Almost no work required
> it's communication channels with the daemons that affect that
> NM-specific state are gone, and NM can't make any assumptions about
> what's happening in any other daemon while the bus is gone. Maybe your
> VPN just came up for rekeying, but the signal got lost because D-Bus
> isn't around. So when the bus comes back, your VPN connection is
> already dropped.
Which is fine. In a proper model NM takes a "dbus exploded" message from
the support library and either restarts itself or reconfigures.
> > "oh dear it broke everyone reboot" is not good engineering.
>
> In some cases, it's a cost/benefit analysis. Is the cost of writing and
> maintaining a pile of code that handles a D-Bus restart, which shouldn't
> ever happen, worth the benefit? In some cases, definitely. In other
> cases, probably not. That isn't an excuse to write crappy software, but
> it's certainly not as simple of a problem as you present it.
For the complex cases like changing nautilus icons agreed but for the 99%
case the 'I missed it' and 'restart' responses are both better than praying
it doesn't occur.
Another approach of course would be to hang a persistant state daemon off
dbus which is the way a lot of object models actually work and which can
answer "last state of X was" - that also helps sort out a pile of runtime
ordering issues.
Alan
More information about the devel
mailing list