public int publishFilesWithDigests()

in s3-artifact-storage-agent/src/main/java/jetbrains/buildServer/artifacts/s3/publish/S3ArtifactsPublisher.java [111:165]


  public int publishFilesWithDigests(@NotNull Map<File, String> map, @NotNull FlowLogger logger, @Nullable Consumer<ArtifactDigestInfo> digestConsumer)
    throws ArtifactPublishingFailedException {
    final Map<File, String> filteredMap = CollectionsUtil.filterMapByValues(map, s -> myHelper.isEnabled(this, s));

    if (!filteredMap.isEmpty()) {
      final AgentRunningBuild build = myTracker.getCurrentBuild();
      final S3FileUploader fileUploader = getFileUploader(build, logger);
      Collection<UploadStatistics> statistics;

      try {
        statistics = fileUploader.upload(filteredMap, () -> {
          if (isPublishingStopped(build) && build.getInterruptReason() != null) {
            return build.getInterruptReason().getUserDescription();
          } else {
            return null;
          }
        }, fileUploadInfo -> {
          myArtifacts.add(ArtifactDataInstance.create(fileUploadInfo.getArtifactPath(), fileUploadInfo.getSize()));
          if (digestConsumer != null) {
            File uploadFile = new File(fileUploadInfo.getAbsolutePath());
            try {
              digestConsumer.accept(new ArtifactDigestInfo(uploadFile, filteredMap.get(uploadFile), fileUploadInfo.getDigest()));
            } catch (Throwable t) {
              LOG.warn("Failed to send artifact upload information to digest consumer", t);
            }
          }
        });
      } catch (RecoverableException e) {
        throw new ArtifactPublishingFailedException(e.getMessage(), e.isRecoverable(), e);
      }

      publishArtifactsList(build);

      if (statistics != null && !statistics.isEmpty()) {
        final StatisticsLogger.SummaryStatistics stats = getSummaryStatistics(statistics);
        myLensIntegrationService.generateUploadEvents(build, statistics, stats.getTotalDuration(), teamcityConnectionConfiguration(build));

        if (statistics.size() > MAX_UPLOAD_LOG_MESSAGES) {
          logger.debug(
            String.format("In total %d files uploaded. Summary upload time: %s. Average upload time per file: %s. Number of errors: %d. Logging information for the first %d files",
                          stats.getFileCount(),
                          formatDuration(stats.getTotalDuration()),
                          formatDuration(stats.getAverageDuration()),
                          stats.getErrors().size(),
                          MAX_UPLOAD_LOG_MESSAGES
            ));
          logStatisticsForEach(logger, new ArrayList<>(statistics).subList(0, MAX_UPLOAD_LOG_MESSAGES));
        } else {
          logStatisticsForEach(logger, statistics);
        }
      }
    }

    return filteredMap.size();
  }