void deleteOldArtifacts() { ServerConfig serverConfig = goConfigService.serverConfig(); Double requiredSpaceInGb = serverConfig.getPurgeUpto(); if (serverConfig.isArtifactPurgingAllowed()) { double requiredSpace = requiredSpaceInGb * GoConstants.GIGA_BYTE; LOGGER.info("Clearing old artifacts as the disk space is low. Current space: '{}'. Need to clear till we hit: '{}'.", availableSpace(), requiredSpace); List<Stage> stages; int numberOfStagesPurged = 0; do { configDbStateRepository.flushConfigState(); stages = stageService.oldestStagesWithDeletableArtifacts(); for (Stage stage : stages) { if (availableSpace() > requiredSpace) { break; } numberOfStagesPurged++; artifactService.purgeArtifactsForStage(stage); } } while ((availableSpace() < requiredSpace) && !stages.isEmpty()); if (availableSpace() < requiredSpace) { LOGGER.warn("Ran out of stages to clear artifacts from but the disk space is still low"); } LOGGER.info("Finished clearing old artifacts. Deleted artifacts for '{}' stages. Current space: '{}'", numberOfStagesPurged, availableSpace()); } }
public ArtifactsDiskCleaner(SystemEnvironment systemEnvironment, GoConfigService goConfigService, final SystemDiskSpaceChecker diskSpaceChecker, ArtifactsService artifactService, StageService stageService, ConfigDbStateRepository configDbStateRepository) { super(null, systemEnvironment, goConfigService.artifactsDir(), goConfigService, ArtifactsDiskSpaceFullChecker.ARTIFACTS_DISK_FULL_ID, diskSpaceChecker); this.artifactService = artifactService; this.stageService = stageService; this.configDbStateRepository = configDbStateRepository; cleaner = new Thread(() -> { try { while (true) { synchronized (triggerCleanup) { triggerCleanup.wait(); } deleteOldArtifacts(); } } catch (Exception e) { LOGGER.error("Artifact disk cleanup task aborted. Error encountered: '{}'", e.getMessage());//logging not tested throw new RuntimeException(e); } }); cleaner.start(); }
public void initialize() { databaseDiskSpaceFullChecker = new DatabaseDiskSpaceFullChecker(emailSender, systemEnvironment, goConfigService, systemDiskSpaceChecker); artifactsDiskSpaceFullChecker = new ArtifactsDiskSpaceFullChecker(systemEnvironment, emailSender, goConfigService, systemDiskSpaceChecker); checkers = new DiskSpaceChecker[]{ artifactsDiskSpaceFullChecker, new ArtifactsDiskSpaceWarningChecker(systemEnvironment, emailSender, goConfigService, systemDiskSpaceChecker, serverHealthService), databaseDiskSpaceFullChecker, new DatabaseDiskSpaceWarningChecker(emailSender, systemEnvironment, goConfigService, systemDiskSpaceChecker, serverHealthService), new ArtifactsDiskCleaner(systemEnvironment, goConfigService, systemDiskSpaceChecker, artifactsService, stageService, configDbStateRepository)}; }