@@ -1811,10 +1811,13 @@ public void testVersionOnPrimaryWithConcurrentRefresh() throws Exception {
1811
1811
}
1812
1812
});
1813
1813
refreshThread .start ();
1814
- latch .await ();
1815
- assertOpsOnPrimary (ops , Versions .NOT_FOUND , true , engine );
1816
- running .set (false );
1817
- refreshThread .join ();
1814
+ try {
1815
+ latch .await ();
1816
+ assertOpsOnPrimary (ops , Versions .NOT_FOUND , true , engine );
1817
+ } finally {
1818
+ running .set (false );
1819
+ refreshThread .join ();
1820
+ }
1818
1821
}
1819
1822
1820
1823
private int assertOpsOnPrimary (List <Engine .Operation > ops , long currentOpVersion , boolean docDeleted , InternalEngine engine )
@@ -1824,7 +1827,7 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1824
1827
long lastOpVersion = currentOpVersion ;
1825
1828
long lastOpSeqNo = UNASSIGNED_SEQ_NO ;
1826
1829
long lastOpTerm = UNASSIGNED_PRIMARY_TERM ;
1827
- final AtomicLong currentTerm = new AtomicLong ( 1 );
1830
+ PrimaryTermSupplier currentTerm = ( PrimaryTermSupplier ) engine . engineConfig . getPrimaryTermSupplier ( );
1828
1831
BiFunction <Long , Engine .Index , Engine .Index > indexWithVersion = (version , index ) -> new Engine .Index (index .uid (), index .parsedDoc (),
1829
1832
UNASSIGNED_SEQ_NO , currentTerm .get (), version , index .versionType (), index .origin (), index .startTime (),
1830
1833
index .getAutoGeneratedIdTimestamp (), index .isRetry (), UNASSIGNED_SEQ_NO , 0 );
@@ -1837,6 +1840,12 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1837
1840
TriFunction <Long , Long , Engine .Delete , Engine .Delete > delWithSeq = (seqNo , term , delete ) -> new Engine .Delete (delete .type (),
1838
1841
delete .id (), delete .uid (), UNASSIGNED_SEQ_NO , currentTerm .get (), delete .version (), delete .versionType (), delete .origin (),
1839
1842
delete .startTime (), seqNo , term );
1843
+ Function <Engine .Index , Engine .Index > indexWithCurrentTerm = index -> new Engine .Index (index .uid (),
1844
+ index .parsedDoc (), UNASSIGNED_SEQ_NO , currentTerm .get (), index .version (), index .versionType (), index .origin (),
1845
+ index .startTime (), index .getAutoGeneratedIdTimestamp (), index .isRetry (), index .getIfSeqNo (), index .getIfPrimaryTerm ());
1846
+ Function <Engine .Delete , Engine .Delete > deleteWithCurrentTerm = delete -> new Engine .Delete (delete .type (),
1847
+ delete .id (), delete .uid (), UNASSIGNED_SEQ_NO , currentTerm .get (), delete .version (), delete .versionType (), delete .origin (),
1848
+ delete .startTime (), delete .getIfSeqNo (), delete .getIfPrimaryTerm ());
1840
1849
for (Engine .Operation op : ops ) {
1841
1850
final boolean versionConflict = rarely ();
1842
1851
final boolean versionedOp = versionConflict || randomBoolean ();
@@ -1848,7 +1857,8 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1848
1857
lastOpSeqNo ;
1849
1858
final long conflictingTerm = conflictingSeqNo == lastOpSeqNo || randomBoolean () ? lastOpTerm + 1 : lastOpTerm ;
1850
1859
if (rarely ()) {
1851
- currentTerm .incrementAndGet ();
1860
+ currentTerm .set (currentTerm .get () + 1L );
1861
+ engine .rollTranslogGeneration ();
1852
1862
}
1853
1863
final long correctVersion = docDeleted && randomBoolean () ? Versions .MATCH_DELETED : lastOpVersion ;
1854
1864
logger .info ("performing [{}]{}{}" ,
@@ -1879,7 +1889,7 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1879
1889
result = engine .index (indexWithVersion .apply (correctVersion , index ));
1880
1890
}
1881
1891
} else {
1882
- result = engine .index (index );
1892
+ result = engine .index (indexWithCurrentTerm . apply ( index ) );
1883
1893
}
1884
1894
assertThat (result .isCreated (), equalTo (docDeleted ));
1885
1895
assertThat (result .getVersion (), equalTo (Math .max (lastOpVersion + 1 , 1 )));
@@ -1913,16 +1923,16 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1913
1923
} else if (versionedOp ) {
1914
1924
result = engine .delete (delWithVersion .apply (correctVersion , delete ));
1915
1925
} else {
1916
- result = engine .delete (delete );
1926
+ result = engine .delete (deleteWithCurrentTerm . apply ( delete ) );
1917
1927
}
1918
1928
assertThat (result .isFound (), equalTo (docDeleted == false ));
1919
1929
assertThat (result .getVersion (), equalTo (Math .max (lastOpVersion + 1 , 1 )));
1920
1930
assertThat (result .getResultType (), equalTo (Engine .Result .Type .SUCCESS ));
1921
1931
assertThat (result .getFailure (), nullValue ());
1922
1932
docDeleted = true ;
1923
1933
lastOpVersion = result .getVersion ();
1924
- lastOpSeqNo = UNASSIGNED_SEQ_NO ;
1925
- lastOpTerm = UNASSIGNED_PRIMARY_TERM ;
1934
+ lastOpSeqNo = result . getSeqNo () ;
1935
+ lastOpTerm = result . getTerm () ;
1926
1936
opsPerformed ++;
1927
1937
}
1928
1938
}
@@ -1950,6 +1960,8 @@ private int assertOpsOnPrimary(List<Engine.Operation> ops, long currentOpVersion
1950
1960
engine .clearDeletedTombstones ();
1951
1961
if (docDeleted ) {
1952
1962
lastOpVersion = Versions .NOT_FOUND ;
1963
+ lastOpSeqNo = UNASSIGNED_SEQ_NO ;
1964
+ lastOpTerm = UNASSIGNED_PRIMARY_TERM ;
1953
1965
}
1954
1966
}
1955
1967
}
0 commit comments