in priam/src/main/java/com/netflix/priam/backupv2/BackupVerificationTask.java [70:117]
public void execute() throws Exception {
// Ensure that backup version 2.0 is actually enabled.
if (backupRestoreConfig.getSnapshotMetaServiceCronExpression().equals("-1")) {
logger.info("Skipping backup verification. V2 backups are not enabled.");
return;
}
if (instanceState.getRestoreStatus() != null
&& instanceState.getRestoreStatus().getStatus() != null
&& instanceState.getRestoreStatus().getStatus() == Status.STARTED) {
logger.info("Skipping backup verification. Priam is in restore mode.");
return;
}
// Validate the backup done in last x hours.
Instant now = DateUtil.getInstant();
Instant slo =
now.minus(backupRestoreConfig.getBackupVerificationSLOInHours(), ChronoUnit.HOURS);
DateRange dateRange = new DateRange(slo, now);
List<BackupMetadata> verifiedBackups =
backupVerification.verifyBackupsInRange(
BackupVersion.SNAPSHOT_META_SERVICE, dateRange);
verifiedBackups
.stream()
.filter(result -> result.getLastValidated().toInstant().isAfter(now))
.forEach(
result -> {
Path snapshotLocation = Paths.get(result.getSnapshotLocation());
String snapshotKey =
snapshotLocation
.subpath(1, snapshotLocation.getNameCount())
.toString();
logger.info(
"Sending {} message for backup: {}",
AbstractBackupPath.BackupFileType.SNAPSHOT_VERIFIED,
snapshotKey);
backupNotificationMgr.notify(
snapshotKey, result.getStart().toInstant());
});
if (verifiedBackups.isEmpty()) {
logger.error(
"Not able to find any snapshot which is valid in our SLO window: {} hours",
backupRestoreConfig.getBackupVerificationSLOInHours());
backupMetrics.incrementBackupVerificationFailure();
}
}