diff --git a/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommandOptions.java b/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommandOptions.java index 00451a8889..3c535d5c8a 100755 --- a/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommandOptions.java +++ b/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataexport/ExportCommandOptions.java @@ -94,7 +94,7 @@ public class ExportCommandOptions { protected Integer maxThreads; /** - * @deprecated As of release 3.6.2. Will be removed in release 4.0.0. Use --max-threads instead + * @deprecated As of release 3.17.0. Will be removed in release 4.0.0. Use --max-threads instead */ @Deprecated @CommandLine.Option( @@ -118,7 +118,10 @@ public class ExportCommandOptions { // TODO: test that -si false, works protected boolean scanStartInclusive; - // Deprecated option - kept for backward compatibility + /** + * @deprecated As of release 3.17.0. Will be removed in release 4.0.0. Use --start-inclusive + * instead (inverted logic). + */ @CommandLine.Option( names = {DEPRECATED_START_EXCLUSIVE_OPTION}, description = "Deprecated: Use --start-inclusive instead (inverted logic)", @@ -139,7 +142,10 @@ public class ExportCommandOptions { defaultValue = "true") protected boolean scanEndInclusive; - // Deprecated option - kept for backward compatibility + /** + * @deprecated As of release 3.17.0. Will be removed in release 4.0.0. Use --end-inclusive instead + * (inverted logic). + */ @CommandLine.Option( names = {DEPRECATED_END_EXCLUSIVE_OPTION}, description = "Deprecated: Use --end-inclusive instead (inverted logic)", diff --git a/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommandOptions.java b/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommandOptions.java index 2d8c2555c6..360060cd90 100755 --- a/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommandOptions.java +++ b/data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommandOptions.java @@ -46,7 +46,7 @@ public class ImportCommandOptions { protected Integer maxThreads; /** - * @deprecated As of release 3.6.2. Will be removed in release 4.0.0. Use --max-threads instead + * @deprecated As of release 3.17.0. Will be removed in release 4.0.0. Use --max-threads instead */ @Deprecated @CommandLine.Option( @@ -75,7 +75,7 @@ public class ImportCommandOptions { protected String controlFilePath; /** - * @deprecated As of release 3.6.2. Will be removed in release 4.0.0. Use --enable-log-success + * @deprecated As of release 3.17.0. Will be removed in release 4.0.0. Use --enable-log-success * instead */ @Deprecated @@ -125,8 +125,8 @@ public class ImportCommandOptions { @CommandLine.Option( names = {"--log-raw-record", "-lr"}, - description = "Include the original source record in the log file output (default: false)", - defaultValue = "false") + description = "Include the original source record in the log file output (default: true)", + defaultValue = "true") protected boolean logRawRecord; @CommandLine.Option( diff --git a/data-loader/cli/src/test/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommandTest.java b/data-loader/cli/src/test/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommandTest.java index 76fcf94cb3..04fecff63d 100755 --- a/data-loader/cli/src/test/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommandTest.java +++ b/data-loader/cli/src/test/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommandTest.java @@ -1,6 +1,7 @@ package com.scalar.db.dataloader.cli.command.dataimport; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -279,4 +280,51 @@ void call_withoutMaxThreads_shouldDefaultToAvailableProcessors() { // Verify it was set to available processors assertEquals(Runtime.getRuntime().availableProcessors(), command.maxThreads); } + + @Test + void call_withoutSpecifyingLogRawRecord_shouldUseDefaultTrueValue() { + // Simulate command line parsing with --max-threads + String[] args = { + "--config", + "scalardb.properties", + "--file", + "import.json", + "--namespace", + "scalar", + "--table", + "asset", + "--max-threads", + "8" + }; + ImportCommand command = new ImportCommand(); + CommandLine cmd = new CommandLine(command); + cmd.parseArgs(args); + + // Verify the value was parsed + assertTrue(command.logRawRecord); + } + + @Test + void call_withSpecifyingLogRawRecordFalse_shouldUseFalsee() { + // Simulate command line parsing with --max-threads + String[] args = { + "--config", + "scalardb.properties", + "--file", + "import.json", + "--namespace", + "scalar", + "--table", + "asset", + "--max-threads", + "8", + "--log-raw-record=false" + }; + ImportCommand command = new ImportCommand(); + CommandLine cmd = new CommandLine(command); + cmd.parseArgs(args); + + // Verify the value was parsed + assertFalse(command.logRawRecord); + } } diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/ImportOptions.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/ImportOptions.java index 2842b3d194..9be5795c06 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/ImportOptions.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/ImportOptions.java @@ -27,7 +27,7 @@ public class ImportOptions { @Builder.Default private final char delimiter = ','; @Builder.Default private final boolean logSuccessRecords = false; - @Builder.Default private final boolean logRawRecord = false; + @Builder.Default private final boolean logRawRecord = true; private final int dataChunkSize; private final int transactionBatchSize; diff --git a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/log/AbstractImportLogger.java b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/log/AbstractImportLogger.java index c440c6e8f6..dd824b355c 100644 --- a/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/log/AbstractImportLogger.java +++ b/data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/log/AbstractImportLogger.java @@ -75,6 +75,10 @@ public void onTransactionBatchCompleted(ImportTransactionBatchResult batchResult if (shouldSkipLoggingSuccess(batchResult)) { return; } + // Skip logging records if log raw records is not enabled and execution is not success + if (!batchResult.isSuccess() && !config.isLogRawSourceRecordsEnabled()) { + return; + } logTransactionBatch(batchResult); notifyTransactionBatchCompleted(batchResult); diff --git a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataimport/log/SingleFileImportLoggerTest.java b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataimport/log/SingleFileImportLoggerTest.java index 769c55d2a2..37987dd2a5 100644 --- a/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataimport/log/SingleFileImportLoggerTest.java +++ b/data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataimport/log/SingleFileImportLoggerTest.java @@ -25,6 +25,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -262,4 +263,28 @@ private void assertDataChunkStatusEquals( assertEquals( expected.getTotalDurationInMilliSeconds(), actual.getTotalDurationInMilliSeconds()); } + + @Test + void onTransactionBatchCompleted_ShouldNotLogOrNotify_WhenRawLoggingIsSkipped() + throws IOException { + // Arrange + ImportLoggerConfig config = + ImportLoggerConfig.builder() + .logDirectoryPath(tempDir.toString() + "/") + .isLogRawSourceRecordsEnabled(false) + .isLogSuccessRecordsEnabled(true) // success logging OFF + .build(); + + // Spy on logger to verify internal calls + SingleFileImportLogger loggerSpy = + Mockito.spy(new SingleFileImportLogger(config, logWriterFactory)); + + ImportTransactionBatchResult batch = createBatchResults(1, false).get(0); // success batch + + // Act + loggerSpy.onTransactionBatchCompleted(batch); + + // Assert + Mockito.verify(loggerSpy, Mockito.never()).logTransactionBatch(Mockito.any()); + } }