public async Task GivenARunningReindexJob_WhenUpdatingTheReindexJob_ThenTheJobShouldBeUpdated() { ReindexJobWrapper jobWrapper = await CreateRunningReindexJob(); ReindexJobRecord job = jobWrapper.JobRecord; job.Status = OperationStatus.Completed; await _operationDataStore.UpdateReindexJobAsync(job, jobWrapper.ETag, CancellationToken.None); ReindexJobWrapper updatedJobWrapper = await _operationDataStore.GetReindexJobByIdAsync(job.Id, CancellationToken.None); ValidateReindexJobRecord(job, updatedJobWrapper?.JobRecord); }
public async Task <CancelReindexResponse> Handle(CancelReindexRequest request, CancellationToken cancellationToken) { EnsureArg.IsNotNull(request, nameof(request)); if (await _authorizationService.CheckAccess(DataActions.Reindex, cancellationToken) != DataActions.Reindex) { throw new UnauthorizedFhirActionException(); } return(await _retryPolicy.ExecuteAsync(async() => { ReindexJobWrapper outcome = await _fhirOperationDataStore.GetReindexJobByIdAsync(request.JobId, cancellationToken); // If the job is already completed for any reason, return conflict status. if (outcome.JobRecord.Status.IsFinished()) { throw new RequestNotValidException( string.Format(Resources.ReindexJobInCompletedState, outcome.JobRecord.Id, outcome.JobRecord.Status)); } // Try to cancel the job. outcome.JobRecord.Status = OperationStatus.Canceled; outcome.JobRecord.CanceledTime = Clock.UtcNow; await _fhirOperationDataStore.UpdateReindexJobAsync(outcome.JobRecord, outcome.ETag, cancellationToken); return new CancelReindexResponse(HttpStatusCode.Conflict, outcome); })); }
public ReindexJobTaskTests() { _cancellationToken = _cancellationTokenSource.Token; var job = CreateReindexJobRecord(); _fhirOperationDataStore.UpdateReindexJobAsync(job, _weakETag, _cancellationToken).ReturnsForAnyArgs(new ReindexJobWrapper(job, _weakETag)); _searchService.SearchForReindexAsync( Arg.Any <IReadOnlyList <Tuple <string, string> > >(), Arg.Any <string>(), true, Arg.Any <CancellationToken>()). Returns(new SearchResult(5, new List <Tuple <string, string> >())); _reindexJobTask = new ReindexJobTask( () => _fhirOperationDataStore.CreateMockScope(), Options.Create(_reindexJobConfiguration), () => _searchService.CreateMockScope(), SearchParameterFixtureData.SupportedSearchDefinitionManager, _reindexUtilities, NullLogger <ReindexJobTask> .Instance); _reindexUtilities.UpdateSearchParameters(Arg.Any <IReadOnlyCollection <string> >(), Arg.Any <CancellationToken>()).Returns(x => (true, null)); }
public async Task GivenACancelRequest_WhenJobInProgress_ThenJobUpdatedToCanceled() { var request = new CancelReindexRequest("id"); var jobRecord = new ReindexJobRecord("hash", 1, null) { Status = OperationStatus.Running, }; var jobWrapper = new ReindexJobWrapper(jobRecord, WeakETag.FromVersionId("id")); _fhirOperationDataStore.GetReindexJobByIdAsync("id", Arg.Any <CancellationToken>()).Returns(jobWrapper); _fhirOperationDataStore.UpdateReindexJobAsync(jobRecord, WeakETag.FromVersionId("id"), Arg.Any <CancellationToken>()).Returns(jobWrapper); var handler = new CancelReindexRequestHandler(_fhirOperationDataStore, DisabledFhirAuthorizationService.Instance); var result = await handler.Handle(request, CancellationToken.None); Assert.Equal(OperationStatus.Canceled, result.Job.JobRecord.Status); }