Skip to content

Commit de990f6

Browse files
Fix Leaking Listener in BlobStoreRepository (#69110) (#69557)
We have no guarantees that implementations won't throw a non-IO exception in this spot so we have to make sure to resolve the listener on any exception to not leak it.
1 parent b70de54 commit de990f6

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

server/src/main/java/org/elasticsearch/repositories/blobstore/BlobStoreRepository.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,7 +1432,7 @@ private void initializeRepoGenerationTracking(ActionListener<RepositoryData> lis
14321432
}
14331433
existingListener.onFailure(e);
14341434
};
1435-
threadPool.generic().execute(() -> doGetRepositoryData(
1435+
threadPool.generic().execute(ActionRunnable.wrap(
14361436
ActionListener.wrap(repoData -> clusterService.submitStateUpdateTask(
14371437
"set initial safe repository generation [" + metadata.name() + "][" + repoData.getGenId() + "]",
14381438
new ClusterStateUpdateTask() {
@@ -1475,7 +1475,7 @@ public void clusterStateProcessed(String source, ClusterState oldState, ClusterS
14751475
, metadata.name(), repoData.getGenId());
14761476
});
14771477
}
1478-
}), onFailure)));
1478+
}), onFailure), this::doGetRepositoryData));
14791479
} else {
14801480
logger.trace("[{}] waiting for existing initialization of repository metadata generation in cluster state",
14811481
metadata.name());
@@ -1505,9 +1505,9 @@ private void doGetRepositoryData(ActionListener<RepositoryData> listener) {
15051505
final long generation;
15061506
try {
15071507
generation = latestIndexBlobId();
1508-
} catch (IOException ioe) {
1508+
} catch (Exception e) {
15091509
listener.onFailure(
1510-
new RepositoryException(metadata.name(), "Could not determine repository generation from root blobs", ioe));
1510+
new RepositoryException(metadata.name(), "Could not determine repository generation from root blobs", e));
15111511
return;
15121512
}
15131513
genToLoad = latestKnownRepoGen.updateAndGet(known -> Math.max(known, generation));

0 commit comments

Comments
 (0)