~mdw
/
tripe
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'mdw/multi-priv'
[tripe]
/
svc
/
watch.in
diff --git
a/svc/watch.in
b/svc/watch.in
index
bc904bd
..
5917c79
100644
(file)
--- 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.
"""
installed, and again by the dbwatcher coroutine when it detects a change
to the database.
"""
+ if T._debug: print '# rescan peers'
correct = {}
correct = {}
+ start = {}
for peer in S.list():
try:
info = peerinfo(peer)
except KeyError:
continue
if boolean(info, 'watch', False):
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:
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]
del me._peers[peer]
- for peer, info in
correc
t.iteritems():
+ for peer, info in
star
t.iteritems():
if peer not in me._peers:
if startup:
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)
T.defer(addpeer, info, peer, ifname, *addr)
else:
ifname = S.ifname(peer)
addr = S.addr(peer)
T.defer(addpeer, info, peer, ifname, *addr)
else:
+ if T._debug: print '# adopting new peer %s' % peer
me.add(peer, info, True)
return me
me.add(peer, info, True)
return me
@@
-568,15
+577,15
@@
def encode_envvars(env, prefix, vars):
env[prefix + r_bad.sub('_', k.upper())] = v
r_bad = RX.compile(r'[\W_]+')
env[prefix + r_bad.sub('_', k.upper())] = v
r_bad = RX.compile(r'[\W_]+')
-def envvars(info):
+def envvars(
peer,
info):
"""
"""
- Translate the database INFO dictionary for a
peer
into a dictionary of
+ Translate the database INFO dictionary for a
PEER
into a dictionary of
environment variables with plausible upper-case names and a P_ prefix.
Also collect the crypto information into A_ variables.
"""
env = {}
encode_envvars(env, 'P_', info)
environment variables with plausible upper-case names and a P_ prefix.
Also collect the crypto information into A_ variables.
"""
env = {}
encode_envvars(env, 'P_', info)
- encode_envvars(env, 'A_', S.algs())
+ encode_envvars(env, 'A_', S.algs(
peer
))
return env
def ifupdown(what, peer, info, *args):
return env
def ifupdown(what, peer, info, *args):
@@
-593,7
+602,7
@@
def ifupdown(what, peer, info, *args):
c = Command([what, peer], q, what,
M.split(info[what], quotep = True)[0] +
[peer] + list(args),
c = Command([what, peer], q, what,
M.split(info[what], quotep = True)[0] +
[peer] + list(args),
- envvars(info))
+ envvars(
peer,
info))
potwatch(what, peer, q)
def addpeer(info, peer, ifname, *addr):
potwatch(what, peer, q)
def addpeer(info, peer, ifname, *addr):
@@
-614,9
+623,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)
@@
-631,7
+642,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):
"""
@@
-687,7
+699,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()