Skip to content

Commit 7457e1a

Browse files
committed
JCBC-2152: Replace in transaction does not return updated content
ctx.replace() should return the updated content in its TransactionGetResult. Fixes a regression introduced in cf37f2f. Change-Id: If8eaf00c6f87b4a548d3ed7e4d9ba6d9080fbdca Reviewed-on: https://review.couchbase.org/c/couchbase-jvm-clients/+/220825 Tested-by: Build Bot <[email protected]> Reviewed-by: David Nault <[email protected]>
1 parent a8e66a2 commit 7457e1a

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

core-io/src/main/java/com/couchbase/client/core/transaction/CoreTransactionAttemptContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1655,7 +1655,7 @@ false, false, false, true, false, cas, userFlagsOfExistingDocument, durabilityLe
16551655
// Save the new CAS
16561656
.flatMap(updatedDoc -> {
16571657
CoreTransactionGetResult out = createTransactionGetResult(operationId, collection, id,
1658-
contentOfExistingDocument, userFlagsOfExistingDocument, contentToStage, userFlagsOfContentToStage, updatedDoc.cas(), documentMetadata, OperationTypes.REPLACE, crc32OfGet);
1658+
contentToStage, userFlagsOfExistingDocument, contentToStage, userFlagsOfContentToStage, updatedDoc.cas(), documentMetadata, OperationTypes.REPLACE, crc32OfGet);
16591659
return supportsReplaceBodyWithXattr(collection.bucket())
16601660
.flatMap(supports -> addStagedMutation(new StagedMutation(operationId, id, collection, updatedDoc.cas(), documentMetadata, crc32OfGet,
16611661
userFlagsOfExistingDocument, supports ? null : contentToStage, userFlagsOfContentToStage, StagedMutationType.REPLACE))

java-client/src/integrationTest/java/com/couchbase/client/java/transactions/TransactionsIntegrationTest.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ void replace() {
204204

205205
TransactionResult tr = cluster.transactions().run((ctx) -> {
206206
TransactionGetResult doc = ctx.get(collection, docId);
207-
ctx.replace(doc, updated);
207+
TransactionGetResult postReplace = ctx.replace(doc, updated);
208208
});
209209

210210
assertEquals(updated, collection.get(docId).contentAsObject());
@@ -225,6 +225,31 @@ void replaceReactive() {
225225
assertEquals(updated, collection.get(docId).contentAsObject());
226226
}
227227

228+
// Test for JCBC-2152
229+
@Test
230+
void replaceReturnsUpdatedBody() {
231+
String docId = UUID.randomUUID().toString();
232+
JsonObject initial = JsonObject.create().put("foo", "bar");
233+
JsonObject updated = JsonObject.create().put("foo", "baz");
234+
collection.insert(docId, initial);
235+
236+
TransactionResult tr = cluster.transactions().run((ctx) -> {
237+
TransactionGetResult oldDoc = ctx.get(collection, docId);
238+
TransactionGetResult replacedDoc = ctx.replace(oldDoc, updated);
239+
TransactionGetResult ryowDoc = ctx.get(collection, docId);
240+
241+
JsonObject oldContent = oldDoc.contentAsObject();
242+
JsonObject replacedContent = replacedDoc.contentAsObject();
243+
JsonObject ryowContent = ryowDoc.contentAsObject();
244+
245+
assertEquals(initial, oldContent);
246+
assertEquals(updated, ryowContent);
247+
assertEquals(updated, replacedContent);
248+
});
249+
250+
assertEquals(updated, collection.get(docId).contentAsObject());
251+
}
252+
228253
@Test
229254
void remove() {
230255
String docId = UUID.randomUUID().toString();

0 commit comments

Comments
 (0)