Skip to content

Commit 6bd5a77

Browse files
committed
Address RollbackMutationComposer as well
1 parent bfe95a7 commit 6bd5a77

File tree

2 files changed

+56
-16
lines changed

2 files changed

+56
-16
lines changed

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

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import com.scalar.db.api.ConditionBuilder;
99
import com.scalar.db.api.Consistency;
1010
import com.scalar.db.api.Delete;
11+
import com.scalar.db.api.DeleteBuilder;
1112
import com.scalar.db.api.DistributedStorage;
1213
import com.scalar.db.api.Get;
14+
import com.scalar.db.api.GetBuilder;
1315
import com.scalar.db.api.Mutation;
1416
import com.scalar.db.api.Operation;
1517
import com.scalar.db.api.Put;
@@ -121,17 +123,19 @@ private Delete composeDelete(Operation base, TransactionResult result) throws Ex
121123
Key partitionKey = ScalarDbUtils.getPartitionKey(result, tableMetadata);
122124
Optional<Key> clusteringKey = ScalarDbUtils.getClusteringKey(result, tableMetadata);
123125

124-
return Delete.newBuilder()
125-
.namespace(base.forNamespace().get())
126-
.table(base.forTable().get())
127-
.partitionKey(partitionKey)
128-
.clusteringKey(clusteringKey.orElse(null))
129-
.condition(
130-
ConditionBuilder.deleteIf(ConditionBuilder.column(ID).isEqualToText(id))
131-
.and(ConditionBuilder.column(STATE).isEqualToInt(result.getState().get()))
132-
.build())
133-
.consistency(Consistency.LINEARIZABLE)
134-
.build();
126+
DeleteBuilder.Buildable deleteBuilder =
127+
Delete.newBuilder()
128+
.namespace(base.forNamespace().get())
129+
.table(base.forTable().get())
130+
.partitionKey(partitionKey)
131+
.condition(
132+
ConditionBuilder.deleteIf(ConditionBuilder.column(ID).isEqualToText(id))
133+
.and(ConditionBuilder.column(STATE).isEqualToInt(result.getState().get()))
134+
.build())
135+
.consistency(Consistency.LINEARIZABLE);
136+
clusteringKey.ifPresent(deleteBuilder::clusteringKey);
137+
138+
return deleteBuilder.build();
135139
}
136140

137141
private Optional<TransactionResult> getLatestResult(
@@ -157,15 +161,16 @@ private Optional<TransactionResult> getLatestResult(
157161
}
158162
}
159163

160-
Get get =
164+
GetBuilder.BuildableGetWithPartitionKey getBuilder =
161165
Get.newBuilder()
162166
.namespace(operation.forNamespace().get())
163167
.table(operation.forTable().get())
164168
.partitionKey(partitionKey)
165-
.clusteringKey(clusteringKey)
166-
.consistency(Consistency.LINEARIZABLE)
167-
.build();
169+
.consistency(Consistency.LINEARIZABLE);
170+
if (clusteringKey != null) {
171+
getBuilder.clusteringKey(clusteringKey);
172+
}
168173

169-
return storage.get(get).map(TransactionResult::new);
174+
return storage.get(getBuilder.build()).map(TransactionResult::new);
170175
}
171176
}

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,25 @@ private Put preparePut() {
188188
.build();
189189
}
190190

191+
private Put preparePutWithoutCk() {
192+
return Put.newBuilder()
193+
.namespace(ANY_NAMESPACE_NAME)
194+
.table(ANY_TABLE_NAME)
195+
.partitionKey(Key.ofText(ANY_NAME_1, ANY_TEXT_1))
196+
.intValue(ANY_NAME_3, ANY_INT_3)
197+
.booleanValue(ANY_NAME_4, false)
198+
.bigIntValue(ANY_NAME_5, ANY_BIGINT_3)
199+
.floatValue(ANY_NAME_6, ANY_FLOAT_3)
200+
.doubleValue(ANY_NAME_7, ANY_DOUBLE_3)
201+
.textValue(ANY_NAME_8, ANY_TEXT_4)
202+
.blobValue(ANY_NAME_9, ANY_BLOB_3)
203+
.dateValue(ANY_NAME_10, ANY_DATE_3)
204+
.timeValue(ANY_NAME_11, ANY_TIME_3)
205+
.timestampValue(ANY_NAME_12, ANY_TIMESTAMP_3)
206+
.timestampTZValue(ANY_NAME_13, ANY_TIMESTAMPTZ_3)
207+
.build();
208+
}
209+
191210
private TransactionResult prepareResult(TransactionState state) {
192211
ImmutableMap<String, Column<?>> columns =
193212
ImmutableMap.<String, Column<?>>builder()
@@ -548,6 +567,22 @@ public void add_PutAndNullResultGivenAndOldResultGivenFromStorage_ShouldDoNothin
548567
verify(storage).get(any(Get.class));
549568
}
550569

570+
@Test
571+
public void add_PutWithoutCkAndNullResultGivenAndOldResultGivenFromStorage_ShouldDoNothing()
572+
throws ExecutionException {
573+
// Arrange
574+
TransactionResult result = prepareInitialResult(ANY_ID_1, TransactionState.PREPARED);
575+
when(storage.get(any(Get.class))).thenReturn(Optional.of(result));
576+
Put put = preparePutWithoutCk();
577+
578+
// Act
579+
composer.add(put, null);
580+
581+
// Assert
582+
assertThat(composer.get().size()).isEqualTo(0);
583+
verify(storage).get(any(Get.class));
584+
}
585+
551586
@Test
552587
public void add_PutAndNullResultGivenAndEmptyResultGivenFromStorage_ShouldDoNothing()
553588
throws ExecutionException {

0 commit comments

Comments
 (0)