diff --git a/extensions/azurecore/src/azureResource/utils.ts b/extensions/azurecore/src/azureResource/utils.ts index 3df742ab0e..3d64187794 100644 --- a/extensions/azurecore/src/azureResource/utils.ts +++ b/extensions/azurecore/src/azureResource/utils.ts @@ -333,8 +333,9 @@ export async function getSelectedSubscriptions(appContext: AppContext, account?: * @param requestBody Optional request body to be used in PUT and POST requests. * @param ignoreErrors When this flag is set the method will not throw any runtime or service errors and will return the errors in errors array. * @param host Use this to override the host. The default host is https://management.azure.com + * @param requestHeaders Provide additional request headers */ -export async function makeHttpRequest(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, path: string, requestType: HttpRequestMethod, requestBody?: any, ignoreErrors: boolean = false, host: string = 'https://management.azure.com'): Promise { +export async function makeHttpRequest(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, path: string, requestType: HttpRequestMethod, requestBody?: any, ignoreErrors: boolean = false, host: string = 'https://management.azure.com', requestHeaders: { [key: string]: string } = {}): Promise { const result: AzureRestResponse = { response: {}, errors: [] }; if (!account?.properties?.tenants || !Array.isArray(account.properties.tenants)) { @@ -375,11 +376,14 @@ export async function makeHttpRequest(account: azdata.Account, subscription: azu return result; } + const reqHeaders = { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${securityToken.token}`, + ...requestHeaders + }; + const config: AxiosRequestConfig = { - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${securityToken.token}` - }, + headers: reqHeaders, validateStatus: () => true // Never throw }; diff --git a/extensions/azurecore/src/azurecore.d.ts b/extensions/azurecore/src/azurecore.d.ts index b89d793a7d..03a27ebb53 100644 --- a/extensions/azurecore/src/azurecore.d.ts +++ b/extensions/azurecore/src/azurecore.d.ts @@ -271,8 +271,9 @@ declare module 'azurecore' { * @param requestBody Optional request body to be used in PUT and POST requests. * @param ignoreErrors When this flag is set the method will not throw any runtime or service errors and will return the errors in errors array. * @param host Use this to override the host. The default host is https://management.azure.com + * @param requestHeaders Provide additional request headers */ - makeAzureRestRequest(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, path: string, requestType: HttpRequestMethod, requestBody?: any, ignoreErrors?: boolean, host?: string): Promise; + makeAzureRestRequest(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, path: string, requestType: HttpRequestMethod, requestBody?: any, ignoreErrors?: boolean, host?: string, requestHeaders?: { [key: string]: string }): Promise; /** * Converts a region value (@see AzureRegion) into the localized Display Name * @param region The region value diff --git a/extensions/azurecore/src/extension.ts b/extensions/azurecore/src/extension.ts index cc4ab44ebf..57ec312987 100644 --- a/extensions/azurecore/src/extension.ts +++ b/extensions/azurecore/src/extension.ts @@ -236,8 +236,9 @@ export async function activate(context: vscode.ExtensionContext): Promise { - return azureResourceUtils.makeHttpRequest(account, subscription, path, requestType, requestBody, ignoreErrors, host); + host: string = 'https://management.azure.com', + requestHeaders: { [key: string]: string } = {}): Promise { + return azureResourceUtils.makeHttpRequest(account, subscription, path, requestType, requestBody, ignoreErrors, host, requestHeaders); }, getRegionDisplayName: utils.getRegionDisplayName, runGraphQuery(account: azdata.Account, diff --git a/extensions/sql-migration/src/api/azure.ts b/extensions/sql-migration/src/api/azure.ts index 666c639158..d7f83a4827 100644 --- a/extensions/sql-migration/src/api/azure.ts +++ b/extensions/sql-migration/src/api/azure.ts @@ -8,6 +8,7 @@ import * as azdata from 'azdata'; import * as azurecore from 'azurecore'; import { azureResource } from 'azureResource'; import * as constants from '../constants/strings'; +import { getSessionIdHeader } from './utils'; async function getAzureCoreAPI(): Promise { const api = (await vscode.extensions.getExtension(azurecore.extension.name)?.activate()) as azurecore.IExtension; @@ -131,10 +132,10 @@ export async function getBlobContainers(account: azdata.Account, subscription: S return blobContainers!; } -export async function getSqlMigrationService(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string): Promise { +export async function getSqlMigrationService(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}?api-version=2020-09-01-preview`; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } @@ -142,10 +143,10 @@ export async function getSqlMigrationService(account: azdata.Account, subscripti return response.response.data; } -export async function getSqlMigrationServices(account: azdata.Account, subscription: Subscription, regionName: string): Promise { +export async function getSqlMigrationServices(account: azdata.Account, subscription: Subscription, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `/subscriptions/${subscription.id}/providers/Microsoft.DataMigration/sqlMigrationServices?api-version=2020-09-01-preview`; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } @@ -156,13 +157,13 @@ export async function getSqlMigrationServices(account: azdata.Account, subscript return response.response.data.value; } -export async function createSqlMigrationService(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string): Promise { +export async function createSqlMigrationService(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}?api-version=2020-09-01-preview`; const requestBody = { 'location': regionName }; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.PUT, requestBody, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.PUT, requestBody, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } @@ -170,7 +171,7 @@ export async function createSqlMigrationService(account: azdata.Account, subscri const maxRetry = 5; let i = 0; for (i = 0; i < maxRetry; i++) { - const asyncResponse = await api.makeAzureRestRequest(account, subscription, asyncUrl.replace('https://management.azure.com/', ''), azurecore.HttpRequestMethod.GET, undefined, true); + const asyncResponse = await api.makeAzureRestRequest(account, subscription, asyncUrl.replace('https://management.azure.com/', ''), azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId)); const creationStatus = asyncResponse.response.data.status; if (creationStatus === 'Succeeded') { break; @@ -185,10 +186,10 @@ export async function createSqlMigrationService(account: azdata.Account, subscri return response.response.data; } -export async function getSqlMigrationServiceAuthKeys(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string): Promise { +export async function getSqlMigrationServiceAuthKeys(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}/ListAuthKeys?api-version=2020-09-01-preview`; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } @@ -198,7 +199,7 @@ export async function getSqlMigrationServiceAuthKeys(account: azdata.Account, su }; } -export async function regenerateSqlMigrationServiceAuthKey(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string, keyName: string): Promise { +export async function regenerateSqlMigrationServiceAuthKey(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string, keyName: string, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}/regenerateAuthKeys?api-version=2020-09-01-preview`; const requestBody = { @@ -206,7 +207,7 @@ export async function regenerateSqlMigrationServiceAuthKey(account: azdata.Accou 'keyName': keyName, }; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, requestBody, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, requestBody, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } @@ -228,20 +229,20 @@ export async function getStorageAccountAccessKeys(account: azdata.Account, subsc }; } -export async function getSqlMigrationServiceMonitoringData(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationService: string): Promise { +export async function getSqlMigrationServiceMonitoringData(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationService: string, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationService}/monitoringData?api-version=2020-09-01-preview`; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } return response.response.data; } -export async function startDatabaseMigration(account: azdata.Account, subscription: Subscription, regionName: string, targetServer: SqlManagedInstance | SqlVMServer, targetDatabaseName: string, requestBody: StartDatabaseMigrationRequest): Promise { +export async function startDatabaseMigration(account: azdata.Account, subscription: Subscription, regionName: string, targetServer: SqlManagedInstance | SqlVMServer, targetDatabaseName: string, requestBody: StartDatabaseMigrationRequest, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `${targetServer.id}/providers/Microsoft.DataMigration/databaseMigrations/${targetDatabaseName}?api-version=2020-09-01-preview`; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.PUT, requestBody, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.PUT, requestBody, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } @@ -253,10 +254,10 @@ export async function startDatabaseMigration(account: azdata.Account, subscripti }; } -export async function getDatabaseMigration(account: azdata.Account, subscription: Subscription, regionName: string, migrationId: string): Promise { +export async function getDatabaseMigration(account: azdata.Account, subscription: Subscription, regionName: string, migrationId: string, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `${migrationId}?api-version=2020-09-01-preview`; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { if (response.response.status === 404 && response.response.data.error.code === 'ResourceDoesNotExist') { throw new Error(response.response.data.error.code); @@ -266,49 +267,49 @@ export async function getDatabaseMigration(account: azdata.Account, subscription return response.response.data; } -export async function getMigrationStatus(account: azdata.Account, subscription: Subscription, migration: DatabaseMigration): Promise { +export async function getMigrationStatus(account: azdata.Account, subscription: Subscription, migration: DatabaseMigration, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `${migration.id}?$expand=MigrationStatusDetails&api-version=2020-09-01-preview`; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } return response.response.data; } -export async function getMigrationAsyncOperationDetails(account: azdata.Account, subscription: Subscription, url: string): Promise { +export async function getMigrationAsyncOperationDetails(account: azdata.Account, subscription: Subscription, url: string, sessionId: string): Promise { const api = await getAzureCoreAPI(); - const response = await api.makeAzureRestRequest(account, subscription, url.replace('https://management.azure.com/', ''), azurecore.HttpRequestMethod.GET, undefined, true); + const response = await api.makeAzureRestRequest(account, subscription, url.replace('https://management.azure.com/', ''), azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } return response.response.data; } -export async function listMigrationsBySqlMigrationService(account: azdata.Account, subscription: Subscription, sqlMigrationService: SqlMigrationService): Promise { +export async function listMigrationsBySqlMigrationService(account: azdata.Account, subscription: Subscription, sqlMigrationService: SqlMigrationService, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `${sqlMigrationService.id}/listMigrations?$expand=MigrationStatusDetails&api-version=2020-09-01-preview`; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } return response.response.data.value; } -export async function startMigrationCutover(account: azdata.Account, subscription: Subscription, migrationStatus: DatabaseMigration): Promise { +export async function startMigrationCutover(account: azdata.Account, subscription: Subscription, migrationStatus: DatabaseMigration, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `${migrationStatus.id}/operations/${migrationStatus.properties.migrationOperationId}/cutover?api-version=2020-09-01-preview`; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } return response.response.data.value; } -export async function stopMigration(account: azdata.Account, subscription: Subscription, migrationStatus: DatabaseMigration): Promise { +export async function stopMigration(account: azdata.Account, subscription: Subscription, migrationStatus: DatabaseMigration, sessionId: string): Promise { const api = await getAzureCoreAPI(); const path = `${migrationStatus.id}/operations/${migrationStatus.properties.migrationOperationId}/cancel?api-version=2020-09-01-preview`; - const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true); + const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true, undefined, getSessionIdHeader(sessionId)); if (response.errors.length > 0) { throw new Error(response.errors.toString()); } diff --git a/extensions/sql-migration/src/api/utils.ts b/extensions/sql-migration/src/api/utils.ts index 15cbf858f0..239d126722 100644 --- a/extensions/sql-migration/src/api/utils.ts +++ b/extensions/sql-migration/src/api/utils.ts @@ -193,3 +193,9 @@ export function decorate(decorator: (fn: Function, key: string) => Function): Fu descriptor[fnKey] = decorator(fn, key); }; } + +export function getSessionIdHeader(sessionId: string): { [key: string]: string } { + return { + 'SqlMigrationSessionId': sessionId + }; +} diff --git a/extensions/sql-migration/src/dialog/createSqlMigrationService/createSqlMigrationServiceDialog.ts b/extensions/sql-migration/src/dialog/createSqlMigrationService/createSqlMigrationServiceDialog.ts index 13d51216c7..0d6e99b709 100644 --- a/extensions/sql-migration/src/dialog/createSqlMigrationService/createSqlMigrationServiceDialog.ts +++ b/extensions/sql-migration/src/dialog/createSqlMigrationService/createSqlMigrationServiceDialog.ts @@ -90,7 +90,7 @@ export class CreateSqlMigrationServiceDialog { try { this._selectedResourceGroup = resourceGroup; - this._createdMigrationService = await createSqlMigrationService(this._model._azureAccount, subscription, resourceGroup, location, serviceName!); + this._createdMigrationService = await createSqlMigrationService(this._model._azureAccount, subscription, resourceGroup, location, serviceName!, this._model._sessionId); if (this._createdMigrationService.error) { this.setDialogMessage(`${this._createdMigrationService.error.code} : ${this._createdMigrationService.error.message}`); this._statusLoadingComponent.loading = false; @@ -505,14 +505,14 @@ export class CreateSqlMigrationServiceDialog { let migrationServiceStatus!: SqlMigrationService; for (let i = 0; i < maxRetries; i++) { try { - migrationServiceStatus = await getSqlMigrationService(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService.name); + migrationServiceStatus = await getSqlMigrationService(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService.name, this._model._sessionId); break; } catch (e) { console.log(e); } await new Promise(r => setTimeout(r, 5000)); } - const migrationServiceMonitoringStatus = await getSqlMigrationServiceMonitoringData(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService!.name); + const migrationServiceMonitoringStatus = await getSqlMigrationServiceMonitoringData(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService!.name, this._model._sessionId); this.irNodes = migrationServiceMonitoringStatus.nodes.map((node) => { return node.nodeName; }); @@ -546,7 +546,7 @@ export class CreateSqlMigrationServiceDialog { const subscription = this._model._targetSubscription; const resourceGroup = (this.migrationServiceResourceGroupDropdown.value as azdata.CategoryValue).name; const location = this._model._targetServerInstance.location; - const keys = await getSqlMigrationServiceAuthKeys(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService!.name); + const keys = await getSqlMigrationServiceAuthKeys(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService!.name, this._model._sessionId); this._copyKey1Button = this._view.modelBuilder.button().withProps({ title: constants.COPY_KEY1, diff --git a/extensions/sql-migration/src/dialog/migrationCutover/migrationCutoverDialogModel.ts b/extensions/sql-migration/src/dialog/migrationCutover/migrationCutoverDialogModel.ts index 8df74962ac..2da05d405f 100644 --- a/extensions/sql-migration/src/dialog/migrationCutover/migrationCutoverDialogModel.ts +++ b/extensions/sql-migration/src/dialog/migrationCutover/migrationCutoverDialogModel.ts @@ -27,13 +27,15 @@ export class MigrationCutoverDialogModel { this.migrationOpStatus = (await getMigrationAsyncOperationDetails( this._migration.azureAccount, this._migration.subscription, - this._migration.asyncUrl + this._migration.asyncUrl, + this._migration.sessionId! )); } this.migrationStatus = (await getMigrationStatus( this._migration.azureAccount, this._migration.subscription, - this._migration.migrationContext + this._migration.migrationContext, + this._migration.sessionId!, )); sendSqlMigrationActionEvent( @@ -55,7 +57,8 @@ export class MigrationCutoverDialogModel { const cutover = await startMigrationCutover( this._migration.azureAccount, this._migration.subscription, - this.migrationStatus + this.migrationStatus, + this._migration.sessionId! ); sendSqlMigrationActionEvent( TelemetryViews.MigrationCutoverDialog, @@ -81,7 +84,8 @@ export class MigrationCutoverDialogModel { await stopMigration( this._migration.azureAccount, this._migration.subscription, - this.migrationStatus + this.migrationStatus, + this._migration.sessionId! ); sendSqlMigrationActionEvent( TelemetryViews.MigrationCutoverDialog, diff --git a/extensions/sql-migration/src/dialog/sqlMigrationService/sqlMigrationServiceDetailsDialog.ts b/extensions/sql-migration/src/dialog/sqlMigrationService/sqlMigrationServiceDetailsDialog.ts index b784ff997a..9c30b16253 100644 --- a/extensions/sql-migration/src/dialog/sqlMigrationService/sqlMigrationServiceDetailsDialog.ts +++ b/extensions/sql-migration/src/dialog/sqlMigrationService/sqlMigrationServiceDetailsDialog.ts @@ -66,7 +66,8 @@ export class SqlMigrationServiceDetailsDialog { migrationContext.subscription, migrationContext.controller.properties.resourceGroup, migrationContext.controller.location, - migrationContext.controller.name + migrationContext.controller.name, + this.migrationContext.sessionId! )); const serviceNodeName = serviceNode.nodes?.map(node => node.nodeName).join(', ') || constants.SQL_MIGRATION_SERVICE_DETAILS_STATUS_UNAVAILABLE; @@ -209,7 +210,8 @@ export class SqlMigrationServiceDetailsDialog { migrationContext.controller.properties.resourceGroup, migrationContext.controller.location.toUpperCase(), migrationContext.controller.name, - keyName); + keyName, + migrationContext.sessionId!); if (keys?.authKey1 && keyName === AUTH_KEY1) { await this._updateTableCell(this._migrationServiceAuthKeyTable, 0, 1, keys.authKey1, constants.SERVICE_KEY1_LABEL); @@ -233,7 +235,8 @@ export class SqlMigrationServiceDetailsDialog { migrationContext.subscription, migrationContext.controller.properties.resourceGroup, migrationContext.controller.location.toUpperCase(), - migrationContext.controller.name); + migrationContext.controller.name, + migrationContext.sessionId!); const copyKey1Button = view.modelBuilder .button() diff --git a/extensions/sql-migration/src/models/migrationLocalStorage.ts b/extensions/sql-migration/src/models/migrationLocalStorage.ts index 53427bf02c..b4be494613 100644 --- a/extensions/sql-migration/src/models/migrationLocalStorage.ts +++ b/extensions/sql-migration/src/models/migrationLocalStorage.ts @@ -31,7 +31,8 @@ export class MigrationLocalStorage { migration.migrationContext = await getMigrationStatus( migration.azureAccount, migration.subscription, - migration.migrationContext + migration.migrationContext, + migration.sessionId! ); migration.migrationContext.properties.sourceDatabaseName = sourceDatabase; migration.migrationContext.properties.backupConfiguration = backupConfiguration; @@ -39,7 +40,8 @@ export class MigrationLocalStorage { migration.asyncOperationResult = await getMigrationAsyncOperationDetails( migration.azureAccount, migration.subscription, - migration.asyncUrl + migration.asyncUrl, + migration.sessionId! ); } } diff --git a/extensions/sql-migration/src/models/stateMachine.ts b/extensions/sql-migration/src/models/stateMachine.ts index d9defe1998..934c18e45e 100644 --- a/extensions/sql-migration/src/models/stateMachine.ts +++ b/extensions/sql-migration/src/models/stateMachine.ts @@ -743,7 +743,7 @@ export class MigrationStateModel implements Model, vscode.Disposable { public async getSqlMigrationServiceValues(subscription: azureResource.AzureResourceSubscription, managedInstance: SqlManagedInstance, resourceGroupName: string): Promise { let sqlMigrationServiceValues: azdata.CategoryValue[] = []; try { - this._sqlMigrationServices = (await getSqlMigrationServices(this._azureAccount, subscription, managedInstance.location)).filter(sms => sms.location.toLowerCase() === this._targetServerInstance.location.toLowerCase() && sms.properties.resourceGroup.toLowerCase() === resourceGroupName?.toLowerCase()); + this._sqlMigrationServices = (await getSqlMigrationServices(this._azureAccount, subscription, this._sessionId)).filter(sms => sms.location.toLowerCase() === this._targetServerInstance.location.toLowerCase() && sms.properties.resourceGroup.toLowerCase() === resourceGroupName?.toLowerCase()); this._sqlMigrationServices.forEach((sqlMigrationService) => { sqlMigrationServiceValues.push({ name: sqlMigrationService.id, @@ -839,7 +839,8 @@ export class MigrationStateModel implements Model, vscode.Disposable { this._sqlMigrationService?.location!, this._targetServerInstance, this._targetDatabaseNames[i], - requestBody + requestBody, + this._sessionId ); response.databaseMigration.properties.sourceDatabaseName = this._migrationDbs[i]; response.databaseMigration.properties.backupConfiguration = requestBody.properties.backupConfiguration!; diff --git a/extensions/sql-migration/src/wizard/integrationRuntimePage.ts b/extensions/sql-migration/src/wizard/integrationRuntimePage.ts index 1f21cb935f..8388d0fe22 100644 --- a/extensions/sql-migration/src/wizard/integrationRuntimePage.ts +++ b/extensions/sql-migration/src/wizard/integrationRuntimePage.ts @@ -463,21 +463,24 @@ export class IntergrationRuntimePage extends MigrationWizardPage { this.migrationStateModel._targetSubscription, this.migrationStateModel._sqlMigrationService.properties.resourceGroup, this.migrationStateModel._sqlMigrationService.location, - this.migrationStateModel._sqlMigrationService.name); + this.migrationStateModel._sqlMigrationService.name, + this.migrationStateModel._sessionId); this.migrationStateModel._sqlMigrationService = migrationService; const migrationServiceMonitoringStatus = await getSqlMigrationServiceMonitoringData( this.migrationStateModel._azureAccount, this.migrationStateModel._targetSubscription, this.migrationStateModel._sqlMigrationService.properties.resourceGroup, this.migrationStateModel._sqlMigrationService.location, - this.migrationStateModel._sqlMigrationService!.name); + this.migrationStateModel._sqlMigrationService!.name, + this.migrationStateModel._sessionId); this.migrationStateModel._nodeNames = migrationServiceMonitoringStatus.nodes.map(node => node.nodeName); const migrationServiceAuthKeys = await getSqlMigrationServiceAuthKeys( this.migrationStateModel._azureAccount, this.migrationStateModel._targetSubscription, this.migrationStateModel._sqlMigrationService.properties.resourceGroup, this.migrationStateModel._sqlMigrationService.location, - this.migrationStateModel._sqlMigrationService!.name + this.migrationStateModel._sqlMigrationService!.name, + this.migrationStateModel._sessionId ); this.migrationStateModel._nodeNames = migrationServiceMonitoringStatus.nodes.map((node) => {