Skip to content

Commit d1225bc

Browse files
authored
ESQL: Add fields to detailed query fetch api (#127161)
This adds `documents_found` and `values_loaded` to the ESQL query get API. Sadly, this is only the sum of the of statistics from currently running drivers. Completed drivers are forgotten. That information is available, but it's not plumbed into a place where we can get it. That's next!
1 parent 94f4373 commit d1225bc

File tree

3 files changed

+33
-7
lines changed

3 files changed

+33
-7
lines changed

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlListQueriesActionIT.java

+2
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ public void testRunningQueries() throws Exception {
6767
jsonEntityToMap(getQueryResponse.getEntity()),
6868
basicMatcher.entry("coordinating_node", isA(String.class))
6969
.entry("data_nodes", allOf(isA(List.class), everyItem(isA(String.class))))
70+
.entry("documents_found", IntOrLongMatcher.isIntOrLong())
71+
.entry("values_loaded", IntOrLongMatcher.isIntOrLong())
7072
);
7173
} finally {
7274
if (id != null) {

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/EsqlGetQueryResponse.java

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ public record DetailedQuery(
2222
TaskId id,
2323
long startTimeMillis,
2424
long runningTimeNanos,
25+
long documentsFound,
26+
long valuesLoaded,
2527
String query,
2628
String coordinatingNode,
2729
List<String> dataNodes
@@ -33,6 +35,8 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
3335
builder.field("node", id.getNodeId());
3436
builder.field("start_time_millis", startTimeMillis);
3537
builder.field("running_time_nanos", runningTimeNanos);
38+
builder.field("documents_found", documentsFound);
39+
builder.field("values_loaded", valuesLoaded);
3640
builder.field("query", query);
3741
builder.field("coordinating_node", coordinatingNode);
3842
builder.field("data_nodes", dataNodes);

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/TransportEsqlGetQueryAction.java

+27-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.elasticsearch.action.support.HandledTransportAction;
1919
import org.elasticsearch.client.internal.node.NodeClient;
2020
import org.elasticsearch.common.util.concurrent.EsExecutors;
21+
import org.elasticsearch.compute.operator.DriverStatus;
2122
import org.elasticsearch.compute.operator.DriverTaskRunner;
2223
import org.elasticsearch.injection.guice.Inject;
2324
import org.elasticsearch.tasks.Task;
@@ -28,6 +29,9 @@
2829
import org.elasticsearch.xpack.esql.action.EsqlGetQueryRequest;
2930
import org.elasticsearch.xpack.esql.action.EsqlQueryAction;
3031

32+
import java.util.Set;
33+
import java.util.TreeSet;
34+
3135
import static org.elasticsearch.xpack.core.ClientHelper.ESQL_ORIGIN;
3236

3337
public class TransportEsqlGetQueryAction extends HandledTransportAction<EsqlGetQueryRequest, EsqlGetQueryResponse> {
@@ -85,14 +89,30 @@ public void onFailure(Exception e) {
8589
);
8690
}
8791

88-
private static EsqlGetQueryResponse.DetailedQuery toDetailedQuery(TaskInfo task, ListTasksResponse response) {
92+
private static EsqlGetQueryResponse.DetailedQuery toDetailedQuery(TaskInfo main, ListTasksResponse sub) {
93+
String query = main.description();
94+
String coordinatingNode = main.node();
95+
96+
// TODO include completed drivers in documentsFound and valuesLoaded
97+
long documentsFound = 0;
98+
long valuesLoaded = 0;
99+
Set<String> dataNodes = new TreeSet<>();
100+
for (TaskInfo info : sub.getTasks()) {
101+
DriverStatus status = (DriverStatus) info.status();
102+
documentsFound += status.documentsFound();
103+
valuesLoaded += status.valuesLoaded();
104+
dataNodes.add(info.node());
105+
}
106+
89107
return new EsqlGetQueryResponse.DetailedQuery(
90-
task.taskId(),
91-
task.startTime(),
92-
task.runningTimeNanos(),
93-
task.description(), // Query
94-
task.node(), // Coordinating node
95-
response.getTasks().stream().map(TaskInfo::node).distinct().toList() // Data nodes
108+
main.taskId(),
109+
main.startTime(),
110+
main.runningTimeNanos(),
111+
documentsFound,
112+
valuesLoaded,
113+
query,
114+
coordinatingNode,
115+
sub.getTasks().stream().map(TaskInfo::node).distinct().toList() // Data nodes
96116
);
97117
}
98118
}

0 commit comments

Comments
 (0)