private void createTables()

in vandelay-bigtable/src/main/java/com/spotify/api/vandelay/bigtable/imports/VandelayBigTableImporter.java [225:296]


  private void createTables(
      final VandelayBigTableImportConfiguration importConfiguration,
      final BigtableTableAdminClient tableAdminClient) {
    final VandelayBigTableGCPConfiguration gcpConfiguration =
        importConfiguration.getGcpConfiguration();
    final VandelayBigTableTableConfiguration tableConfiguration =
        gcpConfiguration.getTableConfiguration();
    for (final var table : tableConfiguration.getTables().entrySet()) {
      if (tableAdminClient.exists(table.getKey())) {
        logger.info("Table " + table.getKey() + " already exists");
        continue;
      }

      logger.info("Creating table request for table " + table.getKey());
      final CreateTableRequest createTableRequest = CreateTableRequest.of(table.getKey());
      for (final var columnFamily : table.getValue().getColumnFamilies()) {
        final Optional<GCRule> gcRule =
            new BigTableGCRuleMapperFunction().convertFrom(columnFamily.getGcRule());
        if (gcRule.isPresent()) {
          createTableRequest.addFamily(columnFamily.getId(), gcRule.get());
        } else {
          createTableRequest.addFamily(columnFamily.getId());
        }
      }

      logger.info("Performing create table call");
      tableAdminClient.createTable(createTableRequest);
      if (tableConfiguration.getTablePolicies().containsKey(table.getKey())) {
        logger.info("Table " + table.getKey() + " has table IAM policies");
        final Optional<Policy> iamPolicy =
            new IAMPolicyMapperFunction()
                .convertFrom(tableConfiguration.getTablePolicies().get(table.getKey()));
        logger.info("Setting IAM policy on table " + table.getKey());
        iamPolicy.ifPresent(policy -> tableAdminClient.setIamPolicy(table.getKey(), policy));
      }
    }

    for (final var tableBackups : tableConfiguration.getTableBackups().entrySet()) {
      for (final var backup : tableBackups.getValue()) {
        final Optional<Backup> savedBackup = new BigTableBackupMapperFunction().convertFrom(backup);
        if (savedBackup.isPresent()) {
          logger.info(
              "Creating backup of cluster "
                  + tableBackups.getKey()
                  + " with backup id "
                  + backup.getId());
          logger.info("Backup source table id is " + savedBackup.get().getSourceTableId());
          final CreateBackupRequest createBackupRequest =
              CreateBackupRequest.of(tableBackups.getKey(), backup.getId())
                  .setExpireTime(savedBackup.get().getExpireTime())
                  .setSourceTableId(savedBackup.get().getSourceTableId());
          tableAdminClient.createBackup(createBackupRequest);
        }
      }
    }

    for (final var tableBackupPolicies : tableConfiguration.getTableBackupPolicies().entrySet()) {
      for (final var backupPolicies : tableBackupPolicies.getValue().entrySet()) {
        for (final var backupPolicy : backupPolicies.getValue()) {
          final Optional<Policy> iamPolicy =
              new IAMPolicyMapperFunction().convertFrom(backupPolicy);
          logger.info(
              "Setting IAM policy on backup cluster id " + tableBackupPolicies.getKey(),
              backupPolicies.getKey());
          iamPolicy.ifPresent(
              policy ->
                  tableAdminClient.setBackupIamPolicy(
                      tableBackupPolicies.getKey(), backupPolicies.getKey(), policy));
        }
      }
    }
  }