Skip to content

Commit 758319a

Browse files
committed
Merge remote-tracking branch 'origin/feature/list_query_api' into feature/list_query_api
2 parents ff0fe90 + cb4ec47 commit 758319a

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed

docs/changelog/124832.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 124832
2+
summary: List/get query API
3+
area: ES|QL
4+
type: feature
5+
issues:
6+
- 124827

x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.elasticsearch.client.RequestOptions;
1717
import org.elasticsearch.client.Response;
1818
import org.elasticsearch.client.ResponseException;
19+
import org.elasticsearch.client.ResponseListener;
1920
import org.elasticsearch.client.WarningsHandler;
2021
import org.elasticsearch.common.bytes.BytesArray;
2122
import org.elasticsearch.common.io.Streams;
@@ -26,6 +27,7 @@
2627
import org.elasticsearch.core.TimeValue;
2728
import org.elasticsearch.logging.LogManager;
2829
import org.elasticsearch.logging.Logger;
30+
import org.elasticsearch.tasks.TaskId;
2931
import org.elasticsearch.test.ListMatcher;
3032
import org.elasticsearch.test.rest.ESRestTestCase;
3133
import org.elasticsearch.xcontent.ToXContent;
@@ -44,6 +46,7 @@
4446
import java.io.InputStreamReader;
4547
import java.io.OutputStream;
4648
import java.nio.charset.StandardCharsets;
49+
import java.time.Duration;
4750
import java.time.ZoneId;
4851
import java.util.ArrayList;
4952
import java.util.Arrays;
@@ -70,6 +73,7 @@
7073
import static org.hamcrest.Matchers.emptyOrNullString;
7174
import static org.hamcrest.Matchers.equalTo;
7275
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
76+
import static org.hamcrest.Matchers.hasKey;
7377
import static org.hamcrest.Matchers.is;
7478
import static org.hamcrest.Matchers.not;
7579
import static org.hamcrest.Matchers.nullValue;
@@ -1345,6 +1349,56 @@ public void testAsyncGetWithoutContentType() throws IOException {
13451349

13461350
}
13471351

1352+
public void testListApi_noRunningQueries_returnsAnObject() throws Exception {
1353+
Request request = prepareListQueriesRequest();
1354+
Response response = performRequest(request);
1355+
assertThat(entityToMap(response.getEntity(), XContentType.JSON), is(Map.of("queries", Map.of())));
1356+
}
1357+
1358+
public void testListApi_runningQuery_returnsQueriesObject() throws Exception {
1359+
bulkLoadTestData(1);
1360+
String query = fromIndex() + " | keep keyword, integer | where delay(10s) | limit 100 ";
1361+
var builder = requestObjectBuilder().query(query);
1362+
Request request = prepareRequest(SYNC);
1363+
String mediaType = attachBody(builder.build(), request);
1364+
RequestOptions.Builder options = request.getOptions().toBuilder();
1365+
options.addHeader("Content-Type", mediaType);
1366+
options.addHeader("Accept", mediaType);
1367+
request.setOptions(options);
1368+
client().performRequestAsync(request, new ResponseListener() {
1369+
@Override
1370+
public void onSuccess(Response response) {}
1371+
1372+
@Override
1373+
public void onFailure(Exception exception) {}
1374+
});
1375+
Thread.sleep(Duration.ofSeconds(5));
1376+
Response response = performRequest(prepareListQueriesRequest());
1377+
@SuppressWarnings("unchecked")
1378+
var listResult = (Map<String, Map<String, Object>>) EsqlTestUtils.singleValue(
1379+
entityToMap(response.getEntity(), XContentType.JSON).values()
1380+
);
1381+
var taskId = new TaskId(EsqlTestUtils.singleValue(listResult.keySet()));
1382+
var queryFromListResult = EsqlTestUtils.singleValue(listResult.values());
1383+
assertThat(queryFromListResult.get("id"), is((int) taskId.getId()));
1384+
assertThat(queryFromListResult.get("node"), is(taskId.getNodeId()));
1385+
assertThat(queryFromListResult.get("query"), is(query));
1386+
assertThat(queryFromListResult, hasKey("start_time_millis"));
1387+
assertThat(queryFromListResult, hasKey("running_time_nanos"));
1388+
1389+
response = performRequest(prepareGetQueryRequest(taskId));
1390+
@SuppressWarnings("unchecked")
1391+
Map<String, Object> getQueryResult = entityToMap(response.getEntity(), XContentType.JSON);
1392+
assertThat(getQueryResult.get("id"), is((int) taskId.getId()));
1393+
assertThat(getQueryResult.get("node"), is(taskId.getNodeId()));
1394+
assertThat(getQueryResult.get("query"), is(query));
1395+
assertThat(getQueryResult.get("start_time_millis"), is(queryFromListResult.get("start_time_millis")));
1396+
assertThat(getQueryResult, hasKey("running_time_nanos"));
1397+
assertThat(getQueryResult, hasKey("coordinating_node"));
1398+
assertThat(getQueryResult, hasKey("data_nodes"));
1399+
Thread.sleep(Duration.ofSeconds(5));
1400+
}
1401+
13481402
protected static Request prepareRequestWithOptions(RequestObjectBuilder requestObject, Mode mode) throws IOException {
13491403
requestObject.build();
13501404
Request request = prepareRequest(mode);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public TransportEsqlListQueriesAction(TransportService transportService, NodeCli
4141

4242
@Override
4343
protected void doExecute(Task task, EsqlListQueriesRequest request, ActionListener<EsqlListQueriesResponse> listener) {
44+
// FIXME(gal, NOCOMMIT) The + [a] hack needs a better solution.
4445
new ListTasksRequestBuilder(nodeClient).setActions(EsqlQueryAction.NAME, EsqlQueryAction.NAME + "[a]")
4546
.setDetailed(true)
4647
.execute(new ActionListener<>() {

0 commit comments

Comments
 (0)