Fix bug where dbs are lost on restart
If the workspace is restarted while databases are being loaded, this change prevents any from being lost. The bug was that each time a database was added when rehydrating a db from persisted state on startup, the persisted db list was being updated. Instead of updating the list each time we add a db, on restart, instead update the persisted list only after all are added. Note that we need to update the persisted list after reading it in since the act of rehydrating a database _may_ change its persisted state. For example, the primary language of the database may be initialized if it was not able to be determined originally.
This commit is contained in:
@@ -684,7 +684,9 @@ export class DatabaseManager extends DisposableObject {
|
||||
this._onDidChangeDatabaseItem.fire(event);
|
||||
});
|
||||
|
||||
await this.addDatabaseItem(progress, token, item);
|
||||
// Avoid persisting the database state after adding since that should happen only after
|
||||
// all databases have been added.
|
||||
await this.addDatabaseItem(progress, token, item, false);
|
||||
return item;
|
||||
}
|
||||
|
||||
@@ -724,6 +726,7 @@ export class DatabaseManager extends DisposableObject {
|
||||
void this.logger.log(`Error loading database ${database.uri}: ${e}.`);
|
||||
}
|
||||
}
|
||||
await this.updatePersistedDatabaseList();
|
||||
} catch (e) {
|
||||
// database list had an unexpected type - nothing to be done?
|
||||
void showAndLogErrorMessage(`Database list loading failed: ${getErrorMessage(e)}`);
|
||||
@@ -784,10 +787,14 @@ export class DatabaseManager extends DisposableObject {
|
||||
private async addDatabaseItem(
|
||||
progress: ProgressCallback,
|
||||
token: vscode.CancellationToken,
|
||||
item: DatabaseItem
|
||||
item: DatabaseItem,
|
||||
updatePersistedState = true
|
||||
) {
|
||||
this._databaseItems.push(item);
|
||||
await this.updatePersistedDatabaseList();
|
||||
|
||||
if (updatePersistedState) {
|
||||
await this.updatePersistedDatabaseList();
|
||||
}
|
||||
|
||||
// Add this database item to the allow-list
|
||||
// Database items reconstituted from persisted state
|
||||
|
||||
@@ -54,7 +54,7 @@ export class QueryInProgress {
|
||||
}
|
||||
|
||||
get compiledQueryPath() {
|
||||
return path.join(this.querySaveDir, 'compiledQuery.qlo');
|
||||
return this.queryEvalInfo.compileQueryPath;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ export class QueryEvaluationInfo {
|
||||
if (await this.hasDil()) {
|
||||
return this.dilPath;
|
||||
}
|
||||
const compiledQuery = path.join(this.querySaveDir, 'compiledQuery.qlo');
|
||||
const compiledQuery = this.compileQueryPath;
|
||||
if (!(await fs.pathExists(compiledQuery))) {
|
||||
if (await cliServer.cliConstraints.supportsNewQueryServer()) {
|
||||
// This could be from the new query server
|
||||
|
||||
Reference in New Issue
Block a user