pub fn with_busy_retry<F>(op: F) -> Result<(), AppError>Expand description
Executes op up to MAX_SQLITE_BUSY_RETRIES times with exponential
backoff whenever the operation fails with SQLITE_BUSY / SQLITE_LOCKED.
Delay schedule (base = SQLITE_BUSY_BASE_DELAY_MS):
- attempt 1 →
basems - attempt 2 →
base * 2ms - attempt 3 →
base * 4ms - attempt 4 →
base * 8ms - attempt 5 →
base * 16ms
After all retries are exhausted the last SQLITE_BUSY error is converted
to AppError::DbBusy so callers can route on exit-code 15.