Skip to content

Commit 1ee50bd

Browse files
committed
Replace ScalarDbMode with core TransactionMode for clarity
1 parent 0f200ff commit 1ee50bd

File tree

13 files changed

+101
-47
lines changed

13 files changed

+101
-47
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,31 @@
1-
package com.scalar.db.dataloader.core;
1+
package com.scalar.db.dataloader.cli;
22

33
/**
44
* The available modes a ScalarDB instance can run in. Determines how ScalarDB interacts with the
55
* underlying database.
6+
*
7+
* @deprecated As of release 3.17.0. Will be removed in release 4.0.0. This enum is maintained for
8+
* CLI backward compatibility only. Internally, values are converted to {@code TransactionMode}
9+
* in the core module.
610
*/
11+
@Deprecated
712
public enum ScalarDbMode {
813

914
/**
1015
* Storage mode: Operates directly on the underlying storage engine without transactional
1116
* guarantees. Suitable for raw data access and simple CRUD operations.
17+
*
18+
* @deprecated As of release 3.17.0. Will be removed in release 4.0.0.
1219
*/
20+
@Deprecated
1321
STORAGE,
1422

1523
/**
1624
* Transaction mode: Provides transaction management with ACID guarantees across multiple
1725
* operations. Suitable for applications that require consistency and atomicity.
26+
*
27+
* @deprecated As of release 3.17.0 Will be removed in release 4.0.0.
1828
*/
29+
@Deprecated
1930
TRANSACTION
2031
}

data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommand.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
import com.scalar.db.api.DistributedTransaction;
88
import com.scalar.db.api.DistributedTransactionAdmin;
99
import com.scalar.db.api.TableMetadata;
10+
import com.scalar.db.dataloader.cli.ScalarDbMode;
1011
import com.scalar.db.dataloader.core.DataLoaderError;
1112
import com.scalar.db.dataloader.core.FileFormat;
12-
import com.scalar.db.dataloader.core.ScalarDbMode;
13+
import com.scalar.db.dataloader.core.TransactionMode;
1314
import com.scalar.db.dataloader.core.dataimport.ImportManager;
1415
import com.scalar.db.dataloader.core.dataimport.ImportOptions;
1516
import com.scalar.db.dataloader.core.dataimport.controlfile.ControlFile;
@@ -43,6 +44,7 @@
4344
import picocli.CommandLine.ParameterException;
4445
import picocli.CommandLine.Spec;
4546

47+
@SuppressWarnings("deprecation")
4648
@CommandLine.Command(name = "import", description = "Import data into a ScalarDB table")
4749
public class ImportCommand extends ImportCommandOptions implements Callable<Integer> {
4850

@@ -143,6 +145,23 @@ private Map<String, TableMetadata> createTableMetadataMap(
143145
}
144146
}
145147

148+
/**
149+
* Converts CLI ScalarDbMode to core TransactionMode.
150+
*
151+
* @param scalarDbMode the ScalarDB mode from CLI
152+
* @return the corresponding TransactionMode for core
153+
*/
154+
private TransactionMode convertToTransactionMode(ScalarDbMode scalarDbMode) {
155+
switch (scalarDbMode) {
156+
case STORAGE:
157+
return TransactionMode.SINGLE_CRUD;
158+
case TRANSACTION:
159+
return TransactionMode.CONSENSUS_COMMIT;
160+
default:
161+
throw new IllegalArgumentException("Unknown ScalarDbMode: " + scalarDbMode);
162+
}
163+
}
164+
146165
/**
147166
* Create ImportManager object from data
148167
*
@@ -163,13 +182,14 @@ private ImportManager createImportManager(
163182
TransactionFactory transactionFactory)
164183
throws IOException {
165184
ImportProcessorFactory importProcessorFactory = new DefaultImportProcessorFactory();
185+
TransactionMode transactionMode = convertToTransactionMode(scalarDbMode);
166186
ImportManager importManager =
167187
new ImportManager(
168188
tableMetadataMap,
169189
reader,
170190
importOptions,
171191
importProcessorFactory,
172-
scalarDbMode,
192+
transactionMode,
173193
transactionFactory.getTransactionManager());
174194
if (importOptions.getLogMode().equals(LogMode.SPLIT_BY_DATA_CHUNK)) {
175195
importManager.addListener(

data-loader/cli/src/main/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommandOptions.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.scalar.db.dataloader.cli.command.dataimport;
22

3+
import com.scalar.db.dataloader.cli.ScalarDbMode;
34
import com.scalar.db.dataloader.core.FileFormat;
4-
import com.scalar.db.dataloader.core.ScalarDbMode;
55
import com.scalar.db.dataloader.core.dataimport.ImportMode;
66
import com.scalar.db.dataloader.core.dataimport.controlfile.ControlFileValidationLevel;
77
import picocli.CommandLine;
88

9+
@SuppressWarnings("deprecation")
910
public class ImportCommandOptions {
1011

1112
public static final String FILE_OPTION_NAME_LONG_FORMAT = "--file";

data-loader/cli/src/test/java/com/scalar/db/dataloader/cli/command/dataimport/ImportCommandTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import static org.mockito.Mockito.when;
88

99
import com.scalar.db.api.DistributedTransactionManager;
10+
import com.scalar.db.dataloader.cli.ScalarDbMode;
1011
import com.scalar.db.dataloader.core.FileFormat;
11-
import com.scalar.db.dataloader.core.ScalarDbMode;
1212
import com.scalar.db.dataloader.core.dataimport.ImportMode;
1313
import com.scalar.db.service.TransactionFactory;
1414
import java.io.IOException;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.scalar.db.dataloader.core;
2+
3+
/**
4+
* Defines the transaction mode for data loader operations. This determines how data operations are
5+
* executed within ScalarDB.
6+
*/
7+
public enum TransactionMode {
8+
9+
/**
10+
* Single CRUD mode: Executes each operation independently without transactional context. Each
11+
* operation is atomic but there are no guarantees across multiple operations.
12+
*/
13+
SINGLE_CRUD,
14+
15+
/**
16+
* Consensus commit mode: Groups multiple operations into distributed transactions with ACID
17+
* guarantees. Ensures atomicity and consistency across multiple operations through consensus
18+
* commit protocol.
19+
*/
20+
CONSENSUS_COMMIT
21+
}

data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/ImportManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.scalar.db.api.DistributedTransactionManager;
44
import com.scalar.db.api.TableMetadata;
5-
import com.scalar.db.dataloader.core.ScalarDbMode;
5+
import com.scalar.db.dataloader.core.TransactionMode;
66
import com.scalar.db.dataloader.core.dataimport.dao.ScalarDbDao;
77
import com.scalar.db.dataloader.core.dataimport.datachunk.ImportDataChunkStatus;
88
import com.scalar.db.dataloader.core.dataimport.processor.ImportProcessor;
@@ -42,7 +42,7 @@ public class ImportManager implements ImportEventListener {
4242
@NonNull private final ImportOptions importOptions;
4343
private final ImportProcessorFactory importProcessorFactory;
4444
private final List<ImportEventListener> listeners = new ArrayList<>();
45-
private final ScalarDbMode scalarDbMode;
45+
private final TransactionMode transactionMode;
4646
private final DistributedTransactionManager distributedTransactionManager;
4747

4848
/**
@@ -55,7 +55,7 @@ public class ImportManager implements ImportEventListener {
5555
public void startImport() {
5656
ImportProcessorParams params =
5757
ImportProcessorParams.builder()
58-
.scalarDbMode(scalarDbMode)
58+
.transactionMode(transactionMode)
5959
.importOptions(importOptions)
6060
.tableMetadataByTableName(tableMetadata)
6161
.dao(new ScalarDbDao())

data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/processor/ImportProcessor.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.scalar.db.api.DistributedTransaction;
44
import com.scalar.db.dataloader.core.DataLoaderError;
5-
import com.scalar.db.dataloader.core.ScalarDbMode;
5+
import com.scalar.db.dataloader.core.TransactionMode;
66
import com.scalar.db.dataloader.core.dataimport.ImportEventListener;
77
import com.scalar.db.dataloader.core.dataimport.datachunk.ImportDataChunk;
88
import com.scalar.db.dataloader.core.dataimport.datachunk.ImportDataChunkStatus;
@@ -55,12 +55,12 @@ public abstract class ImportProcessor {
5555
*
5656
* <p>This method reads data from the provided {@link BufferedReader}, processes it in chunks, and
5757
* batches transactions according to the specified sizes. The processing can be done in either
58-
* transactional or storage mode, depending on the configured {@link ScalarDbMode}.
58+
* single CRUD or consensus commit mode, depending on the configured {@link TransactionMode}.
5959
*
6060
* @param dataChunkSize the number of records to include in each data chunk for parallel
6161
* processing
6262
* @param transactionBatchSize the number of records to group together in a single transaction
63-
* (only used in transaction mode)
63+
* (only used in consensus commit mode)
6464
* @param reader the {@link BufferedReader} used to read the source file
6565
*/
6666
public void process(int dataChunkSize, int transactionBatchSize, BufferedReader reader) {
@@ -399,11 +399,12 @@ private ImportTaskResult processStorageRecord(int dataChunkId, ImportRow importR
399399
}
400400

401401
/**
402-
* Processes a complete data chunk using parallel execution. The processing mode (transactional or
403-
* storage) is determined by the configured {@link ScalarDbMode}.
402+
* Processes a complete data chunk using parallel execution. The processing mode (consensus commit
403+
* or single CRUD) is determined by the configured {@link TransactionMode}.
404404
*
405405
* @param dataChunk the data chunk to process
406-
* @param transactionBatchSize the size of transaction batches (used only in transaction mode)
406+
* @param transactionBatchSize the size of transaction batches (used only in consensus commit
407+
* mode)
407408
*/
408409
private void processDataChunk(ImportDataChunk dataChunk, int transactionBatchSize) {
409410
ImportDataChunkStatus status =
@@ -414,7 +415,7 @@ private void processDataChunk(ImportDataChunk dataChunk, int transactionBatchSiz
414415
.build();
415416
notifyDataChunkStarted(status);
416417
ImportDataChunkStatus importDataChunkStatus;
417-
if (params.getScalarDbMode() == ScalarDbMode.TRANSACTION) {
418+
if (params.getTransactionMode() == TransactionMode.CONSENSUS_COMMIT) {
418419
importDataChunkStatus = processDataChunkWithTransactions(dataChunk, transactionBatchSize);
419420
} else {
420421
importDataChunkStatus = processDataChunkWithoutTransactions(dataChunk);
@@ -423,7 +424,7 @@ private void processDataChunk(ImportDataChunk dataChunk, int transactionBatchSiz
423424
}
424425

425426
/**
426-
* Processes a data chunk using transaction mode with parallel batch processing. Multiple
427+
* Processes a data chunk using consensus commit mode with parallel batch processing. Multiple
427428
* transaction batches are processed concurrently using a thread pool.
428429
*
429430
* @param dataChunk the data chunk to process
@@ -464,8 +465,8 @@ private ImportDataChunkStatus processDataChunkWithTransactions(
464465
}
465466

466467
/**
467-
* Processes a data chunk using storage mode with parallel record processing. Individual records
468-
* are processed concurrently without transaction guarantees.
468+
* Processes a data chunk using single CRUD mode with parallel record processing. Individual
469+
* records are processed concurrently without transaction guarantees.
469470
*
470471
* @param dataChunk the data chunk to process
471472
* @return an {@link ImportDataChunkStatus} containing processing results and metrics

data-loader/core/src/main/java/com/scalar/db/dataloader/core/dataimport/processor/ImportProcessorParams.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.scalar.db.api.DistributedTransactionManager;
44
import com.scalar.db.api.TableMetadata;
5-
import com.scalar.db.dataloader.core.ScalarDbMode;
5+
import com.scalar.db.dataloader.core.TransactionMode;
66
import com.scalar.db.dataloader.core.dataimport.ImportOptions;
77
import com.scalar.db.dataloader.core.dataimport.dao.ScalarDbDao;
88
import java.util.Map;
@@ -20,8 +20,8 @@
2020
@Builder
2121
@Value
2222
public class ImportProcessorParams {
23-
/** The operational mode of ScalarDB (transaction or storage mode). */
24-
ScalarDbMode scalarDbMode;
23+
/** The transaction mode for data operations. */
24+
TransactionMode transactionMode;
2525

2626
/** Configuration options for the import operation. */
2727
ImportOptions importOptions;

data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataimport/ImportManagerTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import com.scalar.db.api.DistributedTransactionManager;
1111
import com.scalar.db.api.TableMetadata;
12-
import com.scalar.db.dataloader.core.ScalarDbMode;
12+
import com.scalar.db.dataloader.core.TransactionMode;
1313
import com.scalar.db.dataloader.core.dataimport.processor.ImportProcessorFactory;
1414
import java.io.BufferedReader;
1515
import java.util.HashMap;
@@ -41,7 +41,7 @@ void setUp() {
4141
reader,
4242
options,
4343
processorFactory,
44-
ScalarDbMode.STORAGE,
44+
TransactionMode.SINGLE_CRUD,
4545
distributedTransactionManager);
4646
importManager.addListener(listener1);
4747
importManager.addListener(listener2);
@@ -76,7 +76,7 @@ void closeResources_shouldCloseTransactionManagerIfStorageIsNull() {
7676
mock(BufferedReader.class),
7777
mock(ImportOptions.class),
7878
mock(ImportProcessorFactory.class),
79-
ScalarDbMode.TRANSACTION,
79+
TransactionMode.CONSENSUS_COMMIT,
8080
distributedTransactionManager);
8181

8282
managerWithTx.closeResources();

data-loader/core/src/test/java/com/scalar/db/dataloader/core/dataimport/processor/CsvImportProcessorTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.scalar.db.api.DistributedTransactionManager;
88
import com.scalar.db.api.TableMetadata;
99
import com.scalar.db.dataloader.core.FileFormat;
10-
import com.scalar.db.dataloader.core.ScalarDbMode;
10+
import com.scalar.db.dataloader.core.TransactionMode;
1111
import com.scalar.db.dataloader.core.UnitTestUtils;
1212
import com.scalar.db.dataloader.core.dataimport.ImportMode;
1313
import com.scalar.db.dataloader.core.dataimport.ImportOptions;
@@ -76,10 +76,10 @@ void setup() throws ScalarDbDaoException, TransactionException {
7676
}
7777

7878
@Test
79-
void test_importProcessWithStorage() {
79+
void test_importProcessWithSingleCrud() {
8080
params =
8181
ImportProcessorParams.builder()
82-
.scalarDbMode(ScalarDbMode.STORAGE)
82+
.transactionMode(TransactionMode.SINGLE_CRUD)
8383
.importOptions(importOptions)
8484
.dao(dao)
8585
.distributedTransactionManager(distributedTransactionManager)
@@ -94,10 +94,10 @@ void test_importProcessWithStorage() {
9494
}
9595

9696
@Test
97-
void test_importProcessWithTransaction() {
97+
void test_importProcessWithConsensusCommit() {
9898
params =
9999
ImportProcessorParams.builder()
100-
.scalarDbMode(ScalarDbMode.TRANSACTION)
100+
.transactionMode(TransactionMode.CONSENSUS_COMMIT)
101101
.importOptions(importOptions)
102102
.dao(dao)
103103
.distributedTransactionManager(distributedTransactionManager)

0 commit comments

Comments
 (0)