mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-17 10:25:15 +00:00
add a test to check excecution flow (#44481)
add a test for the execution flow of a2p indexer
This commit is contained in:
parent
5273a548a4
commit
4387d81e5b
@ -8,8 +8,10 @@ package org.elasticsearch.xpack.core.indexing;
|
|||||||
|
|
||||||
import org.apache.lucene.search.TotalHits;
|
import org.apache.lucene.search.TotalHits;
|
||||||
import org.elasticsearch.action.ActionListener;
|
import org.elasticsearch.action.ActionListener;
|
||||||
|
import org.elasticsearch.action.bulk.BulkItemResponse;
|
||||||
import org.elasticsearch.action.bulk.BulkRequest;
|
import org.elasticsearch.action.bulk.BulkRequest;
|
||||||
import org.elasticsearch.action.bulk.BulkResponse;
|
import org.elasticsearch.action.bulk.BulkResponse;
|
||||||
|
import org.elasticsearch.action.index.IndexRequest;
|
||||||
import org.elasticsearch.action.search.SearchRequest;
|
import org.elasticsearch.action.search.SearchRequest;
|
||||||
import org.elasticsearch.action.search.SearchResponse;
|
import org.elasticsearch.action.search.SearchResponse;
|
||||||
import org.elasticsearch.action.search.SearchResponseSections;
|
import org.elasticsearch.action.search.SearchResponseSections;
|
||||||
@ -146,6 +148,100 @@ public class AsyncTwoPhaseIndexerTests extends ESTestCase {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class MockIndexerFiveRuns extends AsyncTwoPhaseIndexer<Integer, MockJobStats> {
|
||||||
|
|
||||||
|
// counters
|
||||||
|
private volatile boolean started = false;
|
||||||
|
private volatile int searchRequests = 0;
|
||||||
|
private volatile int searchOps = 0;
|
||||||
|
private volatile int processOps = 0;
|
||||||
|
private volatile int bulkOps = 0;
|
||||||
|
|
||||||
|
protected MockIndexerFiveRuns(Executor executor, AtomicReference<IndexerState> initialState, Integer initialPosition) {
|
||||||
|
super(executor, initialState, initialPosition, new MockJobStats());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getJobId() {
|
||||||
|
return "mock_5_runs";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected IterationResult<Integer> doProcess(SearchResponse searchResponse) {
|
||||||
|
++processOps;
|
||||||
|
if (processOps == 5) {
|
||||||
|
return new IterationResult<>(Collections.singletonList(new IndexRequest()), processOps, true);
|
||||||
|
}
|
||||||
|
else if (processOps % 2 == 0) {
|
||||||
|
return new IterationResult<>(Collections.emptyList(), processOps, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new IterationResult<>(Collections.singletonList(new IndexRequest()), processOps, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SearchRequest buildSearchRequest() {
|
||||||
|
++searchRequests;
|
||||||
|
return new SearchRequest();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart(long now, ActionListener<Void> listener) {
|
||||||
|
started = true;
|
||||||
|
listener.onResponse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doNextSearch(SearchRequest request, ActionListener<SearchResponse> nextPhase) {
|
||||||
|
++searchOps;
|
||||||
|
final SearchResponseSections sections = new SearchResponseSections(
|
||||||
|
new SearchHits(new SearchHit[0], new TotalHits(0, TotalHits.Relation.EQUAL_TO), 0), null,
|
||||||
|
null, false, null, null, 1);
|
||||||
|
|
||||||
|
nextPhase.onResponse(new SearchResponse(sections, null, 1, 1, 0, 0, ShardSearchFailure.EMPTY_ARRAY, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doNextBulk(BulkRequest request, ActionListener<BulkResponse> nextPhase) {
|
||||||
|
++bulkOps;
|
||||||
|
nextPhase.onResponse(new BulkResponse(new BulkItemResponse[0], 100));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doSaveState(IndexerState state, Integer position, Runnable next) {
|
||||||
|
next.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onFailure(Exception exc) {
|
||||||
|
fail(exc.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onFinish(ActionListener<Void> listener) {
|
||||||
|
assertTrue(isFinished.compareAndSet(false, true));
|
||||||
|
listener.onResponse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStop() {
|
||||||
|
assertTrue(isStopped.compareAndSet(false, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onAbort() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void assertCounters() {
|
||||||
|
assertTrue(started);
|
||||||
|
assertEquals(5L, searchRequests);
|
||||||
|
assertEquals(5L, searchOps);
|
||||||
|
assertEquals(5L, processOps);
|
||||||
|
assertEquals(2L, bulkOps);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private class MockIndexerThrowsFirstSearch extends AsyncTwoPhaseIndexer<Integer, MockJobStats> {
|
private class MockIndexerThrowsFirstSearch extends AsyncTwoPhaseIndexer<Integer, MockJobStats> {
|
||||||
|
|
||||||
// test the execution order
|
// test the execution order
|
||||||
@ -288,4 +384,20 @@ public class AsyncTwoPhaseIndexerTests extends ESTestCase {
|
|||||||
executor.shutdownNow();
|
executor.shutdownNow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testFiveRuns() throws InterruptedException {
|
||||||
|
AtomicReference<IndexerState> state = new AtomicReference<>(IndexerState.STOPPED);
|
||||||
|
final ExecutorService executor = Executors.newFixedThreadPool(1);
|
||||||
|
try {
|
||||||
|
MockIndexerFiveRuns indexer = new MockIndexerFiveRuns (executor, state, 2);
|
||||||
|
indexer.start();
|
||||||
|
assertThat(indexer.getState(), equalTo(IndexerState.STARTED));
|
||||||
|
assertTrue(indexer.maybeTriggerAsyncJob(System.currentTimeMillis()));
|
||||||
|
assertThat(indexer.getState(), equalTo(IndexerState.INDEXING));
|
||||||
|
assertTrue(awaitBusy(() -> isFinished.get()));
|
||||||
|
indexer.assertCounters();
|
||||||
|
} finally {
|
||||||
|
executor.shutdownNow();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user