private Collection processStorage()

in s3-artifact-storage-server/src/main/java/jetbrains/buildServer/artifacts/s3/orphans/S3OrphanedArtifactsScanner.java [186:249]


  private Collection<OrphanedArtifact> processStorage(boolean scanBuilds, boolean calculateSizes, SProject project, SProjectFeatureDescriptor storage, ArrayList<String> errors) {
    Set<OrphanedArtifact> orphanedPaths = new HashSet<>();
    final Map<String, String> parameters = storage.getParameters();
    final String storageType = parameters.get(S3Constants.TEAMCITY_STORAGE_TYPE_KEY);
    if (StringUtil.areEqual(storageType, S3_STORAGE_TYPE) || StringUtil.areEqual(storageType, S3_COMPATIBLE_STORAGE_TYPE)) {
      Set<String> orphans = new HashSet<>();
      String storageName = parameters.get(ArtifactStorageSettings.TEAMCITY_STORAGE_NAME_KEY);
      storageName = storageName != null ? storageName : storage.getId();
      final String bucketName = S3Util.getBucketName(parameters);

      if (bucketName == null) {
        return orphanedPaths;
      }

      try {
        String basePrefix = parameters.get(S3_PATH_PREFIX_SETTING);

        if (basePrefix != null && !basePrefix.endsWith("/")) {
          basePrefix += "/";
        }

        Set<ProjectEntry> outdatedEntries = scanBasePath(project.getProjectId(), basePrefix, bucketName, parameters);

        for (ProjectEntry projectEntry : outdatedEntries) {
          if (projectEntry.isOutdated()) {
            String path = projectEntry.getPath();
            LOG.debug("Found an outdated project at " + path);
            orphans.add(path);
            continue;
          }

          for (BuildTypeEntry buildTypeEntry : projectEntry.getBuildTypeEntries()) {
            if (buildTypeEntry.isOutdated()) {
              String path = buildTypeEntry.getPath();
              LOG.debug("Found an outdated build type at " + path);
              orphans.add(path);
              continue;
            }

            if (!scanBuilds) {
              continue;
            }

            for (BuildEntry buildEntry : buildTypeEntry.getBuildEntries()) {
              orphans.add(buildEntry.getPath());
            }
          }
        }

        LOG.debug(String.format("Found %d orphaned paths in storage '%s'", orphans.size(), storageName));
        for (String orphan : orphans) {
          String size = null;
          if (calculateSizes) {
            size = StringUtil.formatFileSize(calculateSize(parameters, bucketName, project.getProjectId(), orphan));
          }
          orphanedPaths.add(new OrphanedArtifact(bucketName, orphan, size));
        }
      } catch (Exception exception) {
        errors.add("Caught error while processing storage: " + storageName + " in project " + project.getExternalId() + ": " + exception.getMessage());
      }
    }

    return orphanedPaths;
  }