204
204
import static org .hamcrest .Matchers .hasItem ;
205
205
import static org .hamcrest .Matchers .hasKey ;
206
206
import static org .hamcrest .Matchers .hasSize ;
207
+ import static org .hamcrest .Matchers .in ;
207
208
import static org .hamcrest .Matchers .isIn ;
208
209
import static org .hamcrest .Matchers .lessThanOrEqualTo ;
209
210
import static org .hamcrest .Matchers .not ;
215
216
public class InternalEngineTests extends EngineTestCase {
216
217
217
218
public void testVersionMapAfterAutoIDDocument () throws IOException {
219
+ engine .refresh ("warm_up" );
218
220
ParsedDocument doc = testParsedDocument ("1" , null , testDocumentWithTextField ("test" ),
219
221
new BytesArray ("{}" .getBytes (Charset .defaultCharset ())), null );
220
222
Engine .Index operation = randomBoolean () ?
@@ -926,6 +928,7 @@ public void testConcurrentGetAndFlush() throws Exception {
926
928
}
927
929
928
930
public void testSimpleOperations () throws Exception {
931
+ engine .refresh ("warm_up" );
929
932
Engine .Searcher searchResult = engine .acquireSearcher ("test" );
930
933
MatcherAssert .assertThat (searchResult , EngineSearcherTotalHitsMatcher .engineSearcherTotalHits (0 ));
931
934
searchResult .close ();
@@ -1103,6 +1106,7 @@ public void testSimpleOperations() throws Exception {
1103
1106
}
1104
1107
1105
1108
public void testSearchResultRelease () throws Exception {
1109
+ engine .refresh ("warm_up" );
1106
1110
Engine .Searcher searchResult = engine .acquireSearcher ("test" );
1107
1111
MatcherAssert .assertThat (searchResult , EngineSearcherTotalHitsMatcher .engineSearcherTotalHits (0 ));
1108
1112
searchResult .close ();
@@ -2175,7 +2179,7 @@ public void testVersioningPromotedReplica() throws IOException {
2175
2179
final int opsOnPrimary = assertOpsOnPrimary (primaryOps , finalReplicaVersion , deletedOnReplica , replicaEngine );
2176
2180
final long currentSeqNo = getSequenceID (replicaEngine ,
2177
2181
new Engine .Get (false , false , "type" , lastReplicaOp .uid ().text (), lastReplicaOp .uid ())).v1 ();
2178
- try (Engine .Searcher searcher = engine .acquireSearcher ("test" )) {
2182
+ try (Engine .Searcher searcher = engine .acquireSearcher ("test" , Engine . SearcherScope . INTERNAL )) {
2179
2183
final TotalHitCountCollector collector = new TotalHitCountCollector ();
2180
2184
searcher .search (new MatchAllDocsQuery (), collector );
2181
2185
if (collector .getTotalHits () > 0 ) {
@@ -2740,7 +2744,7 @@ public void testEnableGcDeletes() throws Exception {
2740
2744
}
2741
2745
2742
2746
public void testExtractShardId () {
2743
- try (Engine .Searcher test = this .engine .acquireSearcher ("test" )) {
2747
+ try (Engine .Searcher test = this .engine .acquireSearcher ("test" , Engine . SearcherScope . INTERNAL )) {
2744
2748
ShardId shardId = ShardUtils .extractShardId (test .getDirectoryReader ());
2745
2749
assertNotNull (shardId );
2746
2750
assertEquals (shardId , engine .config ().getShardId ());
@@ -3015,7 +3019,7 @@ public void testSkipTranslogReplay() throws IOException {
3015
3019
engine .close ();
3016
3020
try (InternalEngine engine = new InternalEngine (config )) {
3017
3021
engine .skipTranslogRecovery ();
3018
- try (Engine .Searcher searcher = engine .acquireSearcher ("test" )) {
3022
+ try (Engine .Searcher searcher = engine .acquireSearcher ("test" , Engine . SearcherScope . INTERNAL )) {
3019
3023
TopDocs topDocs = searcher .search (new MatchAllDocsQuery (), randomIntBetween (numDocs , numDocs + 10 ));
3020
3024
assertThat (topDocs .totalHits .value , equalTo (0L ));
3021
3025
}
@@ -3058,6 +3062,7 @@ public void testTranslogReplay() throws IOException {
3058
3062
// we need to reuse the engine config unless the parser.mappingModified won't work
3059
3063
engine = new InternalEngine (copy (engine .config (), inSyncGlobalCheckpointSupplier ));
3060
3064
engine .recoverFromTranslog (translogHandler , Long .MAX_VALUE );
3065
+ engine .refresh ("warm_up" );
3061
3066
3062
3067
assertVisibleCount (engine , numDocs , false );
3063
3068
assertEquals (numDocs , translogHandler .appliedOperations ());
@@ -3071,6 +3076,7 @@ public void testTranslogReplay() throws IOException {
3071
3076
engine .close ();
3072
3077
translogHandler = createTranslogHandler (engine .engineConfig .getIndexSettings ());
3073
3078
engine = createEngine (store , primaryTranslogDir , inSyncGlobalCheckpointSupplier );
3079
+ engine .refresh ("warm_up" );
3074
3080
assertVisibleCount (engine , numDocs , false );
3075
3081
assertEquals (0 , translogHandler .appliedOperations ());
3076
3082
@@ -3100,6 +3106,7 @@ public void testTranslogReplay() throws IOException {
3100
3106
engine .close ();
3101
3107
translogHandler = createTranslogHandler (engine .engineConfig .getIndexSettings ());
3102
3108
engine = createEngine (store , primaryTranslogDir , inSyncGlobalCheckpointSupplier );
3109
+ engine .refresh ("warm_up" );
3103
3110
try (Engine .Searcher searcher = engine .acquireSearcher ("test" )) {
3104
3111
TopDocs topDocs = searcher .search (new MatchAllDocsQuery (), numDocs + 1 );
3105
3112
assertThat (topDocs .totalHits .value , equalTo (numDocs + 1L ));
@@ -4491,7 +4498,7 @@ private void index(final InternalEngine engine, final int id) throws IOException
4491
4498
* second is the primary term.
4492
4499
*/
4493
4500
private Tuple <Long , Long > getSequenceID (Engine engine , Engine .Get get ) throws EngineException {
4494
- try (Engine .Searcher searcher = engine .acquireSearcher ("get" )) {
4501
+ try (Engine .Searcher searcher = engine .acquireSearcher ("get" , Engine . SearcherScope . INTERNAL )) {
4495
4502
final long primaryTerm ;
4496
4503
final long seqNo ;
4497
4504
DocIdAndSeqNo docIdAndSeqNo = VersionsAndSeqNoResolver .loadDocIdAndSeqNo (searcher .getIndexReader (), get .uid ());
@@ -4673,7 +4680,7 @@ public void testRefreshScopedSearcher() throws IOException {
4673
4680
InternalEngine engine =
4674
4681
// disable merges to make sure that the reader doesn't change unexpectedly during the test
4675
4682
createEngine (defaultSettings , store , createTempDir (), NoMergePolicy .INSTANCE )) {
4676
-
4683
+ engine . refresh ( "warm_up" );
4677
4684
try (Engine .Searcher getSearcher = engine .acquireSearcher ("test" , Engine .SearcherScope .INTERNAL );
4678
4685
Engine .Searcher searchSearcher = engine .acquireSearcher ("test" , Engine .SearcherScope .EXTERNAL )) {
4679
4686
assertSameReader (getSearcher , searchSearcher );
@@ -5536,7 +5543,7 @@ protected void doRun() throws Exception {
5536
5543
5537
5544
public void testAcquireSearcherOnClosingEngine () throws Exception {
5538
5545
engine .close ();
5539
- expectThrows (AlreadyClosedException .class , () -> engine .acquireSearcher ("test" ));
5546
+ expectThrows (AlreadyClosedException .class , () -> engine .acquireSearcher ("test" , Engine . SearcherScope . INTERNAL ));
5540
5547
}
5541
5548
5542
5549
public void testNoOpOnClosingEngine () throws Exception {
@@ -6195,4 +6202,59 @@ public void afterRefresh(boolean didRefresh) {
6195
6202
}
6196
6203
}
6197
6204
}
6205
+
6206
+ public void testNotWarmUpSearcherInEngineCtor () throws Exception {
6207
+ try (Store store = createStore ()) {
6208
+ List <ElasticsearchDirectoryReader > warmedUpReaders = new ArrayList <>();
6209
+ Engine .Warmer warmer = reader -> {
6210
+ assertNotNull (reader );
6211
+ assertThat (reader , not (in (warmedUpReaders )));
6212
+ warmedUpReaders .add (reader );
6213
+ };
6214
+ EngineConfig config = engine .config ();
6215
+ final TranslogConfig translogConfig = new TranslogConfig (config .getTranslogConfig ().getShardId (),
6216
+ createTempDir (), config .getTranslogConfig ().getIndexSettings (), config .getTranslogConfig ().getBigArrays ());
6217
+ EngineConfig configWithWarmer = new EngineConfig (config .getShardId (), config .getAllocationId (), config .getThreadPool (),
6218
+ config .getIndexSettings (), warmer , store , config .getMergePolicy (), config .getAnalyzer (),
6219
+ config .getSimilarity (), new CodecService (null , logger ), config .getEventListener (), config .getQueryCache (),
6220
+ config .getQueryCachingPolicy (), translogConfig , config .getFlushMergesAfter (),
6221
+ config .getExternalRefreshListener (), config .getInternalRefreshListener (), config .getIndexSort (),
6222
+ config .getCircuitBreakerService (), config .getGlobalCheckpointSupplier (), config .retentionLeasesSupplier (),
6223
+ config .getPrimaryTermSupplier (), config .getTombstoneDocSupplier ());
6224
+ try (InternalEngine engine = createEngine (configWithWarmer )) {
6225
+ assertThat (warmedUpReaders , empty ());
6226
+ assertThat (expectThrows (Throwable .class , () -> engine .acquireSearcher ("test" )).getMessage (),
6227
+ equalTo ("searcher was not warmed up yet for source[test]" ));
6228
+ int times = randomIntBetween (1 , 10 );
6229
+ for (int i = 0 ; i < times ; i ++) {
6230
+ engine .refresh ("test" );
6231
+ }
6232
+ assertThat (warmedUpReaders , hasSize (1 ));
6233
+ try (Engine .Searcher internalSearcher = engine .acquireSearcher ("test" , Engine .SearcherScope .INTERNAL )) {
6234
+ try (Engine .Searcher externalSearcher = engine .acquireSearcher ("test" , Engine .SearcherScope .EXTERNAL )) {
6235
+ assertSame (internalSearcher .getDirectoryReader (), externalSearcher .getDirectoryReader ());
6236
+ assertSame (warmedUpReaders .get (0 ), externalSearcher .getDirectoryReader ());
6237
+ }
6238
+ }
6239
+ index (engine , randomInt ());
6240
+ if (randomBoolean ()) {
6241
+ engine .refresh ("test" , Engine .SearcherScope .INTERNAL , true );
6242
+ assertThat (warmedUpReaders , hasSize (1 ));
6243
+ try (Engine .Searcher internalSearcher = engine .acquireSearcher ("test" , Engine .SearcherScope .INTERNAL )) {
6244
+ try (Engine .Searcher externalSearcher = engine .acquireSearcher ("test" , Engine .SearcherScope .EXTERNAL )) {
6245
+ assertNotSame (internalSearcher .getDirectoryReader (), externalSearcher .getDirectoryReader ());
6246
+ }
6247
+ }
6248
+ }
6249
+ engine .refresh ("test" );
6250
+ assertThat (warmedUpReaders , hasSize (2 ));
6251
+ try (Engine .Searcher internalSearcher = engine .acquireSearcher ("test" , Engine .SearcherScope .INTERNAL )) {
6252
+ try (Engine .Searcher externalSearcher = engine .acquireSearcher ("test" , Engine .SearcherScope .EXTERNAL )) {
6253
+ assertSame (internalSearcher .getDirectoryReader (), externalSearcher .getDirectoryReader ());
6254
+ assertSame (warmedUpReaders .get (1 ), externalSearcher .getDirectoryReader ());
6255
+ }
6256
+ }
6257
+ }
6258
+ }
6259
+ }
6198
6260
}
0 commit comments