use of com.amazonaws.services.qldb.model.DescribeJournalS3ExportResult in project amazon-qldb-dmv-sample-java by aws-samples.
the class ExportJournal method waitForExportToComplete.
/**
* Wait for the JournalS3Export to complete.
*
* @param ledgerName
* Name of the ledger.
* @param exportId
* Optional KMS ARN used for S3-KMS encryption.
* @param awaitTimeoutMs
* Milliseconds to wait for export to complete.
* @return {@link DescribeJournalS3ExportResult} from QLDB.
* @throws InterruptedException if thread is interrupted while busy waiting for JournalS3Export to complete.
*/
public static DescribeJournalS3ExportResult waitForExportToComplete(String ledgerName, String exportId, long awaitTimeoutMs) throws InterruptedException {
log.info("Waiting for JournalS3Export for " + exportId + "to complete.");
int count = 0;
long maxRetryCount = (awaitTimeoutMs / EXPORT_COMPLETION_POLL_PERIOD_MS) + 1;
while (count < maxRetryCount) {
DescribeJournalS3ExportResult result = DescribeJournalExport.describeExport(ledgerName, exportId);
if (result.getExportDescription().getStatus().equalsIgnoreCase(ExportStatus.COMPLETED.name())) {
log.info("JournalS3Export completed.");
return result;
}
log.info("JournalS3Export is still in progress. Please wait. ");
Thread.sleep(EXPORT_COMPLETION_POLL_PERIOD_MS);
count++;
}
throw new IllegalStateException("Journal Export did not complete for " + exportId);
}
use of com.amazonaws.services.qldb.model.DescribeJournalS3ExportResult in project amazon-qldb-dmv-sample-java by aws-samples.
the class JournalS3ExportReader method readExport.
/**
* Read the S3 export within a {@link JournalBlock}.
*
* @param describeJournalS3ExportResult
* The result from the QLDB database describing a journal export.
* @param amazonS3
* The low level S3 client.
* @return a list of {@link JournalBlock}.
*/
public static List<JournalBlock> readExport(final DescribeJournalS3ExportResult describeJournalS3ExportResult, final AmazonS3 amazonS3) {
S3ExportConfiguration exportConfiguration = describeJournalS3ExportResult.getExportDescription().getS3ExportConfiguration();
ListObjectsV2Request listObjectsRequest = new ListObjectsV2Request().withBucketName(exportConfiguration.getBucket()).withPrefix(exportConfiguration.getPrefix());
ListObjectsV2Result listObjectsV2Result = amazonS3.listObjectsV2(listObjectsRequest);
log.info("Found the following objects for list from s3: ");
listObjectsV2Result.getObjectSummaries().forEach(s3ObjectSummary -> log.info(s3ObjectSummary.getKey()));
// Validate initial manifest file was written.
String expectedManifestKey = exportConfiguration.getPrefix() + describeJournalS3ExportResult.getExportDescription().getExportId() + ".started" + ".manifest";
String initialManifestKey = listObjectsV2Result.getObjectSummaries().stream().filter(s3ObjectSummary -> s3ObjectSummary.getKey().equalsIgnoreCase(expectedManifestKey)).map(S3ObjectSummary::getKey).findFirst().orElseThrow(() -> new IllegalStateException("Initial manifest not found."));
log.info("Found the initial manifest with key " + initialManifestKey);
// Find the final manifest file, it should contain the exportId in it.
String completedManifestFileKey = listObjectsV2Result.getObjectSummaries().stream().filter(s3ObjectSummary -> s3ObjectSummary.getKey().endsWith("completed.manifest") && (s3ObjectSummary.getKey().contains(describeJournalS3ExportResult.getExportDescription().getExportId()))).map(S3ObjectSummary::getKey).findFirst().orElseThrow(() -> new IllegalStateException("Completed manifest not found."));
log.info("Found the completed manifest with key " + completedManifestFileKey);
// Read manifest file to find data file keys.
S3Object completedManifestObject = amazonS3.getObject(exportConfiguration.getBucket(), completedManifestFileKey);
List<String> dataFileKeys = getDataFileKeysFromManifest(completedManifestObject);
log.info("Found the following keys in the manifest files: " + dataFileKeys);
List<JournalBlock> journalBlocks = new ArrayList<>();
for (String key : dataFileKeys) {
log.info("Reading file with S3 key " + key + " from bucket: " + exportConfiguration.getBucket());
S3Object s3Object = amazonS3.getObject(exportConfiguration.getBucket(), key);
List<JournalBlock> blocks = getJournalBlocks(s3Object);
compareKeyWithContentRange(key, blocks.get(0), blocks.get(blocks.size() - 1));
journalBlocks.addAll(blocks);
}
return journalBlocks;
}
use of com.amazonaws.services.qldb.model.DescribeJournalS3ExportResult in project amazon-qldb-dmv-sample-java by aws-samples.
the class DescribeJournalExport method describeExport.
/**
* Describe a journal export.
*
* @param ledgerName
* The ledger from which the journal is being exported.
* @param exportId
* Unique ExportID of the journal export.
* @return {@link DescribeJournalS3ExportResult} from QLDB.
*/
public static DescribeJournalS3ExportResult describeExport(String ledgerName, String exportId) {
log.info("Let's describe a journal export for ledger with name: {}, ExportId: {}...", ledgerName, exportId);
DescribeJournalS3ExportRequest request = new DescribeJournalS3ExportRequest().withName(ledgerName).withExportId(exportId);
DescribeJournalS3ExportResult result = client.describeJournalS3Export(request);
log.info("Export described. result = " + result);
return result;
}
Aggregations