diff --git a/changes/bug3196 b/changes/bug3196 new file mode 100644 index 0000000000..9321022675 --- /dev/null +++ b/changes/bug3196 @@ -0,0 +1,7 @@ + o Minor features: + - Raise the threshold of server descriptors needed (75%) and exit + server descriptors needed (50%) before we will declare ourselves + bootstrapped. This will make clients declare completion a little + later, but makes the initially constructed circuits less weird + and less in conflict with directory connections. Fixes ticket + #3196. diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 0abc2e9bcf..36a282a30f 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -5004,7 +5004,14 @@ update_router_have_minimum_dir_info(void) count_usable_descriptors(&num_exit_present, &num_exit_usable, consensus, options, now, options->ExitNodes, 1); - if (num_present < num_usable/4) { +/* What fraction of desired server descriptors do we need before we will + * build circuits? */ +#define FRACTION_USABLE_NEEDED .75 +/* What fraction of desired _exit_ server descriptors do we need before we + * will build circuits? */ +#define FRACTION_EXIT_USABLE_NEEDED .5 + + if (num_present < num_usable * FRACTION_USABLE_NEEDED) { tor_snprintf(dir_info_status, sizeof(dir_info_status), "We have only %d/%d usable %sdescriptors.", num_present, num_usable, using_md ? "micro" : ""); @@ -5017,7 +5024,7 @@ update_router_have_minimum_dir_info(void) num_present, using_md ? "micro" : "", num_present ? "" : "s"); res = 0; goto done; - } else if (num_exit_present < num_exit_usable / 3) { + } else if (num_exit_present < num_exit_usable * FRACTION_EXIT_USABLE_NEEDED) { tor_snprintf(dir_info_status, sizeof(dir_info_status), "We have only %d/%d usable exit node descriptors.", num_exit_present, num_exit_usable);