2222import  org .elasticsearch .index .search .stats .SearchStats ;
2323import  org .elasticsearch .index .search .stats .SearchStatsSettings ;
2424import  org .elasticsearch .index .search .stats .ShardSearchStats ;
25+ import  org .elasticsearch .index .shard .IndexShard ;
26+ import  org .elasticsearch .index .shard .IndexShardTestCase ;
2527import  org .elasticsearch .index .shard .ShardId ;
2628import  org .elasticsearch .search .builder .SearchSourceBuilder ;
2729import  org .elasticsearch .search .internal .AliasFilter ;
30+ import  org .elasticsearch .search .internal .ReaderContext ;
2831import  org .elasticsearch .search .internal .SearchContext ;
32+ import  org .elasticsearch .search .internal .ShardSearchContextId ;
2933import  org .elasticsearch .search .internal .ShardSearchRequest ;
3034import  org .elasticsearch .search .suggest .SuggestBuilder ;
31- import  org .elasticsearch .test .ESTestCase ;
3235import  org .elasticsearch .test .TestSearchContext ;
3336import  org .junit .Before ;
3437
38+ import  java .io .IOException ;
3539import  java .util .Arrays ;
3640import  java .util .Collections ;
3741import  java .util .List ;
3842import  java .util .Objects ;
3943import  java .util .concurrent .TimeUnit ;
4044
41- public  class  ShardSearchStatsTests  extends  ESTestCase  {
45+ public  class  ShardSearchStatsTests  extends  IndexShardTestCase  {
4246
4347    private  static  final  long  TEN_MILLIS  = 10 ;
4448
@@ -57,6 +61,9 @@ public void testQueryPhase() {
5761            shardSearchStatsListener .onQueryPhase (sc , TimeUnit .MILLISECONDS .toNanos (TEN_MILLIS ));
5862
5963            SearchStats .Stats  stats  = shardSearchStatsListener .stats ().getTotal ();
64+             assertEquals (0 , stats .getQueryCurrent ());
65+             assertEquals (1 , stats .getQueryCount ());
66+             assertEquals (TEN_MILLIS , stats .getQueryTimeInMillis ());
6067            assertTrue (stats .getSearchLoadRate () > 0.0 );
6168        }
6269    }
@@ -67,6 +74,12 @@ public void testQueryPhase_SuggestOnly() {
6774            shardSearchStatsListener .onQueryPhase (sc , TimeUnit .MILLISECONDS .toNanos (TEN_MILLIS ));
6875
6976            SearchStats .Stats  stats  = shardSearchStatsListener .stats ().getTotal ();
77+             assertEquals (0 , stats .getSuggestCurrent ());
78+             assertEquals (1 , stats .getSuggestCount ());
79+             assertEquals (TEN_MILLIS , stats .getSuggestTimeInMillis ());
80+             assertEquals (0 , stats .getQueryCurrent ());
81+             assertEquals (0 , stats .getQueryCount ());
82+             assertEquals (0 , stats .getQueryTimeInMillis ());
7083            assertTrue (stats .getSearchLoadRate () > 0.0 );
7184        }
7285    }
@@ -78,9 +91,15 @@ public void testQueryPhase_withGroup() {
7891
7992            SearchStats  searchStats  = shardSearchStatsListener .stats ("_all" );
8093            SearchStats .Stats  stats  = shardSearchStatsListener .stats ().getTotal ();
94+             assertEquals (0 , stats .getQueryCurrent ());
95+             assertEquals (1 , stats .getQueryCount ());
96+             assertEquals (TEN_MILLIS , stats .getQueryTimeInMillis ());
8197            assertTrue (stats .getSearchLoadRate () > 0.0 );
8298
8399            stats  = Objects .requireNonNull (searchStats .getGroupStats ()).get ("group1" );
100+             assertEquals (0 , stats .getQueryCurrent ());
101+             assertEquals (1 , stats .getQueryCount ());
102+             assertEquals (TEN_MILLIS , stats .getQueryTimeInMillis ());
84103            assertTrue (stats .getSearchLoadRate () > 0.0 );
85104        }
86105    }
@@ -93,9 +112,21 @@ public void testQueryPhase_withGroup_SuggestOnly() {
93112
94113            SearchStats  searchStats  = shardSearchStatsListener .stats ("_all" );
95114            SearchStats .Stats  stats  = shardSearchStatsListener .stats ().getTotal ();
115+             assertEquals (0 , stats .getSuggestCurrent ());
116+             assertEquals (1 , stats .getSuggestCount ());
117+             assertEquals (TEN_MILLIS , stats .getSuggestTimeInMillis ());
118+             assertEquals (0 , stats .getQueryCurrent ());
119+             assertEquals (0 , stats .getQueryCount ());
120+             assertEquals (0 , stats .getQueryTimeInMillis ());
96121            assertTrue (stats .getSearchLoadRate () > 0.0 );
97122
98123            stats  = Objects .requireNonNull (searchStats .getGroupStats ()).get ("group1" );
124+             assertEquals (0 , stats .getSuggestCurrent ());
125+             assertEquals (1 , stats .getSuggestCount ());
126+             assertEquals (TEN_MILLIS , stats .getSuggestTimeInMillis ());
127+             assertEquals (0 , stats .getQueryCurrent ());
128+             assertEquals (0 , stats .getQueryCount ());
129+             assertEquals (0 , stats .getQueryTimeInMillis ());
99130            assertTrue (stats .getSearchLoadRate () > 0.0 );
100131        }
101132    }
@@ -106,6 +137,11 @@ public void testQueryPhase_SuggestOnly_Failure() {
106137            shardSearchStatsListener .onFailedQueryPhase (sc );
107138
108139            SearchStats .Stats  stats  = shardSearchStatsListener .stats ().getTotal ();
140+             assertEquals (0 , stats .getSuggestCurrent ());
141+             assertEquals (0 , stats .getSuggestCount ());
142+             assertEquals (0 , stats .getQueryCurrent ());
143+             assertEquals (0 , stats .getQueryCount ());
144+             assertEquals (0 , stats .getQueryFailure ());
109145            assertEquals (0.0 , stats .getSearchLoadRate (), 0 );
110146        }
111147    }
@@ -116,6 +152,9 @@ public void testQueryPhase_Failure() {
116152            shardSearchStatsListener .onFailedQueryPhase (sc );
117153
118154            SearchStats .Stats  stats  = shardSearchStatsListener .stats ().getTotal ();
155+             assertEquals (0 , stats .getQueryCurrent ());
156+             assertEquals (0 , stats .getQueryCount ());
157+             assertEquals (1 , stats .getQueryFailure ());
119158            assertEquals (0.0 , stats .getSearchLoadRate (), 0 );
120159        }
121160    }
@@ -126,6 +165,9 @@ public void testFetchPhase() {
126165            shardSearchStatsListener .onFetchPhase (sc , TimeUnit .MILLISECONDS .toNanos (TEN_MILLIS ));
127166
128167            SearchStats .Stats  stats  = shardSearchStatsListener .stats ().getTotal ();
168+             assertEquals (0 , stats .getFetchCurrent ());
169+             assertEquals (1 , stats .getFetchCount ());
170+             assertEquals (TEN_MILLIS , stats .getFetchTimeInMillis ());
129171            assertTrue (stats .getSearchLoadRate () > 0.0 );
130172        }
131173    }
@@ -137,9 +179,15 @@ public void testFetchPhase_withGroup() {
137179
138180            SearchStats  searchStats  = shardSearchStatsListener .stats ("_all" );
139181            SearchStats .Stats  stats  = shardSearchStatsListener .stats ().getTotal ();
182+             assertEquals (0 , stats .getFetchCurrent ());
183+             assertEquals (1 , stats .getFetchCount ());
184+             assertEquals (TEN_MILLIS , stats .getFetchTimeInMillis ());
140185            assertTrue (stats .getSearchLoadRate () > 0.0 );
141186
142187            stats  = Objects .requireNonNull (searchStats .getGroupStats ()).get ("group1" );
188+             assertEquals (0 , stats .getFetchCurrent ());
189+             assertEquals (1 , stats .getFetchCount ());
190+             assertEquals (TEN_MILLIS , stats .getFetchTimeInMillis ());
143191            assertTrue (stats .getSearchLoadRate () > 0.0 );
144192        }
145193    }
@@ -150,10 +198,48 @@ public void testFetchPhase_Failure() {
150198            shardSearchStatsListener .onFailedFetchPhase (sc );
151199
152200            SearchStats .Stats  stats  = shardSearchStatsListener .stats ().getTotal ();
201+             assertEquals (0 , stats .getFetchCurrent ());
202+             assertEquals (0 , stats .getFetchCount ());
203+             assertEquals (1 , stats .getFetchFailure ());
153204            assertEquals (0.0 , stats .getSearchLoadRate (), 0 );
154205        }
155206    }
156207
208+     public  void  testReaderContext () throws  IOException  {
209+         IndexShard  indexShard  = newShard (true );
210+         try  (ReaderContext  rc  = createReaderContext (indexShard )) {
211+             shardSearchStatsListener .onNewReaderContext (rc );
212+             SearchStats  stats  = shardSearchStatsListener .stats ();
213+             assertEquals (1 , stats .getOpenContexts ());
214+ 
215+             shardSearchStatsListener .onFreeReaderContext (rc );
216+             stats  = shardSearchStatsListener .stats ();
217+             assertEquals (0 , stats .getOpenContexts ());
218+         } finally  {
219+             closeShards (indexShard );
220+         }
221+     }
222+ 
223+     public  void  testScrollContext () throws  IOException  {
224+         IndexShard  indexShard  = newShard (true );
225+         try  (ReaderContext  rc  = createReaderContext (indexShard )) {
226+             shardSearchStatsListener .onNewScrollContext (rc );
227+             SearchStats  stats  = shardSearchStatsListener .stats ();
228+             assertEquals (1 , stats .getTotal ().getScrollCurrent ());
229+ 
230+             shardSearchStatsListener .onFreeScrollContext (rc );
231+             stats  = shardSearchStatsListener .stats ();
232+             assertEquals (0 , stats .getTotal ().getScrollCurrent ());
233+             assertEquals (1 , stats .getTotal ().getScrollCount ());
234+         } finally  {
235+             closeShards (indexShard );
236+         }
237+     }
238+ 
239+     private  static  ReaderContext  createReaderContext (IndexShard  indexShard ) {
240+         return  new  ReaderContext (new  ShardSearchContextId ("test" , 1L ), null , indexShard , null , 0L , false );
241+     }
242+ 
157243    private  static  SearchContext  createSearchContext (boolean  suggested ) {
158244        IndexSettings  indexSettings  = new  IndexSettings (
159245            IndexMetadata .builder ("index" )
0 commit comments