Пример #1
0
        public override async Task ExecuteAsync(Guid activityId)
        {
            if (surpriseJob)
            {
                // TODO, add surprise in executordata
                this.Environment.DefaultTraceType.WriteWarning("MoveToPreparing: job bypassed normal automated workflow: [{0}]", tenantJob);
            }

            repairTask.State        = RepairTaskState.Preparing;
            repairTask.ExecutorData = args.ExecutorData.ToJson();
            repairTask.Impact       = args.Impact;

            bool?prepareHc = args.PerformPreparingHealthCheck;
            bool?restoreHc = args.PerformRestoringHealthCheck;

            if (prepareHc == repairTask.PerformPreparingHealthCheck)
            {
                prepareHc = null;
            }

            if (restoreHc == repairTask.PerformRestoringHealthCheck)
            {
                restoreHc = null;
            }

            // since IS has claimed the task, it is free to update the health policy as it seems fit
            if (prepareHc != null || restoreHc != null)
            {
                // TODO: See if this can be removed by allowing health policy updates via UpdateRepairExecutionStateAsync
                // (currently those ignored for backward compatibility reasons)
                repairTask.Version = await repairManager.UpdateRepairTaskHealthPolicyAsync(activityId, repairTask, prepareHc, restoreHc).ConfigureAwait(false);
            }

            await repairManager.UpdateRepairExecutionStateAsync(activityId, repairTask).ConfigureAwait(false);
        }
Пример #2
0
        private async Task <bool> CompleteRepairTaskAsync(Guid activityId, IRepairTask task)
        {
            traceType.WriteInfo(
                "Cancelling repair task {0} in state {1}:{2}{3}",
                task.TaskId,
                task.State,
                Environment.NewLine,
                task.ToJson());

            bool succeeded = true;

            try
            {
                switch (task.State)
                {
                case RepairTaskState.Claimed:
                case RepairTaskState.Preparing:
                    await repairManager.CancelRepairTaskAsync(activityId, task);

                    break;

                case RepairTaskState.Approved:
                case RepairTaskState.Executing:
                    task.State         = RepairTaskState.Restoring;
                    task.ResultStatus  = RepairTaskResult.Interrupted;
                    task.ResultDetails = "Repair task was cancelled because Azure coordination is disabled";
                    await repairManager.UpdateRepairExecutionStateAsync(activityId, task);

                    break;

                case RepairTaskState.Restoring:
                    await repairManager.UpdateRepairTaskHealthPolicyAsync(activityId, task, null, performRestoringHealthCheck : false);

                    break;
                }
            }
            catch (Exception e)
            {
                traceType.WriteWarning(
                    "Failed to cancel repair task {0} in state {1}: {2}",
                    task.TaskId,
                    task.State,
                    e);

                succeeded = false;
            }

            return(succeeded);
        }
 public override async Task ExecuteAsync(Guid activityId)
 {
     await repairManager.UpdateRepairTaskHealthPolicyAsync(activityId, repairTask, null, false).ConfigureAwait(false);
 }