@@ -1792,10 +1792,13 @@ public void testVersionOnPrimaryWithConcurrentRefresh() throws Exception {
1792
1792
}
1793
1793
});
1794
1794
refreshThread .start ();
1795
- latch .await ();
1796
- assertOpsOnPrimary (ops , Versions .NOT_FOUND , true , engine );
1797
- running .set (false );
1798
- refreshThread .join ();
1795
+ try {
1796
+ latch .await ();
1797
+ assertOpsOnPrimary (ops , Versions .NOT_FOUND , true , engine );
1798
+ } finally {
1799
+ running .set (false );
1800
+ refreshThread .join ();
1801
+ }
1799
1802
}
1800
1803
1801
1804
private int assertOpsOnPrimary (List <Engine .Operation > ops , long currentOpVersion , boolean docDeleted , InternalEngine engine )
@@ -1805,7 +1808,7 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1805
1808
long lastOpVersion = currentOpVersion ;
1806
1809
long lastOpSeqNo = UNASSIGNED_SEQ_NO ;
1807
1810
long lastOpTerm = UNASSIGNED_PRIMARY_TERM ;
1808
- final AtomicLong currentTerm = new AtomicLong ( 1 );
1811
+ PrimaryTermSupplier currentTerm = ( PrimaryTermSupplier ) engine . engineConfig . getPrimaryTermSupplier ( );
1809
1812
BiFunction <Long , Engine .Index , Engine .Index > indexWithVersion = (version , index ) -> new Engine .Index (index .uid (), index .parsedDoc (),
1810
1813
UNASSIGNED_SEQ_NO , currentTerm .get (), version , index .versionType (), index .origin (), index .startTime (),
1811
1814
index .getAutoGeneratedIdTimestamp (), index .isRetry (), UNASSIGNED_SEQ_NO , 0 );
@@ -1818,6 +1821,12 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1818
1821
TriFunction <Long , Long , Engine .Delete , Engine .Delete > delWithSeq = (seqNo , term , delete ) -> new Engine .Delete (delete .type (),
1819
1822
delete .id (), delete .uid (), UNASSIGNED_SEQ_NO , currentTerm .get (), delete .version (), delete .versionType (), delete .origin (),
1820
1823
delete .startTime (), seqNo , term );
1824
+ Function <Engine .Index , Engine .Index > indexWithCurrentTerm = index -> new Engine .Index (index .uid (),
1825
+ index .parsedDoc (), UNASSIGNED_SEQ_NO , currentTerm .get (), index .version (), index .versionType (), index .origin (),
1826
+ index .startTime (), index .getAutoGeneratedIdTimestamp (), index .isRetry (), index .getIfSeqNo (), index .getIfPrimaryTerm ());
1827
+ Function <Engine .Delete , Engine .Delete > deleteWithCurrentTerm = delete -> new Engine .Delete (delete .type (),
1828
+ delete .id (), delete .uid (), UNASSIGNED_SEQ_NO , currentTerm .get (), delete .version (), delete .versionType (), delete .origin (),
1829
+ delete .startTime (), delete .getIfSeqNo (), delete .getIfPrimaryTerm ());
1821
1830
for (Engine .Operation op : ops ) {
1822
1831
final boolean versionConflict = rarely ();
1823
1832
final boolean versionedOp = versionConflict || randomBoolean ();
@@ -1829,7 +1838,8 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1829
1838
lastOpSeqNo ;
1830
1839
final long conflictingTerm = conflictingSeqNo == lastOpSeqNo || randomBoolean () ? lastOpTerm + 1 : lastOpTerm ;
1831
1840
if (rarely ()) {
1832
- currentTerm .incrementAndGet ();
1841
+ currentTerm .set (currentTerm .get () + 1L );
1842
+ engine .rollTranslogGeneration ();
1833
1843
}
1834
1844
final long correctVersion = docDeleted && randomBoolean () ? Versions .MATCH_DELETED : lastOpVersion ;
1835
1845
logger .info ("performing [{}]{}{}" ,
@@ -1860,7 +1870,7 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1860
1870
result = engine .index (indexWithVersion .apply (correctVersion , index ));
1861
1871
}
1862
1872
} else {
1863
- result = engine .index (index );
1873
+ result = engine .index (indexWithCurrentTerm . apply ( index ) );
1864
1874
}
1865
1875
assertThat (result .isCreated (), equalTo (docDeleted ));
1866
1876
assertThat (result .getVersion (), equalTo (Math .max (lastOpVersion + 1 , 1 )));
@@ -1894,16 +1904,16 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1894
1904
} else if (versionedOp ) {
1895
1905
result = engine .delete (delWithVersion .apply (correctVersion , delete ));
1896
1906
} else {
1897
- result = engine .delete (delete );
1907
+ result = engine .delete (deleteWithCurrentTerm . apply ( delete ) );
1898
1908
}
1899
1909
assertThat (result .isFound (), equalTo (docDeleted == false ));
1900
1910
assertThat (result .getVersion (), equalTo (Math .max (lastOpVersion + 1 , 1 )));
1901
1911
assertThat (result .getResultType (), equalTo (Engine .Result .Type .SUCCESS ));
1902
1912
assertThat (result .getFailure (), nullValue ());
1903
1913
docDeleted = true ;
1904
1914
lastOpVersion = result .getVersion ();
1905
- lastOpSeqNo = UNASSIGNED_SEQ_NO ;
1906
- lastOpTerm = UNASSIGNED_PRIMARY_TERM ;
1915
+ lastOpSeqNo = result . getSeqNo () ;
1916
+ lastOpTerm = result . getTerm () ;
1907
1917
opsPerformed ++;
1908
1918
}
1909
1919
}
@@ -1931,6 +1941,8 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1931
1941
engine .clearDeletedTombstones ();
1932
1942
if (docDeleted ) {
1933
1943
lastOpVersion = Versions .NOT_FOUND ;
1944
+ lastOpSeqNo = UNASSIGNED_SEQ_NO ;
1945
+ lastOpTerm = UNASSIGNED_PRIMARY_TERM ;
1934
1946
}
1935
1947
}
1936
1948
}
0 commit comments