From a60fe29139a02aa2791577b759ae950f8faf43a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20B=C3=BCscher?= Date: Fri, 10 Oct 2025 14:29:44 +0200 Subject: [PATCH] Fix FieldCapabilitiesIT#testRelocation (#125233) (#136366) We should not try to relocate initializing shards. This change disables rebalancing and ensures all shards to be relocated are ready. Closes #124227 Co-authored-by: Nhat Nguyen --- .../search/fieldcaps/FieldCapabilitiesIT.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/server/src/internalClusterTest/java/org/elasticsearch/search/fieldcaps/FieldCapabilitiesIT.java b/server/src/internalClusterTest/java/org/elasticsearch/search/fieldcaps/FieldCapabilitiesIT.java index a930e90bbbc03..9f205bf2a8b31 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/search/fieldcaps/FieldCapabilitiesIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/search/fieldcaps/FieldCapabilitiesIT.java @@ -85,6 +85,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.IntStream; import static org.elasticsearch.action.support.ActionTestUtils.wrapAsRestResponseListener; @@ -598,11 +599,14 @@ public void testNoActiveCopy() throws Exception { } } - private void moveOrCloseShardsOnNodes(String nodeName) throws Exception { + private void moveOrCloseShardsOnNodes(String nodeName, Predicate indexName) throws Exception { final IndicesService indicesService = internalCluster().getInstance(IndicesService.class, nodeName); final ClusterState clusterState = clusterService().state(); for (IndexService indexService : indicesService) { for (IndexShard indexShard : indexService) { + if (indexName.test(indexShard.shardId().getIndexName()) == false) { + continue; + } if (randomBoolean()) { closeShardNoCheck(indexShard, randomBoolean()); } else if (randomBoolean()) { @@ -644,13 +648,21 @@ private void moveOrCloseShardsOnNodes(String nodeName) throws Exception { public void testRelocation() throws Exception { populateTimeRangeIndices(); + assertAcked( + client().admin() + .indices() + .prepareUpdateSettings("log-index-*") + .setSettings(Settings.builder().put("index.routing.rebalance.enable", "none").build()) + .get() + ); + ensureGreen("log-index-*"); try { final AtomicBoolean relocated = new AtomicBoolean(); for (String node : internalCluster().getNodeNames()) { MockTransportService.getInstance(node) .addRequestHandlingBehavior(TransportFieldCapabilitiesAction.ACTION_NODE_NAME, (handler, request, channel, task) -> { if (relocated.compareAndSet(false, true)) { - moveOrCloseShardsOnNodes(node); + moveOrCloseShardsOnNodes(node, indexName -> indexName.startsWith("log-index-")); } handler.messageReceived(request, channel, task); });