[tor-commits] [sbws/master] fix: v3bwfile: Change from_results to set
juga at torproject.org
juga at torproject.org
Wed Mar 27 12:42:11 UTC 2019
commit d2752c009f1405c997a1fa63e026b3648427b16c
Author: juga0 <juga at riseup.net>
Date: Fri Mar 22 17:03:07 2019 +0000
fix: v3bwfile: Change from_results to set
under_min_report KeyValue when the minimum percent is not reached.
Also change list by int the methods that calculate the progress.
Part of #29853.
---
sbws/lib/v3bwfile.py | 44 +++++++++++++++++++++++++++++++-------------
1 file changed, 31 insertions(+), 13 deletions(-)
diff --git a/sbws/lib/v3bwfile.py b/sbws/lib/v3bwfile.py
index d126ad6..a4ce748 100644
--- a/sbws/lib/v3bwfile.py
+++ b/sbws/lib/v3bwfile.py
@@ -930,12 +930,17 @@ class V3BWFile(object):
header.add_relays_excluded_counters(exclusion_dict)
if not bw_lines_raw:
+ # It could be possible to scale the lines that were successful
+ # even if excluded, but is not done here.
log.info("After applying restrictions to the raw results, "
"there is not any. Scaling can not be applied.")
+ # Update the header and log the progress.
cls.update_progress(
- cls, bw_lines_raw, header, number_consensus_relays, state)
- # Create the bandwidth file with the excluded lines that does not
- # have ``bw`` attribute
+ cls, 0, header, number_consensus_relays, state)
+ # Set the lines that would be excluded anyway (`vote=0`) with
+ # `under_min_report=1`
+ cls.set_under_min_report(bw_lines_excluded)
+ # Create the bandwidth file with the lines that would be excluded.
return cls(header, bw_lines_excluded)
if scaling_method == SBWS_SCALING:
bw_lines = cls.bw_sbws_scale(bw_lines_raw, scale_constant)
@@ -945,8 +950,14 @@ class V3BWFile(object):
bw_lines = cls.bw_torflow_scale(bw_lines_raw, torflow_obs,
torflow_cap, round_digs)
# log.debug(bw_lines[-1])
- cls.update_progress(
- cls, bw_lines, header, number_consensus_relays, state)
+ # Update the header and log the progress.
+ min_perc = cls.update_progress(
+ cls, len(bw_lines), header, number_consensus_relays, state
+ )
+ # If after scaling the number of lines is less than the percentage
+ # of lines to report, set them with `under_min_report`.
+ if not min_perc:
+ cls.set_under_min_report(bw_lines)
else:
bw_lines = cls.bw_kb(bw_lines_raw)
# log.debug(bw_lines[-1])
@@ -1275,7 +1286,7 @@ class V3BWFile(object):
return num
@staticmethod
- def measured_progress_stats(bw_lines, number_consensus_relays,
+ def measured_progress_stats(num_bw_lines, number_consensus_relays,
min_perc_reached_before):
""" Statistics about measurements progress,
to be included in the header.
@@ -1293,14 +1304,14 @@ class V3BWFile(object):
# It will not be updated to the last consensus, but the list of
# measured relays is not either.
assert isinstance(number_consensus_relays, int)
- assert isinstance(bw_lines, list)
+ assert isinstance(num_bw_lines, int)
statsd = {}
- statsd['number_eligible_relays'] = len(bw_lines)
+ statsd['number_eligible_relays'] = num_bw_lines
statsd['number_consensus_relays'] = number_consensus_relays
statsd['minimum_number_eligible_relays'] = round(
statsd['number_consensus_relays'] * MIN_REPORT / 100)
statsd['percent_eligible_relays'] = round(
- len(bw_lines) * 100 / statsd['number_consensus_relays'])
+ num_bw_lines * 100 / statsd['number_consensus_relays'])
statsd['minimum_percent_eligible_relays'] = MIN_REPORT
if statsd['number_eligible_relays'] < \
statsd['minimum_number_eligible_relays']:
@@ -1356,20 +1367,27 @@ class V3BWFile(object):
['sum_bw', 'mean_bw', 'median_bw', 'num',
'max_bw', 'min_bw']]
- def update_progress(self, bw_lines, header, number_consensus_relays,
+ def update_progress(self, num_bw_lines, header, number_consensus_relays,
state):
+ """
+ Returns True if the minimim percent of Bandwidth Lines was reached
+ and False otherwise.
+ Update the header with the progress.
+ """
min_perc_reached_before = state.get('min_perc_reached')
if number_consensus_relays is not None:
statsd, success = self.measured_progress_stats(
- bw_lines, number_consensus_relays, min_perc_reached_before)
+ num_bw_lines, number_consensus_relays, min_perc_reached_before)
# add statistics about progress always
header.add_stats(**statsd)
if not success:
- bw_lines = []
+ # From sbws 1.1.0 the lines are reported (#29853) even if they
+ # are less than the minimum percent.
state['min_perc_reached'] = None
+ return False
else:
state['min_perc_reached'] = now_isodt_str()
- return bw_lines
+ return True
def bw_line_for_node_id(self, node_id):
"""Returns the bandwidth line for a given node fingerprint.
More information about the tor-commits
mailing list