1818 */
1919package org .elasticsearch .index .shard ;
2020
21- import org .apache .lucene .index .Term ;
22- import org .elasticsearch .client .Client ;
23- import org .elasticsearch .index .engine .Engine ;
2421import org .elasticsearch .search .internal .SearchContext ;
2522import org .elasticsearch .test .ESTestCase ;
2623import org .elasticsearch .test .TestSearchContext ;
3229import java .util .List ;
3330import java .util .concurrent .atomic .AtomicInteger ;
3431
32+ import static org .hamcrest .Matchers .not ;
33+ import static org .hamcrest .Matchers .sameInstance ;
34+
3535public class SearchOperationListenerTests extends ESTestCase {
3636
3737 // this test also tests if calls are correct if one or more listeners throw exceptions
@@ -46,6 +46,7 @@ public void testListenersAreExecuted() {
4646 AtomicInteger freeContext = new AtomicInteger ();
4747 AtomicInteger newScrollContext = new AtomicInteger ();
4848 AtomicInteger freeScrollContext = new AtomicInteger ();
49+ AtomicInteger validateSearchContext = new AtomicInteger ();
4950 AtomicInteger timeInNanos = new AtomicInteger (randomIntBetween (0 , 10 ));
5051 SearchOperationListener listener = new SearchOperationListener () {
5152 @ Override
@@ -109,17 +110,26 @@ public void onFreeScrollContext(SearchContext context) {
109110 assertNotNull (context );
110111 freeScrollContext .incrementAndGet ();
111112 }
113+
114+ @ Override
115+ public void validateSearchContext (SearchContext context ) {
116+ assertNotNull (context );
117+ validateSearchContext .incrementAndGet ();
118+ }
112119 };
113120
114121 SearchOperationListener throwingListener = (SearchOperationListener ) Proxy .newProxyInstance (
115122 SearchOperationListener .class .getClassLoader (),
116123 new Class []{SearchOperationListener .class },
117124 (a ,b ,c ) -> { throw new RuntimeException ();});
125+ int throwingListeners = 0 ;
118126 final List <SearchOperationListener > indexingOperationListeners = new ArrayList <>(Arrays .asList (listener , listener ));
119127 if (randomBoolean ()) {
120128 indexingOperationListeners .add (throwingListener );
129+ throwingListeners ++;
121130 if (randomBoolean ()) {
122131 indexingOperationListeners .add (throwingListener );
132+ throwingListeners ++;
123133 }
124134 }
125135 Collections .shuffle (indexingOperationListeners , random ());
@@ -137,6 +147,7 @@ public void onFreeScrollContext(SearchContext context) {
137147 assertEquals (0 , newScrollContext .get ());
138148 assertEquals (0 , freeContext .get ());
139149 assertEquals (0 , freeScrollContext .get ());
150+ assertEquals (0 , validateSearchContext .get ());
140151
141152 compositeListener .onFetchPhase (ctx , timeInNanos .get ());
142153 assertEquals (0 , preFetch .get ());
@@ -149,6 +160,7 @@ public void onFreeScrollContext(SearchContext context) {
149160 assertEquals (0 , newScrollContext .get ());
150161 assertEquals (0 , freeContext .get ());
151162 assertEquals (0 , freeScrollContext .get ());
163+ assertEquals (0 , validateSearchContext .get ());
152164
153165 compositeListener .onPreQueryPhase (ctx );
154166 assertEquals (0 , preFetch .get ());
@@ -161,6 +173,7 @@ public void onFreeScrollContext(SearchContext context) {
161173 assertEquals (0 , newScrollContext .get ());
162174 assertEquals (0 , freeContext .get ());
163175 assertEquals (0 , freeScrollContext .get ());
176+ assertEquals (0 , validateSearchContext .get ());
164177
165178 compositeListener .onPreFetchPhase (ctx );
166179 assertEquals (2 , preFetch .get ());
@@ -173,6 +186,7 @@ public void onFreeScrollContext(SearchContext context) {
173186 assertEquals (0 , newScrollContext .get ());
174187 assertEquals (0 , freeContext .get ());
175188 assertEquals (0 , freeScrollContext .get ());
189+ assertEquals (0 , validateSearchContext .get ());
176190
177191 compositeListener .onFailedFetchPhase (ctx );
178192 assertEquals (2 , preFetch .get ());
@@ -185,6 +199,7 @@ public void onFreeScrollContext(SearchContext context) {
185199 assertEquals (0 , newScrollContext .get ());
186200 assertEquals (0 , freeContext .get ());
187201 assertEquals (0 , freeScrollContext .get ());
202+ assertEquals (0 , validateSearchContext .get ());
188203
189204 compositeListener .onFailedQueryPhase (ctx );
190205 assertEquals (2 , preFetch .get ());
@@ -197,6 +212,7 @@ public void onFreeScrollContext(SearchContext context) {
197212 assertEquals (0 , newScrollContext .get ());
198213 assertEquals (0 , freeContext .get ());
199214 assertEquals (0 , freeScrollContext .get ());
215+ assertEquals (0 , validateSearchContext .get ());
200216
201217 compositeListener .onNewContext (ctx );
202218 assertEquals (2 , preFetch .get ());
@@ -209,6 +225,7 @@ public void onFreeScrollContext(SearchContext context) {
209225 assertEquals (0 , newScrollContext .get ());
210226 assertEquals (0 , freeContext .get ());
211227 assertEquals (0 , freeScrollContext .get ());
228+ assertEquals (0 , validateSearchContext .get ());
212229
213230 compositeListener .onNewScrollContext (ctx );
214231 assertEquals (2 , preFetch .get ());
@@ -221,6 +238,7 @@ public void onFreeScrollContext(SearchContext context) {
221238 assertEquals (2 , newScrollContext .get ());
222239 assertEquals (0 , freeContext .get ());
223240 assertEquals (0 , freeScrollContext .get ());
241+ assertEquals (0 , validateSearchContext .get ());
224242
225243 compositeListener .onFreeContext (ctx );
226244 assertEquals (2 , preFetch .get ());
@@ -233,6 +251,7 @@ public void onFreeScrollContext(SearchContext context) {
233251 assertEquals (2 , newScrollContext .get ());
234252 assertEquals (2 , freeContext .get ());
235253 assertEquals (0 , freeScrollContext .get ());
254+ assertEquals (0 , validateSearchContext .get ());
236255
237256 compositeListener .onFreeScrollContext (ctx );
238257 assertEquals (2 , preFetch .get ());
@@ -245,5 +264,28 @@ public void onFreeScrollContext(SearchContext context) {
245264 assertEquals (2 , newScrollContext .get ());
246265 assertEquals (2 , freeContext .get ());
247266 assertEquals (2 , freeScrollContext .get ());
267+ assertEquals (0 , validateSearchContext .get ());
268+
269+ if (throwingListeners == 0 ) {
270+ compositeListener .validateSearchContext (ctx );
271+ } else {
272+ RuntimeException expected = expectThrows (RuntimeException .class , () -> compositeListener .validateSearchContext (ctx ));
273+ assertNull (expected .getMessage ());
274+ assertEquals (throwingListeners - 1 , expected .getSuppressed ().length );
275+ if (throwingListeners > 1 ) {
276+ assertThat (expected .getSuppressed ()[0 ], not (sameInstance (expected )));
277+ }
278+ }
279+ assertEquals (2 , preFetch .get ());
280+ assertEquals (2 , preQuery .get ());
281+ assertEquals (2 , failedFetch .get ());
282+ assertEquals (2 , failedQuery .get ());
283+ assertEquals (2 , onQuery .get ());
284+ assertEquals (2 , onFetch .get ());
285+ assertEquals (2 , newContext .get ());
286+ assertEquals (2 , newScrollContext .get ());
287+ assertEquals (2 , freeContext .get ());
288+ assertEquals (2 , freeScrollContext .get ());
289+ assertEquals (2 , validateSearchContext .get ());
248290 }
249291}
0 commit comments