@@ -1264,18 +1264,18 @@ private ReaderContext findReaderContext(ShardSearchContextId id, TransportReques
1264
1264
}
1265
1265
1266
1266
final ReaderContext createOrGetReaderContext (ShardSearchRequest request ) {
1267
+ ShardSearchContextId readerId = request .readerId ();
1267
1268
if (request .readerId () != null ) {
1268
1269
try {
1269
- return findReaderContext (request . readerId () , request );
1270
+ return findReaderContext (readerId , request );
1270
1271
} catch (SearchContextMissingException e ) {
1271
- final String searcherId = request .readerId ().getSearcherId ();
1272
- if (searcherId == null ) {
1272
+ if (readerId .isRetryable () == false ) {
1273
1273
throw e ;
1274
1274
}
1275
1275
final IndexService indexService = indicesService .indexServiceSafe (request .shardId ().getIndex ());
1276
1276
final IndexShard shard = indexService .getShard (request .shardId ().id ());
1277
1277
final Engine .SearcherSupplier searcherSupplier = shard .acquireSearcherSupplier ();
1278
- if (searcherId . equals (searcherSupplier .getSearcherId ()) == false ) {
1278
+ if (readerId . sameSearcherIdsAs (searcherSupplier .getSearcherId ()) == false ) {
1279
1279
searcherSupplier .close ();
1280
1280
throw e ;
1281
1281
}
@@ -1298,8 +1298,8 @@ final ReaderContext createAndPutReaderContext(
1298
1298
ReaderContext readerContext = null ;
1299
1299
Releasable decreaseScrollContexts = null ;
1300
1300
try {
1301
- final ShardSearchContextId id = new ShardSearchContextId (sessionId , idGenerator .incrementAndGet ());
1302
1301
if (request .scroll () != null ) {
1302
+ final ShardSearchContextId id = new ShardSearchContextId (sessionId , idGenerator .incrementAndGet ());
1303
1303
decreaseScrollContexts = openScrollContexts ::decrementAndGet ;
1304
1304
if (openScrollContexts .incrementAndGet () > maxOpenScrollContext ) {
1305
1305
throw new TooManyScrollContextsException (maxOpenScrollContext , MAX_OPEN_SCROLL_CONTEXT .getKey ());
@@ -1308,6 +1308,7 @@ final ReaderContext createAndPutReaderContext(
1308
1308
readerContext .addOnClose (decreaseScrollContexts );
1309
1309
decreaseScrollContexts = null ;
1310
1310
} else {
1311
+ final ShardSearchContextId id = new ShardSearchContextId (sessionId , idGenerator .incrementAndGet (), reader .getSearcherId ());
1311
1312
readerContext = new ReaderContext (id , indexService , shard , reader , keepAliveInMillis , true );
1312
1313
}
1313
1314
reader = null ;
@@ -1399,7 +1400,7 @@ public SearchContext createSearchContext(ShardSearchRequest request, TimeValue t
1399
1400
final IndexService indexService = indicesService .indexServiceSafe (request .shardId ().getIndex ());
1400
1401
final IndexShard indexShard = indexService .getShard (request .shardId ().getId ());
1401
1402
final Engine .SearcherSupplier reader = indexShard .acquireSearcherSupplier ();
1402
- final ShardSearchContextId id = new ShardSearchContextId (sessionId , idGenerator .incrementAndGet ());
1403
+ final ShardSearchContextId id = new ShardSearchContextId (sessionId , idGenerator .incrementAndGet (), reader . getSearcherId () );
1403
1404
try (ReaderContext readerContext = new ReaderContext (id , indexService , indexShard , reader , -1L , true )) {
1404
1405
DefaultSearchContext searchContext = createSearchContext (readerContext , request , timeout , ResultsType .NONE );
1405
1406
searchContext .addReleasable (readerContext .markAsUsed (0L ));
@@ -2037,8 +2038,7 @@ static CanMatchShardResponse canMatch(CanMatchContext canMatchContext, boolean c
2037
2038
}
2038
2039
searcher = readerContext .acquireSearcher (Engine .CAN_MATCH_SEARCH_SOURCE );
2039
2040
} catch (SearchContextMissingException e ) {
2040
- final String searcherId = canMatchContext .request .readerId ().getSearcherId ();
2041
- if (searcherId == null ) {
2041
+ if (canMatchContext .request .readerId ().isRetryable () == false ) {
2042
2042
return new CanMatchShardResponse (true , null );
2043
2043
}
2044
2044
if (queryStillMatchesAfterRewrite (
@@ -2048,7 +2048,7 @@ static CanMatchShardResponse canMatch(CanMatchContext canMatchContext, boolean c
2048
2048
return new CanMatchShardResponse (false , null );
2049
2049
}
2050
2050
final Engine .SearcherSupplier searcherSupplier = canMatchContext .getShard ().acquireSearcherSupplier ();
2051
- if (searcherId . equals (searcherSupplier .getSearcherId ()) == false ) {
2051
+ if (canMatchContext . request . readerId (). sameSearcherIdsAs (searcherSupplier .getSearcherId ()) == false ) {
2052
2052
searcherSupplier .close ();
2053
2053
return new CanMatchShardResponse (true , null );
2054
2054
}
0 commit comments