in services/library/src/main/java/com/google/cloud/pso/bq_snapshot_manager/functions/f02_configurator/Configurator.java [255:325]
public Tuple<BackupPolicyAndState, String> getBackupPolicyAndState(ConfiguratorRequest request) throws IOException {
// Check if the table has a back policy attached to it
BackupPolicyAndState attachedBackupPolicyAndState = backupPolicyService.getBackupPolicyAndStateForTable(
request.getTargetTable()
);
// if there is manually attached backup policy (e.g. by the table designer) then use it.
if (attachedBackupPolicyAndState != null && attachedBackupPolicyAndState.getConfigSource().equals(BackupConfigSource.MANUAL)) {
logger.logInfoWithTracker(request.isDryRun(),
request.getTrackingId(),
request.getTargetTable(),
String.format("Attached backup policy found for table %s", request.getTargetTable())
);
return Tuple.of(attachedBackupPolicyAndState,
attachedBackupPolicyAndState.getState() != null?
"Manually attached policy with backup state from previous runs":
"Manually attached policy without backup state from previous runs"
);
} else {
logger.logInfoWithTracker(request.isDryRun(),
request.getTrackingId(),
request.getTargetTable(),
String.format("No 'config_source=MANUAL' backup policy found for table %s. Will search for a fallback policy.", request.getTargetTable())
);
// find the most granular fallback policy table > dataset > project
Tuple<String, BackupPolicy> fallbackBackupPolicyTuple = findFallbackBackupPolicy(
fallbackBackupPolicy,
request.getTargetTable(),
request.getRunId()
);
BackupPolicy fallbackPolicy = fallbackBackupPolicyTuple.y();
logger.logInfoWithTracker(request.isDryRun(),
request.getTrackingId(),
request.getTargetTable(),
String.format("Will use a %s-level fallback policy", fallbackBackupPolicyTuple.x())
);
// if there is a system attached policy, then only use the last_xyz fields from it and use the latest fallback policy
// the last_backup_at needs to be checked to determine if we should take a backup in this run
// the last_xyz_uri fields need to be propagated to the Tagger service so that they are not lost on each run
if (attachedBackupPolicyAndState != null && attachedBackupPolicyAndState.getConfigSource().equals(BackupConfigSource.SYSTEM)) {
return Tuple.of(
new BackupPolicyAndState(
fallbackPolicy,
new BackupState(attachedBackupPolicyAndState.getLastBackupAt(),
attachedBackupPolicyAndState.getLastBqSnapshotStorageUri(),
attachedBackupPolicyAndState.getLastGcsSnapshotStorageUri())
),
String.format(
"System attached fallback policy on level '%s' with backup state from previous runs",
fallbackBackupPolicyTuple.x())
);
} else {
// if there is no attached policy, use fallback one
return Tuple.of(
new BackupPolicyAndState(
fallbackPolicy,
null),
String.format(
"System attached fallback policy on level '%s' without backup state from previous runs",
fallbackBackupPolicyTuple.x()));
}
}
}