Modifying the migration extension to use its own service. (#21781)

* Adding migration service to sql migrations

* enabling auto flush log

* Adding support for env variable

* Adding TDE Migration service

* code cleanup

* updating service downloader

* Removing custom output channel

* remove unnecessary await

* Updated service version to get latest code

* Consolidate TDE into migration service

* Sync to latest main

* Update sql-migration package version

* Fix merge conflict error

* Fixing all merge conflicts

* Fixing stuff

* removing extra whitespace

* Cleaning up

---------

Co-authored-by: Akshay Mata <akma@microsoft.com>
This commit is contained in:
Aasim Khan
2023-02-12 09:59:09 -08:00
committed by GitHub
parent 12a3bf6b3b
commit 837236be0f
18 changed files with 1569 additions and 69 deletions

View File

@@ -5,7 +5,7 @@
import * as azdata from 'azdata';
import * as vscode from 'vscode';
import * as mssql from 'mssql';
import * as features from '../../service/features';
import { azureResource } from 'azurecore';
import { getLocations, getResourceGroupFromId, getBlobContainerId, getFullResourceGroupFromId, getResourceName, DatabaseMigration, getMigrationTargetInstance } from '../../api/azure';
import { MigrationMode, MigrationStateModel, NetworkContainerType, SavedInfo } from '../../models/stateMachine';
@@ -14,6 +14,7 @@ import { WizardController } from '../../wizard/wizardController';
import { getMigrationModeEnum, getMigrationTargetTypeEnum } from '../../constants/helper';
import * as constants from '../../constants/strings';
import { ServiceContextChangeEvent } from '../../dashboard/tabBase';
import { migrationServiceProvider } from '../../service/provider';
import { getSourceConnectionProfile } from '../../api/sqlUtils';
export class RetryMigrationDialog {
@@ -29,10 +30,10 @@ export class RetryMigrationDialog {
serviceContext: MigrationServiceContext,
migration: DatabaseMigration,
serverName: string,
api: mssql.IExtension,
migrationService: features.SqlMigrationService,
location: azureResource.AzureLocation): Promise<MigrationStateModel> {
const stateModel = new MigrationStateModel(this._context, api.sqlMigration, api.tdeMigration);
const stateModel = new MigrationStateModel(this._context, migrationService);
const sourceDatabaseName = migration.properties.sourceDatabaseName;
const savedInfo: SavedInfo = {
closedPage: 0,
@@ -160,8 +161,8 @@ export class RetryMigrationDialog {
serverName = activeConnection.serverName;
}
const api = (await vscode.extensions.getExtension(mssql.extension.name)?.activate()) as mssql.IExtension;
const stateModel = await this.createMigrationStateModel(this._serviceContext, this._migration, serverName, api, location!);
const migrationService = <features.SqlMigrationService>await migrationServiceProvider.getService(features.ApiType.SqlMigrationProvider)!;
const stateModel = await this.createMigrationStateModel(this._serviceContext, this._migration, serverName, migrationService, location!);
if (await stateModel.loadSavedInfo()) {
const wizardController = new WizardController(

View File

@@ -7,8 +7,8 @@ import * as azdata from 'azdata';
import * as vscode from 'vscode';
import { MigrationStateModel, MigrationTargetType } from '../../models/stateMachine';
import * as constants from '../../constants/strings';
import * as contracts from '../../service/contracts';
import * as styles from '../../constants/styles';
import * as mssql from 'mssql';
import * as utils from '../../api/utils';
import * as fs from 'fs';
import path = require('path');
@@ -29,8 +29,8 @@ export class SkuRecommendationResultsDialog {
public targetName?: string;
private _saveButton!: azdata.window.Button;
public targetRecommendations?: mssql.SkuRecommendationResultItem[];
public instanceRequirements?: mssql.SqlInstanceRequirements;
public targetRecommendations?: contracts.SkuRecommendationResultItem[];
public instanceRequirements?: contracts.SqlInstanceRequirements;
constructor(public model: MigrationStateModel, public _targetType: MigrationTargetType) {
switch (this._targetType) {
@@ -90,9 +90,9 @@ export class SkuRecommendationResultsDialog {
return container;
}
private createRecommendation(_view: azdata.ModelView, recommendationItem: mssql.SkuRecommendationResultItem): azdata.FlexContainer {
private createRecommendation(_view: azdata.ModelView, recommendationItem: contracts.SkuRecommendationResultItem): azdata.FlexContainer {
let recommendation: mssql.IaaSSkuRecommendationResultItem | mssql.PaaSSkuRecommendationResultItem;
let recommendation: contracts.IaaSSkuRecommendationResultItem | contracts.PaaSSkuRecommendationResultItem;
let configuration = constants.NA;
let storageSection = _view.modelBuilder.flexContainer().withLayout({
@@ -100,7 +100,7 @@ export class SkuRecommendationResultsDialog {
}).component();
switch (this._targetType) {
case MigrationTargetType.SQLVM:
recommendation = <mssql.IaaSSkuRecommendationResultItem>recommendationItem;
recommendation = <contracts.IaaSSkuRecommendationResultItem>recommendationItem;
if (recommendation.targetSku) {
configuration = constants.VM_CONFIGURATION(
@@ -113,18 +113,18 @@ export class SkuRecommendationResultsDialog {
case MigrationTargetType.SQLMI:
case MigrationTargetType.SQLDB:
recommendation = <mssql.PaaSSkuRecommendationResultItem>recommendationItem;
recommendation = <contracts.PaaSSkuRecommendationResultItem>recommendationItem;
if (recommendation.targetSku) {
const serviceTier = recommendation.targetSku.category?.sqlServiceTier === mssql.AzureSqlPaaSServiceTier.GeneralPurpose
const serviceTier = recommendation.targetSku.category?.sqlServiceTier === contracts.AzureSqlPaaSServiceTier.GeneralPurpose
? constants.GENERAL_PURPOSE
: recommendation.targetSku.category?.sqlServiceTier === mssql.AzureSqlPaaSServiceTier.HyperScale
: recommendation.targetSku.category?.sqlServiceTier === contracts.AzureSqlPaaSServiceTier.HyperScale
? constants.HYPERSCALE
: constants.BUSINESS_CRITICAL;
const hardwareType = recommendation.targetSku.category?.hardwareType === mssql.AzureSqlPaaSHardwareType.Gen5
const hardwareType = recommendation.targetSku.category?.hardwareType === contracts.AzureSqlPaaSHardwareType.Gen5
? constants.GEN5
: recommendation.targetSku.category?.hardwareType === mssql.AzureSqlPaaSHardwareType.PremiumSeries
: recommendation.targetSku.category?.hardwareType === contracts.AzureSqlPaaSHardwareType.PremiumSeries
? constants.PREMIUM_SERIES
: constants.PREMIUM_SERIES_MEMORY_OPTIMIZED;
@@ -240,7 +240,7 @@ export class SkuRecommendationResultsDialog {
return recommendationContainer;
}
private createSqlVmTargetStorageSection(_view: azdata.ModelView, recommendation: mssql.IaaSSkuRecommendationResultItem): azdata.FlexContainer {
private createSqlVmTargetStorageSection(_view: azdata.ModelView, recommendation: contracts.IaaSSkuRecommendationResultItem): azdata.FlexContainer {
const recommendedTargetStorageSection = _view.modelBuilder.text()
.withProps({
value: constants.RECOMMENDED_TARGET_STORAGE_CONFIGURATION,
@@ -348,18 +348,18 @@ export class SkuRecommendationResultsDialog {
return container;
}
private getCachingText(caching: mssql.AzureManagedDiskCaching): string {
private getCachingText(caching: contracts.AzureManagedDiskCaching): string {
switch (caching) {
case mssql.AzureManagedDiskCaching.NotApplicable:
case contracts.AzureManagedDiskCaching.NotApplicable:
return constants.CACHING_NA;
case mssql.AzureManagedDiskCaching.None:
case contracts.AzureManagedDiskCaching.None:
return constants.CACHING_NONE;
case mssql.AzureManagedDiskCaching.ReadOnly:
case contracts.AzureManagedDiskCaching.ReadOnly:
return constants.CACHING_READ_ONLY;
case mssql.AzureManagedDiskCaching.ReadWrite:
case contracts.AzureManagedDiskCaching.ReadWrite:
return constants.CACHING_READ_WRITE;
}
}
@@ -460,7 +460,7 @@ export class SkuRecommendationResultsDialog {
return container;
}
public async openDialog(dialogName?: string, recommendations?: mssql.SkuRecommendationResult) {
public async openDialog(dialogName?: string, recommendations?: contracts.SkuRecommendationResult) {
if (!this._isOpen) {
this._isOpen = true;
this.instanceRequirements = recommendations?.instanceRequirements;