binary converge option in dht, make find peer requests more likely to be sent early...
authorNathan S. Evans <evans@in.tum.de>
Tue, 26 Oct 2010 10:33:01 +0000 (10:33 +0000)
committerNathan S. Evans <evans@in.tum.de>
Tue, 26 Oct 2010 10:33:01 +0000 (10:33 +0000)
src/dht/gnunet-dht-driver.c
src/dht/gnunet-service-dht.c

index 6ebb4da8a53e7482d6f1d66bfc6ffec113a8e054..4424a45f3c386e9a9ec11cf1e855efb35a2d478b 100644 (file)
@@ -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))
         {
index 5df8c33e3e31f5ee79821cab441e6e158b769eaa..02cf9ae90c4c6ddf809bb6bf5aee53f50cb4dd6d 100644 (file)
@@ -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))
     {