Skip to content

Commit 73d93a5

Browse files
committed
update after review
1 parent 8f5ea6b commit 73d93a5

File tree

2 files changed

+259
-7
lines changed

2 files changed

+259
-7
lines changed

server/src/main/java/org/elasticsearch/index/shard/IndexShard.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,13 +1425,6 @@ public GetStats getStats() {
14251425
return getService.stats();
14261426
}
14271427

1428-
/**
1429-
* Returns the search load rate stats for this shard.
1430-
*/
1431-
public double getSearchLoadRate() {
1432-
return searchStats.stats().getTotal().getSearchLoadRate();
1433-
}
1434-
14351428
public StoreStats storeStats() {
14361429
try {
14371430
final RecoveryState recoveryState = this.recoveryState;
Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.search.stats;
11+
12+
import org.elasticsearch.common.settings.ClusterSettings;
13+
import org.elasticsearch.index.search.stats.SearchStats;
14+
import org.elasticsearch.index.search.stats.SearchStatsSettings;
15+
import org.elasticsearch.index.search.stats.ShardSearchStats;
16+
import org.elasticsearch.search.builder.SearchSourceBuilder;
17+
import org.elasticsearch.search.internal.ReaderContext;
18+
import org.elasticsearch.search.internal.SearchContext;
19+
import org.elasticsearch.search.internal.ShardSearchRequest;
20+
import org.elasticsearch.search.suggest.SuggestBuilder;
21+
import org.elasticsearch.test.ESTestCase;
22+
23+
import java.util.Arrays;
24+
import java.util.Objects;
25+
import java.util.concurrent.TimeUnit;
26+
27+
import static org.mockito.Mockito.mock;
28+
import static org.mockito.Mockito.when;
29+
30+
public class ShardSearchStatsTests extends ESTestCase {
31+
32+
private static final long TEN_MILLIS = 10;
33+
34+
public void testQueryPhase() {
35+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
36+
SearchContext sc = mock(SearchContext.class);
37+
ShardSearchRequest req = mock(ShardSearchRequest.class);
38+
when(sc.request()).thenReturn(req);
39+
when(sc.groupStats()).thenReturn(null);
40+
41+
listener.onPreQueryPhase(sc);
42+
listener.onQueryPhase(sc, TimeUnit.MILLISECONDS.toNanos(TEN_MILLIS));
43+
44+
SearchStats.Stats stats = listener.stats().getTotal();
45+
assertEquals(0, stats.getQueryCurrent());
46+
assertEquals(1, stats.getQueryCount());
47+
assertEquals(TEN_MILLIS, stats.getQueryTimeInMillis());
48+
assertTrue(stats.getSearchLoadRate() > 0.0);
49+
}
50+
51+
public void testQueryPhase_SuggestOnly() {
52+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
53+
SearchContext sc = mock(SearchContext.class);
54+
ShardSearchRequest req = mock(ShardSearchRequest.class);
55+
SearchSourceBuilder ssb = new SearchSourceBuilder().suggest(new SuggestBuilder());
56+
when(sc.request()).thenReturn(req);
57+
when(sc.groupStats()).thenReturn(null);
58+
when(req.source()).thenReturn(ssb);
59+
60+
listener.onPreQueryPhase(sc);
61+
listener.onQueryPhase(sc, TimeUnit.MILLISECONDS.toNanos(TEN_MILLIS));
62+
63+
SearchStats.Stats stats = listener.stats().getTotal();
64+
assertEquals(0, stats.getSuggestCurrent());
65+
assertEquals(1, stats.getSuggestCount());
66+
assertEquals(TEN_MILLIS, stats.getSuggestTimeInMillis());
67+
assertEquals(0, stats.getQueryCurrent());
68+
assertEquals(0, stats.getQueryCount());
69+
assertEquals(0, stats.getQueryTimeInMillis());
70+
assertTrue(stats.getSearchLoadRate() > 0.0);
71+
}
72+
73+
public void testQueryPhase_withGroups() {
74+
String[] groups = new String[] { "group1" };
75+
76+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
77+
SearchContext sc = mock(SearchContext.class);
78+
ShardSearchRequest req = mock(ShardSearchRequest.class);
79+
when(sc.request()).thenReturn(req);
80+
when(sc.groupStats()).thenReturn(Arrays.asList(groups));
81+
82+
listener.onPreQueryPhase(sc);
83+
listener.onQueryPhase(sc, TimeUnit.MILLISECONDS.toNanos(TEN_MILLIS));
84+
85+
SearchStats searchStats = listener.stats("_all");
86+
SearchStats.Stats stats = listener.stats().getTotal();
87+
assertEquals(0, stats.getQueryCurrent());
88+
assertEquals(1, stats.getQueryCount());
89+
assertEquals(TEN_MILLIS, stats.getQueryTimeInMillis());
90+
assertTrue(stats.getSearchLoadRate() > 0.0);
91+
92+
stats = Objects.requireNonNull(searchStats.getGroupStats()).get("group1");
93+
assertEquals(0, stats.getQueryCurrent());
94+
assertEquals(1, stats.getQueryCount());
95+
assertEquals(TEN_MILLIS, stats.getQueryTimeInMillis());
96+
assertTrue(stats.getSearchLoadRate() > 0.0);
97+
}
98+
99+
public void testQueryPhase_withGroups_SuggestOnly() {
100+
String[] groups = new String[] { "group1" };
101+
102+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
103+
SearchContext sc = mock(SearchContext.class);
104+
ShardSearchRequest req = mock(ShardSearchRequest.class);
105+
SearchSourceBuilder ssb = new SearchSourceBuilder().suggest(new SuggestBuilder());
106+
when(sc.request()).thenReturn(req);
107+
when(sc.groupStats()).thenReturn(null);
108+
when(req.source()).thenReturn(ssb);
109+
when(sc.groupStats()).thenReturn(Arrays.asList(groups));
110+
111+
listener.onPreQueryPhase(sc);
112+
listener.onQueryPhase(sc, TimeUnit.MILLISECONDS.toNanos(TEN_MILLIS));
113+
114+
SearchStats searchStats = listener.stats("_all");
115+
SearchStats.Stats stats = listener.stats().getTotal();
116+
assertEquals(0, stats.getSuggestCurrent());
117+
assertEquals(1, stats.getSuggestCount());
118+
assertEquals(TEN_MILLIS, stats.getSuggestTimeInMillis());
119+
assertEquals(0, stats.getQueryCurrent());
120+
assertEquals(0, stats.getQueryCount());
121+
assertEquals(0, stats.getQueryTimeInMillis());
122+
assertTrue(stats.getSearchLoadRate() > 0.0);
123+
124+
stats = Objects.requireNonNull(searchStats.getGroupStats()).get("group1");
125+
assertEquals(0, stats.getSuggestCurrent());
126+
assertEquals(1, stats.getSuggestCount());
127+
assertEquals(TEN_MILLIS, stats.getSuggestTimeInMillis());
128+
assertEquals(0, stats.getQueryCurrent());
129+
assertEquals(0, stats.getQueryCount());
130+
assertEquals(0, stats.getQueryTimeInMillis());
131+
assertTrue(stats.getSearchLoadRate() > 0.0);
132+
}
133+
134+
public void testQueryPhase_SuggestOnly_Failure() {
135+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
136+
SearchContext sc = mock(SearchContext.class);
137+
ShardSearchRequest req = mock(ShardSearchRequest.class);
138+
SearchSourceBuilder ssb = new SearchSourceBuilder().suggest(new SuggestBuilder());
139+
when(sc.request()).thenReturn(req);
140+
when(sc.groupStats()).thenReturn(null);
141+
when(req.source()).thenReturn(ssb);
142+
143+
listener.onPreQueryPhase(sc);
144+
listener.onFailedQueryPhase(sc);
145+
146+
SearchStats.Stats stats = listener.stats().getTotal();
147+
assertEquals(0, stats.getSuggestCurrent());
148+
assertEquals(0, stats.getSuggestCount());
149+
assertEquals(0, stats.getQueryCurrent());
150+
assertEquals(0, stats.getQueryCount());
151+
assertEquals(0, stats.getQueryFailure());
152+
assertEquals(0.0, stats.getSearchLoadRate(), 0);
153+
}
154+
155+
public void testQueryPhase_Failure() {
156+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
157+
SearchContext sc = mock(SearchContext.class);
158+
ShardSearchRequest req = mock(ShardSearchRequest.class);
159+
when(sc.request()).thenReturn(req);
160+
when(sc.groupStats()).thenReturn(null);
161+
162+
listener.onPreQueryPhase(sc);
163+
listener.onFailedQueryPhase(sc);
164+
165+
SearchStats.Stats stats = listener.stats().getTotal();
166+
assertEquals(0, stats.getQueryCurrent());
167+
assertEquals(0, stats.getQueryCount());
168+
assertEquals(1, stats.getQueryFailure());
169+
assertEquals(0.0, stats.getSearchLoadRate(), 0);
170+
}
171+
172+
public void testFetchPhase() {
173+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
174+
SearchContext sc = mock(SearchContext.class);
175+
ShardSearchRequest req = mock(ShardSearchRequest.class);
176+
when(sc.request()).thenReturn(req);
177+
when(sc.groupStats()).thenReturn(null);
178+
179+
listener.onPreFetchPhase(sc);
180+
listener.onFetchPhase(sc, TimeUnit.MILLISECONDS.toNanos(TEN_MILLIS));
181+
182+
SearchStats.Stats stats = listener.stats().getTotal();
183+
assertEquals(0, stats.getFetchCurrent());
184+
assertEquals(1, stats.getFetchCount());
185+
assertEquals(TEN_MILLIS, stats.getFetchTimeInMillis());
186+
assertTrue(stats.getSearchLoadRate() > 0.0);
187+
}
188+
189+
public void testFetchPhase_withGroups() {
190+
String[] groups = new String[] { "group1" };
191+
192+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
193+
SearchContext sc = mock(SearchContext.class);
194+
when(sc.groupStats()).thenReturn(Arrays.asList(groups));
195+
196+
listener.onPreFetchPhase(sc);
197+
listener.onFetchPhase(sc, TimeUnit.MILLISECONDS.toNanos(TEN_MILLIS));
198+
199+
SearchStats searchStats = listener.stats("_all");
200+
SearchStats.Stats stats = listener.stats().getTotal();
201+
assertEquals(0, stats.getFetchCurrent());
202+
assertEquals(1, stats.getFetchCount());
203+
assertEquals(TEN_MILLIS, stats.getFetchTimeInMillis());
204+
assertTrue(stats.getSearchLoadRate() > 0.0);
205+
206+
stats = Objects.requireNonNull(searchStats.getGroupStats()).get("group1");
207+
assertEquals(0, stats.getFetchCurrent());
208+
assertEquals(1, stats.getFetchCount());
209+
assertEquals(TEN_MILLIS, stats.getFetchTimeInMillis());
210+
assertTrue(stats.getSearchLoadRate() > 0.0);
211+
}
212+
213+
public void testFetchPhase_Failure() {
214+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
215+
SearchContext sc = mock(SearchContext.class);
216+
when(sc.groupStats()).thenReturn(null);
217+
218+
listener.onPreFetchPhase(sc);
219+
listener.onFailedFetchPhase(sc);
220+
221+
SearchStats.Stats stats = listener.stats().getTotal();
222+
assertEquals(0, stats.getFetchCurrent());
223+
assertEquals(0, stats.getFetchCount());
224+
assertEquals(1, stats.getFetchFailure());
225+
assertEquals(0.0, stats.getSearchLoadRate(), 0);
226+
}
227+
228+
public void testReaderContext() {
229+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
230+
ReaderContext rc = mock(ReaderContext.class);
231+
SearchContext sc = mock(SearchContext.class);
232+
when(sc.groupStats()).thenReturn(null);
233+
234+
listener.onNewReaderContext(rc);
235+
SearchStats stats = listener.stats();
236+
assertEquals(1, stats.getOpenContexts());
237+
238+
listener.onFreeReaderContext(rc);
239+
stats = listener.stats();
240+
assertEquals(0, stats.getOpenContexts());
241+
}
242+
243+
public void testScrollContext() {
244+
ShardSearchStats listener = new ShardSearchStats(new SearchStatsSettings(ClusterSettings.createBuiltInClusterSettings()));
245+
ReaderContext rc = mock(ReaderContext.class);
246+
SearchContext sc = mock(SearchContext.class);
247+
when(sc.groupStats()).thenReturn(null);
248+
249+
listener.onNewScrollContext(rc);
250+
SearchStats stats = listener.stats();
251+
assertEquals(1, stats.getTotal().getScrollCurrent());
252+
253+
listener.onFreeScrollContext(rc);
254+
stats = listener.stats();
255+
assertEquals(0, stats.getTotal().getScrollCurrent());
256+
assertEquals(1, stats.getTotal().getScrollCount());
257+
assertTrue(stats.getTotal().getScrollTimeInMillis() > 0);
258+
}
259+
}

0 commit comments

Comments
 (0)