From df0e5fb94eafcd5fb215ff3f1798eb48aadf9071 Mon Sep 17 00:00:00 2001 From: Nick Tindall Date: Fri, 31 Oct 2025 13:49:15 +1100 Subject: [PATCH 1/2] Don't require shard write load to return canRemain=NOT_PREFERRED --- .../allocation/decider/WriteLoadConstraintDecider.java | 7 ------- .../decider/WriteLoadConstraintDeciderTests.java | 10 ---------- 2 files changed, 17 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDecider.java b/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDecider.java index 08c661adf37e7..a2993b1ee988f 100644 --- a/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDecider.java +++ b/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDecider.java @@ -129,13 +129,6 @@ public Decision canRemain(IndexMetadata indexMetadata, ShardRouting shardRouting return Decision.single(Decision.Type.YES, NAME, "canRemain() is not enabled"); } - // Check whether the shard being relocated has any write load estimate. If it does not, then this decider has no opinion. - var allShardWriteLoads = allocation.clusterInfo().getShardWriteLoads(); - var shardWriteLoad = allShardWriteLoads.get(shardRouting.shardId()); - if (shardWriteLoad == null || shardWriteLoad == 0) { - return Decision.single(Decision.Type.YES, NAME, "Shard has no estimated write load. Decider takes no action."); - } - var allNodeUsageStats = allocation.clusterInfo().getNodeUsageStatsForThreadPools(); var nodeUsageStatsForThreadPools = allNodeUsageStats.get(node.nodeId()); if (nodeUsageStatsForThreadPools == null) { diff --git a/server/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDeciderTests.java b/server/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDeciderTests.java index 61f40dd831a81..b4a168e083ed1 100644 --- a/server/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDeciderTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDeciderTests.java @@ -233,16 +233,6 @@ public void testWriteLoadDeciderCanRemain() { testHarness.routingAllocation ).type() ); - assertEquals( - "A shard without write load should remain on a node with queuing above the threshold", - Decision.Type.YES, - writeLoadDecider.canRemain( - testHarness.clusterState.metadata().getProject().index(indexName), - testHarness.shardRoutingNoWriteLoad, - testHarness.aboveQueuingThresholdRoutingNode, - testHarness.routingAllocation - ).type() - ); } private void assertDecisionMatches(String description, Decision decision, Decision.Type type, String explanationPattern) { From 6fc953fbd7c49e543b8190db6d17d3947fa4870f Mon Sep 17 00:00:00 2001 From: Nick Tindall Date: Fri, 31 Oct 2025 14:15:14 +1100 Subject: [PATCH 2/2] Add back test --- .../decider/WriteLoadConstraintDeciderTests.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/server/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDeciderTests.java b/server/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDeciderTests.java index b4a168e083ed1..5a313691be218 100644 --- a/server/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDeciderTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/WriteLoadConstraintDeciderTests.java @@ -233,6 +233,16 @@ public void testWriteLoadDeciderCanRemain() { testHarness.routingAllocation ).type() ); + assertEquals( + "A shard with no write load can still return NOT_PREFERRED", + Decision.Type.NOT_PREFERRED, + writeLoadDecider.canRemain( + testHarness.clusterState.metadata().getProject().index(indexName), + testHarness.shardRoutingNoWriteLoad, + testHarness.aboveQueuingThresholdRoutingNode, + testHarness.routingAllocation + ).type() + ); } private void assertDecisionMatches(String description, Decision decision, Decision.Type type, String explanationPattern) {