[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r12755: If we can't expand our list of entry guards (e.g. because we (in tor/trunk: . src/or)
Author: arma
Date: 2007-12-10 12:16:41 -0500 (Mon, 10 Dec 2007)
New Revision: 12755
Modified:
tor/trunk/ChangeLog
tor/trunk/src/or/circuitbuild.c
tor/trunk/src/or/directory.c
tor/trunk/src/or/or.h
Log:
If we can't expand our list of entry guards (e.g. because we're
using bridges or we have StrictEntryNodes set), don't mark relays
down when they fail a directory request. Otherwise we're too quick
to mark all our entry points down.
Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog 2007-12-10 16:49:54 UTC (rev 12754)
+++ tor/trunk/ChangeLog 2007-12-10 17:16:41 UTC (rev 12755)
@@ -51,6 +51,10 @@
running an obsolete version, it used the string "OLD" to describe
it. Yet the "getinfo" interface used the string "OBSOLETE". Now use
"OBSOLETE" in both cases.
+ - If we can't expand our list of entry guards (e.g. because we're
+ using bridges or we have StrictEntryNodes set), don't mark relays
+ down when they fail a directory request. Otherwise we're too quick
+ to mark all our entry points down.
o Minor features:
- On USR1, when dmalloc is in use, log the top 10 memory
Modified: tor/trunk/src/or/circuitbuild.c
===================================================================
--- tor/trunk/src/or/circuitbuild.c 2007-12-10 16:49:54 UTC (rev 12754)
+++ tor/trunk/src/or/circuitbuild.c 2007-12-10 17:16:41 UTC (rev 12755)
@@ -2430,8 +2430,8 @@
/** Return 1 if we're fine adding arbitrary routers out of the
* directory to our entry guard list. Else return 0. */
-static int
-can_grow_entry_list(or_options_t *options)
+int
+entry_list_can_grow(or_options_t *options)
{
if (options->StrictEntryNodes)
return 0;
@@ -2469,7 +2469,7 @@
if (should_add_entry_nodes)
entry_guards_prepend_from_config();
- if (can_grow_entry_list(options) &&
+ if (entry_list_can_grow(options) &&
(! entry_guards ||
smartlist_len(entry_guards) < options->NumEntryGuards))
pick_entry_guards();
@@ -2498,7 +2498,7 @@
* using him.
* (We might get 2 live-but-crummy entry guards, but so be it.) */
if (smartlist_len(live_entry_guards) < 2) {
- if (can_grow_entry_list(options)) {
+ if (entry_list_can_grow(options)) {
/* still no? try adding a new entry then */
/* XXX if guard doesn't imply fast and stable, then we need
* to tell add_an_entry_guard below what we want, or it might
@@ -2518,7 +2518,7 @@
need_capacity = 0;
goto retry;
}
- if (!r && !can_grow_entry_list(options) && consider_exit_family) {
+ if (!r && !entry_list_can_grow(options) && consider_exit_family) {
/* still no? if we're using bridges or have strictentrynodes
* set, and our chosen exit is in the same family as all our
* bridges/entry guards, then be flexible about families. */
Modified: tor/trunk/src/or/directory.c
===================================================================
--- tor/trunk/src/or/directory.c 2007-12-10 16:49:54 UTC (rev 12754)
+++ tor/trunk/src/or/directory.c 2007-12-10 17:16:41 UTC (rev 12755)
@@ -500,7 +500,8 @@
me->address, me->dir_port);
return; /* this was a test fetch. don't retry. */
}
- router_set_status(conn->identity_digest, 0); /* don't try him again */
+ if (entry_list_can_grow(get_options()))
+ router_set_status(conn->identity_digest, 0); /* don't try him again */
if (conn->_base.purpose == DIR_PURPOSE_FETCH_DIR ||
conn->_base.purpose == DIR_PURPOSE_FETCH_RUNNING_LIST) {
log_info(LD_DIR, "Giving up on directory server at '%s:%d'; retrying",
Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h 2007-12-10 16:49:54 UTC (rev 12754)
+++ tor/trunk/src/or/or.h 2007-12-10 17:16:41 UTC (rev 12755)
@@ -2481,6 +2481,7 @@
int entry_guard_register_connect_status(const char *digest, int succeeded,
time_t now);
void entry_nodes_should_be_added(void);
+int entry_list_can_grow(or_options_t *options);
routerinfo_t *choose_random_entry(cpath_build_state_t *state);
int entry_guards_parse_state(or_state_t *state, int set, char **msg);
void entry_guards_update_state(or_state_t *state);