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))
{
* 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
};
/**
{
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;
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;
}
{
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))
{