[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [chutney/master] wait_for_bootstrap: fix a race condition
commit 65e53b7563e4ade74ac8376726bfe07636059238
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Thu Mar 14 13:42:04 2019 -0400
wait_for_bootstrap: fix a race condition
Two problems here:
- The node status that we report on failure was not the same as
the most recent status that we checked. This meant that we
could declare that we weren't bootstrapped, while declaring
that every node was bootstrapped
- In addition to sleeping between the bootstrap checks, we also
slept after our final bootstrap check. This would increase
the likelihood of hitting the first bug above.
---
lib/chutney/TorNet.py | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/lib/chutney/TorNet.py b/lib/chutney/TorNet.py
index 4aec528..e48c1b7 100644
--- a/lib/chutney/TorNet.py
+++ b/lib/chutney/TorNet.py
@@ -1190,22 +1190,28 @@ class Network(object):
delay = 0.5
controllers = [n.getController() for n in self._nodes]
elapsed = 0.0
- while elapsed < limit:
+ most_recent_status = [ None ] * len(controllers)
+ while True:
all_bootstrapped = True
+ most_recent_status = [ ]
for c in controllers:
- if not c.isBootstrapped():
+ pct, kwd, msg = c.getLastBootstrapStatus()
+ most_recent_status.append((pct, kwd, msg))
+ if pct != 100:
all_bootstrapped = False
- break
+
if all_bootstrapped:
print("Everything bootstrapped after %s sec"%elapsed)
return True
+ if elapsed >= limit:
+ break
time.sleep(delay)
elapsed += delay
print("Bootstrap failed. Node status:")
- for c in controllers:
+ for c, status in zip(controllers,most_recent_status):
c.check(listRunning=False, listNonRunning=True)
- print("{}: {}".format(c.getNick(), c.getLastBootstrapStatus()))
+ print("{}: {}".format(c.getNick(), status))
return False
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits