private Map fetchPresignedUrlsFromProvider()

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;
    }
  }