Skip to content

Commit 3d4e1c3

Browse files
authored
Merge pull request #5406 from Sage-Bionetworks/release-562
Release 562
2 parents 7b5058a + cbc023e commit 3d4e1c3

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

services/repository-managers/src/main/java/org/sagebionetworks/repo/manager/grid/internal/replica/change/InsertRowChangeHandler.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,13 @@ public IntendedChangeType getType() {
2525
public void handleChange(PatchBuilder builder, InsertRowChange change) {
2626
JSONArray rowData = change.getRowData();
2727
Integer[] rowVectorIndex = change.getRowVectorIndex();
28-
28+
29+
// The vector that contains the row data is wrapped into an object as the "data" key value.
30+
// We need to create the object before the vector because the row object node id needs to be
31+
// smaller than the vector id for the LWW insertion routine to succeed
32+
// (See https://jsonjoy.com/specs/json-crdt/model-document/crdt-algorithms#Last-Write-Wins-(LWW)-CRDT-Algorithm)
33+
LogicalTimestamp rowObjectId = builder.addOperationBuilder(Operations.newObject());
34+
2935
// First creates the vector that represents the new row
3036
LogicalTimestamp rowVecId = builder.addOperationBuilder(Operations.newVector());
3137
Map<Integer, LogicalTimestamp> newVecConstantMap = new HashMap<>(rowData.length());
@@ -41,9 +47,6 @@ public void handleChange(PatchBuilder builder, InsertRowChange change) {
4147
// Add the data to the vector
4248
builder.addOperationBuilder(Operations.insertVector().setVectorId(rowVecId).setMap(newVecConstantMap));
4349

44-
// The vector is wrapped into an object
45-
LogicalTimestamp rowObjectId = builder.addOperationBuilder(Operations.newObject());
46-
4750
builder.addOperationBuilder(Operations.insertObject()
4851
.setObjectId(rowObjectId)
4952
.setMap(Map.of("data", rowVecId))

services/repository-managers/src/test/java/org/sagebionetworks/repo/manager/grid/internal/replica/change/InsertRowChangeHandlerTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public void before() {
4444
public void testHandleChange() {
4545
Long repId = 5L;
4646

47+
LogicalTimestamp rowObjId = new LogicalTimestamp().setReplicaId(repId).setSequenceNumber(5L);
48+
49+
when(mockPatchBuilder.addOperationBuilder(Operations.newObject())).thenReturn(rowObjId);
50+
4751
LogicalTimestamp rowVecId = new LogicalTimestamp().setReplicaId(repId).setSequenceNumber(6L);
4852

4953
when(mockPatchBuilder.addOperationBuilder(Operations.newVector())).thenReturn(rowVecId);
@@ -53,7 +57,7 @@ public void testHandleChange() {
5357
for (int i=0; i<change.getRowData().length(); i++) {
5458
Object value = change.getRowData().get(i);
5559

56-
LogicalTimestamp constId = new LogicalTimestamp().setReplicaId(repId).setSequenceNumber(20L + i);
60+
LogicalTimestamp constId = new LogicalTimestamp().setReplicaId(repId).setSequenceNumber(7L + i);
5761

5862
when(mockPatchBuilder.addOperationBuilder(Operations.newConstant().setValue(new ConValue(ConType.STRING, value))))
5963
.thenReturn(constId);
@@ -64,10 +68,6 @@ public void testHandleChange() {
6468
when(mockPatchBuilder.addOperationBuilder(Operations.insertVector().setVectorId(rowVecId).setMap(constMap)))
6569
.thenReturn(new LogicalTimestamp().setReplicaId(repId).setSequenceNumber(30L));
6670

67-
LogicalTimestamp rowObjId = new LogicalTimestamp().setReplicaId(repId).setSequenceNumber(40L);
68-
69-
when(mockPatchBuilder.addOperationBuilder(Operations.newObject())).thenReturn(rowObjId);
70-
7171
when(mockPatchBuilder.addOperationBuilder(Operations.insertObject()
7272
.setObjectId(rowObjId)
7373
.setMap(Map.of("data", rowVecId))

0 commit comments

Comments
 (0)