Refactor FallbackDir handling and implement a retry-after-delay mechanism.
This is an improved version of !430 (closed). That branch moved FallbackDir
into circmgr
, and added a lot of extra machinery there in order to handle FallbackDir status tracking in a similar way to that used by guards.
This branch, by contrast, moves FallbackDir
into guardmgr
, and re-uses existing guard-handling machinery to give out fallback directories when guards are unavailable. It uses the same reporting machinery to tie in the FallbackDir status checking API with the status checking used for guards.
As a nice side effect, this branch solves #220 (closed) by checking for usable guards before using any fallbacks.
The situation with #406 (closed) is also improved. Previous behavior:
TCP stats: TcpCount { n_connect_attempt: 2140, n_connect_ok: 2140, n_accept: 0, n_bytes_send: 2446020, n_bytes_recv: 7411362 }
Total events: Trace: 25698, Debug: 3680, Info: 4206, Warn: 26, Error: 0
With this branch:
TCP stats: TcpCount { n_connect_attempt: 6, n_connect_ok: 6, n_accept: 0, n_bytes_send: 6858, n_bytes_recv: 20918 }
Total events: Trace: 94, Debug: 1354, Info: 473, Warn: 22, Error: 0
Closes #220 (closed). Closes #406 (closed).