示例#1
0
        private void UpdateRepairToRestoring(RepairTask task, RepairTaskResult result, string details)
        {
            string message = string.Format(
                CultureInfo.InvariantCulture,
                "Updating task {0} from {1} to {2}; result = {3}, details = {4}",
                task.TaskId,
                task.State,
                RepairTaskState.Restoring,
                result,
                details);

            if (result == RepairTaskResult.Succeeded || result == RepairTaskResult.Cancelled)
            {
                Trace.WriteInfo(TraceType, message);
            }
            else
            {
                Trace.WriteWarning(TraceType, message);
            }

            task.State         = RepairTaskState.Restoring;
            task.ResultStatus  = result;
            task.ResultDetails = details;

            long commitVersion = this.repairManager.UpdateRepairExecutionStateAsync(task).Result;

            Trace.WriteInfo(TraceType, "Committed version {0}", commitVersion);
        }
示例#2
0
 public IAction NewMoveToCompletedAction(
     IRepairTask repairTask,
     RepairTaskResult repairTaskResult,
     string resultDetails,
     bool surpriseJob)
 {
     return(new MoveToCompletedAction(environment, repairManager, repairTask, repairTaskResult, resultDetails, surpriseJob));
 }
示例#3
0
        private static WinFabricRepairTaskResult Convert(RepairTaskResult repairTaskResult)
        {
            if (!Enum.IsDefined(typeof(RepairTaskResult), repairTaskResult))
            {
                throw new ArgumentOutOfRangeException("Invalid RepairTaskResult value " + repairTaskResult, "repairTaskResult");
            }

            return((WinFabricRepairTaskResult)repairTaskResult);
        }
示例#4
0
 public IAction NewMoveToRestoringAction(
     IRepairTask repairTask,
     RepairTaskResult repairTaskResult,
     string resultDetails,
     bool surpriseJob = false,
     bool cancelRestoringHealthCheck = false,
     bool processRemovedNodes        = false)
 {
     return(new MoveToRestoringAction(environment, repairManager, repairTask, repairTaskResult, resultDetails, surpriseJob, cancelRestoringHealthCheck, processRemovedNodes));
 }
示例#5
0
 /// <summary>
 /// Updates the repair task for current node
 /// </summary>
 /// <param name="fc">Fabric client object used for carrying out service fabric client requests</param>
 /// <param name="nodeName">Nodename against which repair task needs to be updated</param>
 /// <param name="taskState">State of the repair task <see cref="RepairTaskState"/></param>
 /// <param name="taskResultStatus">Result status for last completed operation by RE</param>
 /// <param name="resultDetails">Result details for last completed operation by RE</param>
 /// <param name="executorState">Substate of repair executor</param>
 /// <param name="timeout">Timeout for the async operation</param>
 /// <param name="cancellationToken">The cancellation token to cancel the async operation</param>
 /// <returns>A Task representing the asnyc operation</returns>
 internal static async Task <NodeAgentSfUtilityExitCodes> UpdateRepairTask(FabricClient fc, string nodeName,
                                                                           RepairTaskState taskState,
                                                                           RepairTaskResult taskResultStatus, string resultDetails, NodeAgentSfUtilityExitCodes executorState,
                                                                           TimeSpan timeout,
                                                                           CancellationToken cancellationToken)
 {
     return(await
            UpdateRepairTask(fc, nodeName, taskState, taskResultStatus, resultDetails, executorState,
                             timeout,
                             cancellationToken, null));
 }
 public MoveToCompletedAction(
     CoordinatorEnvironment environment,
     IRepairManager repairManager,
     IRepairTask repairTask,
     RepairTaskResult repairTaskResult,
     string repairTaskResultDetails,
     bool surpriseJob)
     : base(environment, ActionType.None)
 {
     this.repairManager           = repairManager.Validate("repairManager");
     this.repairTask              = repairTask.Validate("repairTask");
     this.repairTaskResult        = repairTaskResult;
     this.repairTaskResultDetails = repairTaskResultDetails;
     this.surpriseJob             = surpriseJob;
 }
示例#7
0
        private void Update(RepairTask task, RepairTaskState state, RepairTaskResult result)
        {
            LogHelper.Log("[{0}]Repair task from state {1} to state {2} with result {3}.", Name, task.State.ToString(), state.ToString(), result.ToString());
            task.State    = state;
            task.Executor = Name;
            if (state == RepairTaskState.Preparing)
            {
                task.Impact = new NodeRepairImpactDescription(); //zero impact
            }
            if (state == RepairTaskState.Restoring || state == RepairTaskState.Completed)
            {
                task.ResultStatus = result;
            }
            task.ResultDetails = "Hooray!";
            long committedVersion = _repairManager.UpdateRepairExecutionStateAsync(task).Result;

            LogHelper.Log("...Done. Commit version: {0}.", committedVersion);
        }
 public MoveToRestoringAction(
     CoordinatorEnvironment environment,
     IRepairManager repairManager,
     IRepairTask repairTask,
     RepairTaskResult repairTaskResult,
     string repairTaskResultDetails,
     bool surpriseJob,
     bool cancelRestoringHealthCheck,
     bool processRemovedNodes)
     : base(environment, ActionType.Restore)
 {
     this.repairManager              = repairManager.Validate("repairManager");
     this.repairTask                 = repairTask.Validate("repairTask");
     this.repairTaskResult           = repairTaskResult;
     this.repairTaskResultDetails    = repairTaskResultDetails;
     this.surpriseJob                = surpriseJob;
     this.cancelRestoringHealthCheck = cancelRestoringHealthCheck;
     this.processRemovedNodes        = processRemovedNodes;
 }
示例#9
0
        /// <summary>
        /// Updates the repair task for current node
        /// </summary>
        /// <param name="fc">Fabric client object used for carrying out service fabric client requests</param>
        /// <param name="task">Repair task which needs to be updated</param>
        /// <param name="taskState">State of the repair task <see cref="RepairTaskState"/></param>
        /// <param name="taskResultStatus">Result status for last completed operation by RE</param>
        /// <param name="resultDetails">Result details for last completed operation by RE</param>
        /// <param name="executorState">Substate of repair executor</param>
        /// <param name="timeout">Timeout for the async operation</param>
        /// <param name="cancellationToken">The cancellation token to cancel the async operation</param>
        /// <returns>A Task representing the asnyc operation</returns>
        private static async Task UpdateRepairTask(FabricClient fc, RepairTask task, RepairTaskState taskState,
                                                   RepairTaskResult taskResultStatus, string resultDetails, NodeAgentSfUtilityExitCodes executorState, TimeSpan timeout,
                                                   CancellationToken cancellationToken, DateTime?restartRequesteDateTime)
        {
            // Do the actual work before mark the task as Executing.
            task.State         = taskState;
            task.ResultStatus  = taskResultStatus;
            task.ResultDetails = resultDetails;
            ExecutorDataForRmTask executorData =
                SerializationUtility.Deserialize <ExecutorDataForRmTask>(task.ExecutorData);

            executorData.ExecutorSubState = executorState;
            if (restartRequesteDateTime.HasValue)
            {
                executorData.RestartRequestedTime = restartRequesteDateTime.Value;
            }

            task.ExecutorData = SerializationUtility.Serialize(executorData);
            await fc.RepairManager.UpdateRepairExecutionStateAsync(task, timeout, cancellationToken);
        }
示例#10
0
        /// <summary>
        /// Updates the repair task for current node
        /// </summary>
        /// <param name="fc">Fabric client object used for carrying out service fabric client requests</param>
        /// <param name="nodeName">Nodename against which repair task needs to be updated</param>
        /// <param name="taskState">State of the repair task <see cref="RepairTaskState"/></param>
        /// <param name="taskResultStatus">Result status for last completed operation by RE</param>
        /// <param name="resultDetails">Result details for last completed operation by RE</param>
        /// <param name="executorState">Substate of repair executor</param>
        /// <param name="timeout">Timeout for the async operation</param>
        /// <param name="cancellationToken">The cancellation token to cancel the async operation</param>
        /// <param name="restartRequesteDateTime">Timestamp at which restart was requested</param>
        /// <returns>A Task representing the asnyc operation</returns>
        internal static async Task <NodeAgentSfUtilityExitCodes> UpdateRepairTask(FabricClient fc, string nodeName,
                                                                                  RepairTaskState taskState,
                                                                                  RepairTaskResult taskResultStatus, string resultDetails, NodeAgentSfUtilityExitCodes executorState,
                                                                                  TimeSpan timeout,
                                                                                  CancellationToken cancellationToken, DateTime?restartRequesteDateTime)
        {
            try
            {
                var repairTask = await GetRepairTaskForNode(fc, nodeName, timeout, cancellationToken);

                if (null != repairTask)
                {
                    await
                    UpdateRepairTask(fc, repairTask, taskState, taskResultStatus, resultDetails, executorState,
                                     timeout,
                                     cancellationToken, restartRequesteDateTime);

                    return(NodeAgentSfUtilityExitCodes.Success);
                }
                else
                {
                    // If repair task does not exist we're in a unknown state.
                    ServiceEventSource.Current.ErrorMessage(
                        String.Format("RepairManagerHelper.UpdateRepairTask failed. No repair task found for this node"));
                    return(NodeAgentSfUtilityExitCodes.RepairTaskInvalidState);
                }
            }
            catch (Exception e)
            {
                ServiceEventSource.Current.ErrorMessage(
                    String.Format("RepairManagerHelper.UpdateRepairTask failed. Exception details {0}", e));
                if (e is FabricTransientException)
                {
                    return(NodeAgentSfUtilityExitCodes.RetryableException);
                }
                else
                {
                    return(NodeAgentSfUtilityExitCodes.Failure);
                }
            }
        }