in teamcity-s3-sdk/src/main/java/jetbrains/buildServer/artifacts/s3/publish/presigned/upload/S3SignedUploadManager.java [90:127]
private Map<String, PresignedUrlDto> fetchPresignedUrlsFromProvider() {
try {
return NamedThreadFactory.executeWithNewThreadName("Fetching presigned urls for " + this, () -> {
LOGGER.debug(() -> "Fetching presigned urls for manager " + this + " started...");
myFetchLock.lock();
try {
return CollectionsUtil.split(myS3ObjectKeys, (myS3ObjectKeys.size() / myMaxUrlChunkSize) + 1)
.stream()
.map(keys -> {
LOGGER.debug(() -> "Fetching chunk " + keys + " of size " + keys.size() + " of total " + myS3ObjectKeys.size() +
" started");
final long urlRequestStart = System.nanoTime();
final Collection<PresignedUrlDto> urls = myRetrier.retryableMapper(
(List<String> k) -> myPresignedUrlsProviderClient.getRegularPresignedUrls(k,
myPrecalculatedDigests))
.apply(keys);
final long urlRequestEnd = System.nanoTime();
final long avgFetchTime = (urlRequestEnd - urlRequestStart) / keys.size();
for (String key : keys) {
fetchTimings.put(key, avgFetchTime);
}
LOGGER.debug(() -> "Fetching chunk " + keys + " of size " + keys.size() + " of total " + myS3ObjectKeys.size() +
" finished");
return urls;
})
.flatMap(presignedUrlDto -> presignedUrlDto.stream())
.collect(Collectors.toMap(o -> o.getObjectKey(), presignedUrlDto -> presignedUrlDto));
} finally {
myFetchLock.unlock();
LOGGER.debug(() -> "Fetching presigned urls for manager " + this + " finished.");
}
});
} catch (Exception e) {
LOGGER.info("Fetching presigned urls for manager " + this + " failed.", e);
ExceptionUtil.rethrowAsRuntimeException(e);
return null;
}
}