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)); }
private async Task <ReindexJobRecord> InsertNewReindexJobRecordAsync(Action <ReindexJobRecord> jobRecordCustomizer = null) { var jobRecord = new ReindexJobRecord("searchParamHash", maxiumumConcurrency: 1, scope: "all"); jobRecordCustomizer?.Invoke(jobRecord); ReindexJobWrapper result = await _operationDataStore.CreateReindexJobAsync(jobRecord, CancellationToken.None); return(result.JobRecord); }
private async Task <ReindexJobRecord> InsertNewReindexJobRecordAsync(Action <ReindexJobRecord> jobRecordCustomizer = null) { Dictionary <string, string> searchParamHashMap = new Dictionary <string, string>(); searchParamHashMap.Add("Patient", "searchParamHash"); var jobRecord = new ReindexJobRecord(searchParamHashMap, maxiumumConcurrency: 1, scope: "all"); jobRecordCustomizer?.Invoke(jobRecord); ReindexJobWrapper result = await _operationDataStore.CreateReindexJobAsync(jobRecord, CancellationToken.None); return(result.JobRecord); }
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)); }