Esempio n. 1
0
        public async Task SendJobResponseAsync(
            Guid activityId,
            int documentIncarnation,
            IReadOnlyDictionary <Guid, JobStepResponseEnum> jobResponseMap,
            string comment,
            CancellationToken cancellationToken)
        {
            jobResponseMap.Validate("jobResponseMap");

            if (jobResponseMap.Count == 0)
            {
                traceType.WriteInfo("No job responses to send");
                return;
            }

            if (documentIncarnation < 0)
            {
                throw new ArgumentException(
                          "documentIncarnation is {0}. It cannot be less than 0".ToString(documentIncarnation),
                          "documentIncarnation");
            }

            ParallelJobResponse parallelJobResponse = BuildParallelJobResponse(documentIncarnation, jobResponseMap, comment);

            var policyAgentRequest = new PolicyAgentRequest
            {
                JobResponse = parallelJobResponse,
            };

            await PostPolicyAgentRequestAsync(activityId, policyAgentRequest, cancellationToken).ConfigureAwait(false);
        }
Esempio n. 2
0
        public async Task PostPolicyAgentRequestAsync(Guid activityId, PolicyAgentRequest request, CancellationToken cancellationToken)
        {
            request.Validate("request");

            traceType.WriteInfo("Posting request: {0}", request.ToJson());

            var startTime = DateTimeOffset.UtcNow;

            try
            {
                byte[] payload = request.GetPayloadFromBondObject();

                await PostDocumentToWireServerAsync(payload).ConfigureAwait(false);

                activityLogger.LogOperation(activityId, startTime);
            }
            catch (Exception ex)
            {
                string text = "Unable to post policy document. Request: {0}{1}Error: {2}".ToString(
                    request.ToJson(),
                    Environment.NewLine,
                    ex);
                traceType.WriteWarning("{0}", text);
                activityLogger.LogOperation(activityId, startTime, OperationResult.Failure, ex);
                throw new ManagementException(text, ex);
            }
        }
            public override async Task PostPolicyAgentRequestAsync(
                Guid activityId,
                PolicyAgentRequest request,
                CancellationToken cancellationToken)
            {
                request.Validate("request");

                switch (policyAgentStage)
                {
                case 0:
                    SendImpactEnd(request);
                    break;

                case 1:
                    SendNewJobStep(request);
                    break;

                case 2:
                    SendImpactEndOnSecondUD(request);
                    break;

                case 3:
                    SendCompletion(request, true);
                    break;
                }

                policyAgentStage++;

                await Task.FromResult(0);
            }
            public async override Task PostPolicyAgentRequestAsync(
                Guid activityId,
                PolicyAgentRequest request,
                CancellationToken cancellationToken)
            {
                request.Validate("request");

                switch (policyAgentStage)
                {
                case 0:
                    SuspendAndResumeJob(request, TimeSpan.FromSeconds(15));
                    break;

                case 1:
                    SendImpactEnd(request);
                    break;

                case 2:
                    SendCompletion(request, true);
                    break;
                }

                policyAgentStage++;

                await Task.FromResult(0);
            }
Esempio n. 5
0
 public override Task PostPolicyAgentRequestAsync(
     Guid activityId,
     PolicyAgentRequest request,
     CancellationToken cancellationToken)
 {
     throw new TimeoutException();
 }
        protected void SuspendAndResumeJob(PolicyAgentRequest request, TimeSpan suspendInterval)
        {
            SuspendJob(request);

            Task.Run(() =>
            {
                Task.Delay(suspendInterval).GetAwaiter().GetResult();
                ResumeJob(request);
            });
        }
Esempio n. 7
0
        /// <summary>
        /// Invoked by repair executor
        /// </summary>
        public async Task RequestRepairAsync(Guid activityId, RepairRequest repairRequest, CancellationToken cancellationToken)
        {
            repairRequest.Validate("repairRequest");

            var policyAgentRequest = new PolicyAgentRequest
            {
                RepairRequest = repairRequest
            };

            await PostPolicyAgentRequestAsync(activityId, policyAgentRequest, cancellationToken).ConfigureAwait(false);
        }
Esempio n. 8
0
        /// <summary>
        /// Invoked by repair executor
        /// </summary>
        public async Task RequestRollbackAsync(Guid activityId, UpdateRollbackRequest updateRollbackRequest, CancellationToken cancellationToken)
        {
            updateRollbackRequest.Validate("updateRollbackRequest");

            var policyAgentRequest = new PolicyAgentRequest
            {
                UpdateRollbackRequest = updateRollbackRequest
            };

            await PostPolicyAgentRequestAsync(activityId, policyAgentRequest, cancellationToken).ConfigureAwait(false);
        }
Esempio n. 9
0
        public async Task RequestResumeAsync(Guid activityId, JobResumeRequest jobResumeRequest, CancellationToken cancellationToken)
        {
            jobResumeRequest.Validate("jobResumeRequest");

            var policyAgentRequest = new PolicyAgentRequest
            {
                JobResumeRequest = jobResumeRequest
            };

            await PostPolicyAgentRequestAsync(activityId, policyAgentRequest, cancellationToken).ConfigureAwait(false);
        }
            public async override Task PostPolicyAgentRequestAsync(
                Guid activityId,
                PolicyAgentRequest request,
                CancellationToken cancellationToken)
            {
                request.Validate("request");

                switch (policyAgentStage)
                {
                case 0:
                    SendImpactEnd(request);
                    break;

                case 1:
                    SendNewJobStep(request, 1, new List <string> {
                        "Role_IN_2", "Role_IN_3"
                    });
                    break;

                case 2:
                    SendImpactEndOnSecondUD(request);
                    break;

                case 3:
                    SendNewJobStep(request, 0, new List <string> {
                        "Role_IN_0", "Role_IN_1"
                    });
                    break;

                case 4:
                    SendImpactEnd(request);
                    break;

                case 5:
                    SendNewJobStep(request, 1, new List <string> {
                        "Role_IN_2", "Role_IN_3"
                    });
                    break;

                case 6:
                    SendImpactEndOnSecondUD(request);
                    break;

                case 7:
                    SendCompletion(request, true);
                    break;
                }

                policyAgentStage++;

                await Task.FromResult(0);
            }
        protected void ChangeJobStatus(PolicyAgentRequest request, JobStatusEnum status)
        {
            foreach (JobStepResponse jobStepResponse in request.JobResponse.JobStepResponses)
            {
                Guid guid = jobStepResponse.JobId.ToGuid();
                var  id   = guid;

                var tenantJob = GetTenantJob(id);

                ((MockTenantJob)tenantJob).JobStatus = status;

                // update job after it does its job, so that IS gets it again when it polls for it.
                UpdateTenantJob(tenantJob);
            }
        }
            private void SendNewJobStep(PolicyAgentRequest request, uint ud, List <string> roleInstances)
            {
                foreach (JobStepResponse jobStepResponse in request.JobResponse.JobStepResponses)
                {
                    Guid guid = jobStepResponse.JobId.ToGuid();
                    var  id   = guid;

                    var tenantJob = (MockTenantJob)GetTenantJob(id);

                    tenantJob.JobStep = TenantJobHelper.CreateNewJobStepInfo(ud, roleInstances);

                    // update job after it does its job, so that IS gets it again when it polls for it.
                    UpdateTenantJob(tenantJob);
                }
            }
            private void SendNewJobStep(PolicyAgentRequest request)
            {
                foreach (JobStepResponse jobStepResponse in request.JobResponse.JobStepResponses)
                {
                    Guid guid = jobStepResponse.JobId.ToGuid();
                    var  id   = guid;

                    MockTenantJob tenantJob = (MockTenantJob)GetTenantJob(id);

                    tenantJob.JobStep = TenantJobHelper.CreateNewJobStepInfo(1, new List <string> {
                        "Role_IN_2", "Role_IN_3"
                    });

                    // update job after it does its job, so that IS gets it again when it polls for it.
                    UpdateTenantJob(tenantJob);
                }
            }
        protected void SendImpactEnd(PolicyAgentRequest request)
        {
            foreach (JobStepResponse jobStepResponse in request.JobResponse.JobStepResponses)
            {
                Guid guid = jobStepResponse.JobId.ToGuid();
                var  id   = guid;

                MockTenantJob tenantJob = (MockTenantJob)GetTenantJob(id);

                TakeSomeActionOnJob(tenantJob);

                ((MockJobStepInfo)tenantJob.JobStep).ImpactStep            = ImpactStepEnum.ImpactEnd;
                ((MockJobStepInfo)tenantJob.JobStep).AcknowledgementStatus = AcknowledgementStatusEnum.WaitingForAcknowledgement;

                // update job after it does its job, so that IS gets it again when it polls for it.
                UpdateTenantJob(tenantJob);
            }
        }
Esempio n. 15
0
            public override async Task PostPolicyAgentRequestAsync(
                Guid activityId,
                PolicyAgentRequest request,
                CancellationToken cancellationToken)
            {
                request.Validate("request");

                if (policyAgentStage == 0)
                {
                    SendImpactEnd(request);
                }
                else if (policyAgentStage == 1)
                {
                    SendCompletion(request, true);
                }

                policyAgentStage++;

                await Task.FromResult(0);
            }
        protected void SendCompletion(PolicyAgentRequest request, bool deleteJobStep = false)
        {
            request.Validate("request");

            foreach (JobStepResponse jobStepResponse in request.JobResponse.JobStepResponses)
            {
                Guid guid = jobStepResponse.JobId.ToGuid();
                var  id   = guid;

                var tenantJob = GetTenantJob(id);

                ((MockTenantJob)tenantJob).JobStatus = JobStatusEnum.Completed;

                if (deleteJobStep && tenantJob.JobStep != null)
                {
                    ((MockTenantJob)tenantJob).JobStep = null;
                }

                // update job after it does its job, so that IS gets it again when it polls for it.
                UpdateTenantJob(tenantJob);
            }
        }
Esempio n. 17
0
            /// <summary>
            /// When IS makes a RepairRequest post to PolicyAgent, then we create a new tenant job in response
            /// </summary>
            public override async Task PostPolicyAgentRequestAsync(
                Guid activityId,
                PolicyAgentRequest request,
                CancellationToken cancellationToken)
            {
                if (request.RepairRequest != null && request.RepairRequest.RoleInstanceId != null)
                {
                    string id = request.RepairRequest.RoleInstanceId + "/" + request.RepairRequest.Action;

                    if (!repairRequests.Contains(id))
                    {
                        var tenantJob = TenantJobHelper.CreateNewTenantJob(
                            ImpactActionEnum.TenantMaintenance,
                            0,
                            new List <string> {
                            "Role_IN_1"
                        },
                            request.RepairRequest.ContextId);
                        CreateTenantJob(tenantJob);

                        repairRequests.Add(id);
                        return;
                    }
                }

                if (policyAgentStage == 0)
                {
                    SendImpactEnd(request);
                }
                else if (policyAgentStage == 1)
                {
                    SendCompletion(request, true);
                    CompletedEvent.Set();
                }

                policyAgentStage++;

                await Task.FromResult(0);
            }
 protected void SuspendJob(PolicyAgentRequest request)
 {
     ChangeJobStatus(request, JobStatusEnum.Suspended);
 }
 private void SendImpactEndOnSecondUD(PolicyAgentRequest request)
 {
     SendImpactEnd(request);
 }
Esempio n. 20
0
 private async Task PostPolicyAgentRequestAsync(Guid activityId, PolicyAgentRequest request, CancellationToken cancellationToken)
 {
     await policyAgentService.PostPolicyAgentRequestAsync(activityId, request, cancellationToken).ConfigureAwait(false);
 }
 protected void ResumeJob(PolicyAgentRequest request)
 {
     ChangeJobStatus(request, JobStatusEnum.Executing);
 }
 public virtual Task PostPolicyAgentRequestAsync(Guid activityId, PolicyAgentRequest request, CancellationToken cancellationToken)
 {
     return(Task.FromResult(0));
 }