mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Add autoCutoverConfiguration to local storage (#16772)
This commit is contained in:
@@ -438,10 +438,7 @@ export interface StartDatabaseMigrationRequest {
|
|||||||
password: string
|
password: string
|
||||||
},
|
},
|
||||||
scope: string,
|
scope: string,
|
||||||
autoCutoverConfiguration?: {
|
autoCutoverConfiguration: AutoCutoverConfiguration,
|
||||||
autoCutover?: boolean,
|
|
||||||
lastBackupName?: string
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -507,7 +504,7 @@ export interface BackupConfiguration {
|
|||||||
|
|
||||||
export interface AutoCutoverConfiguration {
|
export interface AutoCutoverConfiguration {
|
||||||
autoCutover: boolean;
|
autoCutover: boolean;
|
||||||
lastBackupName: string;
|
lastBackupName?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ErrorInfo {
|
export interface ErrorInfo {
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import * as loc from '../../constants/strings';
|
|||||||
import { convertByteSizeToReadableUnit, convertIsoTimeToLocalTime, getSqlServerName, getMigrationStatusImage, SupportedAutoRefreshIntervals, clearDialogMessage } from '../../api/utils';
|
import { convertByteSizeToReadableUnit, convertIsoTimeToLocalTime, getSqlServerName, getMigrationStatusImage, SupportedAutoRefreshIntervals, clearDialogMessage } from '../../api/utils';
|
||||||
import { EOL } from 'os';
|
import { EOL } from 'os';
|
||||||
import { ConfirmCutoverDialog } from './confirmCutoverDialog';
|
import { ConfirmCutoverDialog } from './confirmCutoverDialog';
|
||||||
import { MigrationMode } from '../../models/stateMachine';
|
|
||||||
|
|
||||||
const refreshFrequency: SupportedAutoRefreshIntervals = 30000;
|
const refreshFrequency: SupportedAutoRefreshIntervals = 30000;
|
||||||
const statusImageSize: number = 14;
|
const statusImageSize: number = 14;
|
||||||
@@ -278,7 +277,7 @@ export class MigrationCutoverDialog {
|
|||||||
enabled: false,
|
enabled: false,
|
||||||
CSSStyles: {
|
CSSStyles: {
|
||||||
'font-size': '13px',
|
'font-size': '13px',
|
||||||
'display': 'none'
|
'display': this._isOnlineMigration() ? 'inline' : 'none'
|
||||||
}
|
}
|
||||||
}).component();
|
}).component();
|
||||||
|
|
||||||
@@ -527,7 +526,7 @@ export class MigrationCutoverDialog {
|
|||||||
try {
|
try {
|
||||||
clearDialogMessage(this._dialogObject);
|
clearDialogMessage(this._dialogObject);
|
||||||
|
|
||||||
if (this._isProvisioned() && this._isOnlineMigration()) {
|
if (this._isOnlineMigration()) {
|
||||||
this._cutoverButton.updateCssStyles({
|
this._cutoverButton.updateCssStyles({
|
||||||
'display': 'inline'
|
'display': 'inline'
|
||||||
});
|
});
|
||||||
@@ -783,11 +782,7 @@ export class MigrationCutoverDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _isOnlineMigration(): boolean {
|
private _isOnlineMigration(): boolean {
|
||||||
let migrationMode = null;
|
return this._model._migration.migrationContext.properties.autoCutoverConfiguration?.autoCutover?.valueOf() ? false : true;
|
||||||
if (this._isProvisioned()) {
|
|
||||||
migrationMode = this._model._migration.migrationContext.properties.autoCutoverConfiguration?.autoCutover?.valueOf() ? MigrationMode.OFFLINE : MigrationMode.ONLINE;
|
|
||||||
}
|
|
||||||
return migrationMode === MigrationMode.ONLINE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private _shouldDisplayBackupFileTable(): boolean {
|
private _shouldDisplayBackupFileTable(): boolean {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
import { IconPathHelper } from '../../constants/iconPathHelper';
|
import { IconPathHelper } from '../../constants/iconPathHelper';
|
||||||
import { MigrationContext, MigrationLocalStorage, MigrationStatus, ProvisioningState } from '../../models/migrationLocalStorage';
|
import { MigrationContext, MigrationLocalStorage, MigrationStatus } from '../../models/migrationLocalStorage';
|
||||||
import { MigrationCutoverDialog } from '../migrationCutover/migrationCutoverDialog';
|
import { MigrationCutoverDialog } from '../migrationCutover/migrationCutoverDialog';
|
||||||
import { AdsMigrationStatus, MigrationStatusDialogModel } from './migrationStatusDialogModel';
|
import { AdsMigrationStatus, MigrationStatusDialogModel } from './migrationStatusDialogModel';
|
||||||
import * as loc from '../../constants/strings';
|
import * as loc from '../../constants/strings';
|
||||||
@@ -408,9 +408,6 @@ export class MigrationStatusDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _getMigrationMode(migration: MigrationContext): string {
|
private _getMigrationMode(migration: MigrationContext): string {
|
||||||
if (migration.migrationContext.properties.provisioningState === ProvisioningState.Creating) {
|
|
||||||
return '---';
|
|
||||||
}
|
|
||||||
return migration.migrationContext.properties.autoCutoverConfiguration?.autoCutover?.valueOf() ? loc.OFFLINE : loc.ONLINE;
|
return migration.migrationContext.properties.autoCutoverConfiguration?.autoCutover?.valueOf() ? loc.OFFLINE : loc.ONLINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ export class MigrationLocalStorage {
|
|||||||
if (migration.sourceConnectionProfile.serverName === connectionProfile.serverName) {
|
if (migration.sourceConnectionProfile.serverName === connectionProfile.serverName) {
|
||||||
if (refreshStatus) {
|
if (refreshStatus) {
|
||||||
try {
|
try {
|
||||||
|
const autoCutoverConfiguration = migration.migrationContext.properties.autoCutoverConfiguration;
|
||||||
const backupConfiguration = migration.migrationContext.properties.backupConfiguration;
|
const backupConfiguration = migration.migrationContext.properties.backupConfiguration;
|
||||||
const sourceDatabase = migration.migrationContext.properties.sourceDatabaseName;
|
const sourceDatabase = migration.migrationContext.properties.sourceDatabaseName;
|
||||||
|
|
||||||
@@ -50,6 +51,7 @@ export class MigrationLocalStorage {
|
|||||||
|
|
||||||
migration.migrationContext.properties.sourceDatabaseName = sourceDatabase;
|
migration.migrationContext.properties.sourceDatabaseName = sourceDatabase;
|
||||||
migration.migrationContext.properties.backupConfiguration = backupConfiguration;
|
migration.migrationContext.properties.backupConfiguration = backupConfiguration;
|
||||||
|
migration.migrationContext.properties.autoCutoverConfiguration = autoCutoverConfiguration;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
|
|||||||
@@ -846,6 +846,8 @@ export class MigrationStateModel implements Model, vscode.Disposable {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const isOfflineMigration = this._databaseBackup.migrationMode === MigrationMode.OFFLINE;
|
||||||
|
|
||||||
const requestBody: StartDatabaseMigrationRequest = {
|
const requestBody: StartDatabaseMigrationRequest = {
|
||||||
location: this._sqlMigrationService?.location!,
|
location: this._sqlMigrationService?.location!,
|
||||||
properties: {
|
properties: {
|
||||||
@@ -859,7 +861,9 @@ export class MigrationStateModel implements Model, vscode.Disposable {
|
|||||||
password: this._sqlServerPassword
|
password: this._sqlServerPassword
|
||||||
},
|
},
|
||||||
scope: this._targetServerInstance.id,
|
scope: this._targetServerInstance.id,
|
||||||
autoCutoverConfiguration: {}
|
autoCutoverConfiguration: {
|
||||||
|
autoCutover: isOfflineMigration
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -878,9 +882,9 @@ export class MigrationStateModel implements Model, vscode.Disposable {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (this._databaseBackup.migrationMode === MigrationMode.OFFLINE) {
|
if (isOfflineMigration) {
|
||||||
requestBody.properties.autoCutoverConfiguration = {
|
requestBody.properties.autoCutoverConfiguration = {
|
||||||
autoCutover: (this._databaseBackup.migrationMode === MigrationMode.OFFLINE ? true : false),
|
autoCutover: isOfflineMigration,
|
||||||
lastBackupName: this._databaseBackup.blobs[i]?.lastBackupFile
|
lastBackupName: this._databaseBackup.blobs[i]?.lastBackupFile
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -899,12 +903,6 @@ export class MigrationStateModel implements Model, vscode.Disposable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (this._databaseBackup.migrationMode === MigrationMode.OFFLINE) {
|
|
||||||
requestBody.properties.autoCutoverConfiguration = {
|
|
||||||
autoCutover: (this._databaseBackup.migrationMode === MigrationMode.OFFLINE ? true : false)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
requestBody.properties.sourceDatabaseName = this._migrationDbs[i];
|
requestBody.properties.sourceDatabaseName = this._migrationDbs[i];
|
||||||
@@ -919,15 +917,16 @@ export class MigrationStateModel implements Model, vscode.Disposable {
|
|||||||
);
|
);
|
||||||
response.databaseMigration.properties.sourceDatabaseName = this._migrationDbs[i];
|
response.databaseMigration.properties.sourceDatabaseName = this._migrationDbs[i];
|
||||||
response.databaseMigration.properties.backupConfiguration = requestBody.properties.backupConfiguration!;
|
response.databaseMigration.properties.backupConfiguration = requestBody.properties.backupConfiguration!;
|
||||||
if (response.status === 201 || response.status === 200) {
|
response.databaseMigration.properties.autoCutoverConfiguration = requestBody.properties.autoCutoverConfiguration!;
|
||||||
|
|
||||||
|
if (response.status === 201 || response.status === 200) {
|
||||||
sendSqlMigrationActionEvent(
|
sendSqlMigrationActionEvent(
|
||||||
TelemetryViews.MigrationWizardSummaryPage,
|
TelemetryViews.MigrationWizardSummaryPage,
|
||||||
TelemetryAction.StartMigration,
|
TelemetryAction.StartMigration,
|
||||||
{
|
{
|
||||||
'hashedServerName': hashString(this._assessmentApiResponse.assessmentResult.name),
|
'hashedServerName': hashString(this._assessmentApiResponse.assessmentResult.name),
|
||||||
'hashedDatabaseName': hashString(this._migrationDbs[i]),
|
'hashedDatabaseName': hashString(this._migrationDbs[i]),
|
||||||
'migrationMode': requestBody.properties.autoCutoverConfiguration ? 'online' : 'offline',
|
'migrationMode': isOfflineMigration ? 'offline' : 'online',
|
||||||
'sessionId': this._sessionId,
|
'sessionId': this._sessionId,
|
||||||
'migrationStartTime': new Date().toString(),
|
'migrationStartTime': new Date().toString(),
|
||||||
'targetDatabaseName': this._targetDatabaseNames[i],
|
'targetDatabaseName': this._targetDatabaseNames[i],
|
||||||
|
|||||||
Reference in New Issue
Block a user