async fn recover(io: &dyn WalObjectIo) -> Result<Recovered>Expand description
Rebuilds the catalog from object headers and footers,
so recovery costs a few small reads per object however large the objects
are. Segments are not read, except those of release records, see
read_releases; a segment checksum is verified by the read that decodes
it. Footers are fetched for up to RECOVERY_CONCURRENCY objects
at a time while the listing goes on, and indexed in sequence order, so the
catalog checks the entry ranges of every object against its predecessors
like a sequential replay. Only the objects on the chain select_chain
picks are indexed.