Calculating path selection probabilities shouldn't depend on parsing a new consensus
The current implementation in NodeDetailsStatusUpdater calculates guard, middle, and exit probability using bandwidth weights (Wgg, Wgd, etc.) from the most recent of all parsed consensuses. This approach breaks if no consensus was parsed, and as a result, all relays' guard/middle/exit probabilities are set to 0.0. This happend a few days ago, because it took CollecTor more than 10 minutes to fetch and provide a current consensus from the directory authorities, which was too late for the hourly Onionoo run.
This is also bad design, because right now, JSON documents depend on more than what's contained in internal status files. We may want to add a mode of operation that rewrites all JSON documents. That is currently not possible.
A possible fix would be to make all attributes of NodeStatus persistent. The downside is that we may not need those contents in the servlet, so this change would needlessly slow down populating the servlet's search index.
Another fix would be to move all non-persistent attributes from NodeStatus to DetailsStatus. That includes guard/middle/exit probabilities, but maybe also other fields. Not sure about downsides yet.