e00a21cd39
Since 0.21.0 reads go through mode=ro pooled connections. A read-only OPEN already rides out the millisecond WAL transition window (checkpoint / WAL reset / frame flush by a sibling process; the ro reader cannot rewrite the -shm index) with a bounded retry (#100436), but a WARM pooled reader hitting the same window while its SELECT executes propagated `disk I/O error` straight out of get_session(): 37 identical tracebacks on a multi-process WSL2 ext4-on-vhdx install, each followed by "compression session recovery failed", with quick_check=ok (#100871). The reporter's A/B shows the operator workaround (journal_mode=delete) collapses read throughput ~30000x, so the flake has to be absorbed on the read path. _read_one/_read_all now replay the idempotent statement within the existing read-only IOERR budget (3 x 50 ms) on the SAME connection -- close+reopen would cancel this process's POSIX locks for every sibling connection -- and a persistent IOERR still propagates. No quarantine: EIO on a read is busy, not broken. Every SELECT in the SessionDB siblings (63 call sites) reaches the pool through these two helpers, so the class is covered without a wrapper type. Same-connection retry per #100882's analysis (@fangliquanflq); #100883 (@Sahilvishnaliya) diagnosed the missing recovery in the 0.21.0 read pool. Fixes #100871. Co-authored-by: fangliquanflq <fangliquan@qq.com> Co-authored-by: Sahilvishnaliya <222165401+Sahilvishnaliya@users.noreply.github.com>