@@ -1478,76 +1478,121 @@ public void testVersioningCreateExistsExceptionWithFlush() {
14781478 }
14791479
14801480 public void testVersioningReplicaConflict1 () {
1481- ParsedDocument doc = testParsedDocument ("1" , "1" , "test" , null , testDocument (), B_1 , null );
1482- Engine .Index index = new Engine .Index (newUid ("1" ), doc );
1483- Engine .IndexResult indexResult = engine .index (index );
1484- assertThat (indexResult .getVersion (), equalTo (1L ));
1481+ final ParsedDocument doc = testParsedDocument ("1" , "1" , "test" , null , testDocument (), B_1 , null );
1482+ final Engine .Index v1Index = new Engine .Index (newUid ("1" ), doc );
1483+ final Engine .IndexResult v1Result = engine .index (v1Index );
1484+ assertThat (v1Result .getVersion (), equalTo (1L ));
14851485
1486- index = new Engine .Index (newUid ("1" ), doc );
1487- indexResult = engine .index (index );
1488- assertThat (indexResult .getVersion (), equalTo (2L ));
1486+ final Engine . Index v2Index = new Engine .Index (newUid ("1" ), doc );
1487+ final Engine . IndexResult v2Result = engine .index (v2Index );
1488+ assertThat (v2Result .getVersion (), equalTo (2L ));
14891489
14901490 // apply the second index to the replica, should work fine
1491- index = new Engine .Index (newUid ("1" ), doc , indexResult .getSeqNo (), index .primaryTerm (), indexResult .getVersion (), VersionType .INTERNAL .versionTypeForReplicationAndRecovery (), REPLICA , 0 , -1 , false );
1492- indexResult = replicaEngine .index (index );
1493- assertThat (indexResult .getVersion (), equalTo (2L ));
1494-
1495- long seqNo = indexResult .getSeqNo ();
1496- long primaryTerm = index .primaryTerm ();
1497- // now, the old one should not work
1498- index = new Engine .Index (newUid ("1" ), doc , seqNo , primaryTerm , 1L , VersionType .INTERNAL .versionTypeForReplicationAndRecovery (), REPLICA , 0 , -1 , false );
1499- indexResult = replicaEngine .index (index );
1500- assertTrue (indexResult .hasFailure ());
1501- assertThat (indexResult .getFailure (), instanceOf (VersionConflictEngineException .class ));
1491+ final Engine .Index replicaV2Index = new Engine .Index (
1492+ newUid ("1" ),
1493+ doc ,
1494+ v2Result .getSeqNo (),
1495+ v2Index .primaryTerm (),
1496+ v2Result .getVersion (),
1497+ VersionType .INTERNAL .versionTypeForReplicationAndRecovery (),
1498+ REPLICA ,
1499+ 0 ,
1500+ -1 ,
1501+ false );
1502+ final Engine .IndexResult replicaV2Result = replicaEngine .index (replicaV2Index );
1503+ assertThat (replicaV2Result .getVersion (), equalTo (2L ));
1504+
1505+ // now, the old one should produce an indexing result
1506+ final Engine .Index replicaV1Index = new Engine .Index (
1507+ newUid ("1" ),
1508+ doc ,
1509+ v1Result .getSeqNo (),
1510+ v1Index .primaryTerm (),
1511+ v1Result .getVersion (),
1512+ VersionType .INTERNAL .versionTypeForReplicationAndRecovery (),
1513+ REPLICA ,
1514+ 0 ,
1515+ -1 ,
1516+ false );
1517+ final Engine .IndexResult replicaV1Result = replicaEngine .index (replicaV1Index );
1518+ assertFalse (replicaV1Result .hasFailure ());
1519+ assertFalse (replicaV1Result .isCreated ());
1520+ assertThat (replicaV1Result .getVersion (), equalTo (2L ));
15021521
15031522 // second version on replica should fail as well
1504- index = new Engine .Index (newUid ("1" ), doc , seqNo , primaryTerm , 2L
1505- , VersionType .INTERNAL .versionTypeForReplicationAndRecovery (), REPLICA , 0 , -1 , false );
1506- indexResult = replicaEngine .index (index );
1507- assertThat (indexResult .getVersion (), equalTo (2L ));
1508- assertThat (indexResult .getFailure (), instanceOf (VersionConflictEngineException .class ));
1523+ final Engine .IndexResult replicaV2ReplayResult = replicaEngine .index (replicaV2Index );
1524+ assertFalse (replicaV2Result .hasFailure ());
1525+ assertFalse (replicaV1Result .isCreated ());
1526+ assertThat (replicaV2ReplayResult .getVersion (), equalTo (2L ));
15091527 }
15101528
15111529 public void testVersioningReplicaConflict2 () {
1512- ParsedDocument doc = testParsedDocument ("1" , "1" , "test" , null , testDocument (), B_1 , null );
1513- Engine .Index index = new Engine .Index (newUid ("1" ), doc );
1514- Engine .IndexResult indexResult = engine .index (index );
1515- assertThat (indexResult .getVersion (), equalTo (1L ));
1530+ final ParsedDocument doc = testParsedDocument ("1" , "1" , "test" , null , testDocument (), B_1 , null );
1531+ final Engine .Index v1Index = new Engine .Index (newUid ("1" ), doc );
1532+ final Engine .IndexResult v1Result = engine .index (v1Index );
1533+ assertThat (v1Result .getVersion (), equalTo (1L ));
15161534
15171535 // apply the first index to the replica, should work fine
1518- index = new Engine .Index (newUid ("1" ), doc , indexResult .getSeqNo (), index .primaryTerm (), 1L ,
1519- VersionType .INTERNAL .versionTypeForReplicationAndRecovery (), REPLICA , 0 , -1 , false );
1520- indexResult = replicaEngine .index (index );
1521- assertThat (indexResult .getVersion (), equalTo (1L ));
1536+ final Engine .Index replicaV1Index = new Engine .Index (
1537+ newUid ("1" ),
1538+ doc ,
1539+ v1Result .getSeqNo (),
1540+ v1Index .primaryTerm (),
1541+ v1Result .getVersion (),
1542+ VersionType .INTERNAL .versionTypeForReplicationAndRecovery (),
1543+ REPLICA ,
1544+ 0 ,
1545+ -1 ,
1546+ false );
1547+ Engine .IndexResult replicaV1Result = replicaEngine .index (replicaV1Index );
1548+ assertThat (replicaV1Result .getVersion (), equalTo (1L ));
15221549
15231550 // index it again
1524- index = new Engine .Index (newUid ("1" ), doc );
1525- indexResult = engine .index (index );
1526- assertThat (indexResult .getVersion (), equalTo (2L ));
1551+ final Engine . Index v2Index = new Engine .Index (newUid ("1" ), doc );
1552+ final Engine . IndexResult v2Result = engine .index (v2Index );
1553+ assertThat (v2Result .getVersion (), equalTo (2L ));
15271554
15281555 // now delete it
1529- Engine .Delete delete = new Engine .Delete ("test" , "1" , newUid ("1" ));
1530- Engine .DeleteResult deleteResult = engine .delete (delete );
1556+ final Engine .Delete delete = new Engine .Delete ("test" , "1" , newUid ("1" ));
1557+ final Engine .DeleteResult deleteResult = engine .delete (delete );
15311558 assertThat (deleteResult .getVersion (), equalTo (3L ));
15321559
15331560 // apply the delete on the replica (skipping the second index)
1534- delete = new Engine .Delete ("test" , "1" , newUid ("1" ), deleteResult .getSeqNo (), delete .primaryTerm (), 3L
1535- , VersionType .INTERNAL .versionTypeForReplicationAndRecovery (), REPLICA , 0 );
1536- deleteResult = replicaEngine .delete (delete );
1537- assertThat (deleteResult .getVersion (), equalTo (3L ));
1538-
1539- // second time delete with same version should fail
1540- delete = new Engine .Delete ("test" , "1" , newUid ("1" ), deleteResult .getSeqNo (), delete .primaryTerm (), 3L
1541- , VersionType .INTERNAL .versionTypeForReplicationAndRecovery (), REPLICA , 0 );
1542- deleteResult = replicaEngine .delete (delete );
1543- assertTrue (deleteResult .hasFailure ());
1544- assertThat (deleteResult .getFailure (), instanceOf (VersionConflictEngineException .class ));
1545-
1546- // now do the second index on the replica, it should fail
1547- index = new Engine .Index (newUid ("1" ), doc , deleteResult .getSeqNo (), delete .primaryTerm (), 2L , VersionType .INTERNAL .versionTypeForReplicationAndRecovery (), REPLICA , 0 , -1 , false );
1548- indexResult = replicaEngine .index (index );
1549- assertTrue (indexResult .hasFailure ());
1550- assertThat (indexResult .getFailure (), instanceOf (VersionConflictEngineException .class ));
1561+ final Engine .Delete replicaDelete = new Engine .Delete (
1562+ "test" ,
1563+ "1" ,
1564+ newUid ("1" ),
1565+ deleteResult .getSeqNo (),
1566+ delete .primaryTerm (),
1567+ deleteResult .getVersion (),
1568+ VersionType .INTERNAL .versionTypeForReplicationAndRecovery (),
1569+ REPLICA ,
1570+ 0 );
1571+ final Engine .DeleteResult replicaDeleteResult = replicaEngine .delete (replicaDelete );
1572+ assertThat (replicaDeleteResult .getVersion (), equalTo (3L ));
1573+
1574+ // second time delete with same version should just produce the same version
1575+ final Engine .DeleteResult deleteReplayResult = replicaEngine .delete (replicaDelete );
1576+ assertFalse (deleteReplayResult .hasFailure ());
1577+ assertTrue (deleteReplayResult .isFound ());
1578+ assertThat (deleteReplayResult .getVersion (), equalTo (3L ));
1579+
1580+ // now do the second index on the replica, it should result in the current version
1581+ final Engine .Index replicaV2Index = new Engine .Index (
1582+ newUid ("1" ),
1583+ doc ,
1584+ v2Result .getSeqNo (),
1585+ v2Index .primaryTerm (),
1586+ v2Result .getVersion (),
1587+ VersionType .INTERNAL .versionTypeForReplicationAndRecovery (),
1588+ REPLICA ,
1589+ 0 ,
1590+ -1 ,
1591+ false );
1592+ final Engine .IndexResult replicaV2Result = replicaEngine .index (replicaV2Index );
1593+ assertFalse (replicaV2Result .hasFailure ());
1594+ assertFalse (replicaV2Result .isCreated ());
1595+ assertThat (replicaV2Result .getVersion (), equalTo (3L ));
15511596 }
15521597
15531598 public void testBasicCreatedFlag () {
0 commit comments