| 
95 | 95 | import org.elasticsearch.search.aggregations.support.ValueType;  | 
96 | 96 | import org.elasticsearch.search.builder.PointInTimeBuilder;  | 
97 | 97 | import org.elasticsearch.search.builder.SearchSourceBuilder;  | 
98 |  | -import org.elasticsearch.search.collapse.CollapseBuilder;  | 
99 | 98 | import org.elasticsearch.search.dfs.AggregatedDfs;  | 
100 | 99 | import org.elasticsearch.search.fetch.FetchSearchResult;  | 
101 | 100 | import org.elasticsearch.search.fetch.ShardFetchRequest;  | 
 | 
124 | 123 | import org.elasticsearch.search.rank.feature.RankFeatureResult;  | 
125 | 124 | import org.elasticsearch.search.rank.feature.RankFeatureShardRequest;  | 
126 | 125 | import org.elasticsearch.search.rank.feature.RankFeatureShardResult;  | 
127 |  | -import org.elasticsearch.search.slice.SliceBuilder;  | 
128 | 126 | import org.elasticsearch.search.suggest.SuggestBuilder;  | 
129 | 127 | import org.elasticsearch.tasks.TaskCancelHelper;  | 
130 | 128 | import org.elasticsearch.tasks.TaskCancelledException;  | 
@@ -2930,119 +2928,6 @@ public void testSlicingBehaviourForParallelCollection() throws Exception {  | 
2930 | 2928 |         }  | 
2931 | 2929 |     }  | 
2932 | 2930 | 
 
  | 
2933 |  | -    /**  | 
2934 |  | -     * This method tests validation that happens on the data nodes, which is now performed on the coordinating node.  | 
2935 |  | -     * We still need the validation to cover for mixed cluster scenarios where the coordinating node does not perform the check yet.  | 
2936 |  | -     */  | 
2937 |  | -    public void testParseSourceValidation() {  | 
2938 |  | -        String index = randomAlphaOfLengthBetween(5, 10).toLowerCase(Locale.ROOT);  | 
2939 |  | -        IndexService indexService = createIndex(index);  | 
2940 |  | -        final SearchService service = getInstanceFromNode(SearchService.class);  | 
2941 |  | -        {  | 
2942 |  | -            // scroll and search_after  | 
2943 |  | -            SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());  | 
2944 |  | -            searchRequest.scroll(new TimeValue(1000));  | 
2945 |  | -            searchRequest.source().searchAfter(new String[] { "value" });  | 
2946 |  | -            assertCreateContextValidation(searchRequest, "`search_after` cannot be used in a scroll context.", indexService, service);  | 
2947 |  | -        }  | 
2948 |  | -        {  | 
2949 |  | -            // scroll and collapse  | 
2950 |  | -            SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());  | 
2951 |  | -            searchRequest.scroll(new TimeValue(1000));  | 
2952 |  | -            searchRequest.source().collapse(new CollapseBuilder("field"));  | 
2953 |  | -            assertCreateContextValidation(searchRequest, "cannot use `collapse` in a scroll context", indexService, service);  | 
2954 |  | -        }  | 
2955 |  | -        {  | 
2956 |  | -            // search_after and `from` isn't valid  | 
2957 |  | -            SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());  | 
2958 |  | -            searchRequest.source().searchAfter(new String[] { "value" });  | 
2959 |  | -            searchRequest.source().from(10);  | 
2960 |  | -            assertCreateContextValidation(  | 
2961 |  | -                searchRequest,  | 
2962 |  | -                "`from` parameter must be set to 0 when `search_after` is used",  | 
2963 |  | -                indexService,  | 
2964 |  | -                service  | 
2965 |  | -            );  | 
2966 |  | -        }  | 
2967 |  | -        {  | 
2968 |  | -            // slice without scroll or pit  | 
2969 |  | -            SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());  | 
2970 |  | -            searchRequest.source().slice(new SliceBuilder(1, 10));  | 
2971 |  | -            assertCreateContextValidation(  | 
2972 |  | -                searchRequest,  | 
2973 |  | -                "[slice] can only be used with [scroll] or [point-in-time] requests",  | 
2974 |  | -                indexService,  | 
2975 |  | -                service  | 
2976 |  | -            );  | 
2977 |  | -        }  | 
2978 |  | -        {  | 
2979 |  | -            // stored fields disabled with _source requested  | 
2980 |  | -            SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());  | 
2981 |  | -            searchRequest.source().storedField("_none_");  | 
2982 |  | -            searchRequest.source().fetchSource(true);  | 
2983 |  | -            assertCreateContextValidation(  | 
2984 |  | -                searchRequest,  | 
2985 |  | -                "[stored_fields] cannot be disabled if [_source] is requested",  | 
2986 |  | -                indexService,  | 
2987 |  | -                service  | 
2988 |  | -            );  | 
2989 |  | -        }  | 
2990 |  | -        {  | 
2991 |  | -            // stored fields disabled with fetch fields requested  | 
2992 |  | -            SearchRequest searchRequest = new SearchRequest().source(new SearchSourceBuilder());  | 
2993 |  | -            searchRequest.source().storedField("_none_");  | 
2994 |  | -            searchRequest.source().fetchSource(false);  | 
2995 |  | -            searchRequest.source().fetchField("field");  | 
2996 |  | -            assertCreateContextValidation(  | 
2997 |  | -                searchRequest,  | 
2998 |  | -                "[stored_fields] cannot be disabled when using the [fields] option",  | 
2999 |  | -                indexService,  | 
3000 |  | -                service  | 
3001 |  | -            );  | 
3002 |  | -        }  | 
3003 |  | -    }  | 
3004 |  | - | 
3005 |  | -    private static void assertCreateContextValidation(  | 
3006 |  | -        SearchRequest searchRequest,  | 
3007 |  | -        String errorMessage,  | 
3008 |  | -        IndexService indexService,  | 
3009 |  | -        SearchService searchService  | 
3010 |  | -    ) {  | 
3011 |  | -        ShardId shardId = new ShardId(indexService.index(), 0);  | 
3012 |  | -        long nowInMillis = System.currentTimeMillis();  | 
3013 |  | -        String clusterAlias = randomBoolean() ? null : randomAlphaOfLengthBetween(3, 10);  | 
3014 |  | -        searchRequest.allowPartialSearchResults(randomBoolean());  | 
3015 |  | -        ShardSearchRequest request = new ShardSearchRequest(  | 
3016 |  | -            OriginalIndices.NONE,  | 
3017 |  | -            searchRequest,  | 
3018 |  | -            shardId,  | 
3019 |  | -            0,  | 
3020 |  | -            indexService.numberOfShards(),  | 
3021 |  | -            AliasFilter.EMPTY,  | 
3022 |  | -            1f,  | 
3023 |  | -            nowInMillis,  | 
3024 |  | -            clusterAlias  | 
3025 |  | -        );  | 
3026 |  | - | 
3027 |  | -        SearchShardTask task = new SearchShardTask(1, "type", "action", "description", null, emptyMap());  | 
3028 |  | - | 
3029 |  | -        ReaderContext readerContext = null;  | 
3030 |  | -        try {  | 
3031 |  | -            ReaderContext createOrGetReaderContext = searchService.createOrGetReaderContext(request);  | 
3032 |  | -            readerContext = createOrGetReaderContext;  | 
3033 |  | -            IllegalArgumentException exception = expectThrows(  | 
3034 |  | -                IllegalArgumentException.class,  | 
3035 |  | -                () -> searchService.createContext(createOrGetReaderContext, request, task, ResultsType.QUERY, randomBoolean())  | 
3036 |  | -            );  | 
3037 |  | -            assertThat(exception.getMessage(), containsString(errorMessage));  | 
3038 |  | -        } finally {  | 
3039 |  | -            if (readerContext != null) {  | 
3040 |  | -                readerContext.close();  | 
3041 |  | -                searchService.freeReaderContext(readerContext.id());  | 
3042 |  | -            }  | 
3043 |  | -        }  | 
3044 |  | -    }  | 
3045 |  | - | 
3046 | 2931 |     private static ReaderContext createReaderContext(IndexService indexService, IndexShard indexShard) {  | 
3047 | 2932 |         return new ReaderContext(  | 
3048 | 2933 |             new ShardSearchContextId(UUIDs.randomBase64UUID(), randomNonNegativeLong()),  | 
 | 
0 commit comments