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