Skip to content

Commit 6646af0

Browse files
authored
Use MultiProjectPendingException more consistently (#123955)
Use the same exception class in more places where single lookup fails due to the existence of multiple projects. This allows the exception to be handled similarly, e.g. ignored in ClusterApplierService#callClusterStateListener
1 parent 850a49b commit 6646af0

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ private Metadata updateSingleProject(Function<ProjectMetadata, ProjectMetadata>
397397
reservedStateMetadata
398398
);
399399
} else {
400-
throw new UnsupportedOperationException("There are multiple projects " + projectMetadata.keySet());
400+
throw new MultiProjectPendingException("There are multiple projects " + projectMetadata.keySet());
401401
}
402402
}
403403

@@ -1310,7 +1310,7 @@ private ProjectMetadata.Builder getSingleProject() {
13101310
if (projectMetadata.isEmpty()) {
13111311
createDefaultProject();
13121312
} else if (projectMetadata.size() != 1) {
1313-
throw new UnsupportedOperationException("There are multiple projects " + projectMetadata.keySet());
1313+
throw new MultiProjectPendingException("There are multiple projects " + projectMetadata.keySet());
13141314
}
13151315
return projectMetadata.values().iterator().next();
13161316
}

server/src/main/java/org/elasticsearch/cluster/routing/GlobalRoutingTable.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.elasticsearch.cluster.DiffableUtils;
1616
import org.elasticsearch.cluster.DiffableUtils.KeySerializer;
1717
import org.elasticsearch.cluster.metadata.Metadata;
18+
import org.elasticsearch.cluster.metadata.Metadata.MultiProjectPendingException;
1819
import org.elasticsearch.cluster.metadata.ProjectId;
1920
import org.elasticsearch.cluster.metadata.ProjectMetadata;
2021
import org.elasticsearch.common.collect.ImmutableOpenMap;
@@ -134,7 +135,7 @@ public RoutingTable getRoutingTable() {
134135
return switch (routingTables.size()) {
135136
case 0 -> RoutingTable.EMPTY_ROUTING_TABLE;
136137
case 1 -> routingTables.values().iterator().next();
137-
default -> throw new IllegalStateException("There are multiple project routing tables [" + routingTables.keySet() + "]");
138+
default -> throw new MultiProjectPendingException("There are multiple project routing tables [" + routingTables.keySet() + "]");
138139
};
139140
}
140141

server/src/main/java/org/elasticsearch/cluster/service/ClusterApplierService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ private static void callClusterStateListener(
594594
listener.clusterChanged(clusterChangedEvent);
595595
}
596596
} catch (Metadata.MultiProjectPendingException e) {
597-
// don't warn, this fills the logs
597+
// don't warn, this fills the logs and also slow down applier thread in CI which could cause unrelated failures
598598
logger.trace("ClusterStateListener not multi-project compatible", e);
599599
} catch (Exception ex) {
600600
logger.warn("failed to notify ClusterStateListener", ex);

0 commit comments

Comments
 (0)