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); }
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); }
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); }); }
/// <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); }
/// <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); }
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); } }
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); } }
/// <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); }
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)); }