Skip to content

Commit b96bf10

Browse files
committed
Consistent Indices API: Made GET warmers consistent
Added support for /{index}/_warmers/{type} Also added spec and integration tests to support wildcards and _all in warmer names Relates elastic#4071
1 parent 40f9532 commit b96bf10

File tree

4 files changed

+100
-3
lines changed

4 files changed

+100
-3
lines changed

rest-api-spec/test/indices.put_warmer/10_basic.yaml

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
---
2-
"Basic test for warmers":
2+
setup:
33
- do:
44
indices.create:
55
index: test_index
66

7+
- do:
8+
indices.create:
9+
index: test_idx
10+
711
- do:
812
cluster.health:
913
wait_for_status: yellow
@@ -14,6 +18,14 @@
1418
index: test_index
1519
name: test_warmer
1620

21+
- do:
22+
indices.put_warmer:
23+
index: test_idx
24+
name: test_warmer2
25+
body:
26+
query:
27+
match_all: {}
28+
1729
- do:
1830
indices.put_warmer:
1931
index: test_index
@@ -22,6 +34,8 @@
2234
query:
2335
match_all: {}
2436

37+
---
38+
"Basic test for warmers":
2539
- do:
2640
indices.get_warmer:
2741
index: test_index
@@ -39,3 +53,48 @@
3953
indices.get_warmer:
4054
index: test_index
4155
name: test_warmer
56+
57+
---
58+
"Getting warmers for several indices should work using *":
59+
60+
- do:
61+
indices.get_warmer:
62+
index: '*'
63+
name: '*'
64+
65+
- match: {test_index.warmers.test_warmer.source.query.match_all: {}}
66+
- match: {test_idx.warmers.test_warmer2.source.query.match_all: {}}
67+
68+
---
69+
"Getting warmers for several indices should work using _all":
70+
71+
- do:
72+
indices.get_warmer:
73+
index: _all
74+
name: _all
75+
76+
- match: {test_index.warmers.test_warmer.source.query.match_all: {}}
77+
- match: {test_idx.warmers.test_warmer2.source.query.match_all: {}}
78+
79+
---
80+
"Getting warmers for several indices should work using prefix*":
81+
82+
- do:
83+
indices.get_warmer:
84+
index: test_i*
85+
name: test_w*
86+
87+
- match: {test_index.warmers.test_warmer.source.query.match_all: {}}
88+
- match: {test_idx.warmers.test_warmer2.source.query.match_all: {}}
89+
90+
---
91+
"Getting warmers for several indices should work using comma-separated lists":
92+
93+
- do:
94+
indices.get_warmer:
95+
index: test_index,test_idx
96+
name: test_warmer,test_warmer2
97+
98+
- match: {test_index.warmers.test_warmer.source.query.match_all: {}}
99+
- match: {test_idx.warmers.test_warmer2.source.query.match_all: {}}
100+

src/main/java/org/elasticsearch/cluster/metadata/MetaData.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,12 +376,19 @@ public ImmutableOpenMap<String, ImmutableOpenMap<String, MappingMetaData>> findM
376376
return indexMapBuilder.build();
377377
}
378378

379-
public ImmutableOpenMap<String, ImmutableList<IndexWarmersMetaData.Entry>> findWarmers(String[] concreteIndices, final String[] types, final String[] warmers) {
380-
assert warmers != null;
379+
public ImmutableOpenMap<String, ImmutableList<IndexWarmersMetaData.Entry>> findWarmers(String[] concreteIndices, final String[] types, final String[] uncheckedWarmers) {
380+
assert uncheckedWarmers != null;
381381
assert concreteIndices != null;
382382
if (concreteIndices.length == 0) {
383383
return ImmutableOpenMap.of();
384384
}
385+
// special _all check to behave the same like not specifying anything
386+
final String[] warmers;
387+
if (uncheckedWarmers.length == 1 && "_all".equals(uncheckedWarmers[0])) {
388+
warmers = Strings.EMPTY_ARRAY;
389+
} else {
390+
warmers = uncheckedWarmers;
391+
}
385392

386393
ImmutableOpenMap.Builder<String, ImmutableList<IndexWarmersMetaData.Entry>> mapBuilder = ImmutableOpenMap.builder();
387394
Iterable<String> intersection = HppcMaps.intersection(ObjectOpenHashSet.from(concreteIndices), indices.keys());

src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/get/RestGetWarmerAction.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public RestGetWarmerAction(Settings settings, Client client, RestController cont
5151

5252
controller.registerHandler(GET, "/{index}/_warmer", this);
5353
controller.registerHandler(GET, "/{index}/_warmer/{name}", this);
54+
controller.registerHandler(GET, "/{index}/_warmers/{name}", this);
5455
controller.registerHandler(GET, "/{index}/{type}/_warmer/{name}", this);
5556
}
5657

src/test/java/org/elasticsearch/indices/warmer/SimpleIndicesWarmerTests.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,36 @@ public void ensureThatIndexWarmersCanBeChangedOnRuntime() throws Exception {
231231
assertThat(getWarmerRuns(), equalTo(warmerRunsAfterDisabling));
232232
}
233233

234+
@Test
235+
public void gettingAllWarmersUsingAllAndWildcardsShouldWork() throws Exception {
236+
client().admin().indices().prepareCreate("test")
237+
.setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", 1, "index.number_of_replicas", 0))
238+
.execute().actionGet();
239+
ensureGreen();
240+
241+
PutWarmerResponse putWarmerResponse = client().admin().indices().preparePutWarmer("custom_warmer")
242+
.setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery()))
243+
.execute().actionGet();
244+
assertThat(putWarmerResponse.isAcknowledged(), equalTo(true));
245+
246+
PutWarmerResponse anotherPutWarmerResponse = client().admin().indices().preparePutWarmer("second_custom_warmer")
247+
.setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery()))
248+
.execute().actionGet();
249+
assertThat(anotherPutWarmerResponse.isAcknowledged(), equalTo(true));
250+
251+
GetWarmersResponse getWarmersResponse = client().admin().indices().prepareGetWarmers("*").addWarmers("*").get();
252+
assertThat(getWarmersResponse.warmers().size(), is(1));
253+
254+
getWarmersResponse = client().admin().indices().prepareGetWarmers("_all").addWarmers("_all").get();
255+
assertThat(getWarmersResponse.warmers().size(), is(1));
256+
257+
getWarmersResponse = client().admin().indices().prepareGetWarmers("t*").addWarmers("c*").get();
258+
assertThat(getWarmersResponse.warmers().size(), is(1));
259+
260+
getWarmersResponse = client().admin().indices().prepareGetWarmers("test").addWarmers("custom_warmer", "second_custom_warmer").get();
261+
assertThat(getWarmersResponse.warmers().size(), is(1));
262+
}
263+
234264
private long getWarmerRuns() {
235265
IndicesStatsResponse indicesStatsResponse = client().admin().indices().prepareStats("test").clear().setWarmer(true).execute().actionGet();
236266
return indicesStatsResponse.getIndex("test").getPrimaries().warmer.total();

0 commit comments

Comments
 (0)