mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-30 10:36:35 +02:00
All: Improved handling of database migration failures
This commit is contained in:
parent
00057da17d
commit
f334f4f487
@ -349,6 +349,8 @@ class JoplinDatabase extends Database {
|
||||
+ `Expected version: ${existingDatabaseVersions[existingDatabaseVersions.length - 1]}`);
|
||||
}
|
||||
|
||||
this.logger().info(`Upgrading database from version ${fromVersion}`);
|
||||
|
||||
if (currentVersionIndex == existingDatabaseVersions.length - 1) return fromVersion;
|
||||
|
||||
let latestVersion = fromVersion;
|
||||
@ -856,18 +858,32 @@ class JoplinDatabase extends Database {
|
||||
queries.push('CREATE VIRTUAL TABLE notes_spellfix USING spellfix1');
|
||||
}
|
||||
|
||||
queries.push({ sql: 'UPDATE version SET version = ?', params: [targetVersion] });
|
||||
const updateVersionQuery = { sql: 'UPDATE version SET version = ?', params: [targetVersion] };
|
||||
|
||||
queries.push(updateVersionQuery);
|
||||
|
||||
try {
|
||||
await this.transactionExecBatch(queries);
|
||||
} catch (error) {
|
||||
// In some cases listed below, when the upgrade fail it is acceptable (a fallback will be used)
|
||||
// and in those cases, even though it fails, we still want to set the version number so that the
|
||||
// migration is not repeated on next upgrade.
|
||||
let saveVersionAgain = false;
|
||||
|
||||
if (targetVersion === 15 || targetVersion === 18 || targetVersion === 33) {
|
||||
this.logger().warn('Could not upgrade to database v15 or v18 or v33 - FTS feature will not be used', error);
|
||||
saveVersionAgain = true;
|
||||
} else if (targetVersion === 34) {
|
||||
// this.logger().warn('Could not upgrade to database v34 - fuzzy search will not be used', error);
|
||||
this.logger().warn('Could not upgrade to database v34 - fuzzy search will not be used', error);
|
||||
saveVersionAgain = true;
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
|
||||
if (saveVersionAgain) {
|
||||
this.logger().info('Migration failed with fallback and will not be repeated - saving version number');
|
||||
await this.transactionExecBatch([updateVersionQuery]);
|
||||
}
|
||||
}
|
||||
|
||||
latestVersion = targetVersion;
|
||||
@ -933,10 +949,13 @@ class JoplinDatabase extends Database {
|
||||
const version = !versionRow ? 0 : versionRow.version;
|
||||
const tableFieldsVersion = !versionRow ? 0 : versionRow.table_fields_version;
|
||||
this.version_ = version;
|
||||
this.logger().info('Current database version', version);
|
||||
this.logger().info('Current database version', versionRow);
|
||||
|
||||
const newVersion = await this.upgradeDatabase(version);
|
||||
this.version_ = newVersion;
|
||||
|
||||
this.logger().info(`New version: ${newVersion}. Previously recorded version: ${tableFieldsVersion}`);
|
||||
|
||||
if (newVersion !== tableFieldsVersion) await this.refreshTableFields(newVersion);
|
||||
|
||||
this.tableFields_ = {};
|
||||
|
Loading…
Reference in New Issue
Block a user