Skip to content

Commit 6381ce0

Browse files
Fix Leaking Listener in BlobStoreRepository
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 2c73387 commit 6381ce0

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
@@ -1412,7 +1412,7 @@ private void initializeRepoGenerationTracking(ActionListener<RepositoryData> lis
14121412
}
14131413
existingListener.onFailure(e);
14141414
};
1415-
threadPool.generic().execute(() -> doGetRepositoryData(
1415+
threadPool.generic().execute(ActionRunnable.wrap(
14161416
ActionListener.wrap(repoData -> clusterService.submitStateUpdateTask(
14171417
"set initial safe repository generation [" + metadata.name() + "][" + repoData.getGenId() + "]",
14181418
new ClusterStateUpdateTask() {
@@ -1455,7 +1455,7 @@ public void clusterStateProcessed(String source, ClusterState oldState, ClusterS
14551455
, metadata.name(), repoData.getGenId());
14561456
});
14571457
}
1458-
}), onFailure)));
1458+
}), onFailure), this::doGetRepositoryData));
14591459
} else {
14601460
logger.trace("[{}] waiting for existing initialization of repository metadata generation in cluster state",
14611461
metadata.name());
@@ -1485,9 +1485,9 @@ private void doGetRepositoryData(ActionListener<RepositoryData> listener) {
14851485
final long generation;
14861486
try {
14871487
generation = latestIndexBlobId();
1488-
} catch (IOException ioe) {
1488+
} catch (Exception e) {
14891489
listener.onFailure(
1490-
new RepositoryException(metadata.name(), "Could not determine repository generation from root blobs", ioe));
1490+
new RepositoryException(metadata.name(), "Could not determine repository generation from root blobs", e));
14911491
return;
14921492
}
14931493
genToLoad = latestKnownRepoGen.updateAndGet(known -> Math.max(known, generation));

0 commit comments

Comments
 (0)