Fix bugbash SQL-Migration extension migration load issues (#16575)

* fix migration refresh issues

* merge latest
This commit is contained in:
brian-harris
2021-08-05 13:24:02 -07:00
committed by GitHub
parent 33baaa475d
commit c6308b77df
9 changed files with 155 additions and 52 deletions

View File

@@ -6,11 +6,11 @@
import * as azdata from 'azdata';
import * as vscode from 'vscode';
import { IconPathHelper } from '../../constants/iconPathHelper';
import { MigrationContext, MigrationLocalStorage } from '../../models/migrationLocalStorage';
import { MigrationContext, MigrationLocalStorage, MigrationStatus, ProvisioningState } from '../../models/migrationLocalStorage';
import { MigrationCutoverDialog } from '../migrationCutover/migrationCutoverDialog';
import { AdsMigrationStatus, MigrationStatusDialogModel } from './migrationStatusDialogModel';
import * as loc from '../../constants/strings';
import { convertTimeDifferenceToDuration, filterMigrations, getMigrationStatusImage, SupportedAutoRefreshIntervals } from '../../api/utils';
import { clearDialogMessage, convertTimeDifferenceToDuration, filterMigrations, getMigrationStatusImage, SupportedAutoRefreshIntervals } from '../../api/utils';
import { SqlMigrationServiceDetailsDialog } from '../sqlMigrationService/sqlMigrationServiceDetailsDialog';
import { ConfirmCutoverDialog } from '../migrationCutover/confirmCutoverDialog';
import { MigrationCutoverDialogModel } from '../migrationCutover/migrationCutoverDialogModel';
@@ -96,8 +96,15 @@ export class MigrationStatusDialog {
azdata.window.openDialog(this._dialogObject);
}
private canCancelMigration = (status: string | undefined) => status && status in ['InProgress', 'Creating', 'Completing', 'Creating'];
private canCutoverMigration = (status: string | undefined) => status === 'InProgress';
private canCancelMigration = (status: string | undefined) => status &&
(
status === MigrationStatus.InProgress ||
status === MigrationStatus.Creating ||
status === MigrationStatus.Completing ||
status === MigrationStatus.Canceling
);
private canCutoverMigration = (status: string | undefined) => status === MigrationStatus.InProgress;
private createSearchAndRefreshContainer(): azdata.FlexContainer {
this._searchBox = this._view.modelBuilder.inputBox().withProps({
@@ -177,6 +184,7 @@ export class MigrationStatusDialog {
'sqlmigration.cutover',
async (migrationId: string) => {
try {
clearDialogMessage(this._dialogObject);
const migration = this._model._migrations.find(migration => migration.migrationContext.id === migrationId);
if (this.canCutoverMigration(migration?.migrationContext.properties.migrationStatus)) {
const cutoverDialogModel = new MigrationCutoverDialogModel(migration!);
@@ -187,6 +195,12 @@ export class MigrationStatusDialog {
await vscode.window.showInformationMessage(loc.MIGRATION_CANNOT_CUTOVER);
}
} catch (e) {
this._dialogObject.message = {
text: loc.MIGRATION_STATUS_REFRESH_ERROR,
description: e.message,
level: azdata.window.MessageLevel.Error
};
console.log(e);
}
}));
@@ -231,6 +245,7 @@ export class MigrationStatusDialog {
'sqlmigration.copy.migration',
async (migrationId: string) => {
try {
clearDialogMessage(this._dialogObject);
const migration = this._model._migrations.find(migration => migration.migrationContext.id === migrationId);
const cutoverDialogModel = new MigrationCutoverDialogModel(migration!);
await cutoverDialogModel.fetchStatus();
@@ -245,6 +260,12 @@ export class MigrationStatusDialog {
await vscode.window.showInformationMessage(loc.DETAILS_COPIED);
} catch (e) {
this._dialogObject.message = {
text: loc.MIGRATION_STATUS_REFRESH_ERROR,
description: e.message,
level: azdata.window.MessageLevel.Error
};
console.log(e);
}
}));
@@ -253,6 +274,7 @@ export class MigrationStatusDialog {
'sqlmigration.cancel.migration',
async (migrationId: string) => {
try {
clearDialogMessage(this._dialogObject);
const migration = this._model._migrations.find(migration => migration.migrationContext.id === migrationId);
if (this.canCancelMigration(migration?.migrationContext.properties.migrationStatus)) {
vscode.window.showInformationMessage(loc.CANCEL_MIGRATION_CONFIRMATION, loc.YES, loc.NO).then(async (v) => {
@@ -266,6 +288,12 @@ export class MigrationStatusDialog {
await vscode.window.showInformationMessage(loc.MIGRATION_CANNOT_CANCEL);
}
} catch (e) {
this._dialogObject.message = {
text: loc.MIGRATION_CANCELLATION_ERROR,
description: e.message,
level: azdata.window.MessageLevel.Error
};
console.log(e);
}
}));
@@ -371,7 +399,7 @@ export class MigrationStatusDialog {
}
private _getMigrationMode(migration: MigrationContext): string {
if (migration.migrationContext.properties.provisioningState === 'Creating') {
if (migration.migrationContext.properties.provisioningState === ProvisioningState.Creating) {
return '---';
}
return migration.migrationContext.properties.autoCutoverConfiguration?.autoCutover?.valueOf() ? loc.OFFLINE : loc.ONLINE;
@@ -466,11 +494,18 @@ export class MigrationStatusDialog {
this.isRefreshing = true;
try {
clearDialogMessage(this._dialogObject);
this._refreshLoader.loading = true;
const currentConnection = await azdata.connection.getCurrentConnection();
this._model._migrations = await MigrationLocalStorage.getMigrationsBySourceConnections(currentConnection, true);
await this.populateMigrationTable();
} catch (e) {
this._dialogObject.message = {
text: loc.MIGRATION_STATUS_REFRESH_ERROR,
description: e.message,
level: azdata.window.MessageLevel.Error
};
console.log(e);
} finally {
this.isRefreshing = false;
@@ -583,13 +618,10 @@ export class MigrationStatusDialog {
}
private _statusInfoMap(status: string): azdata.IconPath {
switch (status) {
case 'InProgress':
case 'Creating':
case 'Completing':
return IconPathHelper.warning;
default:
return IconPathHelper.error;
}
return status === MigrationStatus.InProgress
|| status === MigrationStatus.Creating
|| status === MigrationStatus.Completing
? IconPathHelper.warning
: IconPathHelper.error;
}
}