diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java index c6d0944ca6d90..ab56621e748ae 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java @@ -397,7 +397,7 @@ private Metadata updateSingleProject(Function reservedStateMetadata ); } else { - throw new UnsupportedOperationException("There are multiple projects " + projectMetadata.keySet()); + throw new MultiProjectPendingException("There are multiple projects " + projectMetadata.keySet()); } } @@ -1310,7 +1310,7 @@ private ProjectMetadata.Builder getSingleProject() { if (projectMetadata.isEmpty()) { createDefaultProject(); } else if (projectMetadata.size() != 1) { - throw new UnsupportedOperationException("There are multiple projects " + projectMetadata.keySet()); + throw new MultiProjectPendingException("There are multiple projects " + projectMetadata.keySet()); } return projectMetadata.values().iterator().next(); } diff --git a/server/src/main/java/org/elasticsearch/cluster/routing/GlobalRoutingTable.java b/server/src/main/java/org/elasticsearch/cluster/routing/GlobalRoutingTable.java index 642ea54881acc..e7b707b8993c3 100644 --- a/server/src/main/java/org/elasticsearch/cluster/routing/GlobalRoutingTable.java +++ b/server/src/main/java/org/elasticsearch/cluster/routing/GlobalRoutingTable.java @@ -15,6 +15,7 @@ import org.elasticsearch.cluster.DiffableUtils; import org.elasticsearch.cluster.DiffableUtils.KeySerializer; import org.elasticsearch.cluster.metadata.Metadata; +import org.elasticsearch.cluster.metadata.Metadata.MultiProjectPendingException; import org.elasticsearch.cluster.metadata.ProjectId; import org.elasticsearch.cluster.metadata.ProjectMetadata; import org.elasticsearch.common.collect.ImmutableOpenMap; @@ -134,7 +135,7 @@ public RoutingTable getRoutingTable() { return switch (routingTables.size()) { case 0 -> RoutingTable.EMPTY_ROUTING_TABLE; case 1 -> routingTables.values().iterator().next(); - default -> throw new IllegalStateException("There are multiple project routing tables [" + routingTables.keySet() + "]"); + default -> throw new MultiProjectPendingException("There are multiple project routing tables [" + routingTables.keySet() + "]"); }; } diff --git a/server/src/main/java/org/elasticsearch/cluster/service/ClusterApplierService.java b/server/src/main/java/org/elasticsearch/cluster/service/ClusterApplierService.java index 6f1128317a462..b4a626faf79b3 100644 --- a/server/src/main/java/org/elasticsearch/cluster/service/ClusterApplierService.java +++ b/server/src/main/java/org/elasticsearch/cluster/service/ClusterApplierService.java @@ -594,7 +594,7 @@ private static void callClusterStateListener( listener.clusterChanged(clusterChangedEvent); } } catch (Metadata.MultiProjectPendingException e) { - // don't warn, this fills the logs + // don't warn, this fills the logs and also slow down applier thread in CI which could cause unrelated failures logger.trace("ClusterStateListener not multi-project compatible", e); } catch (Exception ex) { logger.warn("failed to notify ClusterStateListener", ex);