commit 984e3a9c6c4d193e095c376637321c0bfa371c08 Merge: 00b57e81f8 cac612af42 Author: Nick Mathewson nickm@torproject.org Date: Wed Aug 18 08:43:31 2021 -0400
Merge remote-tracking branch 'tor-gitlab/mr/420'
changes/ticket40434 | 6 ++++++ src/feature/dirclient/dirclient.c | 17 ++++++++++++++++- src/feature/dircommon/directory.h | 6 ++++++ 3 files changed, 28 insertions(+), 1 deletion(-)
diff --cc src/feature/dirclient/dirclient.c index a2b20621a0,f2e1e5b5ff..4e9c8e2f45 --- a/src/feature/dirclient/dirclient.c +++ b/src/feature/dirclient/dirclient.c @@@ -708,8 -734,26 +708,23 @@@ connection_dir_client_request_failed(di * failed. */ entry_guard_failed(&conn->guard_state); } - if (directory_conn_is_self_reachability_test(conn)) { - return; /* this was a test fetch. don't retry. */ - } if (!entry_list_is_constrained(get_options())) - router_set_status(conn->identity_digest, 0); /* don't try this one again */ + /* We must not set a directory to non-running for HS purposes else we end + * up flagging nodes from the hashring has unusable. It doesn't have direct + * effect on the HS subsystem because the nodes are selected regardless of + * their status but still, we shouldn't flag them as non running. + * + * One example where this can go bad is if a tor instance gets added a lot + * of ephemeral services and with a network with problem then many nodes in + * the consenus ends up unusable. + * + * Furthermore, a service does close any pending directory connections + * before uploading a descriptor and thus we can end up here in a natural + * way since closing a pending directory connection leads to this code + * path. */ + if (!DIR_PURPOSE_IS_HS(TO_CONN(conn)->purpose)) { + router_set_status(conn->identity_digest, 0); + } if (conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC || conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) { log_info(LD_DIR, "Giving up on serverdesc/extrainfo fetch from " diff --cc src/feature/dircommon/directory.h index f233e8b244,2cd9c176c8..7d861682bb --- a/src/feature/dircommon/directory.h +++ b/src/feature/dircommon/directory.h @@@ -78,8 -84,15 +78,14 @@@ const dir_connection_t *CONST_TO_DIR_CO ((p)==DIR_PURPOSE_UPLOAD_DIR || \ (p)==DIR_PURPOSE_UPLOAD_VOTE || \ (p)==DIR_PURPOSE_UPLOAD_SIGNATURES || \ - (p)==DIR_PURPOSE_UPLOAD_RENDDESC_V2 || \ (p)==DIR_PURPOSE_UPLOAD_HSDESC)
+ /** True iff p is a purpose corresponding to onion service that is either + * uploading or fetching actions. */ + #define DIR_PURPOSE_IS_HS(p) \ + ((p) == DIR_PURPOSE_FETCH_HSDESC || \ + (p) == DIR_PURPOSE_UPLOAD_HSDESC) + enum compress_method_t; int parse_http_response(const char *headers, int *code, time_t *date, enum compress_method_t *compression, char **response);
tor-commits@lists.torproject.org