diff options
-rw-r--r-- | src/dht/gnunet-dht-driver.c | 3 | ||||
-rw-r--r-- | src/dht/gnunet-service-dht.c | 26 |
2 files changed, 26 insertions, 3 deletions
diff --git a/src/dht/gnunet-dht-driver.c b/src/dht/gnunet-dht-driver.c index 6ebb4da8a5..4424a45f3c 100644 --- a/src/dht/gnunet-dht-driver.c +++ b/src/dht/gnunet-dht-driver.c @@ -1906,7 +1906,8 @@ count_peers_cb (void *cls, connection_estimate(num_peers, DEFAULT_BUCKET_SIZE), 2 * connection_estimate(num_peers, DEFAULT_BUCKET_SIZE)); - if ((find_peer_context->current_peers - find_peer_context->previous_peers > FIND_PEER_THRESHOLD) && + if ((find_peer_context->last_sent > 8) && + (find_peer_context->current_peers - find_peer_context->previous_peers > FIND_PEER_THRESHOLD) && (find_peer_context->current_peers < 2 * connection_estimate(num_peers, DEFAULT_BUCKET_SIZE)) && (GNUNET_TIME_absolute_get_remaining(find_peer_context->endtime).value > 0)) { diff --git a/src/dht/gnunet-service-dht.c b/src/dht/gnunet-service-dht.c index 5df8c33e3e..02cf9ae90c 100644 --- a/src/dht/gnunet-service-dht.c +++ b/src/dht/gnunet-service-dht.c @@ -198,7 +198,13 @@ enum ConvergenceOptions * the algorithm to hopefully route to closer * peers more often. */ - DHT_CONVERGE_RANDOM + DHT_CONVERGE_RANDOM, + + /** + * Binary convergence, start routing to closest + * only after set number of hops. + */ + DHT_CONVERGE_BINARY }; /** @@ -2886,7 +2892,7 @@ converge_distance (const GNUNET_HashCode *target, { unsigned long long ret; unsigned int other_matching_bits; - double base_converge_modifier = .1; + double base_converge_modifier = .1; /* Value that "looks" good (when plotted), have to start somewhere */ double temp_modifier; double calc_value; double exponent; @@ -2931,6 +2937,16 @@ converge_distance (const GNUNET_HashCode *target, else calc_value = (hops * hops) / curr_max_hops; break; + case DHT_CONVERGE_BINARY: + /** + * If below the cutoff, route randomly (return 1), + * If above the cutoff, return the maximum possible + * value first (always route to closest, because + * they are sorted.) + */ + if (hops > converge_modifier) /* Past cutoff */ + return ULLONG_MAX; + /* Fall through */ default: return 1; } @@ -4728,6 +4744,12 @@ run (void *cls, { converge_option = DHT_CONVERGE_RANDOM; } + else if (GNUNET_YES == + GNUNET_CONFIGURATION_get_value_yesno(cfg, "dht", + "converge_binary")) + { + converge_option = DHT_CONVERGE_BINARY; + } if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string(cfg, "dht_testing", "converge_modifier", &converge_modifier_buf)) { |