From 45db8266b15f8b41d973d650657b283e2aa0137c Mon Sep 17 00:00:00 2001 From: Jishnu J Date: Fri, 14 Nov 2025 11:26:21 +0530 Subject: [PATCH 1/2] Executor service shutdown moved to finally block --- .../core/dataexport/ExportManager.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) 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 4a6a41596e..dc3332fdb0 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 @@ -105,20 +105,21 @@ public ExportReport startExport( isFirstBatch, exportReport)); } - executorService.shutdown(); - if (executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) { - logger.info("All tasks completed"); - } else { - logger.error("Timeout occurred while waiting for tasks to complete"); - // TODO: handle this - } processFooter(exportOptions, tableMetadata, bufferedWriter); - } catch (InterruptedException - | IOException - | UnknownTransactionStatusException - | CrudException e) { + } catch (IOException | UnknownTransactionStatusException | CrudException e) { logger.error("Error during export: ", e); } finally { + executorService.shutdown(); + try { + if (executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) { + logger.info("All tasks completed"); + } else { + logger.error("Timeout occurred while waiting for tasks to complete"); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + logger.error("Interrupted while waiting for executor termination", e); + } bufferedWriter.flush(); } } catch (ExportOptionsValidationException | IOException | ScalarDbDaoException e) { From e84bc49f79246af1833133048c4398ee357dc3fc Mon Sep 17 00:00:00 2001 From: Jishnu J Date: Fri, 14 Nov 2025 11:48:13 +0530 Subject: [PATCH 2/2] Process footer changes --- .../core/dataexport/ExportManager.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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 dc3332fdb0..58aea61a32 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 @@ -105,8 +105,7 @@ public ExportReport startExport( isFirstBatch, exportReport)); } - processFooter(exportOptions, tableMetadata, bufferedWriter); - } catch (IOException | UnknownTransactionStatusException | CrudException e) { + } catch (UnknownTransactionStatusException | CrudException e) { logger.error("Error during export: ", e); } finally { executorService.shutdown(); @@ -120,7 +119,18 @@ public ExportReport startExport( Thread.currentThread().interrupt(); logger.error("Interrupted while waiting for executor termination", e); } - bufferedWriter.flush(); + // Process footer after all tasks are complete + try { + processFooter(exportOptions, tableMetadata, bufferedWriter); + } catch (IOException e) { + logger.error("Error processing footer", e); + } + // Flush buffered writer + try { + bufferedWriter.flush(); + } catch (IOException e) { + logger.error("Error flushing writer", e); + } } } catch (ExportOptionsValidationException | IOException | ScalarDbDaoException e) { logger.error("Error during export: {}", e.getMessage());