Skip to content
This repository was archived by the owner on Aug 4, 2022. It is now read-only.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public async Task DrainWorkloadDataPipelines()
* Since the SYS workload on the spoke never sends any packages, draining and starting it can be skipped.
* This should be solved in AX version 10.0.23.
*/
if (WorkloadInstanceManager.IsWorkloadSYSOnSpoke(workloadInstance))
if (WorkloadInstanceManager.IsSYSWorkloadOnSpoke(workloadInstance))
{
Console.WriteLine($"Skipping the SYS workload on {scaleUnit.PrintableName()}");
continue;
Expand All @@ -32,7 +32,7 @@ public async Task DrainWorkloadDataPipelines()

foreach (WorkloadInstance workloadInstance in workloadInstances)
{
if (WorkloadInstanceManager.IsWorkloadSYSOnSpoke(workloadInstance))
if (WorkloadInstanceManager.IsSYSWorkloadOnSpoke(workloadInstance))
{
continue;
}
Expand All @@ -49,7 +49,7 @@ public async Task StartWorkloadDataPipelines()

foreach (WorkloadInstance workloadInstance in workloadInstances)
{
if (WorkloadInstanceManager.IsWorkloadSYSOnSpoke(workloadInstance))
if (WorkloadInstanceManager.IsSYSWorkloadOnSpoke(workloadInstance))
{
Console.WriteLine($"Skipping the SYS workload on {scaleUnit.PrintableName()}");
continue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Threading.Tasks;
using CloudAndEdgeLibs.AOS;
using CloudAndEdgeLibs.Contracts;
using ScaleUnitManagement.ScaleUnitFeatureManager.Utilities;
using ScaleUnitManagement.Utilities;
using ScaleUnitManagement.WorkloadSetupOrchestrator.Utilities;

Expand Down Expand Up @@ -37,6 +38,81 @@ public async Task InstallationStatus()
}
}

private async Task InstallWorkloadsOnScaleUnit()
{
IAOSClient scaleUnitAosClient = await GetScaleUnitAosClient();
IAOSClient hubAosClient = await GetHubAosClient();

List<WorkloadInstance> workloadInstances = null;

await ReliableRun.Execute(async () => workloadInstances = await new WorkloadInstanceManager(hubAosClient).CreateWorkloadInstances(), "Create workload instances");

int installedWorkloadCount = await CountInstalledWorkloads(scaleUnitAosClient);

foreach (WorkloadInstance workloadInstance in workloadInstances)
{
if (await WorkloadInstanceManager.IsWorkloadInstanceInReadyState(scaleUnitAosClient, workloadInstance))
continue;

if (!await WorkloadInstanceManager.IsWorkloadInstanceInInstallingState(scaleUnitAosClient, workloadInstance))
{
Console.WriteLine($"Installing the {workloadInstance.VersionedWorkload.Workload.Name} workload");
var workloadInstanceToInstallList = new List<WorkloadInstance>() { workloadInstance };

await scaleUnitAosClient.WriteWorkloadInstances(workloadInstanceToInstallList);

if (WorkloadInstanceManager.IsSYSWorkload(workloadInstance) && installedWorkloadCount == 0)
{
ClearPotentiallyProblematicTables();
}
}

// Assuming that the LBD environment will be on the app version >= 10.0.17
if (scaleUnit.EnvironmentType == EnvironmentType.LBD || AxDeployment.IsApplicationVersionMoreRecentThan("10.8.581.0"))
await WaitForWorkloadInstallation(workloadInstance);
}
}

private async Task<int> CountInstalledWorkloads(IAOSClient scaleUnitAosClient)
{
List<WorkloadInstance> workloadInstances = null;

await ReliableRun.Execute(async () => workloadInstances = await scaleUnitAosClient.GetWorkloadInstances(), "Get workload instances");

int count = 0;

foreach (WorkloadInstance workloadInstance in workloadInstances)
{
if (await WorkloadInstanceManager.IsWorkloadInstanceInReadyState(scaleUnitAosClient, workloadInstance))
{
count++;
}
}
return count;
}

private void ClearPotentiallyProblematicTables()
{
string sqlQuery = $@"
USE {scaleUnit.AxDbName};
EXEC sys.sp_set_session_context @key = N'ActiveScaleUnitId', @value = '';

TRUNCATE TABLE SysFeatureStateV0;
TRUNCATE TABLE FeatureManagementState;
TRUNCATE TABLE FeatureManagementMetadata;
TRUNCATE TABLE SysFlighting;

TRUNCATE TABLE NumberSequenceScope;
TRUNCATE TABLE NumberSequenceReference;
TRUNCATE TABLE NumberSequenceTable;

EXEC sys.sp_set_session_context @key = N'ActiveScaleUnitId', @value = '{scaleUnit.ScaleUnitId}';
";

var sqlQueryExecutor = new SqlQueryExecutor();
sqlQueryExecutor.Execute(sqlQuery);
}

private async Task WaitForWorkloadInstallation(WorkloadInstance workloadInstance)
{
IAOSClient aosClient = await GetScaleUnitAosClient();
Expand Down Expand Up @@ -66,32 +142,5 @@ private async Task WaitForWorkloadInstallation(WorkloadInstance workloadInstance

Console.WriteLine();
}

private async Task InstallWorkloadsOnScaleUnit()
{
IAOSClient scaleUnitAosClient = await GetScaleUnitAosClient();
IAOSClient hubAosClient = await GetHubAosClient();

List<WorkloadInstance> workloadInstances = null;

await ReliableRun.Execute(async () => workloadInstances = await new WorkloadInstanceManager(hubAosClient).CreateWorkloadInstances(), "Create workload instances");

foreach (WorkloadInstance workloadInstance in workloadInstances)
{
if (await WorkloadInstanceManager.IsWorkloadInstanceInReadyState(scaleUnitAosClient, workloadInstance))
continue;

if (!await WorkloadInstanceManager.IsWorkloadInstanceInInstallingState(scaleUnitAosClient, workloadInstance))
{
Console.WriteLine($"Installing the {workloadInstance.VersionedWorkload.Workload.Name} workload");
var workloadInstanceToInstallList = new List<WorkloadInstance>() { workloadInstance };
await scaleUnitAosClient.WriteWorkloadInstances(workloadInstanceToInstallList);
}

// Assuming that the LBD environment will be on the app version >= 10.0.17
if (scaleUnit.EnvironmentType == EnvironmentType.LBD || AxDeployment.IsApplicationVersionMoreRecentThan("10.8.581.0"))
await WaitForWorkloadInstallation(workloadInstance);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -309,11 +309,16 @@ public static async Task<bool> IsWorkloadInStoppedState(IAOSClient client, Workl
return status.Health == StoppedState;
}

public static bool IsWorkloadSYSOnSpoke(WorkloadInstance workloadInstance)
public static bool IsSYSWorkload(WorkloadInstance workloadInstance)
{
ScaleUnitInstance scaleUnit = Config.FindScaleUnitWithId(ScaleUnitContext.GetScaleUnitId());
string name = workloadInstance.VersionedWorkload.Workload.Name;
return name.Equals("SYS") && !scaleUnit.IsHub();
return name.Equals("SYS", StringComparison.OrdinalIgnoreCase);
}

public static bool IsSYSWorkloadOnSpoke(WorkloadInstance workloadInstance)
{
ScaleUnitInstance scaleUnit = Config.FindScaleUnitWithId(ScaleUnitContext.GetScaleUnitId());
return IsSYSWorkload(workloadInstance) && !scaleUnit.IsHub();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private async Task EnsureWorkloadsAreDrained(List<WorkloadInstance> workloadInst
{
foreach (WorkloadInstance workloadInstance in workloadInstances)
{
if (WorkloadInstanceManager.IsWorkloadSYSOnSpoke(workloadInstance))
if (WorkloadInstanceManager.IsSYSWorkloadOnSpoke(workloadInstance))
{
continue;
}
Expand Down