X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/b10a8c3d8ffee143a0da007377fe641c24761782..01c94fa1b6e5db0dd2b1c6d05f1f598c21fe493d:/svc/conntrack.in diff --git a/svc/conntrack.in b/svc/conntrack.in index b80f92ed..a7431321 100644 --- a/svc/conntrack.in +++ b/svc/conntrack.in @@ -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.