X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/690a6ec147f76213263b58a8a7fd82b28dde349a..48b845698dcf3ec4b9f8b9f1848a157f0245d7cc:/svc/watch.in diff --git a/svc/watch.in b/svc/watch.in index be184b47..e058ed8e 100644 --- a/svc/watch.in +++ b/svc/watch.in @@ -399,7 +399,7 @@ class PingPeer (object): """ S.rawcommand(T.TripeAsynchronousCommand( me._q, (me._peer, me.seq), - ['PING', + ['EPING', '-background', S.bgtag(), '-timeout', str(me._timeout), '--', @@ -432,8 +432,12 @@ class PingPeer (object): me._ping() elif code == 'FAIL': S.notify('watch', 'ping-failed', me._peer, *stuff) - if stuff and stuff[0] == 'unknown-peer': + if not stuff: + pass + elif stuff[0] == 'unknown-peer': me._pinger.kill(me._peer) + elif stuff[0] == 'ping-send-failed': + me._reconnect() elif code == 'INFO': if stuff[0] == 'ping-ok': if me._failures > 0: @@ -539,7 +543,7 @@ class Pinger (T.Coroutine): if startup: ifname = S.ifname(peer) addr = S.addr(peer) - addpeer(info, peer, ifname, *addr) + T.defer(addpeer, info, peer, ifname, *addr) else: me.add(peer, info, True) return me @@ -610,9 +614,11 @@ def addpeer(info, peer, ifname, *addr): except KeyError: return if 'ifup' in info: - T.Coroutine(ifupdown).switch('ifup', peer, info, ifname, *addr) + T.Coroutine(ifupdown, name = 'ifup %s' % peer) \ + .switch('ifup', peer, info, ifname, *addr) if 'connect' in info: - T.Coroutine(connect).switch(peer, info['connect']) + T.Coroutine(connect, name = 'connect %s' % peer) \ + .switch(peer, info['connect']) if boolean(info, 'watch', False): pinger.add(peer, info, False) @@ -627,7 +633,8 @@ def delpeer(peer): except KeyError: pass if 'ifdown' in info: - T.Coroutine(ifupdown).switch('ifdown', peer, info) + T.Coroutine(ifupdown, name = 'ifdown %s' % peer) \ + .switch('ifdown', peer, info) def notify(_, code, *rest): """ @@ -683,7 +690,7 @@ def init(): errorwatch = ErrorWatch() childwatch = ChildWatch() pinger = Pinger() - T.Coroutine(dbwatch).switch() + T.Coroutine(dbwatch, name = 'dbwatch').switch() errorwatch.switch() pinger.switch()