diff --git a/ChangeLog b/ChangeLog index fd4fce3e86..e97b06ec74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,11 +8,11 @@ Changes in version 0.2.0.6-alpha - 2007-??-?? proportionally less, since they already have enough load. Patch from Mike Perry. - Raise the "max believable bandwidth" from 1.5MB/s to 10MB/s. This - will allow fast Tor servers to get more attention. Also, when we're - upgrading from an old Tor version, forget our current guards and - pick new ones according to the new weightings. The resulting load - balancing improvement could raise effective network capacity by - a factor of four. Thanks to Mike Perry for measurements. + will allow fast Tor servers to get more attention. + - When we're upgrading from an old Tor version, forget our current + guards and pick new ones according to the new weightings. These + three load balancing patches could raise effective network capacity + by a factor of four. Thanks to Mike Perry for measurements. o Major bugfixes: - Handle unexpected whitespace better in malformed descriptors. Bug diff --git a/src/or/routerlist.c b/src/or/routerlist.c index c439d48f18..629e717150 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -1287,8 +1287,6 @@ get_max_believable_bandwidth(void) * some in the list because they exit to obscure ports. If not for_exit, * we're picking a non-exit node: weight exit-node's bandwidth less * depending on the smallness of the fraction of Exit-to-total bandwidth. - * Beware: this flag is often abused to force uniform selection when - * we are not actually choosing exits! * * If for_guard, we're picking a guard node: consider all guard's * bandwidth equally. Otherwise, weight guards proportionally less. @@ -1358,18 +1356,14 @@ smartlist_choose_by_bandwidth(smartlist_t *sl, int for_exit, int for_guard, /* if they claim something huge, don't believe it */ if (this_bw > max_believable_bw) { char fp[HEX_DIGEST_LEN+1]; - if (status) { - base16_encode(fp, sizeof(fp), - status->identity_digest, DIGEST_LEN); - } else if (router) { - base16_encode(fp, sizeof(fp), - router->cache_info.identity_digest, DIGEST_LEN); - } - log_notice(LD_DIR, - "Bandwidth %d for router %s (%s) exceeds allowed max %d, capping", - this_bw, router ? router->nickname : "(null)", - status || router ? fp : "0", - max_believable_bw); + base16_encode(fp, sizeof(fp), statuses ? + status->identity_digest : + router->cache_info.identity_digest, + DIGEST_LEN); + log_fn(LOG_PROTOCOL_WARN, LD_DIR, + "Bandwidth %d for router %s (%s) exceeds allowed max %d, capping", + this_bw, router ? router->nickname : "(null)", + fp, max_believable_bw); this_bw = max_believable_bw; } if (is_known) { @@ -1473,10 +1467,10 @@ smartlist_choose_by_bandwidth(smartlist_t *sl, int for_exit, int for_guard, ", guard bw = "U64_FORMAT ", nonguard bw = "U64_FORMAT", guard weight = %lf " "(for guard == %d)", - U64_PRINTF_ARG(total_bw), - U64_PRINTF_ARG(total_exit_bw), U64_PRINTF_ARG(total_nonexit_bw), + U64_PRINTF_ARG(total_bw), + U64_PRINTF_ARG(total_exit_bw), U64_PRINTF_ARG(total_nonexit_bw), exit_weight, for_exit, - U64_PRINTF_ARG(total_guard_bw), U64_PRINTF_ARG(total_nonguard_bw), + U64_PRINTF_ARG(total_guard_bw), U64_PRINTF_ARG(total_nonguard_bw), guard_weight, for_guard); /* Almost done: choose a random value from the bandwidth weights. */ @@ -1495,7 +1489,7 @@ smartlist_choose_by_bandwidth(smartlist_t *sl, int for_exit, int for_guard, tmp += ((uint64_t)(bandwidths[i] * guard_weight)); else if (is_exit) tmp += ((uint64_t)(bandwidths[i] * exit_weight)); - else + else tmp += bandwidths[i]; if (tmp >= rand_bw)