chiark
/
gitweb
/
~mdw
/
tripe
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
server/tests.at: Fix TRIPECTL_INTERACT argument order.
[tripe]
/
svc
/
watch.in
diff --git
a/svc/watch.in
b/svc/watch.in
index bfad160cf7178c1441fe05df5757623bcc9247a9..e058ed8e7db17fa98d4c2b098c239ec73d980389 100644
(file)
--- a/
svc/watch.in
+++ b/
svc/watch.in
@@
-399,12
+399,22
@@
class PingPeer (object):
"""
S.rawcommand(T.TripeAsynchronousCommand(
me._q, (me._peer, me.seq),
"""
S.rawcommand(T.TripeAsynchronousCommand(
me._q, (me._peer, me.seq),
- ['PING',
+ ['
E
PING',
'-background', S.bgtag(),
'-timeout', str(me._timeout),
'--',
me._peer]))
'-background', S.bgtag(),
'-timeout', str(me._timeout),
'--',
me._peer]))
+ def _reconnect(me):
+ info = peerinfo(me._peer)
+ if 'connect' in info:
+ S.warn('watch', 'reconnecting', me._peer)
+ S.forcekx(me._peer)
+ T.spawn(connect, me._peer)
+ me._timer = M.SelTimer(time() + me._every, me._time)
+ else:
+ S.kill(me._peer)
+
def event(me, code, stuff):
"""
Respond to an event which happened to this peer.
def event(me, code, stuff):
"""
Respond to an event which happened to this peer.
@@
-422,8
+432,12
@@
class PingPeer (object):
me._ping()
elif code == 'FAIL':
S.notify('watch', 'ping-failed', me._peer, *stuff)
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)
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:
elif code == 'INFO':
if stuff[0] == 'ping-ok':
if me._failures > 0:
@@
-436,14
+450,7
@@
class PingPeer (object):
if me._failures < me._retries:
me._ping()
else:
if me._failures < me._retries:
me._ping()
else:
- info = peerinfo(me._peer)
- if 'connect' in info:
- S.warn('watch', 'reconnecting', me._peer)
- S.forcekx(me._peer)
- T.spawn(T.Coroutine(connect), me._peer)
- me._timer = M.SelTimer(time() + me._every, me._time)
- else:
- S.kill(me._peer)
+ me._reconnect()
elif stuff[0] == 'ping-peer-died':
me._pinger.kill(me._peer)
elif stuff[0] == 'ping-peer-died':
me._pinger.kill(me._peer)
@@
-536,7
+543,7
@@
class Pinger (T.Coroutine):
if startup:
ifname = S.ifname(peer)
addr = S.addr(peer)
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
else:
me.add(peer, info, True)
return me
@@
-607,9
+614,11
@@
def addpeer(info, peer, ifname, *addr):
except KeyError:
return
if 'ifup' in info:
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:
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)
if boolean(info, 'watch', False):
pinger.add(peer, info, False)
@@
-624,7
+633,8
@@
def delpeer(peer):
except KeyError:
pass
if 'ifdown' in info:
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):
"""
def notify(_, code, *rest):
"""
@@
-650,7
+660,7
@@
def cmd_kick(peer):
"""
if peer not in pinger.adopted():
raise T.TripeJobError('peer-not-adopted', peer)
"""
if peer not in pinger.adopted():
raise T.TripeJobError('peer-not-adopted', peer)
- T.spawn(
T.Coroutine(connect)
, peer)
+ T.spawn(
connect
, peer)
def cmd_adopted():
"""
def cmd_adopted():
"""
@@
-680,7
+690,7
@@
def init():
errorwatch = ErrorWatch()
childwatch = ChildWatch()
pinger = Pinger()
errorwatch = ErrorWatch()
childwatch = ChildWatch()
pinger = Pinger()
- T.Coroutine(dbwatch).switch()
+ T.Coroutine(dbwatch
, name = 'dbwatch'
).switch()
errorwatch.switch()
pinger.switch()
errorwatch.switch()
pinger.switch()