@@ -462,19 +462,22 @@ public void beforeIndexShardCreated(ShardRouting routing, Settings indexSettings
462
462
}
463
463
464
464
protected void putReaderContext (ReaderContext context ) {
465
- final ReaderContext previous = activeReaders .put (context .id ().getId (), context );
465
+ final long id = context .id ().getId ();
466
+ final ReaderContext previous = activeReaders .put (id , context );
466
467
assert previous == null ;
467
468
// ensure that if we race against afterIndexRemoved, we remove the context from the active list.
468
469
// this is important to ensure store can be cleaned up, in particular if the search is a scroll with a long timeout.
469
470
final Index index = context .indexShard ().shardId ().getIndex ();
470
471
if (indicesService .hasIndex (index ) == false ) {
471
- removeReaderContext (context . id (). getId () );
472
+ removeReaderContext (id );
472
473
throw new IndexNotFoundException (index );
473
474
}
474
475
}
475
476
476
477
protected ReaderContext removeReaderContext (long id ) {
477
- logger .trace ("removing reader context [{}]" , id );
478
+ if (logger .isTraceEnabled ()) {
479
+ logger .trace ("removing reader context [{}]" , id );
480
+ }
478
481
return activeReaders .remove (id );
479
482
}
480
483
@@ -651,12 +654,10 @@ private void searchReady() {
651
654
652
655
private IndexShard getShard (ShardSearchRequest request ) {
653
656
final ShardSearchContextId contextId = request .readerId ();
654
- if (contextId != null ) {
655
- if (sessionId .equals (contextId .getSessionId ())) {
656
- final ReaderContext readerContext = activeReaders .get (contextId .getId ());
657
- if (readerContext != null ) {
658
- return readerContext .indexShard ();
659
- }
657
+ if (contextId != null && sessionId .equals (contextId .getSessionId ())) {
658
+ final ReaderContext readerContext = activeReaders .get (contextId .getId ());
659
+ if (readerContext != null ) {
660
+ return readerContext .indexShard ();
660
661
}
661
662
}
662
663
return indicesService .indexServiceSafe (request .shardId ().getIndex ()).getShard (request .shardId ().id ());
@@ -970,13 +971,11 @@ final ReaderContext createOrGetReaderContext(ShardSearchRequest request) {
970
971
}
971
972
return createAndPutReaderContext (request , indexService , shard , searcherSupplier , defaultKeepAlive );
972
973
}
973
- } else {
974
- final long keepAliveInMillis = getKeepAlive (request );
975
- final IndexService indexService = indicesService .indexServiceSafe (request .shardId ().getIndex ());
976
- final IndexShard shard = indexService .getShard (request .shardId ().id ());
977
- final Engine .SearcherSupplier searcherSupplier = shard .acquireSearcherSupplier ();
978
- return createAndPutReaderContext (request , indexService , shard , searcherSupplier , keepAliveInMillis );
979
974
}
975
+ final long keepAliveInMillis = getKeepAlive (request );
976
+ final IndexService indexService = indicesService .indexServiceSafe (request .shardId ().getIndex ());
977
+ final IndexShard shard = indexService .getShard (request .shardId ().id ());
978
+ return createAndPutReaderContext (request , indexService , shard , shard .acquireSearcherSupplier (), keepAliveInMillis );
980
979
}
981
980
982
981
final ReaderContext createAndPutReaderContext (
@@ -989,19 +988,15 @@ final ReaderContext createAndPutReaderContext(
989
988
ReaderContext readerContext = null ;
990
989
Releasable decreaseScrollContexts = null ;
991
990
try {
991
+ final ShardSearchContextId id = new ShardSearchContextId (sessionId , idGenerator .incrementAndGet ());
992
992
if (request .scroll () != null ) {
993
993
decreaseScrollContexts = openScrollContexts ::decrementAndGet ;
994
994
if (openScrollContexts .incrementAndGet () > maxOpenScrollContext ) {
995
995
throw new TooManyScrollContextsException (maxOpenScrollContext , MAX_OPEN_SCROLL_CONTEXT .getKey ());
996
996
}
997
- }
998
- final ShardSearchContextId id = new ShardSearchContextId (sessionId , idGenerator .incrementAndGet ());
999
- if (request .scroll () != null ) {
1000
997
readerContext = new LegacyReaderContext (id , indexService , shard , reader , request , keepAliveInMillis );
1001
- if (request .scroll () != null ) {
1002
- readerContext .addOnClose (decreaseScrollContexts );
1003
- decreaseScrollContexts = null ;
1004
- }
998
+ readerContext .addOnClose (decreaseScrollContexts );
999
+ decreaseScrollContexts = null ;
1005
1000
} else {
1006
1001
readerContext = new ReaderContext (id , indexService , shard , reader , keepAliveInMillis , true );
1007
1002
}
@@ -1011,16 +1006,9 @@ final ReaderContext createAndPutReaderContext(
1011
1006
searchOperationListener .onNewReaderContext (finalReaderContext );
1012
1007
if (finalReaderContext .scrollContext () != null ) {
1013
1008
searchOperationListener .onNewScrollContext (finalReaderContext );
1009
+ readerContext .addOnClose (() -> searchOperationListener .onFreeScrollContext (finalReaderContext ));
1014
1010
}
1015
- readerContext .addOnClose (() -> {
1016
- try {
1017
- if (finalReaderContext .scrollContext () != null ) {
1018
- searchOperationListener .onFreeScrollContext (finalReaderContext );
1019
- }
1020
- } finally {
1021
- searchOperationListener .onFreeReaderContext (finalReaderContext );
1022
- }
1023
- });
1011
+ readerContext .addOnClose (() -> searchOperationListener .onFreeReaderContext (finalReaderContext ));
1024
1012
putReaderContext (finalReaderContext );
1025
1013
readerContext = null ;
1026
1014
return finalReaderContext ;
0 commit comments