public boolean tryScanArtifacts()

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


  public boolean tryScanArtifacts(@Nullable String projectExternalId, @NotNull SUser user, boolean scanBuilds, boolean calculateSizes, boolean skipErrors) {
    if (isScanning.compareAndSet(false, true)) {
      LOG.debug("Starting scan for orphaned artifacts");
      scannedPaths.reset();
      lastScanError = null;
      try {
        myExecutorService.submit(() -> {
          final Disposable patchedThreadName = NamedThreadFactory.patchThreadName(projectExternalId + "-orphans-scan");
          try {
            final OrphanedArtifacts artifacts = scanArtifacts(projectExternalId, user, scanBuilds, calculateSizes);
            if (artifacts != null) {
              final String timestamp = DateTimeFormatter.ISO_INSTANT.format(Instant.now());
              final String formattedTimestamp = StringUtils.replaceNonAlphaNumericChars(timestamp, '_');
              final Path filePath = myLogsPath.toPath().resolve(Paths.get(FILE_PREFIX + formattedTimestamp));
              final ObjectMapper objectMapper = new ObjectMapper();

              LOG.debug("Scan finished. Writing results to " + filePath);
              if (skipErrors) {
                Files.write(filePath, objectMapper.writeValueAsBytes(artifacts.getOrphanedPaths()));
              } else {
                Files.write(filePath, objectMapper.writeValueAsBytes(artifacts));
              }
            }
          } catch (Throwable e) {
            LOG.warnAndDebugDetails("Got an error while writing orphaned artifacts to a file", e);
            lastScanError = e.getMessage();
          } finally {
            lastScanTimestamp = Instant.now();
            isScanning.set(false);
            patchedThreadName.dispose();
          }
        });
        return true;
      } catch (RejectedExecutionException e) {
        LOG.warnAndDebugDetails("Cannot scan for orphaned artifacts", e);
        lastScanError = e.getMessage();
        lastScanTimestamp = Instant.now();
        isScanning.set(false);
        return false;
      }
    } else {
      return false;
    }
  }