Skip to content

Commit 7c5997d

Browse files
authored
Ignore system indices from mapping stats and analysis stats. (#65258)
When collecting information about analyzers or field types, we do not care much about usage in system indices which are managed by Elasticsearch, however we care about indices that are created by users.
1 parent af19101 commit 7c5997d

File tree

4 files changed

+102
-0
lines changed

4 files changed

+102
-0
lines changed

server/src/main/java/org/elasticsearch/action/admin/cluster/stats/AnalysisStats.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ public static AnalysisStats of(Metadata metadata) {
6363
final Map<String, IndexFeatureStats> usedBuiltInAnalyzers = new HashMap<>();
6464

6565
for (IndexMetadata indexMetadata : metadata) {
66+
if (indexMetadata.isSystem()) {
67+
// Don't include system indices in statistics about analysis,
68+
// we care about the user's indices.
69+
continue;
70+
}
6671
Set<String> indexAnalyzers = new HashSet<>();
6772
MappingMetadata mappingMetadata = indexMetadata.mapping();
6873
if (mappingMetadata != null) {

server/src/main/java/org/elasticsearch/action/admin/cluster/stats/MappingStats.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ public final class MappingStats implements ToXContentFragment, Writeable {
5252
public static MappingStats of(Metadata metadata) {
5353
Map<String, IndexFeatureStats> fieldTypes = new HashMap<>();
5454
for (IndexMetadata indexMetadata : metadata) {
55+
if (indexMetadata.isSystem()) {
56+
// Don't include system indices in statistics about mappings,
57+
// we care about the user's indices.
58+
continue;
59+
}
5560
Set<String> indexFieldTypes = new HashSet<>();
5661
MappingMetadata mappingMetadata = indexMetadata.mapping();
5762
if (mappingMetadata != null) {

server/src/test/java/org/elasticsearch/action/admin/cluster/stats/AnalysisStatsTests.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,16 @@
1919

2020
package org.elasticsearch.action.admin.cluster.stats;
2121

22+
import org.elasticsearch.Version;
23+
import org.elasticsearch.cluster.metadata.IndexMetadata;
24+
import org.elasticsearch.cluster.metadata.Metadata;
2225
import org.elasticsearch.common.io.stream.Writeable.Reader;
26+
import org.elasticsearch.common.settings.Settings;
27+
import org.elasticsearch.index.mapper.MapperService;
2328
import org.elasticsearch.test.AbstractWireSerializingTestCase;
2429

2530
import java.io.IOException;
31+
import java.util.Collections;
2632
import java.util.HashSet;
2733
import java.util.Set;
2834

@@ -167,4 +173,44 @@ protected AnalysisStats mutateInstance(AnalysisStats instance) throws IOExceptio
167173
}
168174

169175
}
176+
177+
public void testAccountsRegularIndices() throws IOException {
178+
String mapping = "{\"properties\":{\"bar\":{\"type\":\"text\",\"analyzer\":\"german\"}}}";
179+
Settings settings = Settings.builder()
180+
.put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
181+
.put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, 4)
182+
.put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, 1)
183+
.build();
184+
IndexMetadata.Builder indexMetadata = new IndexMetadata.Builder("foo")
185+
.settings(settings)
186+
.putMapping(MapperService.SINGLE_MAPPING_NAME, mapping);
187+
Metadata metadata = new Metadata.Builder()
188+
.put(indexMetadata)
189+
.build();
190+
AnalysisStats analysisStats = AnalysisStats.of(metadata);
191+
IndexFeatureStats expectedStats = new IndexFeatureStats("german");
192+
expectedStats.count = 1;
193+
expectedStats.indexCount = 1;
194+
assertEquals(
195+
Collections.singleton(expectedStats),
196+
analysisStats.getUsedBuiltInAnalyzers());
197+
}
198+
199+
public void testIgnoreSystemIndices() throws IOException {
200+
String mapping = "{\"properties\":{\"bar\":{\"type\":\"text\",\"analyzer\":\"german\"}}}";
201+
Settings settings = Settings.builder()
202+
.put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
203+
.put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, 4)
204+
.put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, 1)
205+
.build();
206+
IndexMetadata.Builder indexMetadata = new IndexMetadata.Builder("foo")
207+
.settings(settings)
208+
.putMapping(MapperService.SINGLE_MAPPING_NAME, mapping)
209+
.system(true);
210+
Metadata metadata = new Metadata.Builder()
211+
.put(indexMetadata)
212+
.build();
213+
AnalysisStats analysisStats = AnalysisStats.of(metadata);
214+
assertEquals(Collections.emptySet(), analysisStats.getUsedBuiltInAnalyzers());
215+
}
170216
}

server/src/test/java/org/elasticsearch/action/admin/cluster/stats/MappingStatsTests.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,18 @@
1919

2020
package org.elasticsearch.action.admin.cluster.stats;
2121

22+
import org.elasticsearch.Version;
23+
import org.elasticsearch.cluster.metadata.IndexMetadata;
24+
import org.elasticsearch.cluster.metadata.Metadata;
2225
import org.elasticsearch.common.io.stream.Writeable.Reader;
26+
import org.elasticsearch.common.settings.Settings;
27+
import org.elasticsearch.index.mapper.MapperService;
2328
import org.elasticsearch.test.AbstractWireSerializingTestCase;
2429

2530
import java.io.IOException;
2631
import java.util.ArrayList;
2732
import java.util.Collection;
33+
import java.util.Collections;
2834
import java.util.List;
2935

3036
public class MappingStatsTests extends AbstractWireSerializingTestCase<MappingStats> {
@@ -67,4 +73,44 @@ protected MappingStats mutateInstance(MappingStats instance) throws IOException
6773
}
6874
return new MappingStats(fieldTypes);
6975
}
76+
77+
public void testAccountsRegularIndices() throws IOException {
78+
String mapping = "{\"properties\":{\"bar\":{\"type\":\"long\"}}}";
79+
Settings settings = Settings.builder()
80+
.put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
81+
.put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, 4)
82+
.put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, 1)
83+
.build();
84+
IndexMetadata.Builder indexMetadata = new IndexMetadata.Builder("foo")
85+
.settings(settings)
86+
.putMapping(MapperService.SINGLE_MAPPING_NAME, mapping);
87+
Metadata metadata = new Metadata.Builder()
88+
.put(indexMetadata)
89+
.build();
90+
MappingStats mappingStats = MappingStats.of(metadata);
91+
IndexFeatureStats expectedStats = new IndexFeatureStats("long");
92+
expectedStats.count = 1;
93+
expectedStats.indexCount = 1;
94+
assertEquals(
95+
Collections.singleton(expectedStats),
96+
mappingStats.getFieldTypeStats());
97+
}
98+
99+
public void testIgnoreSystemIndices() throws IOException {
100+
String mapping = "{\"properties\":{\"bar\":{\"type\":\"long\"}}}";
101+
Settings settings = Settings.builder()
102+
.put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT)
103+
.put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, 4)
104+
.put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, 1)
105+
.build();
106+
IndexMetadata.Builder indexMetadata = new IndexMetadata.Builder("foo")
107+
.settings(settings)
108+
.putMapping(MapperService.SINGLE_MAPPING_NAME, mapping)
109+
.system(true);
110+
Metadata metadata = new Metadata.Builder()
111+
.put(indexMetadata)
112+
.build();
113+
MappingStats mappingStats = MappingStats.of(metadata);
114+
assertEquals(Collections.emptySet(), mappingStats.getFieldTypeStats());
115+
}
70116
}

0 commit comments

Comments
 (0)