Skip to content

Commit b3f0e39

Browse files
committed
Replace ScalarDbMode with core TransactionMode for clarity
1 parent b9fa18d commit b3f0e39

File tree

12 files changed

+99
-44
lines changed

12 files changed

+99
-44
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 & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
import com.fasterxml.jackson.databind.ObjectMapper;
77
import com.scalar.db.api.DistributedTransactionAdmin;
88
import com.scalar.db.api.TableMetadata;
9+
import com.scalar.db.dataloader.cli.ScalarDbMode;
910
import com.scalar.db.dataloader.core.DataLoaderError;
1011
import com.scalar.db.dataloader.core.FileFormat;
12+
import com.scalar.db.dataloader.core.TransactionMode;
1113
import com.scalar.db.dataloader.core.dataimport.ImportManager;
1214
import com.scalar.db.dataloader.core.dataimport.ImportOptions;
1315
import com.scalar.db.dataloader.core.dataimport.controlfile.ControlFile;
@@ -41,6 +43,7 @@
4143
import picocli.CommandLine.ParameterException;
4244
import picocli.CommandLine.Spec;
4345

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

@@ -127,6 +130,23 @@ private Map<String, TableMetadata> createTableMetadataMap(
127130
}
128131
}
129132

133+
/**
134+
* Converts CLI ScalarDbMode to core TransactionMode.
135+
*
136+
* @param scalarDbMode the ScalarDB mode from CLI
137+
* @return the corresponding TransactionMode for core
138+
*/
139+
private TransactionMode convertToTransactionMode(ScalarDbMode scalarDbMode) {
140+
switch (scalarDbMode) {
141+
case STORAGE:
142+
return TransactionMode.SINGLE_CRUD;
143+
case TRANSACTION:
144+
return TransactionMode.CONSENSUS_COMMIT;
145+
default:
146+
throw new IllegalArgumentException("Unknown ScalarDbMode: " + scalarDbMode);
147+
}
148+
}
149+
130150
/**
131151
* Create ImportManager object from data
132152
*
@@ -146,13 +166,14 @@ private ImportManager createImportManager(
146166
throws IOException {
147167
File configFile = new File(configFilePath);
148168
ImportProcessorFactory importProcessorFactory = new DefaultImportProcessorFactory();
169+
TransactionMode transactionMode = convertToTransactionMode(scalarDbMode);
149170
ImportManager importManager =
150171
new ImportManager(
151172
tableMetadataMap,
152173
reader,
153174
importOptions,
154175
importProcessorFactory,
155-
scalarDbMode,
176+
transactionMode,
156177
TransactionFactory.create(configFile).getTransactionManager());
157178
if (importOptions.getLogMode().equals(LogMode.SPLIT_BY_DATA_CHUNK)) {
158179
importManager.addListener(new SplitByDataChunkImportLogger(config, logWriterFactory));

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";
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;
@@ -54,12 +54,12 @@ public abstract class ImportProcessor {
5454
*
5555
* <p>This method reads data from the provided {@link BufferedReader}, processes it in chunks, and
5656
* batches transactions according to the specified sizes. The processing can be done in either
57-
* transactional or storage mode, depending on the configured {@link ScalarDbMode}.
57+
* single CRUD or consensus commit mode, depending on the configured {@link TransactionMode}.
5858
*
5959
* @param dataChunkSize the number of records to include in each data chunk for parallel
6060
* processing
6161
* @param transactionBatchSize the number of records to group together in a single transaction
62-
* (only used in transaction mode)
62+
* (only used in consensus commit mode)
6363
* @param reader the {@link BufferedReader} used to read the source file
6464
*/
6565
public void process(int dataChunkSize, int transactionBatchSize, BufferedReader reader) {
@@ -374,11 +374,12 @@ private ImportTaskResult processStorageRecord(int dataChunkId, ImportRow importR
374374
}
375375

376376
/**
377-
* Processes a complete data chunk using parallel execution. The processing mode (transactional or
378-
* storage) is determined by the configured {@link ScalarDbMode}.
377+
* Processes a complete data chunk using parallel execution. The processing mode (consensus commit
378+
* or single CRUD) is determined by the configured {@link TransactionMode}.
379379
*
380380
* @param dataChunk the data chunk to process
381-
* @param transactionBatchSize the size of transaction batches (used only in transaction mode)
381+
* @param transactionBatchSize the size of transaction batches (used only in consensus commit
382+
* mode)
382383
*/
383384
private void processDataChunk(ImportDataChunk dataChunk, int transactionBatchSize) {
384385
ImportDataChunkStatus status =
@@ -389,7 +390,7 @@ private void processDataChunk(ImportDataChunk dataChunk, int transactionBatchSiz
389390
.build();
390391
notifyDataChunkStarted(status);
391392
ImportDataChunkStatus importDataChunkStatus;
392-
if (params.getScalarDbMode() == ScalarDbMode.TRANSACTION) {
393+
if (params.getTransactionMode() == TransactionMode.CONSENSUS_COMMIT) {
393394
importDataChunkStatus = processDataChunkWithTransactions(dataChunk, transactionBatchSize);
394395
} else {
395396
importDataChunkStatus = processDataChunkWithoutTransactions(dataChunk);
@@ -398,7 +399,7 @@ private void processDataChunk(ImportDataChunk dataChunk, int transactionBatchSiz
398399
}
399400

400401
/**
401-
* Processes a data chunk using transaction mode with parallel batch processing. Multiple
402+
* Processes a data chunk using consensus commit mode with parallel batch processing. Multiple
402403
* transaction batches are processed concurrently using a thread pool.
403404
*
404405
* @param dataChunk the data chunk to process
@@ -439,8 +440,8 @@ private ImportDataChunkStatus processDataChunkWithTransactions(
439440
}
440441

441442
/**
442-
* Processes a data chunk using storage mode with parallel record processing. Individual records
443-
* are processed concurrently without transaction guarantees.
443+
* Processes a data chunk using single CRUD mode with parallel record processing. Individual
444+
* records are processed concurrently without transaction guarantees.
444445
*
445446
* @param dataChunk the data chunk to process
446447
* @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)

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import com.scalar.db.api.DistributedTransaction;
1414
import com.scalar.db.api.DistributedTransactionManager;
1515
import com.scalar.db.api.TableMetadata;
16-
import com.scalar.db.dataloader.core.ScalarDbMode;
16+
import com.scalar.db.dataloader.core.TransactionMode;
1717
import com.scalar.db.dataloader.core.UnitTestUtils;
1818
import com.scalar.db.dataloader.core.dataimport.ImportEventListener;
1919
import com.scalar.db.dataloader.core.dataimport.ImportOptions;
@@ -49,7 +49,7 @@
4949
* Unit tests for the ImportProcessor class.
5050
*
5151
* <p>These tests verify that the process method correctly handles different scenarios including
52-
* storage mode, transaction mode, empty data, and large data chunks.
52+
* single CRUD mode, consensus commit mode, empty data, and large data chunks.
5353
*
5454
* <p>Additionally, this class tests the thread executor behavior in ImportProcessor, including
5555
* proper shutdown, waiting for tasks to complete, handling interruptions, and task distribution.
@@ -80,10 +80,10 @@ void setUp() {
8080
}
8181

8282
@Test
83-
void process_withStorageMode_shouldProcessAllDataChunks() {
83+
void process_withSingleCrudMode_shouldProcessAllDataChunks() {
8484
// Arrange
8585
BufferedReader reader = new BufferedReader(new StringReader("test data"));
86-
when(params.getScalarDbMode()).thenReturn(ScalarDbMode.STORAGE);
86+
when(params.getTransactionMode()).thenReturn(TransactionMode.SINGLE_CRUD);
8787
when(params.getDao()).thenReturn(dao);
8888
when(params.getTableColumnDataTypes()).thenReturn(tableColumnDataTypes);
8989

@@ -100,10 +100,10 @@ void process_withStorageMode_shouldProcessAllDataChunks() {
100100
}
101101

102102
@Test
103-
void process_withTransactionMode_shouldProcessAllDataChunks() throws TransactionException {
103+
void process_withConsensusCommitMode_shouldProcessAllDataChunks() throws TransactionException {
104104
// Arrange
105105
BufferedReader reader = new BufferedReader(new StringReader("test data"));
106-
when(params.getScalarDbMode()).thenReturn(ScalarDbMode.TRANSACTION);
106+
when(params.getTransactionMode()).thenReturn(TransactionMode.CONSENSUS_COMMIT);
107107
when(params.getDao()).thenReturn(dao);
108108
when(params.getTableColumnDataTypes()).thenReturn(tableColumnDataTypes);
109109
when(params.getTableMetadataByTableName()).thenReturn(tableMetadataByTableName);
@@ -228,7 +228,7 @@ void process_withLargeNumberOfTasks_shouldWaitForAllTasksToComplete() {
228228
@Test
229229
void process_withShutdown_shouldShutdownExecutorsGracefully() {
230230
// Arrange
231-
when(params.getScalarDbMode()).thenReturn(ScalarDbMode.STORAGE);
231+
when(params.getTransactionMode()).thenReturn(TransactionMode.SINGLE_CRUD);
232232
when(params.getDao()).thenReturn(dao);
233233
when(params.getTableColumnDataTypes()).thenReturn(tableColumnDataTypes);
234234
when(params.getTableMetadataByTableName()).thenReturn(tableMetadataByTableName);

0 commit comments

Comments
 (0)