|  | @@ -21,6 +21,7 @@ import org.elasticsearch.cluster.routing.allocation.decider.Decision;
 | 
	
		
			
				|  |  |  import org.elasticsearch.common.metrics.MeanMetric;
 | 
	
		
			
				|  |  |  import org.elasticsearch.common.settings.ClusterSettings;
 | 
	
		
			
				|  |  |  import org.elasticsearch.common.settings.Setting;
 | 
	
		
			
				|  |  | +import org.elasticsearch.common.util.Maps;
 | 
	
		
			
				|  |  |  import org.elasticsearch.core.Strings;
 | 
	
		
			
				|  |  |  import org.elasticsearch.core.TimeValue;
 | 
	
		
			
				|  |  |  import org.elasticsearch.index.shard.ShardId;
 | 
	
	
		
			
				|  | @@ -329,10 +330,7 @@ public class DesiredBalanceComputer {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          iterations.inc(i);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        final var assignments = new HashMap<ShardId, ShardAssignment>();
 | 
	
		
			
				|  |  | -        for (var shardAndAssignments : routingNodes.getAssignedShards().entrySet()) {
 | 
	
		
			
				|  |  | -            assignments.put(shardAndAssignments.getKey(), ShardAssignment.ofAssignedShards(shardAndAssignments.getValue()));
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        final var assignments = collectShardAssignments(routingNodes);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          for (var shard : routingNodes.unassigned().ignored()) {
 | 
	
		
			
				|  |  |              var info = shard.unassignedInfo();
 | 
	
	
		
			
				|  | @@ -362,6 +360,16 @@ public class DesiredBalanceComputer {
 | 
	
		
			
				|  |  |          return new DesiredBalance(lastConvergedIndex, assignments);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private static Map<ShardId, ShardAssignment> collectShardAssignments(RoutingNodes routingNodes) {
 | 
	
		
			
				|  |  | +        final var entries = routingNodes.getAssignedShards().entrySet();
 | 
	
		
			
				|  |  | +        assert entries.stream().flatMap(t -> t.getValue().stream()).allMatch(ShardRouting::started) : routingNodes;
 | 
	
		
			
				|  |  | +        final Map<ShardId, ShardAssignment> res = Maps.newHashMapWithExpectedSize(entries.size());
 | 
	
		
			
				|  |  | +        for (var shardAndAssignments : entries) {
 | 
	
		
			
				|  |  | +            res.put(shardAndAssignments.getKey(), ShardAssignment.ofAssignedShards(shardAndAssignments.getValue()));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return res;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      private record ShardRoutings(List<ShardRouting> unassigned, List<ShardRouting> assigned) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private ShardRoutings(ShardId ignored) {
 |