[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/main] Merge branch 'maint-0.4.5' into maint-0.4.6
commit 474c85a98d56ebf8cef11cea59728fdf3e5f39d3
Merge: 82b7939d19 a53c949dcf
Author: David Goulet <dgoulet@xxxxxxxxxxxxxx>
Date: Wed Oct 6 15:35:43 2021 -0400
Merge branch 'maint-0.4.5' into maint-0.4.6
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 fd677d33fe,f2e1e5b5ff..0b6a8101a5
--- 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 mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits