in src/PatchOrchestrationApplication/NodeAgentSFUtility/src/CommandProcessor.cs [339:447]
public async Task<NodeAgentSfUtilityExitCodes> UpdateInstallationStatusAsync(String nodeName, Uri applicationName,
NodeAgentSfUtilityExitCodes updateState, WindowsUpdateOperationResult operationResult,
TimeSpan timeout, CancellationToken cancellationToken)
{
NodeAgentSfUtilityExitCodes result;
String resultDetails = null;
if (operationResult != null)
{
int succeededOperations;
int abortedOperations;
int totalOperations;
this.GetWuOperationResultCount(operationResult,out totalOperations,out abortedOperations,out succeededOperations);
result =
await
CoordinatorServiceHelper.UpdateWuOperationResult(
this.fabricClient,
applicationName,
operationResult,
timeout,
cancellationToken);
if (result != NodeAgentSfUtilityExitCodes.Success)
{
return result;
}
resultDetails =
String.Format(
"{0} out of {1} updates were installed successfully, {2} were aborted",
succeededOperations,
operationResult.UpdateDetails.Count,
abortedOperations);
}
switch (updateState)
{
case NodeAgentSfUtilityExitCodes.InstallationCompleted:
{
result =
await
RepairManagerHelper.UpdateRepairTask(
this.fabricClient,
nodeName,
RepairTaskState.Executing,
RepairTaskResult.Pending,
resultDetails,
NodeAgentSfUtilityExitCodes.InstallationCompleted,
timeout,
cancellationToken);
break;
}
case NodeAgentSfUtilityExitCodes.InstallationInProgress:
{
result = await
RepairManagerHelper.UpdateRepairTask(this.fabricClient, nodeName,
RepairTaskState.Executing, RepairTaskResult.Pending, resultDetails, NodeAgentSfUtilityExitCodes.InstallationInProgress, timeout,
cancellationToken);
break;
}
case NodeAgentSfUtilityExitCodes.RestartRequested:
{
resultDetails = "Installation of the updates completed, Restart pending";
result = await RepairManagerHelper.UpdateRepairTask(this.fabricClient, nodeName,
RepairTaskState.Executing, RepairTaskResult.Pending,
resultDetails, NodeAgentSfUtilityExitCodes.RestartRequested, timeout, cancellationToken, DateTime.UtcNow);
break;
}
case NodeAgentSfUtilityExitCodes.RestartNotNeeded:
{
resultDetails = "Installation of the updates completed, Restart not needed";
result = await RepairManagerHelper.UpdateRepairTask(this.fabricClient, nodeName,
RepairTaskState.Executing, RepairTaskResult.Pending,
resultDetails, NodeAgentSfUtilityExitCodes.RestartNotNeeded, timeout, cancellationToken);
break;
}
case NodeAgentSfUtilityExitCodes.RestartCompleted:
{
resultDetails = "Installation of the updates completed, Restart post installation completed successfully";
result = await RepairManagerHelper.UpdateRepairTask(this.fabricClient, nodeName,
RepairTaskState.Executing, RepairTaskResult.Pending,
resultDetails, NodeAgentSfUtilityExitCodes.RestartCompleted, timeout, cancellationToken);
break;
}
case NodeAgentSfUtilityExitCodes.OperationCompleted:
{
ServiceEventSource.Current.InfoMessage(String.Format("Mark the operation as completed"));
result = await RepairManagerHelper.UpdateRepairTask(this.fabricClient, nodeName,
RepairTaskState.Restoring, RepairTaskResult.Succeeded,
resultDetails, NodeAgentSfUtilityExitCodes.OperationCompleted, timeout, cancellationToken);
break;
}
default:
{
ServiceEventSource.Current.ErrorMessage(String.Format("UpdateInstallationStatusAsync called with invalid state {0}", updateState));
result = NodeAgentSfUtilityExitCodes.InvalidArgument;
break;
}
}
ServiceEventSource.Current.InfoMessage("UpdateInstallationStatusAsync result = {0}", result);
return result;
}