Skip to content

Commit e7f98cb

Browse files
rank phase
1 parent ad18431 commit e7f98cb

File tree

8 files changed

+261
-38
lines changed

8 files changed

+261
-38
lines changed

server/src/main/java/org/elasticsearch/action/search/CanMatchPreFilterSearchPhase.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.elasticsearch.core.Nullable;
2020
import org.elasticsearch.index.query.CoordinatorRewriteContext;
2121
import org.elasticsearch.index.query.CoordinatorRewriteContextProvider;
22+
import org.elasticsearch.index.search.stats.CoordinatorSearchPhaseAPMMetrics;
2223
import org.elasticsearch.search.CanMatchShardResponse;
2324
import org.elasticsearch.search.SearchService;
2425
import org.elasticsearch.search.SearchShardTarget;
@@ -71,6 +72,7 @@ final class CanMatchPreFilterSearchPhase {
7172
private final SearchTask task;
7273
private final Executor executor;
7374
private final boolean requireAtLeastOneMatch;
75+
private final CoordinatorSearchPhaseAPMMetrics coordinatorSearchPhaseAPMMetrics;
7476

7577
private final FixedBitSet possibleMatches;
7678
private final MinAndMax<?>[] minAndMaxes;
@@ -90,7 +92,8 @@ private CanMatchPreFilterSearchPhase(
9092
SearchTask task,
9193
boolean requireAtLeastOneMatch,
9294
CoordinatorRewriteContextProvider coordinatorRewriteContextProvider,
93-
ActionListener<List<SearchShardIterator>> listener
95+
ActionListener<List<SearchShardIterator>> listener,
96+
CoordinatorSearchPhaseAPMMetrics coordinatorSearchPhaseAPMMetrics
9497
) {
9598
this.logger = logger;
9699
this.searchTransportService = searchTransportService;
@@ -105,6 +108,7 @@ private CanMatchPreFilterSearchPhase(
105108
this.requireAtLeastOneMatch = requireAtLeastOneMatch;
106109
this.coordinatorRewriteContextProvider = coordinatorRewriteContextProvider;
107110
this.executor = executor;
111+
this.coordinatorSearchPhaseAPMMetrics = coordinatorSearchPhaseAPMMetrics;
108112
final int size = shardsIts.size();
109113
possibleMatches = new FixedBitSet(size);
110114
minAndMaxes = new MinAndMax<?>[size];
@@ -136,7 +140,8 @@ public static SubscribableListener<List<SearchShardIterator>> execute(
136140
TransportSearchAction.SearchTimeProvider timeProvider,
137141
SearchTask task,
138142
boolean requireAtLeastOneMatch,
139-
CoordinatorRewriteContextProvider coordinatorRewriteContextProvider
143+
CoordinatorRewriteContextProvider coordinatorRewriteContextProvider,
144+
CoordinatorSearchPhaseAPMMetrics coordinatorSearchPhaseAPMMetrics
140145
) {
141146
if (shardsIts.isEmpty()) {
142147
return SubscribableListener.newSucceeded(List.of());
@@ -168,7 +173,8 @@ protected void doRun() {
168173
task,
169174
requireAtLeastOneMatch,
170175
coordinatorRewriteContextProvider,
171-
listener
176+
listener,
177+
coordinatorSearchPhaseAPMMetrics
172178
).runCoordinatorRewritePhase();
173179
}
174180
});
@@ -224,6 +230,10 @@ private void runCoordinatorRewritePhase() {
224230
checkNoMissingShards(matchedShardLevelRequests);
225231
new Round(matchedShardLevelRequests).run();
226232
}
233+
coordinatorSearchPhaseAPMMetrics.onCoordinatorPhaseDone(
234+
"can_match",
235+
timeProvider.relativeCurrentNanosProvider().getAsLong() - coordinatorStartTimeNanos
236+
);
227237
}
228238

229239
private void consumeResult(boolean canMatch, ShardSearchRequest request) {

server/src/main/java/org/elasticsearch/action/search/RankFeaturePhase.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ public void onResponse(RankFeatureDoc[] docsWithUpdatedScores) {
193193
reducedQueryPhase,
194194
topResults
195195
);
196+
context.recordPhaseTookTime(getName());
196197
moveToNextPhase(rankPhaseResults, reducedRankFeaturePhase);
197198
}
198199

server/src/main/java/org/elasticsearch/action/search/TransportOpenPointInTimeAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,8 @@ public void runNewSearchPhase(
182182
timeProvider,
183183
task,
184184
false,
185-
searchService.getCoordinatorRewriteContextProvider(timeProvider::absoluteStartMillis)
185+
searchService.getCoordinatorRewriteContextProvider(timeProvider::absoluteStartMillis),
186+
coordinatorSearchPhaseAPMMetrics
186187
)
187188
.addListener(
188189
listener.delegateFailureAndWrap(

server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1627,7 +1627,8 @@ public void runNewSearchPhase(
16271627
timeProvider,
16281628
task,
16291629
requireAtLeastOneMatch,
1630-
searchService.getCoordinatorRewriteContextProvider(timeProvider::absoluteStartMillis)
1630+
searchService.getCoordinatorRewriteContextProvider(timeProvider::absoluteStartMillis),
1631+
coordinatorSearchPhaseAPMMetrics
16311632
)
16321633
.addListener(
16331634
listener.delegateFailureAndWrap(

server/src/main/java/org/elasticsearch/action/search/TransportSearchShardsAction.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.elasticsearch.cluster.service.ClusterService;
2525
import org.elasticsearch.index.Index;
2626
import org.elasticsearch.index.query.Rewriteable;
27+
import org.elasticsearch.index.search.stats.CoordinatorSearchPhaseAPMMetrics;
2728
import org.elasticsearch.injection.guice.Inject;
2829
import org.elasticsearch.search.SearchService;
2930
import org.elasticsearch.search.builder.SearchSourceBuilder;
@@ -60,6 +61,7 @@ public class TransportSearchShardsAction extends HandledTransportAction<SearchSh
6061
private final ProjectResolver projectResolver;
6162
private final IndexNameExpressionResolver indexNameExpressionResolver;
6263
private final ThreadPool threadPool;
64+
private final CoordinatorSearchPhaseAPMMetrics coordinatorSearchPhaseAPMMetrics;
6365

6466
@Inject
6567
public TransportSearchShardsAction(
@@ -70,7 +72,8 @@ public TransportSearchShardsAction(
7072
TransportSearchAction transportSearchAction,
7173
SearchTransportService searchTransportService,
7274
ProjectResolver projectResolver,
73-
IndexNameExpressionResolver indexNameExpressionResolver
75+
IndexNameExpressionResolver indexNameExpressionResolver,
76+
CoordinatorSearchPhaseAPMMetrics coordinatorSearchPhaseAPMMetrics
7477
) {
7578
super(
7679
TYPE.name(),
@@ -88,6 +91,7 @@ public TransportSearchShardsAction(
8891
this.projectResolver = projectResolver;
8992
this.indexNameExpressionResolver = indexNameExpressionResolver;
9093
this.threadPool = transportService.getThreadPool();
94+
this.coordinatorSearchPhaseAPMMetrics = coordinatorSearchPhaseAPMMetrics;
9195
}
9296

9397
@Override
@@ -175,7 +179,8 @@ public void searchShards(Task task, SearchShardsRequest searchShardsRequest, Act
175179
timeProvider,
176180
(SearchTask) task,
177181
false,
178-
searchService.getCoordinatorRewriteContextProvider(timeProvider::absoluteStartMillis)
182+
searchService.getCoordinatorRewriteContextProvider(timeProvider::absoluteStartMillis),
183+
coordinatorSearchPhaseAPMMetrics
179184
)
180185
.addListener(
181186
delegate.map(

server/src/main/java/org/elasticsearch/index/search/stats/CoordinatorSearchPhaseAPMMetrics.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,9 @@ public CoordinatorSearchPhaseAPMMetrics(MeterRegistry meterRegistry) {
3434
}
3535

3636
public void onCoordinatorPhaseDone(String phaseName, long tookInNanos) {
37-
LongHistogram histogram = histogramsCache.computeIfAbsent(phaseName, this::createHistogram);
38-
if (histogram != null) {
39-
recordPhaseLatency(histogram, tookInNanos);
40-
} else {
41-
throw new IllegalStateException("phase [" + phaseName + "] not found");
42-
}
37+
String cleanedPhaseName = phaseName.toLowerCase(Locale.ROOT).replace('-', '_');
38+
LongHistogram histogram = histogramsCache.computeIfAbsent(cleanedPhaseName, this::createHistogram);
39+
recordPhaseLatency(histogram, tookInNanos);
4340
}
4441

4542
private LongHistogram createHistogram(String phaseName) {

server/src/test/java/org/elasticsearch/action/search/CanMatchPreFilterSearchPhaseTests.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.elasticsearch.index.query.QueryBuilders;
4040
import org.elasticsearch.index.query.RangeQueryBuilder;
4141
import org.elasticsearch.index.query.TermQueryBuilder;
42+
import org.elasticsearch.index.search.stats.CoordinatorSearchPhaseAPMMetrics;
4243
import org.elasticsearch.index.shard.IndexLongFieldRange;
4344
import org.elasticsearch.index.shard.ShardId;
4445
import org.elasticsearch.index.shard.ShardLongFieldRange;
@@ -161,7 +162,8 @@ public void sendCanMatch(
161162
timeProvider,
162163
null,
163164
true,
164-
EMPTY_CONTEXT_PROVIDER
165+
EMPTY_CONTEXT_PROVIDER,
166+
CoordinatorSearchPhaseAPMMetrics.NOOP
165167
).addListener(ActionTestUtils.assertNoFailureListener(iter -> {
166168
result.set(iter);
167169
latch.countDown();
@@ -256,7 +258,8 @@ public void sendCanMatch(
256258
timeProvider,
257259
null,
258260
true,
259-
EMPTY_CONTEXT_PROVIDER
261+
EMPTY_CONTEXT_PROVIDER,
262+
CoordinatorSearchPhaseAPMMetrics.NOOP
260263
).addListener(ActionTestUtils.assertNoFailureListener(iter -> {
261264
result.set(iter);
262265
latch.countDown();
@@ -347,7 +350,8 @@ public void sendCanMatch(
347350
timeProvider,
348351
null,
349352
true,
350-
EMPTY_CONTEXT_PROVIDER
353+
EMPTY_CONTEXT_PROVIDER,
354+
CoordinatorSearchPhaseAPMMetrics.NOOP
351355
).addListener(ActionTestUtils.assertNoFailureListener(iter -> {
352356
result.set(iter);
353357
latch.countDown();
@@ -446,7 +450,8 @@ public void sendCanMatch(
446450
timeProvider,
447451
null,
448452
shardsIter.size() > shardToSkip.size(),
449-
EMPTY_CONTEXT_PROVIDER
453+
EMPTY_CONTEXT_PROVIDER,
454+
CoordinatorSearchPhaseAPMMetrics.NOOP
450455
).addListener(ActionTestUtils.assertNoFailureListener(iter -> {
451456
result.set(iter);
452457
latch.countDown();
@@ -1418,7 +1423,8 @@ public void sendCanMatch(
14181423
timeProvider,
14191424
null,
14201425
true,
1421-
contextProvider
1426+
contextProvider,
1427+
CoordinatorSearchPhaseAPMMetrics.NOOP
14221428
),
14231429
requests
14241430
);

0 commit comments

Comments
 (0)