Skip to content

Commit 70a7276

Browse files
Avoid expensive loop in indicesDeletedFromClusterState() when possible (#88986)
The loop over all indices here gets very expensive for large states, we can avoid it often when metadata changes but not the indices maps.
1 parent e64eb8c commit 70a7276

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

server/src/main/java/org/elasticsearch/cluster/ClusterChangedEvent.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -247,13 +247,15 @@ private List<Index> indicesDeletedFromClusterState() {
247247
final Metadata previousMetadata = previousState.metadata();
248248
final Metadata currentMetadata = state.metadata();
249249

250-
for (IndexMetadata index : previousMetadata.indices().values()) {
251-
IndexMetadata current = currentMetadata.index(index.getIndex());
252-
if (current == null) {
253-
if (deleted == null) {
254-
deleted = new HashSet<>();
250+
if (currentMetadata.indices() != previousMetadata.indices()) {
251+
for (IndexMetadata index : previousMetadata.indices().values()) {
252+
IndexMetadata current = currentMetadata.index(index.getIndex());
253+
if (current == null) {
254+
if (deleted == null) {
255+
deleted = new HashSet<>();
256+
}
257+
deleted.add(index.getIndex());
255258
}
256-
deleted.add(index.getIndex());
257259
}
258260
}
259261

0 commit comments

Comments
 (0)