Skip to content

Commit 025857d

Browse files
committed
Fix ShardSearchRequest cache key (#54071)
This commit ensures that we don't use the non-deterministic canReturnNullResponseIfMatchNoDocs boolean in the cache key of the ShardSearchRequest. The value of this boolean has no influence on the cacheability of the request. Closes #32827
1 parent 627ca03 commit 025857d

File tree

2 files changed

+33
-21
lines changed

2 files changed

+33
-21
lines changed

server/src/main/java/org/elasticsearch/search/internal/ShardSearchRequest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ protected final void innerWriteTo(StreamOutput out, boolean asKey) throws IOExce
229229
out.writeOptionalString(preference);
230230
}
231231
}
232-
if (out.getVersion().onOrAfter(Version.V_7_7_0)) {
232+
if (out.getVersion().onOrAfter(Version.V_7_7_0) && asKey == false) {
233233
out.writeBoolean(canReturnNullResponseIfMatchNoDocs);
234234
out.writeOptionalWriteable(bottomSortValues);
235235
}

server/src/test/java/org/elasticsearch/indices/IndicesRequestCacheIT.java

+32-20
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ public void testCacheAggs() throws Exception {
9797
}
9898
}
9999

100-
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/32827")
101100
public void testQueryRewrite() throws Exception {
102101
Client client = client();
103102
assertAcked(client.admin().indices().prepareCreate("index").addMapping("type", "s", "type=date")
@@ -128,23 +127,22 @@ public void testQueryRewrite() throws Exception {
128127
.setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-19").lte("2016-03-25"))
129128
// to ensure that query is executed even if it rewrites to match_no_docs
130129
.addAggregation(new GlobalAggregationBuilder("global"))
131-
.setPreFilterShardSize(Integer.MAX_VALUE).get();
130+
.get();
132131
ElasticsearchAssertions.assertAllSuccessful(r1);
133132
assertThat(r1.getHits().getTotalHits().value, equalTo(7L));
134133
assertCacheState(client, "index", 0, 5);
135134

136135
final SearchResponse r2 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
137136
.setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-20").lte("2016-03-26"))
138137
.addAggregation(new GlobalAggregationBuilder("global"))
139-
.setPreFilterShardSize(Integer.MAX_VALUE).get();
138+
.get();
140139
ElasticsearchAssertions.assertAllSuccessful(r2);
141140
assertThat(r2.getHits().getTotalHits().value, equalTo(7L));
142141
assertCacheState(client, "index", 3, 7);
143142

144143
final SearchResponse r3 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
145144
.setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-21").lte("2016-03-27"))
146145
.addAggregation(new GlobalAggregationBuilder("global"))
147-
.setPreFilterShardSize(Integer.MAX_VALUE)
148146
.get();
149147
ElasticsearchAssertions.assertAllSuccessful(r3);
150148
assertThat(r3.getHits().getTotalHits().value, equalTo(7L));
@@ -220,29 +218,35 @@ public void testQueryRewriteDates() throws Exception {
220218

221219
assertCacheState(client, "index", 0, 0);
222220

223-
final SearchResponse r1 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
224-
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
225-
.get();
221+
final SearchResponse r1 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH)
222+
.setSize(0)
223+
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
224+
// to ensure that query is executed even if it rewrites to match_no_docs
225+
.addAggregation(new GlobalAggregationBuilder("global"))
226+
.get();
226227
ElasticsearchAssertions.assertAllSuccessful(r1);
227228
assertThat(r1.getHits().getTotalHits().value, equalTo(9L));
228229
assertCacheState(client, "index", 0, 1);
229230

230-
final SearchResponse r2 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
231-
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
232-
.get();
231+
final SearchResponse r2 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH)
232+
.setSize(0)
233+
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
234+
.addAggregation(new GlobalAggregationBuilder("global"))
235+
.get();
233236
ElasticsearchAssertions.assertAllSuccessful(r2);
234237
assertThat(r2.getHits().getTotalHits().value, equalTo(9L));
235238
assertCacheState(client, "index", 1, 1);
236239

237-
final SearchResponse r3 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
238-
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
239-
.get();
240+
final SearchResponse r3 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH)
241+
.setSize(0)
242+
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
243+
.addAggregation(new GlobalAggregationBuilder("global"))
244+
.get();
240245
ElasticsearchAssertions.assertAllSuccessful(r3);
241246
assertThat(r3.getHits().getTotalHits().value, equalTo(9L));
242247
assertCacheState(client, "index", 2, 1);
243248
}
244249

245-
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/32827")
246250
public void testQueryRewriteDatesWithNow() throws Exception {
247251
Client client = client();
248252
Settings settings = Settings.builder().put(IndicesRequestCache.INDEX_CACHE_REQUEST_ENABLED_SETTING.getKey(), true)
@@ -280,8 +284,10 @@ public void testQueryRewriteDatesWithNow() throws Exception {
280284
assertCacheState(client, "index-2", 0, 0);
281285
assertCacheState(client, "index-3", 0, 0);
282286

283-
final SearchResponse r1 = client.prepareSearch("index-*").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
284-
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now")).get();
287+
final SearchResponse r1 = client.prepareSearch("index-*")
288+
.setSearchType(SearchType.QUERY_THEN_FETCH)
289+
.setSize(0)
290+
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now")).get();
285291
ElasticsearchAssertions.assertAllSuccessful(r1);
286292
assertThat(r1.getHits().getTotalHits().value, equalTo(8L));
287293
assertCacheState(client, "index-1", 0, 1);
@@ -291,16 +297,22 @@ public void testQueryRewriteDatesWithNow() throws Exception {
291297
// cache miss or cache hit since queries containing now can't be cached
292298
assertCacheState(client, "index-3", 0, 0);
293299

294-
final SearchResponse r2 = client.prepareSearch("index-*").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
295-
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now")).get();
300+
final SearchResponse r2 = client.prepareSearch("index-*")
301+
.setSearchType(SearchType.QUERY_THEN_FETCH)
302+
.setSize(0)
303+
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now"))
304+
.get();
296305
ElasticsearchAssertions.assertAllSuccessful(r2);
297306
assertThat(r2.getHits().getTotalHits().value, equalTo(8L));
298307
assertCacheState(client, "index-1", 1, 1);
299308
assertCacheState(client, "index-2", 1, 1);
300309
assertCacheState(client, "index-3", 0, 0);
301310

302-
final SearchResponse r3 = client.prepareSearch("index-*").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
303-
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now")).get();
311+
final SearchResponse r3 = client.prepareSearch("index-*")
312+
.setSearchType(SearchType.QUERY_THEN_FETCH)
313+
.setSize(0)
314+
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now"))
315+
.get();
304316
ElasticsearchAssertions.assertAllSuccessful(r3);
305317
assertThat(r3.getHits().getTotalHits().value, equalTo(8L));
306318
assertCacheState(client, "index-1", 2, 1);

0 commit comments

Comments
 (0)