improve migration context loading (#16696)

This commit is contained in:
brian-harris
2021-08-11 10:55:01 -07:00
committed by GitHub
parent 59c550f28e
commit f6b10fec0b
4 changed files with 37 additions and 24 deletions

View File

@@ -263,27 +263,27 @@ export async function startDatabaseMigration(account: azdata.Account, subscripti
};
}
export async function getDatabaseMigration(account: azdata.Account, subscription: Subscription, regionName: string, migrationId: string, sessionId: string): Promise<DatabaseMigration> {
export async function getMigrationStatus(account: azdata.Account, subscription: Subscription, migration: DatabaseMigration, sessionId: string, asyncUrl: string): Promise<DatabaseMigration> {
const api = await getAzureCoreAPI();
const path = `${migrationId}?api-version=2020-09-01-preview`;
const migrationOperationId = getMigrationOperationId(migration, asyncUrl);
const path = `${migration.id}?migrationOperationId=${migrationOperationId}&$expand=MigrationStatusDetails&api-version=2020-09-01-preview`;
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);
}
throw new Error(response.errors.toString());
}
return response.response.data;
}
export async function getMigrationStatus(account: azdata.Account, subscription: Subscription, migration: DatabaseMigration, sessionId: string): Promise<DatabaseMigration> {
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, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) {
throw new Error(response.errors.toString());
function getMigrationOperationId(migration: DatabaseMigration, asyncUrl: string): string {
// migrationOperationId may be undefined when provisioning has failed
// fall back to the operationId from the asyncUrl in the create migration response
if (migration.properties.migrationOperationId) {
return migration.properties.migrationOperationId;
}
return response.response.data;
return asyncUrl
? vscode.Uri.parse(asyncUrl)?.path?.split('/').reverse()[0]
: '';
}
export async function getMigrationAsyncOperationDetails(account: azdata.Account, subscription: Subscription, url: string, sessionId: string): Promise<AzureAsyncOperationResource> {
@@ -436,6 +436,7 @@ export interface DatabaseMigration {
export interface DatabaseMigrationProperties {
scope: string;
provisioningState: 'Succeeded' | 'Failed' | 'Creating';
provisioningError: string;
migrationStatus: 'InProgress' | 'Failed' | 'Succeeded' | 'Creating' | 'Completing' | 'Canceling';
migrationStatusDetails?: MigrationStatusDetails;
startedOn: string;