@Asynchronous private void doExport(Promise<?>... waitFor) { if (request.isLiveInstanceTouched()) { Promise<DatabaseInstance> db = rdsActivities.describeInstance(request.getInstanceName(), request.getIdentity()); exportLiveInstance(db); } else { exportWithSnapshot(); } }
@Asynchronous private void exportWithSnapshot() { final Promise<DatabaseInstance> database = rdsActivities.describeInstance(request.getInstanceName(), request.getIdentity()); final Promise<String> snapshotName = controlActivities.createSnapshotName(request.getInstanceName()); Promise<Void> done = rdsActivities.createSnapshot( snapshotName, Promise.asPromise(request.getInstanceName()), Promise.asPromise(request.getIdentity()), database); new TryCatchFinally(done) { @Override protected void doCatch(Throwable cause) { controlActivities.notifyJobFailed(cause); } @Override protected void doFinally() throws Throwable { rdsActivities.deleteSnapshot(snapshotName, Promise.asPromise(request.getIdentity())); } @Override protected void doTry() { Promise<Void> done = waitUntilSnapshotAvailable(snapshotName); Promise<ExportSnapshotRequest> snapshotRequest = createExportSnapshotRequest(snapshotName, database); done = exportSnapshotFlowFactory .getClient(workflowId + "-snapshot") .export(snapshotRequest, done); controlActivities.notifyJobCompleted(done); } }; }