Skip to content

Commit 59a6c36

Browse files
EQL: Start adding support for CPS
1 parent 48c1583 commit 59a6c36

File tree

11 files changed

+68
-9
lines changed

11 files changed

+68
-9
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
9204000
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
esql_resolve_fields_response_removed_min_tv,9203000
1+
eql_project_routing,9204000

x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/action/EqlSearchRequest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
*/
77
package org.elasticsearch.xpack.eql.action;
88

9+
import org.elasticsearch.TransportVersion;
910
import org.elasticsearch.TransportVersions;
1011
import org.elasticsearch.action.ActionRequestValidationException;
1112
import org.elasticsearch.action.IndicesRequest;
1213
import org.elasticsearch.action.LegacyActionRequest;
14+
import org.elasticsearch.action.ResolvedIndexExpressions;
1315
import org.elasticsearch.action.support.IndicesOptions;
1416
import org.elasticsearch.common.Strings;
1517
import org.elasticsearch.common.io.stream.StreamInput;
@@ -44,6 +46,8 @@
4446

4547
public class EqlSearchRequest extends LegacyActionRequest implements IndicesRequest.Replaceable, ToXContent {
4648

49+
private static final TransportVersion EQL_PROJECT_ROUTING = TransportVersion.fromName("eql_project_routing");
50+
4751
public static final long MIN_KEEP_ALIVE = TimeValue.timeValueMinutes(1).millis();
4852
public static final TimeValue DEFAULT_KEEP_ALIVE = TimeValue.timeValueDays(5);
4953
public static final IndicesOptions DEFAULT_INDICES_OPTIONS = IndicesOptions.fromOptions(true, true, true, false);
@@ -65,6 +69,8 @@ public class EqlSearchRequest extends LegacyActionRequest implements IndicesRequ
6569
private int maxSamplesPerKey = RequestDefaults.MAX_SAMPLES_PER_KEY;
6670
private Boolean allowPartialSearchResults;
6771
private Boolean allowPartialSequenceResults;
72+
private String projectRouting;
73+
private ResolvedIndexExpressions resolvedIndexExpressions;
6874

6975
// Async settings
7076
private TimeValue waitForCompletionTimeout = null;
@@ -140,6 +146,19 @@ public EqlSearchRequest(StreamInput in) throws IOException {
140146
allowPartialSearchResults = false;
141147
allowPartialSequenceResults = false;
142148
}
149+
if (in.getTransportVersion().supports(EQL_PROJECT_ROUTING)) {
150+
projectRouting = in.readOptionalString();
151+
resolvedIndexExpressions = in.readOptionalWriteable(ResolvedIndexExpressions::new);
152+
}
153+
}
154+
155+
public String projectRouting() {
156+
return projectRouting;
157+
}
158+
159+
public EqlSearchRequest projectRouting(String projectRouting) {
160+
this.projectRouting = projectRouting;
161+
return this;
143162
}
144163

145164
@Override
@@ -297,6 +316,21 @@ public EqlSearchRequest indices(String... indices) {
297316
return this;
298317
}
299318

319+
@Override
320+
public boolean allowsCrossProject() {
321+
return true;
322+
}
323+
324+
@Override
325+
public void setResolvedIndexExpressions(ResolvedIndexExpressions expressions) {
326+
this.resolvedIndexExpressions = expressions;
327+
}
328+
329+
@Override
330+
public ResolvedIndexExpressions getResolvedIndexExpressions() {
331+
return resolvedIndexExpressions;
332+
}
333+
300334
public QueryBuilder filter() {
301335
return this.filter;
302336
}
@@ -495,6 +529,10 @@ public void writeTo(StreamOutput out) throws IOException {
495529
out.writeOptionalBoolean(allowPartialSearchResults);
496530
out.writeOptionalBoolean(allowPartialSequenceResults);
497531
}
532+
if (out.getTransportVersion().supports(EQL_PROJECT_ROUTING)) {
533+
out.writeOptionalString(projectRouting);
534+
out.writeOptionalWriteable(resolvedIndexExpressions);
535+
}
498536
}
499537

500538
@Override

x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/plugin/RestEqlSearchAction.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,21 @@ public List<Route> routes() {
5353

5454
@Override
5555
protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
56-
if (settings != null && settings.getAsBoolean("serverless.cross_project.enabled", false)) {
57-
// accept but drop project_routing param until fully supported
58-
request.param("project_routing");
59-
}
60-
56+
final boolean crossProjectEnabled = settings != null && settings.getAsBoolean("serverless.cross_project.enabled", false);
6157
EqlSearchRequest eqlRequest;
6258
String indices;
6359
try (XContentParser parser = request.contentOrSourceParamParser()) {
6460
eqlRequest = EqlSearchRequest.fromXContent(parser);
6561
indices = request.param("index");
6662
eqlRequest.indices(Strings.splitStringByCommaToArray(indices));
67-
eqlRequest.indicesOptions(IndicesOptions.fromRequest(request, eqlRequest.indicesOptions()));
63+
IndicesOptions indicesOptions = IndicesOptions.fromRequest(request, eqlRequest.indicesOptions());
64+
if (crossProjectEnabled) {
65+
indicesOptions = IndicesOptions.builder(indicesOptions)
66+
.crossProjectModeOptions(new IndicesOptions.CrossProjectModeOptions(true))
67+
.build();
68+
eqlRequest.projectRouting(request.param("project_routing"));
69+
}
70+
eqlRequest.indicesOptions(indicesOptions);
6871
if (request.hasParam("wait_for_completion_timeout")) {
6972
eqlRequest.waitForCompletionTimeout(
7073
request.paramAsTime("wait_for_completion_timeout", eqlRequest.waitForCompletionTimeout())

x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/plugin/TransportEqlSearchAction.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ public static void operation(
193193
request.indicesOptions()
194194
);
195195
Set<String> clusterAliases = remoteClusterRegistry.clusterAliases(request.indices(), false);
196-
if (canMinimizeRountrips(request, clusterAliases)) {
196+
if (canMinimizeRountrips(request, clusterAliases, transportService.getRemoteClusterService().crossProjectEnabled())) {
197197
String clusterAlias = clusterAliases.iterator().next();
198198
String[] remoteIndices = new String[request.indices().length];
199199
for (int i = 0; i < request.indices().length; i++) {
@@ -239,6 +239,7 @@ public static void operation(
239239
request.allowPartialSequenceResults() == null
240240
? defaultAllowPartialSequenceResults(clusterService)
241241
: request.allowPartialSequenceResults(),
242+
request.projectRouting(),
242243
clientId,
243244
new TaskId(nodeId, task.getId()),
244245
task
@@ -288,7 +289,10 @@ private static boolean requestIsAsync(EqlSearchRequest request) {
288289
}
289290

290291
// can the request be proxied to the remote cluster?
291-
private static boolean canMinimizeRountrips(EqlSearchRequest request, Set<String> clusterAliases) {
292+
private static boolean canMinimizeRountrips(EqlSearchRequest request, Set<String> clusterAliases, boolean crossProjectEnabled) {
293+
if (crossProjectEnabled) {
294+
return false;
295+
}
292296
// Has minimizing the round trips been (explicitly) disabled?
293297
if (request.ccsMinimizeRoundtrips() == false) {
294298
return false;

x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/session/EqlConfiguration.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class EqlConfiguration extends org.elasticsearch.xpack.ql.session.Configu
3232
private final int maxSamplesPerKey;
3333
private final boolean allowPartialSearchResults;
3434
private final boolean allowPartialSequenceResults;
35+
private final String projectRouting;
3536

3637
@Nullable
3738
private final QueryBuilder filter;
@@ -54,6 +55,7 @@ public EqlConfiguration(
5455
int maxSamplesPerKey,
5556
boolean allowPartialSearchResults,
5657
boolean allowPartialSequenceResults,
58+
String projectRouting,
5759
String clientId,
5860
TaskId taskId,
5961
EqlSearchTask task
@@ -73,6 +75,11 @@ public EqlConfiguration(
7375
this.maxSamplesPerKey = maxSamplesPerKey;
7476
this.allowPartialSearchResults = allowPartialSearchResults;
7577
this.allowPartialSequenceResults = allowPartialSequenceResults;
78+
this.projectRouting = projectRouting;
79+
}
80+
81+
public String projectRouting() {
82+
return projectRouting;
7683
}
7784

7885
public String[] indices() {

x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/session/EqlSession.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ private <T> void preAnalyze(LogicalPlan parsed, ActionListener<LogicalPlan> list
122122
return;
123123
}
124124
Set<String> fieldNames = fieldNames(parsed);
125+
// TODO pass configuration.projectRouting();
125126
indexResolver.resolveAsMergedMapping(
126127
indexWildcard,
127128
fieldNames,

x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/EqlTestUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ private EqlTestUtils() {}
5353
1,
5454
false,
5555
true,
56+
null,
5657
"",
5758
new TaskId("test", 123),
5859
null
@@ -73,6 +74,7 @@ public static EqlConfiguration randomConfiguration() {
7374
randomIntBetween(1, 1000),
7475
randomBoolean(),
7576
randomBoolean(),
77+
null,
7678
randomAlphaOfLength(16),
7779
new TaskId(randomAlphaOfLength(10), randomNonNegativeLong()),
7880
randomTask()

x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/execution/search/PITAwareQueryClientTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ public void testQueryFilterUsedInPitAndSearches() {
104104
1,
105105
randomBoolean(),
106106
randomBoolean(),
107+
null,
107108
"",
108109
new TaskId("test", 123),
109110
new EqlSearchTask(

x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/execution/sequence/CircuitBreakerTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ private QueryClient buildQueryClient(ESMockClient esClient, CircuitBreaker eqlCi
352352
1,
353353
randomBoolean(),
354354
randomBoolean(),
355+
null,
355356
"",
356357
new TaskId("test", 123),
357358
new EqlSearchTask(

0 commit comments

Comments
 (0)