public Status exportTo()

in vandelay-bigtable/src/main/java/com/spotify/api/vandelay/bigtable/exports/VandelayBigTableExporter.java [79:155]


  public Status exportTo(final VandelayBigTableExportConfiguration exportConfiguration) {

    try {
      final String instanceId = exportConfiguration.getInstanceId();
      final String projectId = exportConfiguration.getProjectId();
      logger.info("Attempting export for project id " + projectId + " instance id " + instanceId);

      logger.info("Getting clients for instance");
      final BigtableInstanceAdminClient instanceAdminClient =
          vandelayBigTableClient.getInstanceAdminClient(exportConfiguration);
      final BigtableTableAdminClient tableAdminClient =
          vandelayBigTableClient.getTableAdminClient(exportConfiguration);
      final BigtableDataClient dataClient =
          vandelayBigTableClient.getDataClient(exportConfiguration);
      logger.info("All clients retrieved for instance");

      final VandelayBigTableExportEvent instanceInformation =
          getInstanceInformation(
              instanceId, exportConfiguration, instanceAdminClient, tableAdminClient);
      logger.info("Notifying listeners of instance information event");
      notifyListeners(instanceInformation);

      logger.info("Beginning export for instance: " + instanceId);

      final Consumer<String> performExport =
          (final String tableName) ->
              dataClient
                  .readRows(Query.create(tableName))
                  .forEach(
                      row -> {
                        final List<VandelayBigTableCell> cells =
                            row.getCells().stream()
                                .map(
                                    x ->
                                        new VandelayBigTableCell(
                                            x.getFamily(),
                                            new Base64EncodedValue(
                                                "qualifier", x.getQualifier().toByteArray()),
                                            x.getTimestamp(),
                                            new Base64EncodedValue(
                                                "value", x.getValue().toByteArray()),
                                            x.getLabels()))
                                .toList();
                        notifyListeners(
                            new VandelayBigTableExportEvent(
                                new VandelayBigTableRow(
                                    tableName,
                                    row.getKey().toString(StandardCharsets.UTF_8),
                                    cells)));
                      });
      if (exportConfiguration.getParallelExport()) {
        logger.info("Beginning parallel export of rows");
        tableAdminClient.listTables().stream().parallel().forEach(performExport);
      } else {
        logger.info("Beginning export of rows");
        tableAdminClient.listTables().forEach(performExport);
      }

      logger.info("Finished exporting rows for instance: " + instanceId);
      notifyListeners(
          new VandelayBigTableExportEvent(new VandelayBigTableRowsExportFinishedEvent(instanceId)));

      logger.info("Should delete instance on export? " + exportConfiguration.getDeleteOnExport());
      if (exportConfiguration.getDeleteOnExport()) {
        deleteInstance(instanceId, instanceAdminClient, tableAdminClient);
        notifyListeners(
            new VandelayBigTableExportEvent(
                new VandelayBigTableDeleteInstanceEvent(
                    exportConfiguration.getProjectId(), instanceId)));
      }

      return Status.success();
    } catch (IOException ex) {
      logger.error("IOException occurred exporting rows", ex);
      return Status.fail(ex.getMessage(), ex);
    }
  }