Skip to content

Commit 5900096

Browse files
authored
SQL: Move metrics tracking inside PlanExecutor (#38259) (#38288)
Move metrics in one place, from the transport layer inside the PlanExecutor Remove unused class Close #38258 (cherry picked from commit a088155)
1 parent 7ff4730 commit 5900096

File tree

10 files changed

+47
-52
lines changed

10 files changed

+47
-52
lines changed

x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/QueryMetric.java

-25
This file was deleted.

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/execution/PlanExecutor.java

+21-3
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,12 @@
2727
import org.elasticsearch.xpack.sql.session.SchemaRowSet;
2828
import org.elasticsearch.xpack.sql.session.SqlSession;
2929
import org.elasticsearch.xpack.sql.stats.Metrics;
30+
import org.elasticsearch.xpack.sql.stats.QueryMetric;
3031

3132
import java.util.List;
3233

34+
import static org.elasticsearch.action.ActionListener.wrap;
35+
3336
public class PlanExecutor {
3437
private final Client client;
3538
private final NamedWriteableRegistry writableRegistry;
@@ -64,7 +67,9 @@ private SqlSession newSession(Configuration cfg) {
6467
}
6568

6669
public void searchSource(Configuration cfg, String sql, List<SqlTypedParamValue> params, ActionListener<SearchSourceBuilder> listener) {
67-
newSession(cfg).sqlExecutable(sql, params, ActionListener.wrap(exec -> {
70+
metrics.translate();
71+
72+
newSession(cfg).sqlExecutable(sql, params, wrap(exec -> {
6873
if (exec instanceof EsQueryExec) {
6974
EsQueryExec e = (EsQueryExec) exec;
7075
listener.onResponse(SourceGenerator.sourceBuilder(e.queryContainer(), cfg.filter(), cfg.pageSize()));
@@ -87,11 +92,24 @@ public void searchSource(Configuration cfg, String sql, List<SqlTypedParamValue>
8792
}
8893

8994
public void sql(Configuration cfg, String sql, List<SqlTypedParamValue> params, ActionListener<SchemaRowSet> listener) {
90-
newSession(cfg).sql(sql, params, listener);
95+
QueryMetric metric = QueryMetric.from(cfg.mode(), cfg.clientId());
96+
metrics.total(metric);
97+
98+
newSession(cfg).sql(sql, params, wrap(listener::onResponse, ex -> {
99+
metrics.failed(metric);
100+
listener.onFailure(ex);
101+
}));
91102
}
92103

93104
public void nextPage(Configuration cfg, Cursor cursor, ActionListener<RowSet> listener) {
94-
cursor.nextPage(cfg, client, writableRegistry, listener);
105+
QueryMetric metric = QueryMetric.from(cfg.mode(), cfg.clientId());
106+
metrics.total(metric);
107+
metrics.paging(metric);
108+
109+
cursor.nextPage(cfg, client, writableRegistry, wrap(listener::onResponse, ex -> {
110+
metrics.failed(metric);
111+
listener.onFailure(ex);
112+
}));
95113
}
96114

97115
public void cleanCursor(Configuration cfg, Cursor cursor, ActionListener<Boolean> listener) {

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plugin/TransportSqlClearCursorAction.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.elasticsearch.xpack.sql.session.Cursor;
2222
import org.elasticsearch.xpack.sql.session.Cursors;
2323
import org.elasticsearch.xpack.sql.util.DateUtils;
24+
import org.elasticsearch.xpack.sql.util.StringUtils;
2425

2526
import static org.elasticsearch.xpack.sql.action.SqlClearCursorAction.NAME;
2627

@@ -51,7 +52,7 @@ public static void operation(PlanExecutor planExecutor, SqlClearCursorRequest re
5152
Cursor cursor = Cursors.decodeFromString(request.getCursor());
5253
planExecutor.cleanCursor(
5354
new Configuration(DateUtils.UTC, Protocol.FETCH_SIZE, Protocol.REQUEST_TIMEOUT, Protocol.PAGE_TIMEOUT, null,
54-
request.mode(), "", ""),
55+
request.mode(), StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY),
5556
cursor, ActionListener.wrap(
5657
success -> listener.onResponse(new SqlClearCursorResponse(success)), listener::onFailure));
5758
}

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plugin/TransportSqlQueryAction.java

+4-17
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@
2828
import org.elasticsearch.xpack.sql.session.Cursors;
2929
import org.elasticsearch.xpack.sql.session.RowSet;
3030
import org.elasticsearch.xpack.sql.session.SchemaRowSet;
31-
import org.elasticsearch.xpack.sql.stats.QueryMetric;
3231
import org.elasticsearch.xpack.sql.type.Schema;
3332

3433
import java.util.ArrayList;
3534
import java.util.List;
3635

3736
import static java.util.Collections.unmodifiableList;
37+
import static org.elasticsearch.action.ActionListener.wrap;
3838
import static org.elasticsearch.xpack.sql.plugin.Transports.clusterName;
3939
import static org.elasticsearch.xpack.sql.plugin.Transports.username;
4040

@@ -73,27 +73,14 @@ public static void operation(PlanExecutor planExecutor, SqlQueryRequest request,
7373
// The configuration is always created however when dealing with the next page, only the timeouts are relevant
7474
// the rest having default values (since the query is already created)
7575
Configuration cfg = new Configuration(request.zoneId(), request.fetchSize(), request.requestTimeout(), request.pageTimeout(),
76-
request.filter(), request.mode(), username, clusterName);
77-
78-
// mode() shouldn't be null
79-
QueryMetric metric = QueryMetric.from(request.mode(), request.clientId());
80-
planExecutor.metrics().total(metric);
76+
request.filter(), request.mode(), request.clientId(), username, clusterName);
8177

8278
if (Strings.hasText(request.cursor()) == false) {
8379
planExecutor.sql(cfg, request.query(), request.params(),
84-
ActionListener.wrap(rowSet -> listener.onResponse(createResponse(request, rowSet)),
85-
e -> {
86-
planExecutor.metrics().failed(metric);
87-
listener.onFailure(e);
88-
}));
80+
wrap(rowSet -> listener.onResponse(createResponse(request, rowSet)), listener::onFailure));
8981
} else {
90-
planExecutor.metrics().paging(metric);
9182
planExecutor.nextPage(cfg, Cursors.decodeFromString(request.cursor()),
92-
ActionListener.wrap(rowSet -> listener.onResponse(createResponse(request.mode(), rowSet, null)),
93-
e -> {
94-
planExecutor.metrics().failed(metric);
95-
listener.onFailure(e);
96-
}));
83+
wrap(rowSet -> listener.onResponse(createResponse(request.mode(), rowSet, null)), listener::onFailure));
9784
}
9885
}
9986

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plugin/TransportSqlTranslateAction.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ public TransportSqlTranslateAction(Settings settings, ClusterService clusterServ
5353
protected void doExecute(SqlTranslateRequest request, ActionListener<SqlTranslateResponse> listener) {
5454
sqlLicenseChecker.checkIfSqlAllowed(request.mode());
5555

56-
planExecutor.metrics().translate();
5756
Configuration cfg = new Configuration(request.zoneId(), request.fetchSize(),
58-
request.requestTimeout(), request.pageTimeout(), request.filter(), request.mode(),
57+
request.requestTimeout(), request.pageTimeout(), request.filter(),
58+
request.mode(), request.clientId(),
5959
username(securityContext), clusterName(clusterService));
6060

6161
planExecutor.searchSource(cfg, request.query(), request.params(), ActionListener.wrap(

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/session/Configuration.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,24 @@ public class Configuration {
2020
private final TimeValue requestTimeout;
2121
private final TimeValue pageTimeout;
2222
private final Mode mode;
23+
private final String clientId;
2324
private final String username;
2425
private final String clusterName;
2526
private final ZonedDateTime now;
2627

2728
@Nullable
2829
private QueryBuilder filter;
2930

30-
public Configuration(ZoneId zi, int pageSize, TimeValue requestTimeout, TimeValue pageTimeout, QueryBuilder filter, Mode mode,
31+
public Configuration(ZoneId zi, int pageSize, TimeValue requestTimeout, TimeValue pageTimeout, QueryBuilder filter,
32+
Mode mode, String clientId,
3133
String username, String clusterName) {
3234
this.zoneId = zi.normalized();
3335
this.pageSize = pageSize;
3436
this.requestTimeout = requestTimeout;
3537
this.pageTimeout = pageTimeout;
3638
this.filter = filter;
3739
this.mode = mode == null ? Mode.PLAIN : mode;
40+
this.clientId = clientId;
3841
this.username = username;
3942
this.clusterName = clusterName;
4043
this.now = ZonedDateTime.now(zoneId);
@@ -63,6 +66,10 @@ public Mode mode() {
6366
return mode;
6467
}
6568

69+
public String clientId() {
70+
return clientId;
71+
}
72+
6673
public String username() {
6774
return username;
6875
}

x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/TestUtils.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ public class TestUtils {
2020
private TestUtils() {}
2121

2222
public static final Configuration TEST_CFG = new Configuration(DateUtils.UTC, Protocol.FETCH_SIZE,
23-
Protocol.REQUEST_TIMEOUT, Protocol.PAGE_TIMEOUT, null, Mode.PLAIN, null, null);
23+
Protocol.REQUEST_TIMEOUT, Protocol.PAGE_TIMEOUT, null, Mode.PLAIN,
24+
null, null, null);
2425

2526
/**
2627
* Returns the current UTC date-time with milliseconds precision.

x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/FunctionRegistryTests.java

+2
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ private Configuration randomConfiguration() {
239239
null,
240240
randomFrom(Mode.values()),
241241
randomAlphaOfLength(10),
242+
randomAlphaOfLength(10),
242243
randomAlphaOfLength(10));
243244
}
244245

@@ -250,6 +251,7 @@ private Configuration randomConfiguration(ZoneId providedZoneId) {
250251
null,
251252
randomFrom(Mode.values()),
252253
randomAlphaOfLength(10),
254+
randomAlphaOfLength(10),
253255
randomAlphaOfLength(10));
254256
}
255257

x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/DatabaseFunctionTests.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ public void testDatabaseFunctionOutput() {
2929
EsIndex test = new EsIndex("test", TypesTests.loadMapping("mapping-basic.json", true));
3030
Analyzer analyzer = new Analyzer(
3131
new Configuration(DateUtils.UTC, Protocol.FETCH_SIZE, Protocol.REQUEST_TIMEOUT,
32-
Protocol.PAGE_TIMEOUT, null, randomFrom(Mode.values()), null, clusterName),
32+
Protocol.PAGE_TIMEOUT, null,
33+
randomFrom(Mode.values()), randomAlphaOfLength(10),
34+
null, clusterName),
3335
new FunctionRegistry(),
3436
IndexResolution.valid(test),
3537
new Verifier(new Metrics())

x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/UserFunctionTests.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ public void testNoUsernameFunctionOutput() {
2828
EsIndex test = new EsIndex("test", TypesTests.loadMapping("mapping-basic.json", true));
2929
Analyzer analyzer = new Analyzer(
3030
new Configuration(DateUtils.UTC, Protocol.FETCH_SIZE, Protocol.REQUEST_TIMEOUT,
31-
Protocol.PAGE_TIMEOUT, null, randomFrom(Mode.values()), null, randomAlphaOfLengthBetween(1, 15)),
31+
Protocol.PAGE_TIMEOUT, null,
32+
randomFrom(Mode.values()), randomAlphaOfLength(10),
33+
null, randomAlphaOfLengthBetween(1, 15)),
3234
new FunctionRegistry(),
3335
IndexResolution.valid(test),
3436
new Verifier(new Metrics())

0 commit comments

Comments
 (0)