Skip to content

Commit 5bcd1f3

Browse files
authored
Make sure _tier field handles missing setting (#71439)
When `_tier_preference` isn't set, getting it returns an empty string "". This PR updates the _tier metadata field to detect this case correctly.
1 parent 5c99692 commit 5bcd1f3

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/cluster/routing/allocation/mapper/DataTierFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ protected boolean matches(String pattern, boolean caseInsensitive, SearchExecuti
5353
pattern = Strings.toLowercaseAscii(pattern);
5454
}
5555
String tierPreference = DataTierAllocationDecider.INDEX_ROUTING_PREFER_SETTING.get(context.getIndexSettings().getSettings());
56-
if (tierPreference == null) {
56+
if (Strings.hasText(tierPreference) == false) {
5757
return false;
5858
}
5959
// Tier preference can be a comma-delimited list of tiers, ordered by preference
@@ -65,7 +65,7 @@ protected boolean matches(String pattern, boolean caseInsensitive, SearchExecuti
6565
@Override
6666
public Query existsQuery(SearchExecutionContext context) {
6767
String tierPreference = DataTierAllocationDecider.INDEX_ROUTING_PREFER_SETTING.get(context.getIndexSettings().getSettings());
68-
if (tierPreference == null) {
68+
if (Strings.hasText(tierPreference) == false) {
6969
return new MatchNoDocsQuery();
7070
}
7171
return new MatchAllDocsQuery();

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/cluster/routing/allocation/mapper/DataTierFieldTypeTests.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,34 @@ public void testWildcardQuery() {
4242
assertEquals(new MatchAllDocsQuery(), ft.wildcardQuery("Data_Warm", null, true, createContext()));
4343
assertEquals(new MatchNoDocsQuery(), ft.wildcardQuery("Data_Warm", null, false, createContext()));
4444
assertEquals(new MatchNoDocsQuery(), ft.wildcardQuery("noSuchRole", null, createContext()));
45+
46+
assertEquals(new MatchNoDocsQuery(), ft.wildcardQuery("data_*", null, createContextWithoutSetting()));
47+
assertEquals(new MatchNoDocsQuery(), ft.wildcardQuery("*", null, createContextWithoutSetting()));
4548
}
4649

4750
public void testTermQuery() {
4851
MappedFieldType ft = DataTierFieldMapper.DataTierFieldType.INSTANCE;
4952
assertEquals(new MatchAllDocsQuery(), ft.termQuery("data_warm", createContext()));
5053
assertEquals(new MatchNoDocsQuery(), ft.termQuery("data_hot", createContext()));
5154
assertEquals(new MatchNoDocsQuery(), ft.termQuery("noSuchRole", createContext()));
55+
56+
assertEquals(new MatchNoDocsQuery(), ft.termQuery("data_warm", createContextWithoutSetting()));
57+
assertEquals(new MatchNoDocsQuery(), ft.termQuery("", createContextWithoutSetting()));
5258
}
5359

5460
public void testTermsQuery() {
5561
MappedFieldType ft = DataTierFieldMapper.DataTierFieldType.INSTANCE;
5662
assertEquals(new MatchAllDocsQuery(), ft.termsQuery(Arrays.asList("data_warm"), createContext()));
5763
assertEquals(new MatchNoDocsQuery(), ft.termsQuery(Arrays.asList("data_cold", "data_frozen"), createContext()));
64+
65+
assertEquals(new MatchNoDocsQuery(), ft.termsQuery(Arrays.asList("data_warm"), createContextWithoutSetting()));
66+
assertEquals(new MatchNoDocsQuery(), ft.termsQuery(Arrays.asList(""), createContextWithoutSetting()));
67+
}
68+
69+
public void testExistsQuery() {
70+
MappedFieldType ft = DataTierFieldMapper.DataTierFieldType.INSTANCE;
71+
assertEquals(new MatchAllDocsQuery(), ft.existsQuery(createContext()));
72+
assertEquals(new MatchNoDocsQuery(), ft.existsQuery(createContextWithoutSetting()));
5873
}
5974

6075
public void testRegexpQuery() {
@@ -102,4 +117,18 @@ private SearchExecutionContext createContext() {
102117
emptyMap()
103118
);
104119
}
120+
121+
private SearchExecutionContext createContextWithoutSetting() {
122+
IndexMetadata indexMetadata = IndexMetadata.builder("index")
123+
.settings(Settings.builder()
124+
.put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
125+
.build())
126+
.numberOfShards(1)
127+
.numberOfReplicas(0)
128+
.build();
129+
IndexSettings indexSettings = new IndexSettings(indexMetadata, Settings.EMPTY);
130+
return new SearchExecutionContext(0, 0, indexSettings, null, null, null, null, null, null,
131+
xContentRegistry(), writableRegistry(), null, null, System::currentTimeMillis, null,
132+
value -> true, () -> true, null, emptyMap());
133+
}
105134
}

0 commit comments

Comments
 (0)