fix: add retry logic to EncryptID database init for Docker networking delays

Docker container networking can take a moment to stabilize even after
depends_on health checks pass. This adds 5 retries with exponential
backoff (2s, 4s, 6s, 8s, 10s) to survive transient CONNECT_TIMEOUT errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-03-02 20:23:26 -08:00
parent 6d1661a4f3
commit cb828fc605
1 changed files with 17 additions and 5 deletions

View File

@ -3454,11 +3454,23 @@ app.get('/', (c) => {
// DATABASE INITIALIZATION & SERVER START // DATABASE INITIALIZATION & SERVER START
// ============================================================================ // ============================================================================
// Initialize database on startup // Initialize database on startup with retries (Docker networking may take a moment)
initDatabase().catch(err => { (async () => {
console.error('EncryptID: Failed to initialize database', err); const maxRetries = 5;
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
await initDatabase();
return;
} catch (err) {
console.error(`EncryptID: Database init attempt ${attempt}/${maxRetries} failed:`, (err as Error).message);
if (attempt === maxRetries) {
console.error('EncryptID: All database init attempts exhausted, exiting');
process.exit(1); process.exit(1);
}); }
await new Promise(r => setTimeout(r, attempt * 2000));
}
}
})();
// Clean expired challenges and recovery tokens every 10 minutes // Clean expired challenges and recovery tokens every 10 minutes
setInterval(() => { setInterval(() => {