in SQL-Hybrid-Cloud-Toolkit/Components/ADP/ADPControl/Orchestrator.cs [16:72]
public static async Task RunImportOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context, ILogger log)
{
log.LogInformation("RunImportOrchestrator: entering");
try {
ImportRequest importRequest = context.GetInput<ImportRequest>();
// Deploy the ARM template to Create empty SQL resource
string deploymentName = await context.CallActivityAsync<string>(nameof(AzureResourceManagerActivity.BeginDeployArmTemplateForImport), importRequest);
while (true)
{
log.LogInformation("RunImportOrchestrator: starting ARM deployment");
string status = await context.CallActivityAsync<string>(nameof(AzureResourceManagerActivity.GetArmDeploymentForImport), (importRequest.SubscriptionId, importRequest.TargetSqlServerResourceGroupName, deploymentName));
if (status == "Succeeded")
{
log.LogInformation("RunImportOrchestrator: ARM deployment succeeded");
break;
}
else if (status == "Failed")
{
log.LogInformation("RunImportOrchestrator: ARM deployment failed");
throw new Exception("Failed ARM Deployment");
}
// Orchestration sleeps until this time.
var nextCheck = context.CurrentUtcDateTime.AddSeconds(10);
if (!context.IsReplaying) { log.LogInformation($"RunImportOrchestrator: Replaying ARM deployment, next check at {nextCheck}."); }
await context.CreateTimer(nextCheck, CancellationToken.None);
}
log.LogInformation("RunImportOrchestrator: Enumerating databases");
var databases = await context.CallActivityAsync<dynamic>(nameof(AzureResourceManagerActivity.GetArmTemplateForImportSkipParameterization), importRequest);
// Create BatchPool And Job
log.LogInformation("RunImportOrchestrator: Creating batch pool and import job");
string jobId = await context.CallActivityAsync<string>(nameof(BatchActivity.CreateBatchPoolAndImportJob), importRequest);
string containerUrl = await context.CallActivityAsync<string>(nameof(StorageActivity.GettingJobContainerUrl), (importRequest.SubscriptionId, importRequest.ResourceGroupName, importRequest.StorageAccountName, importRequest.ContainerName));
log.LogInformation("RunImportOrchestrator: Creating import database tasks");
BatchActivity.CreateBatchTasks("Import", jobId, containerUrl, importRequest.BatchAccountUrl, importRequest.TargetSqlServerName, importRequest.TargetAccessToken, databases, log);
// create output values
Tuple<string, string>[] outputValues = {
Tuple.Create("Orchestration progress:", "Complete"),
Tuple.Create("deploymentName", deploymentName),
Tuple.Create("jobId", jobId),
Tuple.Create("containerUrl", containerUrl)
};
context.SetOutput(outputValues);
}
finally {
log.LogInformation("RunImportOrchestrator: exiting");
}
}