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