@@ -478,19 +478,22 @@ public void beforeIndexShardCreated(ShardRouting routing, Settings indexSettings
478478 }
479479
480480 protected void putReaderContext (ReaderContext context ) {
481- final ReaderContext previous = activeReaders .put (context .id ().getId (), context );
481+ final long id = context .id ().getId ();
482+ final ReaderContext previous = activeReaders .put (id , context );
482483 assert previous == null ;
483484 // ensure that if we race against afterIndexRemoved, we remove the context from the active list.
484485 // this is important to ensure store can be cleaned up, in particular if the search is a scroll with a long timeout.
485486 final Index index = context .indexShard ().shardId ().getIndex ();
486487 if (indicesService .hasIndex (index ) == false ) {
487- removeReaderContext (context . id (). getId () );
488+ removeReaderContext (id );
488489 throw new IndexNotFoundException (index );
489490 }
490491 }
491492
492493 protected ReaderContext removeReaderContext (long id ) {
493- logger .trace ("removing reader context [{}]" , id );
494+ if (logger .isTraceEnabled ()) {
495+ logger .trace ("removing reader context [{}]" , id );
496+ }
494497 return activeReaders .remove (id );
495498 }
496499
@@ -671,12 +674,10 @@ private void searchReady() {
671674
672675 private IndexShard getShard (ShardSearchRequest request ) {
673676 final ShardSearchContextId contextId = request .readerId ();
674- if (contextId != null ) {
675- if (sessionId .equals (contextId .getSessionId ())) {
676- final ReaderContext readerContext = activeReaders .get (contextId .getId ());
677- if (readerContext != null ) {
678- return readerContext .indexShard ();
679- }
677+ if (contextId != null && sessionId .equals (contextId .getSessionId ())) {
678+ final ReaderContext readerContext = activeReaders .get (contextId .getId ());
679+ if (readerContext != null ) {
680+ return readerContext .indexShard ();
680681 }
681682 }
682683 return indicesService .indexServiceSafe (request .shardId ().getIndex ()).getShard (request .shardId ().id ());
@@ -990,13 +991,11 @@ final ReaderContext createOrGetReaderContext(ShardSearchRequest request) {
990991 }
991992 return createAndPutReaderContext (request , indexService , shard , searcherSupplier , defaultKeepAlive );
992993 }
993- } else {
994- final long keepAliveInMillis = getKeepAlive (request );
995- final IndexService indexService = indicesService .indexServiceSafe (request .shardId ().getIndex ());
996- final IndexShard shard = indexService .getShard (request .shardId ().id ());
997- final Engine .SearcherSupplier searcherSupplier = shard .acquireSearcherSupplier ();
998- return createAndPutReaderContext (request , indexService , shard , searcherSupplier , keepAliveInMillis );
999994 }
995+ final long keepAliveInMillis = getKeepAlive (request );
996+ final IndexService indexService = indicesService .indexServiceSafe (request .shardId ().getIndex ());
997+ final IndexShard shard = indexService .getShard (request .shardId ().id ());
998+ return createAndPutReaderContext (request , indexService , shard , shard .acquireSearcherSupplier (), keepAliveInMillis );
1000999 }
10011000
10021001 final ReaderContext createAndPutReaderContext (
@@ -1009,19 +1008,15 @@ final ReaderContext createAndPutReaderContext(
10091008 ReaderContext readerContext = null ;
10101009 Releasable decreaseScrollContexts = null ;
10111010 try {
1011+ final ShardSearchContextId id = new ShardSearchContextId (sessionId , idGenerator .incrementAndGet ());
10121012 if (request .scroll () != null ) {
10131013 decreaseScrollContexts = openScrollContexts ::decrementAndGet ;
10141014 if (openScrollContexts .incrementAndGet () > maxOpenScrollContext ) {
10151015 throw new TooManyScrollContextsException (maxOpenScrollContext , MAX_OPEN_SCROLL_CONTEXT .getKey ());
10161016 }
1017- }
1018- final ShardSearchContextId id = new ShardSearchContextId (sessionId , idGenerator .incrementAndGet ());
1019- if (request .scroll () != null ) {
10201017 readerContext = new LegacyReaderContext (id , indexService , shard , reader , request , keepAliveInMillis );
1021- if (request .scroll () != null ) {
1022- readerContext .addOnClose (decreaseScrollContexts );
1023- decreaseScrollContexts = null ;
1024- }
1018+ readerContext .addOnClose (decreaseScrollContexts );
1019+ decreaseScrollContexts = null ;
10251020 } else {
10261021 readerContext = new ReaderContext (id , indexService , shard , reader , keepAliveInMillis , true );
10271022 }
@@ -1031,16 +1026,9 @@ final ReaderContext createAndPutReaderContext(
10311026 searchOperationListener .onNewReaderContext (finalReaderContext );
10321027 if (finalReaderContext .scrollContext () != null ) {
10331028 searchOperationListener .onNewScrollContext (finalReaderContext );
1029+ readerContext .addOnClose (() -> searchOperationListener .onFreeScrollContext (finalReaderContext ));
10341030 }
1035- readerContext .addOnClose (() -> {
1036- try {
1037- if (finalReaderContext .scrollContext () != null ) {
1038- searchOperationListener .onFreeScrollContext (finalReaderContext );
1039- }
1040- } finally {
1041- searchOperationListener .onFreeReaderContext (finalReaderContext );
1042- }
1043- });
1031+ readerContext .addOnClose (() -> searchOperationListener .onFreeReaderContext (finalReaderContext ));
10441032 putReaderContext (finalReaderContext );
10451033 readerContext = null ;
10461034 return finalReaderContext ;
0 commit comments