Skip to content

Commit 0f794c8

Browse files
smalyshevdakrone
authored andcommitted
Add isAsync() to SearcTask and eliminate code for async detection from TransportSearchAction (elastic#112311)
1 parent 1588e9e commit 0f794c8

File tree

3 files changed

+13
-29
lines changed

3 files changed

+13
-29
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,11 @@ public Supplier<SearchResponseMerger> getSearchResponseMergerSupplier() {
6969
public void setSearchResponseMergerSupplier(Supplier<SearchResponseMerger> supplier) {
7070
this.searchResponseMergerSupplier = supplier;
7171
}
72+
73+
/**
74+
* Is this async search?
75+
*/
76+
public boolean isAsync() {
77+
return false;
78+
}
7279
}

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

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ void executeRequest(
369369
} else {
370370
if ((listener instanceof TelemetryListener tl) && CCS_TELEMETRY_FEATURE_FLAG.isEnabled()) {
371371
tl.setRemotes(resolvedIndices.getRemoteClusterIndices().size());
372-
if (isAsyncSearchTask(task)) {
372+
if (task.isAsync()) {
373373
tl.setFeature(CCSUsageTelemetry.ASYNC_FEATURE);
374374
}
375375
String client = task.getHeader(Task.X_ELASTIC_PRODUCT_ORIGIN_HTTP_HEADER);
@@ -1514,34 +1514,6 @@ public SearchPhase newSearchPhase(
15141514
}
15151515
}
15161516

1517-
/**
1518-
* TransportSearchAction cannot access async-search code, so can't check whether this the Task
1519-
* is an instance of AsyncSearchTask, so this roundabout method is used
1520-
* @param searchTask SearchTask to analyze
1521-
* @return true if this is an async search task; false if a synchronous search task
1522-
*/
1523-
private boolean isAsyncSearchTask(SearchTask searchTask) {
1524-
assert assertAsyncSearchTaskListener(searchTask) : "AsyncSearchTask SearchProgressListener is not one of the expected types";
1525-
// AsyncSearchTask will not return SearchProgressListener.NOOP, since it uses its own progress listener
1526-
// which delegates to CCSSingleCoordinatorSearchProgressListener when minimizing roundtrips.
1527-
// Only synchronous SearchTask uses SearchProgressListener.NOOP or CCSSingleCoordinatorSearchProgressListener directly
1528-
return searchTask.getProgressListener() != SearchProgressListener.NOOP
1529-
&& searchTask.getProgressListener() instanceof CCSSingleCoordinatorSearchProgressListener == false;
1530-
}
1531-
1532-
/**
1533-
* @param searchTask SearchTask to analyze
1534-
* @return true if AsyncSearchTask still uses its own special listener, not one of the two that synchronous SearchTask uses
1535-
*/
1536-
private boolean assertAsyncSearchTaskListener(SearchTask searchTask) {
1537-
if (searchTask.getClass().getSimpleName().contains("AsyncSearchTask")) {
1538-
SearchProgressListener progressListener = searchTask.getProgressListener();
1539-
return progressListener != SearchProgressListener.NOOP
1540-
&& progressListener instanceof CCSSingleCoordinatorSearchProgressListener == false;
1541-
}
1542-
return true;
1543-
}
1544-
15451517
private static void validateAndResolveWaitForCheckpoint(
15461518
ClusterState clusterState,
15471519
IndexNameExpressionResolver resolver,

x-pack/plugin/async-search/src/main/java/org/elasticsearch/xpack/search/AsyncSearchTask.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,4 +545,9 @@ public void onFailure(Exception exc) {
545545
executeCompletionListeners();
546546
}
547547
}
548+
549+
@Override
550+
public boolean isAsync() {
551+
return true;
552+
}
548553
}

0 commit comments

Comments
 (0)