diff --git a/x-pack/plugin/esql/qa/server/mixed-cluster/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/mixed/FieldExtractorIT.java b/x-pack/plugin/esql/qa/server/mixed-cluster/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/mixed/FieldExtractorIT.java index a7f5024e52629..0d1506a93ff75 100644 --- a/x-pack/plugin/esql/qa/server/mixed-cluster/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/mixed/FieldExtractorIT.java +++ b/x-pack/plugin/esql/qa/server/mixed-cluster/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/mixed/FieldExtractorIT.java @@ -12,6 +12,7 @@ import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.test.TestClustersThreadFilter; import org.elasticsearch.test.cluster.ElasticsearchCluster; +import org.elasticsearch.test.cluster.util.Version; import org.elasticsearch.xpack.esql.qa.rest.FieldExtractorTestCase; import org.hamcrest.Matcher; import org.junit.ClassRule; @@ -40,4 +41,16 @@ protected Matcher pidMatcher() { return preference == MappedFieldType.FieldExtractPreference.STORED ? anyOf(equalTo(111), nullValue()) : nullValue(Integer.class); } + @Override + protected void canUsePragmasOk() { + String bwc = System.getProperty("tests.old_cluster_version"); + if (bwc == null) { + bwc = System.getProperty("tests.serverless.bwc_stack_version"); + } + if (bwc == null) { + throw new AssertionError("can't find bwc version"); + } + Version oldVersion = Version.fromString(bwc); + assumeTrue("pragma ok not supported", oldVersion.onOrAfter("8.16.0")); + } } diff --git a/x-pack/plugin/esql/qa/server/multi-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/multi_node/FieldExtractorIT.java b/x-pack/plugin/esql/qa/server/multi-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/multi_node/FieldExtractorIT.java index 112d4c3b9e4ef..7f41a5ee0a666 100644 --- a/x-pack/plugin/esql/qa/server/multi-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/multi_node/FieldExtractorIT.java +++ b/x-pack/plugin/esql/qa/server/multi-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/multi_node/FieldExtractorIT.java @@ -28,4 +28,9 @@ public FieldExtractorIT(MappedFieldType.FieldExtractPreference preference) { protected String getTestRestCluster() { return cluster.getHttpAddresses(); } + + @Override + protected void canUsePragmasOk() { + // always ok + } } diff --git a/x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/FieldExtractorIT.java b/x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/FieldExtractorIT.java index 272cec9b48fe7..f83ed84004fa5 100644 --- a/x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/FieldExtractorIT.java +++ b/x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/FieldExtractorIT.java @@ -28,4 +28,9 @@ public FieldExtractorIT(MappedFieldType.FieldExtractPreference preference) { protected String getTestRestCluster() { return cluster.getHttpAddresses(); } + + @Override + protected void canUsePragmasOk() { + // always can use + } } diff --git a/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/FieldExtractorTestCase.java b/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/FieldExtractorTestCase.java index 950bfa9b2172c..630e74c3b914b 100644 --- a/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/FieldExtractorTestCase.java +++ b/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/FieldExtractorTestCase.java @@ -10,7 +10,6 @@ import com.carrotsearch.randomizedtesting.annotations.ParametersFactory; import org.apache.http.util.EntityUtils; -import org.elasticsearch.Build; import org.elasticsearch.Version; import org.elasticsearch.client.Request; import org.elasticsearch.client.Response; @@ -35,7 +34,6 @@ import org.elasticsearch.xpack.esql.core.type.DataType; import org.elasticsearch.xpack.esql.plugin.QueryPragmas; import org.hamcrest.Matcher; -import org.junit.Before; import java.io.IOException; import java.math.BigDecimal; @@ -83,17 +81,6 @@ public static List args() throws Exception { protected FieldExtractorTestCase(MappedFieldType.FieldExtractPreference preference) { this.preference = preference; - if (preference != null) { - assumeTrue("Requires pragma", Build.current().isSnapshot()); - } - } - - @Before - public void notOld() { - assumeTrue( - "support changed pretty radically in 8.12 so we don't test against 8.11", - getCachedNodesVersions().stream().allMatch(v -> Version.fromString(v).onOrAfter(Version.V_8_12_0)) - ); } public void testTextField() throws IOException { @@ -1784,10 +1771,14 @@ private String deyaml(String err) { private Map runEsql(String query) throws IOException { RestEsqlTestCase.RequestObjectBuilder request = new RestEsqlTestCase.RequestObjectBuilder().query(query); if (preference != null) { + canUsePragmasOk(); request = request.pragmas( Settings.builder().put(QueryPragmas.FIELD_EXTRACT_PREFERENCE.getKey(), preference.toString()).build() ); + request.pragmasOk(); } return runEsqlSync(request); } + + protected abstract void canUsePragmasOk(); } diff --git a/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java b/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java index cb476cb5f8ef2..957b31aa9fa8b 100644 --- a/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java +++ b/x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java @@ -178,6 +178,14 @@ public RequestObjectBuilder keepOnCompletion(boolean value) throws IOException { return this; } + /** + * Allow sending pragmas even in non-snapshot builds. + */ + public RequestObjectBuilder pragmasOk() throws IOException { + builder.field("accept_pragma_risks", true); + return this; + } + Boolean keepOnCompletion() { return keepOnCompletion; }