diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java index 0d60b9e073..517cd34b06 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataexport/ExportManager.java @@ -80,11 +80,11 @@ public ExportReport startExport( ExecutorService executorService = Executors.newFixedThreadPool(exportOptions.getMaxThreadCount()); - BufferedWriter bufferedWriter = new BufferedWriter(writer); boolean isJson = exportOptions.getOutputFileFormat() == FileFormat.JSON; try (TransactionManagerCrudOperable.Scanner scanner = - createScanner(exportOptions, dao, manager)) { + createScanner(exportOptions, dao, manager); + BufferedWriter bufferedWriter = new BufferedWriter(writer)) { Iterator iterator = scanner.iterator(); AtomicBoolean isFirstBatch = new AtomicBoolean(true); @@ -106,18 +106,20 @@ public ExportReport startExport( executorService.shutdown(); if (executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) { logger.info("All tasks completed"); + processFooter(exportOptions, tableMetadata, bufferedWriter); } else { logger.error("Timeout occurred while waiting for tasks to complete"); // TODO: handle this } - processFooter(exportOptions, tableMetadata, bufferedWriter); } catch (InterruptedException | IOException | UnknownTransactionStatusException | CrudException e) { logger.error("Error during export: ", e); } finally { - bufferedWriter.flush(); + if (!executorService.isShutdown()) { + executorService.shutdownNow(); + } } } catch (ExportOptionsValidationException | IOException | ScalarDbDaoException e) { logger.error("Error during export: {}", e.getMessage());