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