From de2486fa7ef518821852e6ee91d4393ddb8b30ea Mon Sep 17 00:00:00 2001 From: Jonathan Buttner Date: Fri, 5 Dec 2025 16:17:10 -0500 Subject: [PATCH] Enable ccm setting by default --- .../test/cluster/FeatureFlag.java | 1 - .../xpack/inference/CCMCrudIT.java | 7 ----- .../xpack/inference/CCMRestBaseIT.java | 4 +-- .../AuthorizationTaskExecutorUpgradeIT.java | 30 +++++++++++++++++-- .../inference/integration/CCMServiceIT.java | 3 -- .../services/elastic/ccm/CCMFeature.java | 2 +- .../services/elastic/ccm/CCMFeatureFlag.java | 22 -------------- .../services/elastic/ccm/CCMSettings.java | 2 +- 8 files changed, 31 insertions(+), 40 deletions(-) delete mode 100644 x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMFeatureFlag.java diff --git a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/FeatureFlag.java b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/FeatureFlag.java index 1fa8a95bc2c17..31e4604e9754d 100644 --- a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/FeatureFlag.java +++ b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/FeatureFlag.java @@ -26,7 +26,6 @@ public enum FeatureFlag { null ), RANDOM_SAMPLING("es.random_sampling_feature_flag_enabled=true", Version.fromString("9.2.0"), null), - INFERENCE_API_CCM("es.inference_api_ccm_feature_flag_enabled=true", Version.fromString("9.3.0"), null), TSDB_SYNTHETIC_ID_FEATURE_FLAG("es.tsdb_synthetic_id_feature_flag_enabled=true", Version.fromString("9.3.0"), null), GPU_FORMAT("es.gpu_vectors_indexing_feature_flag_enabled=true", Version.fromString("9.2.0"), null); diff --git a/x-pack/plugin/inference/qa/inference-service-tests/src/javaRestTest/java/org/elasticsearch/xpack/inference/CCMCrudIT.java b/x-pack/plugin/inference/qa/inference-service-tests/src/javaRestTest/java/org/elasticsearch/xpack/inference/CCMCrudIT.java index 1f4ae9e527510..f8dfbb9fb1b89 100644 --- a/x-pack/plugin/inference/qa/inference-service-tests/src/javaRestTest/java/org/elasticsearch/xpack/inference/CCMCrudIT.java +++ b/x-pack/plugin/inference/qa/inference-service-tests/src/javaRestTest/java/org/elasticsearch/xpack/inference/CCMCrudIT.java @@ -20,9 +20,7 @@ import org.elasticsearch.test.cluster.ElasticsearchCluster; import org.elasticsearch.test.cluster.local.distribution.DistributionType; import org.elasticsearch.xpack.core.inference.action.PutCCMConfigurationAction; -import org.elasticsearch.xpack.inference.services.elastic.ccm.CCMFeatureFlag; import org.junit.After; -import org.junit.BeforeClass; import org.junit.ClassRule; import java.io.IOException; @@ -54,11 +52,6 @@ protected Settings restClientSettings() { return Settings.builder().put(ThreadContext.PREFIX + ".Authorization", token).build(); } - @BeforeClass - public static void classSetup() { - assumeTrue("CCM is behind a feature flag and snapshot only right now", CCMFeatureFlag.FEATURE_FLAG.isEnabled()); - } - @After public void cleanup() { try { diff --git a/x-pack/plugin/inference/qa/inference-service-tests/src/javaRestTest/java/org/elasticsearch/xpack/inference/CCMRestBaseIT.java b/x-pack/plugin/inference/qa/inference-service-tests/src/javaRestTest/java/org/elasticsearch/xpack/inference/CCMRestBaseIT.java index a40cc6f6e199e..b93d26e4b273b 100644 --- a/x-pack/plugin/inference/qa/inference-service-tests/src/javaRestTest/java/org/elasticsearch/xpack/inference/CCMRestBaseIT.java +++ b/x-pack/plugin/inference/qa/inference-service-tests/src/javaRestTest/java/org/elasticsearch/xpack/inference/CCMRestBaseIT.java @@ -26,7 +26,7 @@ public class CCMRestBaseIT extends ESRestTestCase { - static final PutCCMConfigurationAction.Request ENABLE_CCM_REQUEST = PutCCMConfigurationAction.Request.createEnabled( + public static final PutCCMConfigurationAction.Request ENABLE_CCM_REQUEST = PutCCMConfigurationAction.Request.createEnabled( "key", TimeValue.THIRTY_SECONDS, TimeValue.THIRTY_SECONDS @@ -36,7 +36,7 @@ public class CCMRestBaseIT extends ESRestTestCase { static final String GET_METHOD = "GET"; static final String DELETE_METHOD = "DELETE"; - static CCMEnabledActionResponse putCCMConfiguration(PutCCMConfigurationAction.Request request) throws IOException { + public static CCMEnabledActionResponse putCCMConfiguration(PutCCMConfigurationAction.Request request) throws IOException { return assertSuccessAndParseResponse(putRawRequest(INFERENCE_CCM_PATH, request)); } diff --git a/x-pack/plugin/inference/qa/rolling-upgrade/src/javaRestTest/java/org/elasticsearch/xpack/application/AuthorizationTaskExecutorUpgradeIT.java b/x-pack/plugin/inference/qa/rolling-upgrade/src/javaRestTest/java/org/elasticsearch/xpack/application/AuthorizationTaskExecutorUpgradeIT.java index 48b974de4f608..6fd0630bcf9fb 100644 --- a/x-pack/plugin/inference/qa/rolling-upgrade/src/javaRestTest/java/org/elasticsearch/xpack/application/AuthorizationTaskExecutorUpgradeIT.java +++ b/x-pack/plugin/inference/qa/rolling-upgrade/src/javaRestTest/java/org/elasticsearch/xpack/application/AuthorizationTaskExecutorUpgradeIT.java @@ -16,12 +16,17 @@ import org.elasticsearch.test.cluster.ElasticsearchCluster; import org.elasticsearch.test.cluster.local.distribution.DistributionType; import org.elasticsearch.upgrades.ParameterizedRollingUpgradeTestCase; +import org.elasticsearch.xpack.inference.MockElasticInferenceServiceAuthorizationServer; import org.elasticsearch.xpack.inference.services.elastic.authorization.AuthorizationPoller; import org.junit.ClassRule; +import org.junit.rules.RuleChain; +import org.junit.rules.TestRule; import java.io.IOException; import java.util.Map; +import static org.elasticsearch.xpack.inference.CCMRestBaseIT.ENABLE_CCM_REQUEST; +import static org.elasticsearch.xpack.inference.CCMRestBaseIT.putCCMConfiguration; import static org.elasticsearch.xpack.inference.InferenceBaseRestTest.assertStatusOkOrCreated; import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceServiceSettings.ELASTIC_INFERENCE_SERVICE_URL; import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceServiceSettings.PERIODIC_AUTHORIZATION_ENABLED; @@ -29,14 +34,23 @@ public class AuthorizationTaskExecutorUpgradeIT extends ParameterizedRollingUpgradeTestCase { + private static final MockElasticInferenceServiceAuthorizationServer mockEISServer = + new MockElasticInferenceServiceAuthorizationServer(); + + static { + // Ensure that the mock EIS server has an authorized response for each node that will be upgraded prior to the cluster starting + for (int i = 0; i < NODE_NUM; i++) { + mockEISServer.enqueueAuthorizeAllModelsResponse(); + } + } + private static final Logger logger = LogManager.getLogger(AuthorizationTaskExecutorUpgradeIT.class); private static final String BEFORE_AUTHORIZATION_TASK_FEATURE = "gte_v9.1.0"; // The bug where the authorization task is registered before the upgrade is complete was introduced in 9.3.0 // This is the currently latest version before that private static final String MAX_CLUSTER_VERSION_BEFORE_BUG_INTRODUCED = "gte_v9.2.2"; - @ClassRule - public static ElasticsearchCluster cluster = ElasticsearchCluster.local() + private static ElasticsearchCluster cluster = ElasticsearchCluster.local() .distribution(DistributionType.DEFAULT) .version(getOldClusterVersion(), isOldClusterDetachedVersion()) .nodes(NODE_NUM) @@ -45,9 +59,15 @@ public class AuthorizationTaskExecutorUpgradeIT extends ParameterizedRollingUpgr .setting(PERIODIC_AUTHORIZATION_ENABLED.getKey(), "false") // We need a url set for the authorization task to be created, but we don't actually care if we get a valid response // just that the task will be created upon upgrade - .setting(ELASTIC_INFERENCE_SERVICE_URL.getKey(), "http://localhost:12345") + .setting(ELASTIC_INFERENCE_SERVICE_URL.getKey(), mockEISServer::getUrl) .build(); + // The reason we're doing this is to make sure the mock server is initialized first so we can get the address before communicating + // it to the cluster as a setting. + // Note: @ClassRule is executed once for the entire test class + @ClassRule + public static TestRule ruleChain = RuleChain.outerRule(mockEISServer).around(cluster); + private static final String GET_METHOD = "GET"; public AuthorizationTaskExecutorUpgradeIT(@Name("upgradedNodes") int upgradedNodes) { @@ -86,6 +106,10 @@ && oldClusterHasFeature(MAX_CLUSTER_VERSION_BEFORE_BUG_INTRODUCED) == false if (isUpgradedCluster()) { logger.info("Cluster is fully upgraded scenario"); + var response = putCCMConfiguration(ENABLE_CCM_REQUEST); + + assertTrue(response.isEnabled()); + // once fully upgraded, the authorization polling task should be created assertBusy(() -> assertTrue(doesAuthPollingTaskExist())); } diff --git a/x-pack/plugin/inference/src/internalClusterTest/java/org/elasticsearch/xpack/inference/integration/CCMServiceIT.java b/x-pack/plugin/inference/src/internalClusterTest/java/org/elasticsearch/xpack/inference/integration/CCMServiceIT.java index 9153bb51bf1a1..3548efd3e85de 100644 --- a/x-pack/plugin/inference/src/internalClusterTest/java/org/elasticsearch/xpack/inference/integration/CCMServiceIT.java +++ b/x-pack/plugin/inference/src/internalClusterTest/java/org/elasticsearch/xpack/inference/integration/CCMServiceIT.java @@ -19,7 +19,6 @@ import org.elasticsearch.xpack.inference.registry.ModelRegistry; import org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceServiceSettings; import org.elasticsearch.xpack.inference.services.elastic.authorization.AuthorizationTaskExecutor; -import org.elasticsearch.xpack.inference.services.elastic.ccm.CCMFeatureFlag; import org.elasticsearch.xpack.inference.services.elastic.ccm.CCMModel; import org.elasticsearch.xpack.inference.services.elastic.ccm.CCMService; import org.elasticsearch.xpack.inference.services.elastic.ccm.CCMSettings; @@ -75,8 +74,6 @@ public void delete(ActionListener listener) { @BeforeClass public static void initClass() throws IOException { - assumeTrue("CCM is behind a feature flag and snapshot only right now", CCMFeatureFlag.FEATURE_FLAG.isEnabled()); - webServer.start(); gatewayUrl = getUrl(webServer); chatCompletionResponseBody = ElasticInferenceServiceAuthorizationResponseEntityTests.getEisRainbowSprinklesAuthorizationResponse( diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMFeature.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMFeature.java index 17f63478d7322..7557cc2ad915e 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMFeature.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMFeature.java @@ -24,6 +24,6 @@ public CCMFeature(Settings settings) { } public boolean isCcmSupportedEnvironment() { - return isCcmSupportedEnvironment && CCMFeatureFlag.FEATURE_FLAG.isEnabled(); + return isCcmSupportedEnvironment; } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMFeatureFlag.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMFeatureFlag.java deleted file mode 100644 index 7f57caa077fdc..0000000000000 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMFeatureFlag.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -package org.elasticsearch.xpack.inference.services.elastic.ccm; - -import org.elasticsearch.common.util.FeatureFlag; - -public class CCMFeatureFlag { - - /** - * {@link org.elasticsearch.xpack.inference.services.custom.CustomService} feature flag. When the feature is complete, - * this flag will be removed. - * Enable feature via JVM option: `-Des.inference_api_ccm_feature_flag_enabled=true`. - */ - public static final FeatureFlag FEATURE_FLAG = new FeatureFlag("inference_api_ccm"); - - private CCMFeatureFlag() {} -} diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMSettings.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMSettings.java index 9830a8d131fbb..c029b342d8e2c 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMSettings.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ccm/CCMSettings.java @@ -14,7 +14,7 @@ public class CCMSettings { public static final Setting CCM_SUPPORTED_ENVIRONMENT = Setting.boolSetting( "xpack.inference.elastic.ccm_supported_environment", - false, + true, Setting.Property.NodeScope );