Skip to content

Commit b01f80b

Browse files
Fix Leaking Listener in BlobStoreRepository (#69110) (#69559)
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 f2f432d commit b01f80b

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
@@ -1371,7 +1371,7 @@ private void initializeRepoGenerationTracking(ActionListener<RepositoryData> lis
13711371
}
13721372
existingListener.onFailure(e);
13731373
};
1374-
threadPool.generic().execute(() -> doGetRepositoryData(
1374+
threadPool.generic().execute(ActionRunnable.wrap(
13751375
ActionListener.wrap(repoData -> clusterService.submitStateUpdateTask(
13761376
"set safe repository generation [" + metadata.name() + "][" + repoData + "]",
13771377
new ClusterStateUpdateTask() {
@@ -1410,7 +1410,7 @@ public void clusterStateProcessed(String source, ClusterState oldState, ClusterS
14101410
existingListener.onResponse(repoData);
14111411
});
14121412
}
1413-
}), onFailure)));
1413+
}), onFailure), this::doGetRepositoryData));
14141414
} else {
14151415
logger.trace("[{}] waiting for existing initialization of repository metadata generation in cluster state",
14161416
metadata.name());
@@ -1432,9 +1432,9 @@ private void doGetRepositoryData(ActionListener<RepositoryData> listener) {
14321432
final long generation;
14331433
try {
14341434
generation = latestIndexBlobId();
1435-
} catch (IOException ioe) {
1435+
} catch (Exception e) {
14361436
listener.onFailure(
1437-
new RepositoryException(metadata.name(), "Could not determine repository generation from root blobs", ioe));
1437+
new RepositoryException(metadata.name(), "Could not determine repository generation from root blobs", e));
14381438
return;
14391439
}
14401440
genToLoad = latestKnownRepoGen.updateAndGet(known -> Math.max(known, generation));

0 commit comments

Comments
 (0)