From 05b64f3d2aae9ddb367b86f580ea5dde18227add Mon Sep 17 00:00:00 2001 From: Ioana Tagirta Date: Thu, 4 Sep 2025 16:31:33 +0200 Subject: [PATCH] Enable CCS for FORK only in snapshot --- .../elasticsearch/xpack/esql/action/EsqlCapabilities.java | 2 +- .../xpack/esql/parser/LogicalPlanBuilder.java | 3 +++ .../xpack/esql/parser/StatementParserTests.java | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java index e5deb7e2bf007..68a21bf4d753b 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java @@ -1432,7 +1432,7 @@ public enum Cap { /** * FORK with remote indices */ - ENABLE_FORK_FOR_REMOTE_INDICES; + ENABLE_FORK_FOR_REMOTE_INDICES(Build.current().isSnapshot()); private final boolean enabled; diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/LogicalPlanBuilder.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/LogicalPlanBuilder.java index bf4d2a372cd7f..991da09fc8dd2 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/LogicalPlanBuilder.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/LogicalPlanBuilder.java @@ -719,6 +719,9 @@ public PlanFactory visitForkCommand(EsqlBaseParser.ForkCommandContext ctx) { } return input -> { + if (EsqlCapabilities.Cap.ENABLE_LOOKUP_JOIN_ON_REMOTE.isEnabled() == false) { + checkForRemoteClusters(input, source(ctx), "FORK"); + } List subPlans = subQueries.stream().map(planFactory -> planFactory.apply(input)).toList(); return new Fork(source(ctx), subPlans, List.of()); }; diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/parser/StatementParserTests.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/parser/StatementParserTests.java index 49dce0645de6a..abe7ec52e557c 100644 --- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/parser/StatementParserTests.java +++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/parser/StatementParserTests.java @@ -3627,6 +3627,14 @@ public void testInvalidFork() { expectError("FROM foo* | FORK ( LIMIT 10 ) ( y+2 )", "line 1:33: mismatched input 'y+2'"); expectError("FROM foo* | FORK (where true) ()", "line 1:32: mismatched input ')'"); expectError("FROM foo* | FORK () (where true)", "line 1:19: mismatched input ')'"); + + if (EsqlCapabilities.Cap.ENABLE_FORK_FOR_REMOTE_INDICES.isEnabled() == false) { + var fromPatterns = randomIndexPatterns(CROSS_CLUSTER); + expectError( + "FROM " + fromPatterns + " | FORK (EVAL a = 1) (EVAL a = 2)", + "invalid index pattern [" + unquoteIndexPattern(fromPatterns) + "], remote clusters are not supported with FORK" + ); + } } public void testFieldNamesAsCommands() throws Exception {