Skip to content

Commit ed3b735

Browse files
committed
Fix based on feedback
1 parent e6629ce commit ed3b735

File tree

5 files changed

+76
-7
lines changed

5 files changed

+76
-7
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.scalar.db.transaction.consensuscommit;
2+
3+
import com.scalar.db.api.TransactionCrudOperable;
4+
5+
public interface ConsensusCommitScanner extends TransactionCrudOperable.Scanner {
6+
boolean isClosed();
7+
}

core/src/main/java/com/scalar/db/transaction/consensuscommit/CrudHandler.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -736,10 +736,6 @@ private TableMetadata getTableMetadata(Operation operation, String transactionId
736736
return metadata.getTableMetadata();
737737
}
738738

739-
public interface ConsensusCommitScanner extends TransactionCrudOperable.Scanner {
740-
boolean isClosed();
741-
}
742-
743739
@NotThreadSafe
744740
private class ConsensusCommitStorageScanner extends AbstractTransactionCrudOperableScanner
745741
implements ConsensusCommitScanner {

core/src/main/java/com/scalar/db/transaction/consensuscommit/TransactionContext.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class TransactionContext {
2424
public final boolean oneOperation;
2525

2626
// A list of scanners opened in the transaction
27-
public final List<CrudHandler.ConsensusCommitScanner> scanners = new ArrayList<>();
27+
public final List<ConsensusCommitScanner> scanners = new ArrayList<>();
2828

2929
// A list of recovery results performed in the transaction
3030
public final List<RecoveryExecutor.Result> recoveryResults = new ArrayList<>();
@@ -51,11 +51,11 @@ public boolean isValidationRequired() {
5151
}
5252

5353
public boolean areAllScannersClosed() {
54-
return scanners.stream().allMatch(CrudHandler.ConsensusCommitScanner::isClosed);
54+
return scanners.stream().allMatch(ConsensusCommitScanner::isClosed);
5555
}
5656

5757
public void closeScanners() throws CrudException {
58-
for (CrudHandler.ConsensusCommitScanner scanner : scanners) {
58+
for (ConsensusCommitScanner scanner : scanners) {
5959
if (!scanner.isClosed()) {
6060
scanner.close();
6161
}

core/src/test/java/com/scalar/db/transaction/consensuscommit/ConsensusCommitManagerTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,22 @@ public void begin_TxIdGiven_ReturnWithSpecifiedTxIdAndSnapshotIsolation() {
187187
verify(groupCommitter, never()).reserve(ANY_TX_ID);
188188
}
189189

190+
@Test
191+
public void begin_CalledTwice_ShouldReturnTransactionsWithSharedHandlers() {
192+
// Arrange
193+
194+
// Act
195+
ConsensusCommit transaction1 = (ConsensusCommit) manager.begin();
196+
ConsensusCommit transaction2 = (ConsensusCommit) manager.begin();
197+
198+
// Assert
199+
assertThat(transaction1.getCrudHandler()).isSameAs(transaction2.getCrudHandler());
200+
assertThat(transaction1.getCommitHandler()).isSameAs(transaction2.getCommitHandler());
201+
assertThat(transaction1.getTransactionContext())
202+
.isNotSameAs(transaction2.getTransactionContext());
203+
assertThat(transaction1.getId()).isNotEqualTo(transaction2.getId());
204+
}
205+
190206
@Test
191207
public void begin_CalledTwiceWithSameTxId_ThrowTransactionException()
192208
throws TransactionException {
@@ -285,6 +301,23 @@ public void start_NullIsolationGiven_ThrowNullPointerExceptionException() {
285301
.isInstanceOf(NullPointerException.class);
286302
}
287303

304+
@Test
305+
public void start_CalledTwice_ShouldReturnTransactionsWithSharedHandlers()
306+
throws TransactionException {
307+
// Arrange
308+
309+
// Act
310+
ConsensusCommit transaction1 = (ConsensusCommit) manager.start();
311+
ConsensusCommit transaction2 = (ConsensusCommit) manager.start();
312+
313+
// Assert
314+
assertThat(transaction1.getCrudHandler()).isSameAs(transaction2.getCrudHandler());
315+
assertThat(transaction1.getCommitHandler()).isSameAs(transaction2.getCommitHandler());
316+
assertThat(transaction1.getTransactionContext())
317+
.isNotSameAs(transaction2.getTransactionContext());
318+
assertThat(transaction1.getId()).isNotEqualTo(transaction2.getId());
319+
}
320+
288321
@Test
289322
public void start_CalledTwiceWithSameTxId_ThrowTransactionException()
290323
throws TransactionException {

core/src/test/java/com/scalar/db/transaction/consensuscommit/TwoPhaseConsensusCommitManagerTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,22 @@ public void begin_TxIdGiven_ReturnWithSpecifiedTxIdAndSnapshotIsolation() {
118118
assertThat(transaction.getCommitHandler()).isEqualTo(commit);
119119
}
120120

121+
@Test
122+
public void begin_CalledTwice_ShouldReturnTransactionsWithSharedHandlers() {
123+
// Arrange
124+
125+
// Act
126+
TwoPhaseConsensusCommit transaction1 = (TwoPhaseConsensusCommit) manager.begin();
127+
TwoPhaseConsensusCommit transaction2 = (TwoPhaseConsensusCommit) manager.begin();
128+
129+
// Assert
130+
assertThat(transaction1.getCrudHandler()).isSameAs(transaction2.getCrudHandler());
131+
assertThat(transaction1.getCommitHandler()).isSameAs(transaction2.getCommitHandler());
132+
assertThat(transaction1.getTransactionContext())
133+
.isNotSameAs(transaction2.getTransactionContext());
134+
assertThat(transaction1.getId()).isNotEqualTo(transaction2.getId());
135+
}
136+
121137
@Test
122138
public void begin_CalledTwiceWithSameTxId_ThrowTransactionException()
123139
throws TransactionException {
@@ -180,6 +196,23 @@ public void start_TxIdGiven_ReturnWithSpecifiedTxIdAndSnapshotIsolation()
180196
assertThat(transaction.getCommitHandler()).isEqualTo(commit);
181197
}
182198

199+
@Test
200+
public void start_CalledTwice_ShouldReturnTransactionsWithSharedHandlers()
201+
throws TransactionException {
202+
// Arrange
203+
204+
// Act
205+
TwoPhaseConsensusCommit transaction1 = (TwoPhaseConsensusCommit) manager.start();
206+
TwoPhaseConsensusCommit transaction2 = (TwoPhaseConsensusCommit) manager.start();
207+
208+
// Assert
209+
assertThat(transaction1.getCrudHandler()).isSameAs(transaction2.getCrudHandler());
210+
assertThat(transaction1.getCommitHandler()).isSameAs(transaction2.getCommitHandler());
211+
assertThat(transaction1.getTransactionContext())
212+
.isNotSameAs(transaction2.getTransactionContext());
213+
assertThat(transaction1.getId()).isNotEqualTo(transaction2.getId());
214+
}
215+
183216
@Test
184217
public void start_CalledTwiceWithSameTxId_ThrowTransactionException()
185218
throws TransactionException {

0 commit comments

Comments
 (0)