public Tuple getBackupPolicyAndState()

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()));
            }
        }
    }