public async Task GivenAnActiveReindexJob_WhenGettingActiveReindexJobs_ThenTheCorrectJobIdShouldBeReturned(OperationStatus operationStatus) { ReindexJobRecord jobRecord = await InsertNewReindexJobRecordAsync(job => job.Status = operationStatus); (bool, string)activeReindexJobResult = await _operationDataStore.CheckActiveReindexJobsAsync(CancellationToken.None); Assert.True(activeReindexJobResult.Item1); Assert.Equal(jobRecord.Id, activeReindexJobResult.Item2); }
public async Task <CreateReindexResponse> Handle(CreateReindexRequest request, CancellationToken cancellationToken) { EnsureArg.IsNotNull(request, nameof(request)); if (await _authorizationService.CheckAccess(DataActions.Reindex, cancellationToken) != DataActions.Reindex) { throw new UnauthorizedFhirActionException(); } (var activeReindexJobs, var reindexJobId) = await _fhirOperationDataStore.CheckActiveReindexJobsAsync(cancellationToken); if (activeReindexJobs) { throw new JobConflictException(string.Format(Resources.OnlyOneResourceJobAllowed, reindexJobId)); } var jobRecord = new ReindexJobRecord( _searchParameterDefinitionManager.SearchParameterHashMap, request.MaximumConcurrency ?? _reindexJobConfiguration.DefaultMaximumThreadsPerReindexJob, request.MaximumResourcesPerQuery ?? _reindexJobConfiguration.MaximumNumberOfResourcesPerQuery, request.QueryDelayIntervalInMilliseconds ?? _reindexJobConfiguration.QueryDelayIntervalInMilliseconds, request.TargetDataStoreUsagePercentage); var outcome = await _fhirOperationDataStore.CreateReindexJobAsync(jobRecord, cancellationToken); return(new CreateReindexResponse(outcome)); }
public async Task <CreateReindexResponse> Handle(CreateReindexRequest request, CancellationToken cancellationToken) { EnsureArg.IsNotNull(request, nameof(request)); if (await _authorizationService.CheckAccess(DataActions.Reindex, cancellationToken) != DataActions.Reindex) { throw new UnauthorizedFhirActionException(); } (var activeReindexJobs, var reindexJobId) = await _fhirOperationDataStore.CheckActiveReindexJobsAsync(cancellationToken); if (activeReindexJobs) { throw new JobConflictException(string.Format(Resources.OnlyOneResourceJobAllowed, reindexJobId)); } // We need to pull in latest search parameter updates from the data store before creating a reindex job. // There could be a potential delay of <see cref="ReindexJobConfiguration.JobPollingFrequency"/> before // search parameter updates on one instance propagates to other instances. If we store the reindex // job with the old hash value in _searchParameterDefinitionManager.SearchParameterHashMap, then we will // not detect the resources that need to be reindexed. await _searchParameterOperations.GetAndApplySearchParameterUpdates(cancellationToken); var jobRecord = new ReindexJobRecord( _searchParameterDefinitionManager.SearchParameterHashMap, request.MaximumConcurrency ?? _reindexJobConfiguration.DefaultMaximumThreadsPerReindexJob, request.MaximumResourcesPerQuery ?? _reindexJobConfiguration.MaximumNumberOfResourcesPerQuery, request.QueryDelayIntervalInMilliseconds ?? _reindexJobConfiguration.QueryDelayIntervalInMilliseconds, request.TargetDataStoreUsagePercentage); var outcome = await _fhirOperationDataStore.CreateReindexJobAsync(jobRecord, cancellationToken); return(new CreateReindexResponse(outcome)); }
public async Task <CreateReindexResponse> Handle(CreateReindexRequest request, CancellationToken cancellationToken) { EnsureArg.IsNotNull(request, nameof(request)); if (await _authorizationService.CheckAccess(DataActions.Reindex) != DataActions.Reindex) { throw new UnauthorizedFhirActionException(); } if (await _fhirOperationDataStore.CheckActiveReindexJobsAsync(cancellationToken)) { throw new JobConflictException(Resources.OnlyOneResourceJobAllowed); } // TODO: determine new parameters to index // TODO: Get hash from parameters file string hash = "hash"; var jobRecord = new ReindexJobRecord( hash, request.MaximumConcurrency ?? _reindexJobConfiguration.DefaultMaximumThreadsPerReindexJob, request.Scope); var outcome = await _fhirOperationDataStore.CreateReindexJobAsync(jobRecord, cancellationToken); return(new CreateReindexResponse(outcome)); }
public SearchParameterValidatorTests() { _searchParameterDefinitionManager.When(s => s.GetSearchParameter(Arg.Is <Uri>(uri => uri != new Uri("http://duplicate")))). Do(x => throw new SearchParameterNotSupportedException("message")); _searchParameterDefinitionManager.GetSearchParameter(new Uri("http://duplicate")).Returns(new SearchParameterInfo("duplicate", "duplicate")); _fhirOperationDataStore.CheckActiveReindexJobsAsync(CancellationToken.None).Returns((false, string.Empty)); }
public SearchParameterValidatorTests() { _searchParameterDefinitionManager.TryGetSearchParameter(Arg.Is <Uri>(uri => uri != new Uri("http://duplicate")), out _).Returns(false); _searchParameterDefinitionManager.TryGetSearchParameter(new Uri("http://duplicate"), out _).Returns(true); _searchParameterDefinitionManager.TryGetSearchParameter("Patient", Arg.Is <string>(code => code != "duplicate"), out _).Returns(false); _searchParameterDefinitionManager.TryGetSearchParameter("Patient", "duplicate", out _).Returns(true); _fhirOperationDataStore.CheckActiveReindexJobsAsync(CancellationToken.None).Returns((false, string.Empty)); }
public async Task <CreateReindexResponse> Handle(CreateReindexRequest request, CancellationToken cancellationToken) { EnsureArg.IsNotNull(request, nameof(request)); if (await _authorizationService.CheckAccess(DataActions.Reindex) != DataActions.Reindex) { throw new UnauthorizedFhirActionException(); } if (await _fhirOperationDataStore.CheckActiveReindexJobsAsync(cancellationToken)) { throw new JobConflictException(Resources.OnlyOneResourceJobAllowed); } var jobRecord = new ReindexJobRecord( _searchParameterDefinitionManager.SearchParameterHashMap, request.MaximumConcurrency ?? _reindexJobConfiguration.DefaultMaximumThreadsPerReindexJob, _reindexJobConfiguration.MaximumNumberOfResourcesPerQuery); var outcome = await _fhirOperationDataStore.CreateReindexJobAsync(jobRecord, cancellationToken); return(new CreateReindexResponse(outcome)); }