Skip to content

Commit cd50e0e

Browse files
authored
ESQL: Make settings dynamic (#101516) (#101761)
* Return QUERY_RESULT_TRUNCATION_DEFAULT_SIZE in EsqlPlugin::getSettings. * Make ESQL settings Dynamic.
1 parent 8398263 commit cd50e0e

File tree

4 files changed

+59
-10
lines changed

4 files changed

+59
-10
lines changed

docs/changelog/101516.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 101516
2+
summary: "Make settings dynamic"
3+
area: ES|QL
4+
type: enhancement
5+
issues: []

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/EsqlActionIT.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88
package org.elasticsearch.xpack.esql.action;
99

1010
import org.elasticsearch.Build;
11+
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
1112
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
1213
import org.elasticsearch.action.bulk.BulkRequestBuilder;
1314
import org.elasticsearch.action.index.IndexRequest;
1415
import org.elasticsearch.action.index.IndexRequestBuilder;
1516
import org.elasticsearch.action.support.WriteRequest;
17+
import org.elasticsearch.client.internal.ClusterAdminClient;
1618
import org.elasticsearch.cluster.metadata.IndexMetadata;
19+
import org.elasticsearch.common.settings.Setting;
1720
import org.elasticsearch.common.settings.Settings;
1821
import org.elasticsearch.index.Index;
1922
import org.elasticsearch.index.IndexService;
@@ -27,6 +30,7 @@
2730
import org.elasticsearch.xcontent.json.JsonXContent;
2831
import org.elasticsearch.xpack.esql.analysis.VerificationException;
2932
import org.elasticsearch.xpack.esql.expression.function.EsqlFunctionRegistry;
33+
import org.elasticsearch.xpack.esql.plugin.EsqlPlugin;
3034
import org.junit.Before;
3135

3236
import java.io.IOException;
@@ -69,7 +73,6 @@
6973
import static org.hamcrest.Matchers.nullValue;
7074

7175
public class EsqlActionIT extends AbstractEsqlIntegTestCase {
72-
7376
long epoch = System.currentTimeMillis();
7477

7578
@Before
@@ -1459,4 +1462,47 @@ private void createAndPopulateIndex(String indexName, Settings additionalSetting
14591462
}
14601463
ensureYellow(indexName);
14611464
}
1465+
1466+
public void testDefaultTruncationSizeSetting() {
1467+
ClusterAdminClient client = admin().cluster();
1468+
1469+
Settings settings = Settings.builder().put(EsqlPlugin.QUERY_RESULT_TRUNCATION_DEFAULT_SIZE.getKey(), 1).build();
1470+
1471+
ClusterUpdateSettingsRequest settingsRequest = new ClusterUpdateSettingsRequest().persistentSettings(settings);
1472+
1473+
client.updateSettings(settingsRequest).actionGet();
1474+
try (EsqlQueryResponse results = run("from test")) {
1475+
logger.info(results);
1476+
assertEquals(1, getValuesList(results).size());
1477+
} finally {
1478+
clearPersistentSettings(EsqlPlugin.QUERY_RESULT_TRUNCATION_DEFAULT_SIZE);
1479+
}
1480+
}
1481+
1482+
public void testMaxTruncationSizeSetting() {
1483+
ClusterAdminClient client = admin().cluster();
1484+
1485+
Settings settings = Settings.builder().put(EsqlPlugin.QUERY_RESULT_TRUNCATION_MAX_SIZE.getKey(), 10).build();
1486+
1487+
ClusterUpdateSettingsRequest settingsRequest = new ClusterUpdateSettingsRequest().persistentSettings(settings);
1488+
1489+
client.updateSettings(settingsRequest).actionGet();
1490+
try (EsqlQueryResponse results = run("from test | limit 40")) {
1491+
logger.info(results);
1492+
assertEquals(10, getValuesList(results).size());
1493+
} finally {
1494+
clearPersistentSettings(EsqlPlugin.QUERY_RESULT_TRUNCATION_MAX_SIZE);
1495+
}
1496+
}
1497+
1498+
private void clearPersistentSettings(Setting<?>... settings) {
1499+
Settings.Builder clearedSettings = Settings.builder();
1500+
1501+
for (Setting<?> s : settings) {
1502+
clearedSettings.putNull(s.getKey());
1503+
}
1504+
1505+
var clearSettingsRequest = new ClusterUpdateSettingsRequest().persistentSettings(clearedSettings.build());
1506+
admin().cluster().updateSettings(clearSettingsRequest).actionGet();
1507+
}
14621508
}

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,17 @@ public class EsqlPlugin extends Plugin implements ActionPlugin {
7676
10000,
7777
1,
7878
1000000,
79-
Setting.Property.NodeScope
79+
Setting.Property.NodeScope,
80+
Setting.Property.Dynamic
8081
);
8182

8283
public static final Setting<Integer> QUERY_RESULT_TRUNCATION_DEFAULT_SIZE = Setting.intSetting(
8384
"esql.query.result_truncation_default_size",
8485
500,
8586
1,
8687
10000,
87-
Setting.Property.NodeScope
88+
Setting.Property.NodeScope,
89+
Setting.Property.Dynamic
8890
);
8991

9092
@Override
@@ -121,7 +123,7 @@ public Collection<Object> createComponents(
121123
*/
122124
@Override
123125
public List<Setting<?>> getSettings() {
124-
return List.of(QUERY_RESULT_TRUNCATION_MAX_SIZE);
126+
return List.of(QUERY_RESULT_TRUNCATION_DEFAULT_SIZE, QUERY_RESULT_TRUNCATION_MAX_SIZE);
125127
}
126128

127129
@Override

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.elasticsearch.action.support.HandledTransportAction;
1414
import org.elasticsearch.cluster.service.ClusterService;
1515
import org.elasticsearch.common.inject.Inject;
16-
import org.elasticsearch.common.settings.Settings;
1716
import org.elasticsearch.common.util.BigArrays;
1817
import org.elasticsearch.common.util.concurrent.EsExecutors;
1918
import org.elasticsearch.compute.data.BlockFactory;
@@ -48,11 +47,9 @@ public class TransportEsqlQueryAction extends HandledTransportAction<EsqlQueryRe
4847
private final Executor requestExecutor;
4948
private final EnrichPolicyResolver enrichPolicyResolver;
5049
private final EnrichLookupService enrichLookupService;
51-
private final Settings settings;
5250

5351
@Inject
5452
public TransportEsqlQueryAction(
55-
Settings settings,
5653
TransportService transportService,
5754
ActionFilters actionFilters,
5855
PlanExecutor planExecutor,
@@ -81,7 +78,6 @@ public TransportEsqlQueryAction(
8178
bigArrays,
8279
blockFactory
8380
);
84-
this.settings = settings;
8581
}
8682

8783
@Override
@@ -98,8 +94,8 @@ private void doExecuteForked(Task task, EsqlQueryRequest request, ActionListener
9894
null,
9995
clusterService.getClusterName().value(),
10096
request.pragmas(),
101-
EsqlPlugin.QUERY_RESULT_TRUNCATION_MAX_SIZE.get(settings),
102-
EsqlPlugin.QUERY_RESULT_TRUNCATION_DEFAULT_SIZE.get(settings),
97+
clusterService.getClusterSettings().get(EsqlPlugin.QUERY_RESULT_TRUNCATION_MAX_SIZE),
98+
clusterService.getClusterSettings().get(EsqlPlugin.QUERY_RESULT_TRUNCATION_DEFAULT_SIZE),
10399
request.query()
104100
);
105101
String sessionId = sessionID(task);

0 commit comments

Comments
 (0)