use of org.opensearch.search.asynchronous.processor.AsynchronousSearchPostProcessor in project asynchronous-search by opensearch-project.
the class AsynchronousSearchPostProcessorTests method testProcessSearchResponseForExpiredContext.
public void testProcessSearchResponseForExpiredContext() throws AsynchronousSearchStateMachineClosedException {
DiscoveryNode discoveryNode = new DiscoveryNode("node", OpenSearchTestCase.buildNewFakeTransportAddress(), Collections.emptyMap(), DiscoveryNodeRole.BUILT_IN_ROLES, Version.CURRENT);
AtomicBoolean activeContextCleanUpConsumerInvocation = new AtomicBoolean();
ThreadPool testThreadPool = null;
try {
testThreadPool = new TestThreadPool(AsynchronousSearchPlugin.OPEN_DISTRO_ASYNC_SEARCH_GENERIC_THREAD_POOL_NAME, executorBuilder);
ClusterService mockClusterService = ClusterServiceUtils.createClusterService(testThreadPool, discoveryNode, clusterSettings);
FakeClient fakeClient = new FakeClient(testThreadPool);
AsynchronousSearchActiveStore asActiveStore = new AsynchronousSearchActiveStore(mockClusterService);
AsynchronousSearchPersistenceService persistenceService = new AsynchronousSearchPersistenceService(fakeClient, mockClusterService, testThreadPool);
AsynchronousSearchService asService = new AsynchronousSearchService(persistenceService, asActiveStore, fakeClient, mockClusterService, testThreadPool, new InternalAsynchronousSearchStats(), new NamedWriteableRegistry(emptyList()));
AsynchronousSearchStateMachine asStateMachine = asService.getStateMachine();
ClusterService clusterService = ClusterServiceUtils.createClusterService(testThreadPool, discoveryNode, clusterSettings);
AsynchronousSearchPostProcessor postProcessor = new AsynchronousSearchPostProcessor(persistenceService, asActiveStore, asStateMachine, (context) -> activeContextCleanUpConsumerInvocation.compareAndSet(false, true), testThreadPool, clusterService);
SubmitAsynchronousSearchRequest submitAsynchronousSearchRequest = new SubmitAsynchronousSearchRequest(new SearchRequest());
submitAsynchronousSearchRequest.keepOnCompletion(true);
submitAsynchronousSearchRequest.keepAlive(TimeValue.timeValueMillis(1));
AsynchronousSearchActiveContext context = (AsynchronousSearchActiveContext) asService.createAndStoreContext(submitAsynchronousSearchRequest, System.currentTimeMillis(), () -> InternalAggregationTestCase.emptyReduceContextBuilder(), null);
asStateMachine.trigger(new SearchStartedEvent(context, new SearchTask(0, "n/a", "n/a", () -> "test", null, Collections.emptyMap())));
SearchResponse mockSearchResponse = getMockSearchResponse();
waitUntil(() -> context.isExpired());
AsynchronousSearchResponse asResponse = postProcessor.processSearchResponse(mockSearchResponse, context.getContextId());
assertNotNull(asResponse.getId());
assertNull(asResponse.getError());
assertEquals(AsynchronousSearchState.SUCCEEDED, asResponse.getState());
AsynchronousSearchAssertions.assertSearchResponses(mockSearchResponse, asResponse.getSearchResponse());
assertTrue(activeContextCleanUpConsumerInvocation.get());
assertEquals(0, fakeClient.persistenceCount);
} catch (InterruptedException e) {
fail("Interrupted exception" + e.getMessage());
} finally {
ThreadPool.terminate(testThreadPool, 200, TimeUnit.MILLISECONDS);
}
}
use of org.opensearch.search.asynchronous.processor.AsynchronousSearchPostProcessor in project asynchronous-search by opensearch-project.
the class AsynchronousSearchPostProcessorTests method testProcessSearchFailureOnDeletedContext.
public void testProcessSearchFailureOnDeletedContext() throws AsynchronousSearchStateMachineClosedException {
DiscoveryNode discoveryNode = new DiscoveryNode("node", OpenSearchTestCase.buildNewFakeTransportAddress(), Collections.emptyMap(), DiscoveryNodeRole.BUILT_IN_ROLES, Version.CURRENT);
AtomicBoolean activeContextCleanUpConsumerInvocation = new AtomicBoolean();
ThreadPool testThreadPool = null;
try {
testThreadPool = new TestThreadPool(this.getClass().getName(), executorBuilder);
ClusterService mockClusterService = ClusterServiceUtils.createClusterService(testThreadPool, discoveryNode, clusterSettings);
FakeClient fakeClient = new FakeClient(testThreadPool);
AsynchronousSearchActiveStore asActiveStore = new AsynchronousSearchActiveStore(mockClusterService);
AsynchronousSearchPersistenceService persistenceService = new AsynchronousSearchPersistenceService(fakeClient, mockClusterService, testThreadPool);
AsynchronousSearchService asService = new AsynchronousSearchService(persistenceService, asActiveStore, fakeClient, mockClusterService, testThreadPool, new InternalAsynchronousSearchStats(), new NamedWriteableRegistry(emptyList()));
AsynchronousSearchStateMachine asStateMachine = asService.getStateMachine();
ClusterService clusterService = ClusterServiceUtils.createClusterService(testThreadPool, discoveryNode, clusterSettings);
AsynchronousSearchPostProcessor postProcessor = new AsynchronousSearchPostProcessor(persistenceService, asActiveStore, asStateMachine, (context) -> activeContextCleanUpConsumerInvocation.compareAndSet(false, true), testThreadPool, clusterService);
SubmitAsynchronousSearchRequest submitAsynchronousSearchRequest = new SubmitAsynchronousSearchRequest(new SearchRequest());
submitAsynchronousSearchRequest.keepOnCompletion(true);
submitAsynchronousSearchRequest.keepAlive(TimeValue.timeValueHours(1));
AsynchronousSearchActiveContext context = (AsynchronousSearchActiveContext) asService.createAndStoreContext(submitAsynchronousSearchRequest, System.currentTimeMillis(), () -> InternalAggregationTestCase.emptyReduceContextBuilder(), null);
ShardSearchFailure shardSearchFailure = new ShardSearchFailure(new RuntimeException("runtime-exception"));
SearchPhaseExecutionException exception = new SearchPhaseExecutionException("phase", "msg", new NullPointerException(), new ShardSearchFailure[] { shardSearchFailure });
asStateMachine.trigger(new SearchStartedEvent(context, new SearchTask(0, "n/a", "n/a", () -> "test", null, Collections.emptyMap())));
asStateMachine.trigger(new SearchDeletedEvent(context));
AsynchronousSearchResponse asResponse = postProcessor.processSearchFailure(exception, context.getContextId());
assertNull(asResponse.getId());
assertNull(asResponse.getSearchResponse());
assertEquals(-1L, asResponse.getExpirationTimeMillis());
assertEquals(-1L, asResponse.getStartTimeMillis());
assertEquals(AsynchronousSearchState.FAILED, asResponse.getState());
assertThat(asResponse.getError(), instanceOf(SearchPhaseExecutionException.class));
assertFalse(activeContextCleanUpConsumerInvocation.get());
assertEquals(0, fakeClient.persistenceCount);
} finally {
ThreadPool.terminate(testThreadPool, 200, TimeUnit.MILLISECONDS);
}
}
use of org.opensearch.search.asynchronous.processor.AsynchronousSearchPostProcessor in project asynchronous-search by opensearch-project.
the class AsynchronousSearchPostProcessorTests method testProcessSearchResponseBeginPersistence.
public void testProcessSearchResponseBeginPersistence() throws AsynchronousSearchStateMachineClosedException, InterruptedException {
DiscoveryNode discoveryNode = new DiscoveryNode("node", OpenSearchTestCase.buildNewFakeTransportAddress(), Collections.emptyMap(), DiscoveryNodeRole.BUILT_IN_ROLES, Version.CURRENT);
AtomicBoolean activeContextCleanUpConsumerInvocation = new AtomicBoolean();
ThreadPool testThreadPool = null;
try {
testThreadPool = new TestThreadPool(AsynchronousSearchPlugin.OPEN_DISTRO_ASYNC_SEARCH_GENERIC_THREAD_POOL_NAME, executorBuilder);
ClusterService mockClusterService = ClusterServiceUtils.createClusterService(testThreadPool, discoveryNode, clusterSettings);
FakeClient fakeClient = new FakeClient(testThreadPool);
AsynchronousSearchActiveStore asActiveStore = new AsynchronousSearchActiveStore(mockClusterService);
AsynchronousSearchPersistenceService persistenceService = new AsynchronousSearchPersistenceService(fakeClient, mockClusterService, testThreadPool);
AsynchronousSearchService asService = new AsynchronousSearchService(persistenceService, asActiveStore, fakeClient, mockClusterService, testThreadPool, new InternalAsynchronousSearchStats(), new NamedWriteableRegistry(emptyList()));
AsynchronousSearchStateMachine asStateMachine = asService.getStateMachine();
ClusterService clusterService = ClusterServiceUtils.createClusterService(testThreadPool, discoveryNode, clusterSettings);
AsynchronousSearchPostProcessor postProcessor = new AsynchronousSearchPostProcessor(persistenceService, asActiveStore, asStateMachine, (context) -> activeContextCleanUpConsumerInvocation.compareAndSet(false, true), testThreadPool, clusterService);
SubmitAsynchronousSearchRequest submitAsynchronousSearchRequest = new SubmitAsynchronousSearchRequest(new SearchRequest());
submitAsynchronousSearchRequest.keepOnCompletion(true);
submitAsynchronousSearchRequest.keepAlive(TimeValue.timeValueHours(1));
AsynchronousSearchActiveContext context = (AsynchronousSearchActiveContext) asService.createAndStoreContext(submitAsynchronousSearchRequest, System.currentTimeMillis(), () -> InternalAggregationTestCase.emptyReduceContextBuilder(), null);
asStateMachine.trigger(new SearchStartedEvent(context, new SearchTask(0, "n/a", "n/a", () -> "test", null, Collections.emptyMap())));
SearchResponse mockSearchResponse = getMockSearchResponse();
AsynchronousSearchResponse asResponse = postProcessor.processSearchResponse(mockSearchResponse, context.getContextId());
assertNotNull(asResponse.getId());
assertNull(asResponse.getError());
assertEquals(AsynchronousSearchState.PERSISTING, asResponse.getState());
AsynchronousSearchAssertions.assertSearchResponses(mockSearchResponse, asResponse.getSearchResponse());
assertFalse(activeContextCleanUpConsumerInvocation.get());
waitUntil(() -> fakeClient.persistenceCount == 1);
assertEquals(1, fakeClient.persistenceCount);
} finally {
ThreadPool.terminate(testThreadPool, 200, TimeUnit.MILLISECONDS);
}
}
use of org.opensearch.search.asynchronous.processor.AsynchronousSearchPostProcessor in project asynchronous-search by opensearch-project.
the class AsynchronousSearchPostProcessorTests method testProcessSearchResponseOnClosedContext.
public void testProcessSearchResponseOnClosedContext() throws AsynchronousSearchStateMachineClosedException {
DiscoveryNode discoveryNode = new DiscoveryNode("node", OpenSearchTestCase.buildNewFakeTransportAddress(), Collections.emptyMap(), DiscoveryNodeRole.BUILT_IN_ROLES, Version.CURRENT);
AtomicBoolean activeContextCleanUpConsumerInvocation = new AtomicBoolean();
ThreadPool testThreadPool = null;
try {
testThreadPool = new TestThreadPool(this.getClass().getName(), executorBuilder);
ClusterService mockClusterService = ClusterServiceUtils.createClusterService(testThreadPool, discoveryNode, clusterSettings);
FakeClient fakeClient = new FakeClient(testThreadPool);
AsynchronousSearchActiveStore asActiveStore = new AsynchronousSearchActiveStore(mockClusterService);
AsynchronousSearchPersistenceService persistenceService = new AsynchronousSearchPersistenceService(fakeClient, mockClusterService, testThreadPool);
AsynchronousSearchService asService = new AsynchronousSearchService(persistenceService, asActiveStore, fakeClient, mockClusterService, testThreadPool, new InternalAsynchronousSearchStats(), new NamedWriteableRegistry(emptyList()));
AsynchronousSearchStateMachine asStateMachine = asService.getStateMachine();
ClusterService clusterService = ClusterServiceUtils.createClusterService(testThreadPool, discoveryNode, clusterSettings);
AsynchronousSearchPostProcessor postProcessor = new AsynchronousSearchPostProcessor(persistenceService, asActiveStore, asStateMachine, (context) -> activeContextCleanUpConsumerInvocation.compareAndSet(false, true), testThreadPool, clusterService);
SubmitAsynchronousSearchRequest submitAsynchronousSearchRequest = new SubmitAsynchronousSearchRequest(new SearchRequest());
submitAsynchronousSearchRequest.keepOnCompletion(true);
submitAsynchronousSearchRequest.keepAlive(TimeValue.timeValueHours(1));
AsynchronousSearchActiveContext context = (AsynchronousSearchActiveContext) asService.createAndStoreContext(submitAsynchronousSearchRequest, System.currentTimeMillis(), () -> InternalAggregationTestCase.emptyReduceContextBuilder(), null);
asStateMachine.trigger(new SearchStartedEvent(context, new SearchTask(0, "n/a", "n/a", () -> "test", null, Collections.emptyMap())));
asStateMachine.trigger(new SearchDeletedEvent(context));
SearchResponse mockSearchResponse = getMockSearchResponse();
AsynchronousSearchResponse asResponse = postProcessor.processSearchResponse(mockSearchResponse, context.getContextId());
assertNull(asResponse.getId());
assertNull(asResponse.getError());
assertEquals(-1L, asResponse.getExpirationTimeMillis());
assertEquals(AsynchronousSearchState.SUCCEEDED, asResponse.getState());
assertEquals(-1L, asResponse.getStartTimeMillis());
AsynchronousSearchAssertions.assertSearchResponses(mockSearchResponse, asResponse.getSearchResponse());
assertFalse(activeContextCleanUpConsumerInvocation.get());
assertEquals(0, fakeClient.persistenceCount);
} finally {
ThreadPool.terminate(testThreadPool, 200, TimeUnit.MILLISECONDS);
}
}
use of org.opensearch.search.asynchronous.processor.AsynchronousSearchPostProcessor in project asynchronous-search by opensearch-project.
the class AsynchronousSearchPostProcessorTests method testProcessSearchResponsePersisted.
public void testProcessSearchResponsePersisted() throws AsynchronousSearchStateMachineClosedException {
DiscoveryNode discoveryNode = new DiscoveryNode("node", OpenSearchTestCase.buildNewFakeTransportAddress(), Collections.emptyMap(), DiscoveryNodeRole.BUILT_IN_ROLES, Version.CURRENT);
AtomicBoolean activeContextCleanUpConsumerInvocation = new AtomicBoolean();
ThreadPool testThreadPool = null;
try {
testThreadPool = new TestThreadPool(AsynchronousSearchPlugin.OPEN_DISTRO_ASYNC_SEARCH_GENERIC_THREAD_POOL_NAME, executorBuilder);
ClusterService mockClusterService = ClusterServiceUtils.createClusterService(testThreadPool, discoveryNode, clusterSettings);
FakeClient fakeClient = new FakeClient(testThreadPool);
AsynchronousSearchActiveStore asActiveStore = new AsynchronousSearchActiveStore(mockClusterService);
AsynchronousSearchPersistenceService persistenceService = new AsynchronousSearchPersistenceService(fakeClient, mockClusterService, testThreadPool);
AsynchronousSearchService asService = new AsynchronousSearchService(persistenceService, asActiveStore, fakeClient, mockClusterService, testThreadPool, new InternalAsynchronousSearchStats(), new NamedWriteableRegistry(emptyList()));
AsynchronousSearchStateMachine asStateMachine = asService.getStateMachine();
ClusterService clusterService = ClusterServiceUtils.createClusterService(testThreadPool, discoveryNode, clusterSettings);
AsynchronousSearchPostProcessor postProcessor = new AsynchronousSearchPostProcessor(persistenceService, asActiveStore, asStateMachine, (context) -> activeContextCleanUpConsumerInvocation.compareAndSet(false, true), testThreadPool, clusterService);
SubmitAsynchronousSearchRequest submitAsynchronousSearchRequest = new SubmitAsynchronousSearchRequest(new SearchRequest());
submitAsynchronousSearchRequest.keepOnCompletion(true);
submitAsynchronousSearchRequest.keepAlive(TimeValue.timeValueHours(1));
AsynchronousSearchActiveContext context = (AsynchronousSearchActiveContext) asService.createAndStoreContext(submitAsynchronousSearchRequest, System.currentTimeMillis(), () -> InternalAggregationTestCase.emptyReduceContextBuilder(), null);
asStateMachine.trigger(new SearchStartedEvent(context, new SearchTask(0, "n/a", "n/a", () -> "test", null, Collections.emptyMap())));
SearchResponse mockSearchResponse = getMockSearchResponse();
AsynchronousSearchResponse asResponse = postProcessor.processSearchResponse(mockSearchResponse, context.getContextId());
assertNotNull(asResponse.getId());
assertNull(asResponse.getError());
assertEquals(AsynchronousSearchState.PERSISTING, asResponse.getState());
waitUntil(() -> context.getAsynchronousSearchState() == AsynchronousSearchState.CLOSED);
assertEquals(AsynchronousSearchState.CLOSED, context.getAsynchronousSearchState());
AsynchronousSearchAssertions.assertSearchResponses(mockSearchResponse, asResponse.getSearchResponse());
assertFalse(activeContextCleanUpConsumerInvocation.get());
assertEquals(1, fakeClient.persistenceCount);
} catch (InterruptedException e) {
fail("Test interrupted " + e.getMessage());
} finally {
ThreadPool.terminate(testThreadPool, 200, TimeUnit.MILLISECONDS);
}
}
Aggregations