@@ -110,6 +110,78 @@ public int getStep() {
110
110
111
111
}
112
112
113
+ private class MockIndexerThrowsFirstSearch extends AsyncTwoPhaseIndexer <Integer , MockJobStats > {
114
+
115
+ // test the execution order
116
+ private int step ;
117
+
118
+ protected MockIndexerThrowsFirstSearch (Executor executor , AtomicReference <IndexerState > initialState , Integer initialPosition ) {
119
+ super (executor , initialState , initialPosition , new MockJobStats ());
120
+ }
121
+
122
+ @ Override
123
+ protected String getJobId () {
124
+ return "mock" ;
125
+ }
126
+
127
+ @ Override
128
+ protected IterationResult <Integer > doProcess (SearchResponse searchResponse ) {
129
+ fail ("should not be called" );
130
+ return null ;
131
+ }
132
+
133
+ @ Override
134
+ protected SearchRequest buildSearchRequest () {
135
+ assertThat (step , equalTo (1 ));
136
+ ++step ;
137
+ return null ;
138
+ }
139
+
140
+ @ Override
141
+ protected void onStartJob (long now ) {
142
+ assertThat (step , equalTo (0 ));
143
+ ++step ;
144
+ }
145
+
146
+ @ Override
147
+ protected void doNextSearch (SearchRequest request , ActionListener <SearchResponse > nextPhase ) {
148
+ throw new RuntimeException ("Failed to build search request" );
149
+ }
150
+
151
+ @ Override
152
+ protected void doNextBulk (BulkRequest request , ActionListener <BulkResponse > nextPhase ) {
153
+ fail ("should not be called" );
154
+ }
155
+
156
+ @ Override
157
+ protected void doSaveState (IndexerState state , Integer position , Runnable next ) {
158
+ assertThat (step , equalTo (2 ));
159
+ ++step ;
160
+ next .run ();
161
+ }
162
+
163
+ @ Override
164
+ protected void onFailure (Exception exc ) {
165
+ assertThat (step , equalTo (3 ));
166
+ ++step ;
167
+ isFinished .set (true );
168
+ }
169
+
170
+ @ Override
171
+ protected void onFinish () {
172
+ fail ("should not be called" );
173
+ }
174
+
175
+ @ Override
176
+ protected void onAbort () {
177
+ fail ("should not be called" );
178
+ }
179
+
180
+ public int getStep () {
181
+ return step ;
182
+ }
183
+ }
184
+
113
185
private static class MockJobStats extends IndexerJobStats {
114
186
115
187
@ Override
@@ -121,7 +193,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
121
193
public void testStateMachine () throws InterruptedException {
122
194
AtomicReference <IndexerState > state = new AtomicReference <>(IndexerState .STOPPED );
123
195
final ExecutorService executor = Executors .newFixedThreadPool (1 );
124
-
196
+ isFinished . set ( false );
125
197
try {
126
198
127
199
MockIndexer indexer = new MockIndexer (executor , state , 2 );
@@ -140,4 +212,22 @@ public void testStateMachine() throws InterruptedException {
140
212
executor .shutdownNow ();
141
213
}
142
214
}
215
+
216
+ public void testStateMachineBrokenSearch () throws InterruptedException {
217
+ AtomicReference <IndexerState > state = new AtomicReference <>(IndexerState .STOPPED );
218
+ final ExecutorService executor = Executors .newFixedThreadPool (1 );
219
+ isFinished .set (false );
220
+ try {
221
+
222
+ MockIndexerThrowsFirstSearch indexer = new MockIndexerThrowsFirstSearch (executor , state , 2 );
223
+ indexer .start ();
224
+ assertThat (indexer .getState (), equalTo (IndexerState .STARTED ));
225
+ assertTrue (indexer .maybeTriggerAsyncJob (System .currentTimeMillis ()));
226
+ assertTrue (ESTestCase .awaitBusy (() -> isFinished .get ()));
227
+ assertThat (indexer .getStep (), equalTo (4 ));
228
+
229
+ } finally {
230
+ executor .shutdownNow ();
231
+ }
232
+ }
143
233
}
0 commit comments