in vandelay-bigtable/src/main/java/com/spotify/api/vandelay/bigtable/exports/VandelayBigTableExporter.java [240:279]
private void getBigTableBackupConfiguration(
final String instanceId,
final BigtableInstanceAdminClient instanceAdminClient,
final BigtableTableAdminClient tableAdminClient,
final Builder builder) {
final List<Cluster> instanceClusters = instanceAdminClient.listClusters(instanceId);
if (!instanceClusters.isEmpty()) {
final Map<String, List<BigTableBackup>> tableBackupsMap = new HashMap<>();
final Map<String, Map<String, List<IAMPolicy>>> tablePoliciesMap = new HashMap<>();
for (final var cluster : instanceClusters) {
final List<BigTableBackup> tableBackups = new ArrayList<>();
final Map<String, List<IAMPolicy>> tablePolicies = new HashMap<>();
for (final var backupId : tableAdminClient.listBackups(cluster.getId())) {
tableBackups.add(
new BigTableBackupMapperFunction()
.convertTo(tableAdminClient.getBackup(cluster.getId(), backupId))
.orElse(null));
final List<IAMPolicy> policies = tablePolicies.getOrDefault(backupId, new ArrayList<>());
policies.add(
new IAMPolicyMapperFunction()
.convertTo(tableAdminClient.getBackupIamPolicy(cluster.getId(), backupId))
.orElse(null));
tablePolicies.put(backupId, policies);
}
tableBackupsMap.put(
cluster.getId(), tableBackups.stream().filter(Objects::nonNull).toList());
tablePolicies.values().removeIf(Objects::isNull);
tablePoliciesMap.put(cluster.getId(), tablePolicies);
}
builder.setTableBackup(tableBackupsMap);
logger.info("Set " + tableBackupsMap.size() + " table backups");
builder.setTableBackupPolicies(tablePoliciesMap);
logger.info("Set " + tablePoliciesMap.size() + " table backup policies");
} else {
logger.info("No clusters found");
}
}