Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
core: Save schema version for intermediate steps
When running upgrade queries, update the schema version for each intermediate step. This ensures that any interrupted upgrades have a greater chance of resuming correctly after core restart. Almost all databases make single queries atomic (fully works or fully fails, no partial), and with many of the longest migrations being a single query, this makes upgrade interruptions much more likely to leave the database in a valid intermediate schema version. As a side effect, downgrading from a partial upgrade will now require setting schema version manually, instead of it possibly happening to work depending on what changed. An unsupported operation failing in a known, recoverable way seems better than failing in an unknown, possibly recoverable way. Update logging to be more explicit about what fails. Tested by kill -9'ng Quasselcore during migration, then re-running core afterwards. In the future, for databases that support it (e.g. almost only PostgreSQL), we may want to wrap upgrades in a transaction. This will need careful testing of potential additional space requirements and any database modifications that might not be allowed in a transaction. sqlite> select * from coreinfo; schemaversion|26 $ (sleep 0.5 && pkill -9 quasselcore ) & \ ./run-profile.sh master core local sqlite> select * from coreinfo; schemaversion|30 $ ./run-profile.sh master core local sqlite> select * from coreinfo; schemaversion|31
- Loading branch information