Disassociate public key tags from peer names.
[tripe] / svc / watch.in
index be184b4..e058ed8 100644 (file)
@@ -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()