Skip to content

Commit c7dca01

Browse files
Fix Leaking Listener in BlobStoreRepository (#69110)
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 9545daf commit c7dca01

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
@@ -1416,7 +1416,7 @@ private void initializeRepoGenerationTracking(ActionListener<RepositoryData> lis
14161416
}
14171417
existingListener.onFailure(e);
14181418
};
1419-
threadPool.generic().execute(() -> doGetRepositoryData(
1419+
threadPool.generic().execute(ActionRunnable.wrap(
14201420
ActionListener.wrap(repoData -> clusterService.submitStateUpdateTask(
14211421
"set initial safe repository generation [" + metadata.name() + "][" + repoData.getGenId() + "]",
14221422
new ClusterStateUpdateTask() {
@@ -1459,7 +1459,7 @@ public void clusterStateProcessed(String source, ClusterState oldState, ClusterS
14591459
, metadata.name(), repoData.getGenId());
14601460
});
14611461
}
1462-
}), onFailure)));
1462+
}), onFailure), this::doGetRepositoryData));
14631463
} else {
14641464
logger.trace("[{}] waiting for existing initialization of repository metadata generation in cluster state",
14651465
metadata.name());
@@ -1489,9 +1489,9 @@ private void doGetRepositoryData(ActionListener<RepositoryData> listener) {
14891489
final long generation;
14901490
try {
14911491
generation = latestIndexBlobId();
1492-
} catch (IOException ioe) {
1492+
} catch (Exception e) {
14931493
listener.onFailure(
1494-
new RepositoryException(metadata.name(), "Could not determine repository generation from root blobs", ioe));
1494+
new RepositoryException(metadata.name(), "Could not determine repository generation from root blobs", e));
14951495
return;
14961496
}
14971497
genToLoad = latestKnownRepoGen.updateAndGet(known -> Math.max(known, generation));

0 commit comments

Comments
 (0)