[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-bugs] #20499 [Core Tor/Tor]: Relay/Bridge won't update the microdesc consensus while running
#20499: Relay/Bridge won't update the microdesc consensus while running
------------------------------+--------------------------------
Reporter: rubiate | Owner:
Type: defect | Status: new
Priority: Medium | Milestone:
Component: Core Tor/Tor | Version: Tor: 0.2.9.4-alpha
Severity: Normal | Keywords:
Actual Points: | Parent ID:
Points: | Reviewer:
Sponsor: |
------------------------------+--------------------------------
I am observing that my relay and bridge will update the microdesc
consensus when they are restarted or catch SIGHUP, but not while they are
running. In the case of the bridge, the consensus it serves eventually
falls out of date, and clients that try to connect through it will hang on
"I learned some more directory information, but not enough to build a
circuit: We have no recent usable consensus" and never connect to the
network.
The bridge and relay I seen this happening on are running 0.2.9.4-alpha on
OpenBSD. I also spun up a new bridge on Debian (also running
0.2.9.4-alpha) and it appears to have the same problem. This does not
appear to happen with 0.2.8.9.
What it looks like is happening:
At startup (or reload) the relay fetches the microdesc consensus
1 minute later it tries to fetch it again
(update_consensus_networkstatus_downloads() is called) and receives a 304
response as it hasn't been modified
download_status_increment_failure() gets called with a status_code of 304
update_consensus_networkstatus_downloads() gets called again, this time it
stops at the call to connection_dir_count_by_purpose_and_resource() which
returns 1 (equal to max_in_progress_conns)
download_status_increment_failure() gets called again, this time with a
status_code of 0 (as a result each 304 response results in the fail count
being increased by 2)
The previous steps repeat every minute for a few minutes until the failure
count reaches 10 (exceeding the max fail count of 8)
At this point it still keeps retrying every minute but
download_status_is_ready() doesn't return true as the failure count
exceeds the max, so it skips it without trying to fetch it
Eventually the consensus falls out of date, but download_is_ready() still
won't return true so it won't try and fetch a new one
On 0.2.8.9 it makes a couple of attempts that fail with a 304 response but
download_is_ready() will eventually start returning false as the value of
dts->next_attempt_at is greater than the current time. It seems on 0.2.8.9
next_attempt_at is increased a lot more aggressively, first by 1 minute,
then 10 minutes and then an hour, so it accumulates a failure count of 6
but then waits long enough that the next attempt succeeds.
On 0.2.9.4-alpha, it looks like the value of next_attempt_at is increased
more slowly, by only seconds at a time, so it reattempts every minute and
quickly reaches the failure limit.
--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/20499>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online
_______________________________________________
tor-bugs mailing list
tor-bugs@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-bugs