X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/474ac4c5badb68ee2f2380d94d80ee864afc1ef8..76a24ae6cece0604e3155b628622a4b425cb77f3:/svc/watch.in diff --git a/svc/watch.in b/svc/watch.in index 995ac500..140f1fce 100644 --- a/svc/watch.in +++ b/svc/watch.in @@ -525,26 +525,35 @@ class Pinger (T.Coroutine): installed, and again by the dbwatcher coroutine when it detects a change to the database. """ + if T._debug: print '# rescan peers' correct = {} + start = {} for peer in S.list(): try: info = peerinfo(peer) except KeyError: continue if boolean(info, 'watch', False): - correct[peer] = info + if T._debug: print '# interesting peer %s' % peer + correct[peer] = start[peer] = info + elif startup: + if T._debug: print '# peer %s ready for adoption' % peer + start[peer] = info for peer, obj in me._peers.items(): if peer in correct: obj.update(correct[peer]) else: + if T._debug: print '# peer %s vanished' % peer del me._peers[peer] - for peer, info in correct.iteritems(): + for peer, info in start.iteritems(): if peer not in me._peers: if startup: + if T._debug: print '# setting up peer %s' % peer ifname = S.ifname(peer) addr = S.addr(peer) - addpeer(info, peer, ifname, *addr) + T.defer(addpeer, info, peer, ifname, *addr) else: + if T._debug: print '# adopting new peer %s' % peer me.add(peer, info, True) return me @@ -614,9 +623,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) @@ -631,7 +642,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): """ @@ -687,7 +699,7 @@ def init(): errorwatch = ErrorWatch() childwatch = ChildWatch() pinger = Pinger() - T.Coroutine(dbwatch).switch() + T.Coroutine(dbwatch, name = 'dbwatch').switch() errorwatch.switch() pinger.switch()