|
@@ -88,6 +88,19 @@ MUST_BE_RUNNING_NOW = (PERFORM_IPV4_DIRPORT_CHECKS
|
|
|
|
|
|
DOWNLOAD_MICRODESC_CONSENSUS = True
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+CONSENSUS_EXPIRY_TOLERANCE = 24*60*60
|
|
|
+
|
|
|
|
|
|
OUTPUT_COMMENTS = True if OUTPUT_CANDIDATES else False
|
|
|
|
|
@@ -1146,7 +1159,6 @@ class Candidate(object):
|
|
|
def fallback_consensus_download_speed(dirip, dirport, nickname, fingerprint,
|
|
|
max_time):
|
|
|
download_failed = False
|
|
|
- start = datetime.datetime.utcnow()
|
|
|
|
|
|
|
|
|
logging.info('Initiating %sconsensus download from %s (%s:%d) %s.',
|
|
@@ -1155,6 +1167,7 @@ class Candidate(object):
|
|
|
|
|
|
|
|
|
TIMEOUT_SLOP = 1.0
|
|
|
+ start = datetime.datetime.utcnow()
|
|
|
try:
|
|
|
consensus = get_consensus(
|
|
|
endpoints = [(dirip, dirport)],
|
|
@@ -1165,26 +1178,32 @@ class Candidate(object):
|
|
|
document_handler = DocumentHandler.BARE_DOCUMENT,
|
|
|
microdescriptor = DOWNLOAD_MICRODESC_CONSENSUS
|
|
|
).run()[0]
|
|
|
+ end = datetime.datetime.utcnow()
|
|
|
+ time_since_expiry = (end - consensus.valid_until).total_seconds()
|
|
|
except Exception, stem_error:
|
|
|
+ end = datetime.datetime.utcnow()
|
|
|
logging.info('Unable to retrieve a consensus from %s: %s', nickname,
|
|
|
stem_error)
|
|
|
status = 'error: "%s"' % (stem_error)
|
|
|
level = logging.WARNING
|
|
|
download_failed = True
|
|
|
- elapsed = (datetime.datetime.utcnow() - start).total_seconds()
|
|
|
+ elapsed = (end - start).total_seconds()
|
|
|
if download_failed:
|
|
|
-
|
|
|
+
|
|
|
pass
|
|
|
elif elapsed > max_time:
|
|
|
status = 'too slow'
|
|
|
level = logging.WARNING
|
|
|
download_failed = True
|
|
|
- elif datetime.datetime.utcnow() > consensus.valid_until:
|
|
|
- time_since_expiry = (datetime.datetime.utcnow() -
|
|
|
- consensus.valid_until).total_seconds()
|
|
|
+ elif (time_since_expiry > 0):
|
|
|
status = 'outdated consensus, expired %ds ago'%(int(time_since_expiry))
|
|
|
- level = logging.WARNING
|
|
|
- download_failed = True
|
|
|
+ if time_since_expiry <= CONSENSUS_EXPIRY_TOLERANCE:
|
|
|
+ status += ', tolerating up to %ds'%(CONSENSUS_EXPIRY_TOLERANCE)
|
|
|
+ level = logging.INFO
|
|
|
+ else:
|
|
|
+ status += ', invalid'
|
|
|
+ level = logging.WARNING
|
|
|
+ download_failed = True
|
|
|
else:
|
|
|
status = 'ok'
|
|
|
level = logging.DEBUG
|