El 13 de marzo se lanzó una actualización correctiva 3.51.3 de la base de datos embebida compacta. SQLite. El código del proyecto está escrito en C y se distribuye como dominio público.
Debido a problemas de compatibilidad hacia atrás relacionados con algunas nuevas funciones, la versión 3.52.0 (publicada el 6 de marzo) fue retirada.
Lista de cambios de la versión 3.51.3:
- El 3 de marzo, uno de los desarrolladores de SQLite (Dan) descubrió y corrigió un error que, en casos raros, podría llevar a la corrupción de la base de datos y se llamó «error de reinicio de WAL»:
- Este error solo ocurre en bases de datos que operan en modo WAL, si se abren dos o más conexiones al mismo archivo en diferentes hilos o procesos, y si estas dos conexiones intentan realizar una escritura o crear un punto de control simultáneamente.
- El error está relacionado con un conflicto de acceso a datos bajo estrictas limitaciones de tiempo. En condiciones normales de operación, ocurre raramente. Los desarrolladores no lograron reproducir este error en condiciones naturales, y tuvieron que agregar lógica de prueba especial a SQLite que crea intencionadamente las condiciones para que ocurra el error, para asegurarse de que el problema ha sido resuelto.
- El error ocurre cuando:
- Una conexión realiza una verificación de punto de control. Esta primera verificación debe completarse. En otras palabras, durante la verificación, todo el contenido del archivo WAL debe copiarse exitosamente de vuelta a la base de datos y el archivo WAL debe llevarse a un estado en el que se pueda restablecer.
- Justo después de que la primera verificación de punto de control se completa, se inicia la segunda.
- Mientras se inicia la segunda verificación de punto de control del paso 2, otra conexión a la base de datos registra una transacción que restablece el archivo WAL y escribe nuevo contenido en la parte superior del archivo WAL.
- Debido a un conflicto de acceso a datos, la segunda verificación de punto de control del paso 2 no tiene en cuenta que el archivo WAL ha sido restablecido como resultado de la transacción registrada en el paso 3. La segunda verificación establece un valor incorrecto para uno de los campos en el encabezado del WAL. Este campo indica que parte del archivo WAL ya ha sido confirmada en el punto de control, aunque en realidad no es así.
- Confirmar transacciones adicionales provoca un aumento en la cantidad de páginas en el archivo WAL, que supera la cantidad de páginas que existía en el momento del primer punto de control del paso 1.
- Más tarde, cuando se activa un tercer punto de control, omite toda o parte de la transacción registrada en la etapa 3. Así, partes de la transacción de la etapa 3 no se registran en el archivo de la base de datos, lo que da lugar a la corrupción de este archivo.
- El error probablemente está presente en todas las versiones de SQLite, desde la 3.7.0 (21.07.2010) hasta la 3.51.2. También se han lanzado correcciones para algunas versiones anteriores: 3.44.6 y 3.50.7.
- Otras correcciones menores.
Fuente: linux.org.ru
