Dir auths should try for a consensus on the :30 as soon as the :00 failed
In create_voting_schedule() we check
consensus = networkstatus_get_live_consensus(now);
and then if there is one, we use it to decide what our current vote interval is:
interval = (int)( consensus->fresh_until - consensus->valid_after );
I.e. if there is a consensus within the last 3 hours, then we'll vote at the top of each hour. If there is no "valid" consensus though, we'll switch to voting twice an hour (for :00 and also for :30).
We could be more robust about achieving a consensus if we try twice an hour as soon as we fail once. That is, don't just check for get-live-consensus, but also check if the consensus we have now is fresh.
The overall goal here is to reduce the frequency that we have no live consensus.