Skip to content

Commit c77b415

Browse files
[ES|QL] Skip validating remote cluster index names in parser (#114271) (#114959)
* skip validating remote cluster index names in parser (cherry picked from commit 64ae0ae)
1 parent 093ce26 commit c77b415

File tree

4 files changed

+119
-203
lines changed

4 files changed

+119
-203
lines changed

docs/changelog/114271.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 114271
2+
summary: "[ES|QL] Skip validating remote cluster index names in parser"
3+
area: ES|QL
4+
type: bug
5+
issues: []

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

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.List;
2222

2323
import static org.elasticsearch.transport.RemoteClusterAware.REMOTE_CLUSTER_INDEX_SEPARATOR;
24+
import static org.elasticsearch.transport.RemoteClusterAware.isRemoteIndexName;
2425
import static org.elasticsearch.xpack.esql.core.util.StringUtils.EXCLUSION;
2526
import static org.elasticsearch.xpack.esql.core.util.StringUtils.WILDCARD;
2627
import static org.elasticsearch.xpack.esql.parser.ParserUtils.source;
@@ -61,11 +62,14 @@ public String visitIndexPattern(List<EsqlBaseParser.IndexPatternContext> ctx) {
6162
Holder<Boolean> hasSeenStar = new Holder<>(false);
6263
ctx.forEach(c -> {
6364
String indexPattern = visitIndexString(c.indexString());
64-
hasSeenStar.set(indexPattern.contains(WILDCARD) || hasSeenStar.get());
65-
validateIndexPattern(indexPattern, c, hasSeenStar.get());
66-
patterns.add(
67-
c.clusterString() != null ? c.clusterString().getText() + REMOTE_CLUSTER_INDEX_SEPARATOR + indexPattern : indexPattern
68-
);
65+
String clusterString = c.clusterString() != null ? c.clusterString().getText() : null;
66+
// skip validating index on remote cluster, because the behavior of remote cluster is not consistent with local cluster
67+
// For example, invalid#index is an invalid index name, however FROM *:invalid#index does not return an error
68+
if (clusterString == null) {
69+
hasSeenStar.set(indexPattern.contains(WILDCARD) || hasSeenStar.get());
70+
validateIndexPattern(indexPattern, c, hasSeenStar.get());
71+
}
72+
patterns.add(clusterString != null ? clusterString + REMOTE_CLUSTER_INDEX_SEPARATOR + indexPattern : indexPattern);
6973
});
7074
return Strings.collectionToDelimitedString(patterns, ",");
7175
}
@@ -75,6 +79,9 @@ private static void validateIndexPattern(String indexPattern, EsqlBaseParser.Ind
7579
String[] indices = indexPattern.split(",");
7680
boolean hasExclusion = false;
7781
for (String index : indices) {
82+
if (isRemoteIndexName(index)) { // skip the validation if there is remote cluster
83+
continue;
84+
}
7885
hasSeenStar = index.contains(WILDCARD) || hasSeenStar;
7986
index = index.replace(WILDCARD, "").strip();
8087
if (index.isBlank()) {

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/parser/AbstractStatementParserTests.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,15 @@ void expectError(String query, List<QueryParam> params, String errorMessage) {
144144
assertThat(e.getMessage(), containsString(errorMessage));
145145
}
146146

147-
void expectInvalidIndexNameErrorWithLineNumber(String query, String arg, String lineNumber, String indexString) {
148-
expectError(LoggerMessageFormat.format(null, query, arg), lineNumber + "Invalid index name [" + indexString);
147+
void expectInvalidIndexNameErrorWithLineNumber(String query, String indexString, String lineNumber) {
148+
if ((indexString.contains("|") || indexString.contains(" ")) == false) {
149+
expectInvalidIndexNameErrorWithLineNumber(query, indexString, lineNumber, indexString);
150+
}
151+
expectInvalidIndexNameErrorWithLineNumber(query, "\"" + indexString + "\"", lineNumber, indexString);
152+
}
153+
154+
void expectInvalidIndexNameErrorWithLineNumber(String query, String indexString, String lineNumber, String error) {
155+
expectError(LoggerMessageFormat.format(null, query, indexString), lineNumber + "Invalid index name [" + error);
149156
}
150157

151158
void expectDateMathErrorWithLineNumber(String query, String arg, String lineNumber, String error) {

0 commit comments

Comments
 (0)