Skip to content

Improve JsonFileDB reliability with crash recovery and file locking#1204

Open
leifermendez wants to merge 1 commit intobuilderbot-devfrom
claude/fix-database-json-reliability-gZ7DL
Open

Improve JsonFileDB reliability with crash recovery and file locking#1204
leifermendez wants to merge 1 commit intobuilderbot-devfrom
claude/fix-database-json-reliability-gZ7DL

Conversation

@leifermendez
Copy link
Member

Que tipo de Pull Request es?

  • Mejoras
  • Bug
  • Docs / tests

Descripción

Resumen de cambios

Esta PR mejora significativamente la confiabilidad de JsonFileDB implementando mecanismos robustos de recuperación ante crashes y control de concurrencia:

Características principales:

  1. Recuperación de archivos temporales: Si existe un archivo .tmp de un crash anterior, el sistema intenta recuperar los datos si contienen más entradas que el archivo principal.

  2. Sistema de bloqueo de archivos: Implementa un mecanismo simple pero efectivo de file locking usando archivos .lock con:

    • Detección de locks stale (>10 segundos)
    • Reintentos exponenciales
    • Limpieza automática
  3. Escritura atómica mejorada:

    • Serialización compacta (sin pretty-print) para mejor performance
    • Uso de fsync() para garantizar persistencia en disco
    • Verificación de integridad post-escritura
    • Reintentos automáticos (hasta 3 intentos) con backoff exponencial
  4. Mejor manejo de errores:

    • Propagación correcta de errores en promesas
    • Logging detallado de fallos
    • Limpieza de archivos temporales en caso de error
  5. Suite completa de tests de confiabilidad (reliability.test.ts):

    • Recuperación de datos de archivos temporales
    • Validación de locks stale
    • Integridad de datos en escrituras paralelas masivas (100+ operaciones)
    • Persistencia entre reinicios
    • Prevención de archivos huérfanos

Cambios técnicos:

  • Refactorización de atomicWrite() con reintentos y verificación
  • Nuevas constantes: MAX_RETRIES, RETRY_BASE_MS, LOCK_STALE_MS
  • Métodos nuevos: recoverFromTempFile(), acquireLock(), releaseLock()
  • Mejora en el manejo de resolvers de promesas (ahora incluyen reject)

Beneficios:

✅ Mayor durabilidad ante interrupciones inesperadas
✅ Soporte para múltiples instancias sin corrupción de datos
✅ Mejor performance con JSON compacto
✅ Recuperación automática de estados inconsistentes
✅ Cobertura de tests exhaustiva


Forma parte de este proyecto:

https://claude.ai/code/session_01PPG9yRSRNvAE9me3FNYhoX

…d temp recovery

- Add fsync before atomic rename to ensure data is flushed to disk
- Add file locking (wx flag) to prevent multi-instance write corruption
- Add retry logic with exponential backoff (3 attempts) in atomicWrite
- Recover data from temp files left by crashes instead of discarding them
- Verify written data integrity by reading back and validating after write
- Propagate write errors to callers instead of swallowing silently
- Use compact JSON serialization (no pretty-print) for better performance
- Add 9 reliability tests covering recovery, locking, and integrity

https://claude.ai/code/session_01PPG9yRSRNvAE9me3FNYhoX
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants