Skip to content

Commit ed451cf

Browse files
committed
Fix ShardSearchRequest cache key
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 elastic#32827
1 parent aed8ce7 commit ed451cf

File tree

2 files changed

+35
-21
lines changed

2 files changed

+35
-21
lines changed

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,9 @@ protected final void innerWriteTo(StreamOutput out, boolean asKey) throws IOExce
219219
out.writeOptionalString(preference);
220220
}
221221
if (out.getVersion().onOrAfter(Version.V_7_7_0)) {
222-
out.writeBoolean(canReturnNullResponseIfMatchNoDocs);
222+
if (asKey == false) {
223+
out.writeBoolean(canReturnNullResponseIfMatchNoDocs);
224+
}
223225
out.writeOptionalWriteable(bottomSortValues);
224226
}
225227
}

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

+32-20
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ public void testCacheAggs() throws Exception {
101101
@TestIssueLogging(
102102
value = "org.elasticsearch.indices.IndicesRequestCache:TRACE",
103103
issueUrl = "https://github.com/elastic/elasticsearch/issues/32827")
104-
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/32827")
105104
public void testQueryRewrite() throws Exception {
106105
Client client = client();
107106
assertAcked(client.admin().indices().prepareCreate("index").setMapping("s", "type=date")
@@ -132,23 +131,22 @@ public void testQueryRewrite() throws Exception {
132131
.setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-19").lte("2016-03-25"))
133132
// to ensure that query is executed even if it rewrites to match_no_docs
134133
.addAggregation(new GlobalAggregationBuilder("global"))
135-
.setPreFilterShardSize(Integer.MAX_VALUE).get();
134+
.get();
136135
ElasticsearchAssertions.assertAllSuccessful(r1);
137136
assertThat(r1.getHits().getTotalHits().value, equalTo(7L));
138137
assertCacheState(client, "index", 0, 5);
139138

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

148147
final SearchResponse r3 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
149148
.setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-21").lte("2016-03-27"))
150149
.addAggregation(new GlobalAggregationBuilder("global"))
151-
.setPreFilterShardSize(Integer.MAX_VALUE)
152150
.get();
153151
ElasticsearchAssertions.assertAllSuccessful(r3);
154152
assertThat(r3.getHits().getTotalHits().value, equalTo(7L));
@@ -224,29 +222,35 @@ public void testQueryRewriteDates() throws Exception {
224222

225223
assertCacheState(client, "index", 0, 0);
226224

227-
final SearchResponse r1 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
228-
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
229-
.get();
225+
final SearchResponse r1 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH)
226+
.setSize(0)
227+
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
228+
// to ensure that query is executed even if it rewrites to match_no_docs
229+
.addAggregation(new GlobalAggregationBuilder("global"))
230+
.get();
230231
ElasticsearchAssertions.assertAllSuccessful(r1);
231232
assertThat(r1.getHits().getTotalHits().value, equalTo(9L));
232233
assertCacheState(client, "index", 0, 1);
233234

234-
final SearchResponse r2 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
235-
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
236-
.get();
235+
final SearchResponse r2 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH)
236+
.setSize(0)
237+
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
238+
.addAggregation(new GlobalAggregationBuilder("global"))
239+
.get();
237240
ElasticsearchAssertions.assertAllSuccessful(r2);
238241
assertThat(r2.getHits().getTotalHits().value, equalTo(9L));
239242
assertCacheState(client, "index", 1, 1);
240243

241-
final SearchResponse r3 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
242-
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
243-
.get();
244+
final SearchResponse r3 = client.prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH)
245+
.setSize(0)
246+
.setQuery(QueryBuilders.rangeQuery("d").gte("2013-01-01T00:00:00").lte("now"))
247+
.addAggregation(new GlobalAggregationBuilder("global"))
248+
.get();
244249
ElasticsearchAssertions.assertAllSuccessful(r3);
245250
assertThat(r3.getHits().getTotalHits().value, equalTo(9L));
246251
assertCacheState(client, "index", 2, 1);
247252
}
248253

249-
@AwaitsFix(bugUrl = "https://github.com/elastic/elasticsearch/issues/32827")
250254
public void testQueryRewriteDatesWithNow() throws Exception {
251255
Client client = client();
252256
Settings settings = Settings.builder().put(IndicesRequestCache.INDEX_CACHE_REQUEST_ENABLED_SETTING.getKey(), true)
@@ -284,8 +288,10 @@ public void testQueryRewriteDatesWithNow() throws Exception {
284288
assertCacheState(client, "index-2", 0, 0);
285289
assertCacheState(client, "index-3", 0, 0);
286290

287-
final SearchResponse r1 = client.prepareSearch("index-*").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
288-
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now")).get();
291+
final SearchResponse r1 = client.prepareSearch("index-*")
292+
.setSearchType(SearchType.QUERY_THEN_FETCH)
293+
.setSize(0)
294+
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now")).get();
289295
ElasticsearchAssertions.assertAllSuccessful(r1);
290296
assertThat(r1.getHits().getTotalHits().value, equalTo(8L));
291297
assertCacheState(client, "index-1", 0, 1);
@@ -295,16 +301,22 @@ public void testQueryRewriteDatesWithNow() throws Exception {
295301
// cache miss or cache hit since queries containing now can't be cached
296302
assertCacheState(client, "index-3", 0, 0);
297303

298-
final SearchResponse r2 = client.prepareSearch("index-*").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
299-
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now")).get();
304+
final SearchResponse r2 = client.prepareSearch("index-*")
305+
.setSearchType(SearchType.QUERY_THEN_FETCH)
306+
.setSize(0)
307+
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now"))
308+
.get();
300309
ElasticsearchAssertions.assertAllSuccessful(r2);
301310
assertThat(r2.getHits().getTotalHits().value, equalTo(8L));
302311
assertCacheState(client, "index-1", 1, 1);
303312
assertCacheState(client, "index-2", 1, 1);
304313
assertCacheState(client, "index-3", 0, 0);
305314

306-
final SearchResponse r3 = client.prepareSearch("index-*").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0)
307-
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now")).get();
315+
final SearchResponse r3 = client.prepareSearch("index-*")
316+
.setSearchType(SearchType.QUERY_THEN_FETCH)
317+
.setSize(0)
318+
.setQuery(QueryBuilders.rangeQuery("d").gte("now-7d/d").lte("now"))
319+
.get();
308320
ElasticsearchAssertions.assertAllSuccessful(r3);
309321
assertThat(r3.getHits().getTotalHits().value, equalTo(8L));
310322
assertCacheState(client, "index-1", 2, 1);

0 commit comments

Comments
 (0)