chiark / gitweb /
svc/conntrack: Add magic `down' peer tags.
[tripe] / svc / conntrack.in
index b80f92edc0a4e88cc2ca8c99fad12bac14f6614d..a7431321619423310c288ce43bd35b958f98ae7a 100644 (file)
@@ -253,7 +253,10 @@ def kickpeers():
         if upness and ip is None and \
               ipq is not None and (ipq & m) == a:
           map[t] = 'up'
-          want = t
+          if t == 'down' or t.startswith('down/'):
+            want = None
+          else:
+            want = t
           ip = ipq
         else:
           map[t] = 'down'
@@ -265,12 +268,25 @@ def kickpeers():
         if what == 'up':
           found = True
         elif what == 'down':
-          changes.append(lambda p=p: SM.kill(p))
+          def _(p = p):
+            try:
+              SM.kill(p)
+            except T.TripeError, exc:
+              if exc.args[0] == 'unknown-peer':
+                ## Inherently racy; don't worry about this.
+                pass
+              else:
+                raise
+          changes.append(_)
 
       ## Start the right one if necessary.
       if want is not None and (not found or ip != lastip.get(g, None)):
-        changes.append(lambda: T._simple(SM.svcsubmit('connect', 'active',
-                                                      want)))
+        def _(want = want):
+          try:
+            SM.svcsubmit('connect', 'active', want)
+          except T.TripeError, exc:
+            SM.warn('conntrack', 'connect-failed', want, *exc.args)
+        changes.append(_)
       lastip[g] = ip
 
     ## Commit the changes.