From 2e8448541ea193772cdd56665a7e39c0bf2409e2 Mon Sep 17 00:00:00 2001 From: Pat Whelan Date: Fri, 14 Nov 2025 16:02:14 -0500 Subject: [PATCH 1/2] [ML] Add validation for updating num_threads num_threads cannot be updated and should result in a validation error Fix #137129 --- .../ElasticsearchInternalServiceSettings.java | 4 ++++ .../ElasticsearchInternalServiceTests.java | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elasticsearch/ElasticsearchInternalServiceSettings.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elasticsearch/ElasticsearchInternalServiceSettings.java index 73aedfdf50ce6..4d8336a953e55 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elasticsearch/ElasticsearchInternalServiceSettings.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elasticsearch/ElasticsearchInternalServiceSettings.java @@ -234,6 +234,10 @@ public ElasticsearchInternalServiceSettings updateServiceSettings(Map(serviceSettings); + if (serviceSettings.containsKey(NUM_THREADS)) { + validationException.addValidationError(Strings.format("[%s] cannot be updated", NUM_THREADS)); + } + var numAllocations = extractOptionalPositiveInteger( mutableServiceSettings, NUM_ALLOCATIONS, diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/elasticsearch/ElasticsearchInternalServiceTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/elasticsearch/ElasticsearchInternalServiceTests.java index 68538608513bb..70e1b15be261c 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/elasticsearch/ElasticsearchInternalServiceTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/elasticsearch/ElasticsearchInternalServiceTests.java @@ -18,6 +18,7 @@ import org.elasticsearch.action.support.PlainActionFuture; import org.elasticsearch.client.internal.Client; import org.elasticsearch.cluster.service.ClusterService; +import org.elasticsearch.common.ValidationException; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.logging.DeprecationLogger; @@ -2205,6 +2206,17 @@ public void test_providedTimeoutPropagateProperly() throws InterruptedException assertEquals(providedTimeout, requestCaptor.getValue().getInferenceTimeout()); } + public void testUpdateServiceSettings_ThrowsExceptionWhenNumThreadsIsUpdated() { + var existingSettings = new ElasticsearchInternalServiceSettings(1, 4, "test-model", null, null); + + Map serviceSettingsWithNumThreads = Map.of(ElasticsearchInternalServiceSettings.NUM_THREADS, 8); + var exception = expectThrows( + ValidationException.class, + () -> existingSettings.updateServiceSettings(serviceSettingsWithNumThreads) + ); + assertThat(exception.getMessage(), containsString("[num_threads] cannot be updated")); + } + private ElasticsearchInternalService createService(Client client) { var cs = mock(ClusterService.class); var cSettings = new ClusterSettings(Settings.EMPTY, Set.of(MachineLearningField.MAX_LAZY_ML_NODES)); From 9f535496abb2b8d49a5de9a2e9b89afc7d9080a3 Mon Sep 17 00:00:00 2001 From: Pat Whelan Date: Fri, 14 Nov 2025 16:04:33 -0500 Subject: [PATCH 2/2] Update docs/changelog/138122.yaml --- docs/changelog/138122.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 docs/changelog/138122.yaml diff --git a/docs/changelog/138122.yaml b/docs/changelog/138122.yaml new file mode 100644 index 0000000000000..928f1d72577cd --- /dev/null +++ b/docs/changelog/138122.yaml @@ -0,0 +1,6 @@ +pr: 138122 +summary: Add validation for updating `num_threads` +area: Machine Learning +type: bug +issues: + - 137129