public List getLatestBackupMetadata()

in priam/src/main/java/com/netflix/priam/backup/BackupStatusMgr.java [189:228]


    public List<BackupMetadata> getLatestBackupMetadata(
            BackupVersion backupVersion, DateUtil.DateRange dateRange) {
        Instant startDay = dateRange.getStartTime().truncatedTo(ChronoUnit.DAYS);
        Instant endDay = dateRange.getEndTime().truncatedTo(ChronoUnit.DAYS);

        List<BackupMetadata> allBackups = new ArrayList<>();
        Instant previousDay = endDay;
        do {
            // We need to find the latest backupmetadata in this date range.
            logger.info(
                    "Will try to find snapshot for : {}",
                    DateUtil.formatInstant(DateUtil.yyyyMMddHHmm, previousDay));
            List<BackupMetadata> backupsForDate = locate(new Date(previousDay.toEpochMilli()));
            if (backupsForDate != null) allBackups.addAll(backupsForDate);
            previousDay = previousDay.minus(1, ChronoUnit.DAYS);
        } while (!previousDay.isBefore(startDay));

        // Return all the backups which are FINISHED and were "started" in the dateRange provided.
        // Do not compare the end time of snapshot as it may take random amount of time to finish
        // the snapshot.
        return allBackups
                .stream()
                .filter(Objects::nonNull)
                .filter(backupMetadata -> backupMetadata.getStatus() == Status.FINISHED)
                .filter(backupMetadata -> backupMetadata.getBackupVersion().equals(backupVersion))
                .filter(
                        backupMetadata ->
                                backupMetadata
                                                        .getStart()
                                                        .toInstant()
                                                        .compareTo(dateRange.getStartTime())
                                                >= 0
                                        && backupMetadata
                                                        .getStart()
                                                        .toInstant()
                                                        .compareTo(dateRange.getEndTime())
                                                <= 0)
                .sorted(Comparator.comparing(BackupMetadata::getStart).reversed())
                .collect(Collectors.toList());
    }