private void uploadCompletionFileToS3()

in src/main/java/com/amazonaws/services/neptune/export/ExportToS3NeptuneExportEventHandler.java [271:332]


    private void uploadCompletionFileToS3(S3TransferManager transferManager,
                                          File directory,
                                          S3ObjectInfo outputS3ObjectInfo,
                                          ExportStats stats,
                                          GraphSchema graphSchema) throws IOException {

        if (StringUtils.isEmpty(completionFileS3Path)) {
            return;
        }

        if (directory == null || !directory.exists()) {
            logger.warn("Ignoring request to upload completion file to S3 because directory from which to upload files does not exist");
            return;
        }

        String completionFilename = s3UploadParams.createExportSubdirectory() ?
                directory.getName() :
                String.valueOf(System.currentTimeMillis());
        File completionFile = new File(localOutputPath, completionFilename + ".json");

        ObjectNode neptuneExportNode = JsonNodeFactory.instance.objectNode();
        completionFilePayload.set("neptuneExport", neptuneExportNode);
        neptuneExportNode.put("outputS3Path", outputS3ObjectInfo.toString());
        stats.addTo(neptuneExportNode, graphSchema);

        for (CompletionFileWriter completionFileWriter : completionFileWriters) {
            completionFileWriter.updateCompletionFile(completionFilePayload);
        }

        try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(completionFile), UTF_8))) {
            ObjectWriter objectWriter = new ObjectMapper().writer().withDefaultPrettyPrinter();
            writer.write(objectWriter.writeValueAsString(completionFilePayload));
        }

        S3ObjectInfo completionFileS3ObjectInfo =
                new S3ObjectInfo(completionFileS3Path).replaceOrAppendKey(
                        "_COMPLETION_ID_",
                        FilenameUtils.getBaseName(completionFile.getName()),
                        completionFile.getName());

        logger.info("Uploading completion file to {}", completionFileS3ObjectInfo.key());

        try {
            UploadFileRequest uploadFileRequest = UploadFileRequest.builder()
                    .source(completionFile)
                    .putObjectRequest(PutObjectRequest.builder()
                            .bucket(completionFileS3ObjectInfo.bucket())
                            .key(completionFileS3ObjectInfo.key())
                            .metadata(S3ObjectInfo.createObjectMetadata(completionFile.length(), sseKmsKeyId))
                            .tagging(createObjectTags(profiles))
                            .build())
                    .build();

            FileUpload upload = transferManager.uploadFile(uploadFileRequest);

            upload.completionFuture().join();

        } catch (CompletionException | CancellationException e) {
            logger.warn(e.getMessage());
            Thread.currentThread().interrupt();
        }
    }