Skip to content

Commit 368ddc4

Browse files
authored
Remove MapperService#types(). (#29617)
This isn't be necessary with a single type per index.
1 parent 231a63f commit 368ddc4

File tree

12 files changed

+44
-77
lines changed

12 files changed

+44
-77
lines changed

modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -581,11 +581,7 @@ protected Query doToQuery(QueryShardContext context) throws IOException {
581581
final List<ParsedDocument> docs = new ArrayList<>();
582582
final DocumentMapper docMapper;
583583
final MapperService mapperService = context.getMapperService();
584-
Collection<String> types = mapperService.types();
585-
if (types.size() != 1) {
586-
throw new IllegalStateException("Only a single type should exist, but [" + types.size() + " types exists");
587-
}
588-
String type = types.iterator().next();
584+
String type = mapperService.documentMapper().type();
589585
if (documentType != null) {
590586
DEPRECATION_LOGGER.deprecated("[document_type] parameter has been deprecated because types have been deprecated");
591587
if (documentType.equals(type) == false) {

server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/TransportGetFieldMappingsIndexAction.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,11 @@
4747
import org.elasticsearch.transport.TransportService;
4848

4949
import java.io.IOException;
50-
import java.util.ArrayList;
5150
import java.util.Collection;
5251
import java.util.Collections;
5352
import java.util.HashMap;
5453
import java.util.Map;
5554
import java.util.function.Predicate;
56-
import java.util.stream.Collectors;
5755

5856
import static java.util.Collections.singletonMap;
5957

@@ -96,15 +94,16 @@ protected GetFieldMappingsResponse shardOperation(final GetFieldMappingsIndexReq
9694
Predicate<String> metadataFieldPredicate = indicesService::isMetaDataField;
9795
Predicate<String> fieldPredicate = metadataFieldPredicate.or(indicesService.getFieldFilter().apply(shardId.getIndexName()));
9896

97+
DocumentMapper mapper = indexService.mapperService().documentMapper();
9998
Collection<String> typeIntersection;
10099
if (request.types().length == 0) {
101-
typeIntersection = indexService.mapperService().types();
102-
100+
typeIntersection = mapper == null
101+
? Collections.emptySet()
102+
: Collections.singleton(mapper.type());
103103
} else {
104-
typeIntersection = indexService.mapperService().types()
105-
.stream()
106-
.filter(type -> Regex.simpleMatch(request.types(), type))
107-
.collect(Collectors.toCollection(ArrayList::new));
104+
typeIntersection = mapper != null && Regex.simpleMatch(request.types(), mapper.type())
105+
? Collections.singleton(mapper.type())
106+
: Collections.emptySet();
108107
if (typeIntersection.isEmpty()) {
109108
throw new TypeMissingException(shardId.getIndex(), request.types());
110109
}

server/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.lucene.util.BytesRef;
2424
import org.elasticsearch.common.bytes.BytesArray;
2525
import org.elasticsearch.common.bytes.BytesReference;
26+
import org.elasticsearch.index.mapper.DocumentMapper;
2627
import org.elasticsearch.index.mapper.IdFieldMapper;
2728
import org.elasticsearch.index.mapper.IgnoredFieldMapper;
2829
import org.elasticsearch.index.mapper.MappedFieldType;
@@ -34,7 +35,6 @@
3435
import java.io.IOException;
3536
import java.nio.charset.StandardCharsets;
3637
import java.util.ArrayList;
37-
import java.util.Collection;
3838
import java.util.HashMap;
3939
import java.util.HashSet;
4040
import java.util.List;
@@ -84,10 +84,9 @@ public Status needsField(FieldInfo fieldInfo) throws IOException {
8484
}
8585

8686
public void postProcess(MapperService mapperService) {
87-
final Collection<String> types = mapperService.types();
88-
assert types.size() <= 1 : types;
89-
if (types.isEmpty() == false) {
90-
type = types.iterator().next();
87+
final DocumentMapper mapper = mapperService.documentMapper();
88+
if (mapper != null) {
89+
type = mapper.type();
9190
}
9291
for (Map.Entry<String, List<Object>> entry : fields().entrySet()) {
9392
MappedFieldType fieldType = mapperService.fullName(entry.getKey());

server/src/main/java/org/elasticsearch/index/get/ShardGetService.java

+6-13
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@
4848
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
4949

5050
import java.io.IOException;
51-
import java.util.Collection;
52-
import java.util.Collections;
5351
import java.util.HashMap;
5452
import java.util.List;
5553
import java.util.Map;
@@ -149,23 +147,18 @@ private FetchSourceContext normalizeFetchSourceContent(@Nullable FetchSourceCont
149147
private GetResult innerGet(String type, String id, String[] gFields, boolean realtime, long version, VersionType versionType,
150148
FetchSourceContext fetchSourceContext, boolean readFromTranslog) {
151149
fetchSourceContext = normalizeFetchSourceContent(fetchSourceContext, gFields);
152-
final Collection<String> types;
153150
if (type == null || type.equals("_all")) {
154-
types = mapperService.types();
155-
} else {
156-
types = Collections.singleton(type);
151+
DocumentMapper mapper = mapperService.documentMapper();
152+
type = mapper == null ? null : mapper.type();
157153
}
158154

159155
Engine.GetResult get = null;
160-
for (String typeX : types) {
161-
Term uidTerm = mapperService.createUidTerm(typeX, id);
156+
if (type != null) {
157+
Term uidTerm = mapperService.createUidTerm(type, id);
162158
if (uidTerm != null) {
163-
get = indexShard.get(new Engine.Get(realtime, readFromTranslog, typeX, id, uidTerm)
159+
get = indexShard.get(new Engine.Get(realtime, readFromTranslog, type, id, uidTerm)
164160
.version(version).versionType(versionType));
165-
if (get.exists()) {
166-
type = typeX;
167-
break;
168-
} else {
161+
if (get.exists() == false) {
169162
get.release();
170163
}
171164
}

server/src/main/java/org/elasticsearch/index/mapper/MapperService.java

-9
Original file line numberDiff line numberDiff line change
@@ -673,15 +673,6 @@ public DocumentMapper parse(String mappingType, CompressedXContent mappingSource
673673
return documentParser.parse(mappingType, mappingSource, applyDefault ? defaultMappingSource : null);
674674
}
675675

676-
/**
677-
* Get the set of types.
678-
* @deprecated Indices may have one type at most, use {@link #documentMapper()} instead.
679-
*/
680-
@Deprecated
681-
public Set<String> types() {
682-
return mapper == null ? Collections.emptySet() : Collections.singleton(mapper.type());
683-
}
684-
685676
/**
686677
* Return the document mapper, or {@code null} if no mapping has been put yet.
687678
*/

server/src/main/java/org/elasticsearch/index/mapper/TypeFieldMapper.java

+4-13
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) {
114114
return new DocValuesIndexFieldData.Builder();
115115
} else {
116116
// means the index has a single type and the type field is implicit
117-
Function<MapperService, String> typeFunction = mapperService -> {
118-
Collection<String> types = mapperService.types();
119-
if (types.size() > 1) {
120-
throw new AssertionError();
121-
}
122-
// If we reach here, there is necessarily one type since we were able to find a `_type` field
123-
String type = types.iterator().next();
124-
return type;
125-
};
117+
Function<MapperService, String> typeFunction = mapperService -> mapperService.documentMapper().type();
126118
return new ConstantIndexFieldData.Builder(typeFunction);
127119
}
128120
}
@@ -144,12 +136,11 @@ public Query termQuery(Object value, QueryShardContext context) {
144136

145137
@Override
146138
public Query termsQuery(List<?> values, QueryShardContext context) {
147-
Collection<String> indexTypes = context.getMapperService().types();
148-
if (indexTypes.isEmpty()) {
139+
DocumentMapper mapper = context.getMapperService().documentMapper();
140+
if (mapper == null) {
149141
return new MatchNoDocsQuery("No types");
150142
}
151-
assert indexTypes.size() == 1;
152-
BytesRef indexType = indexedValueForSearch(indexTypes.iterator().next());
143+
BytesRef indexType = indexedValueForSearch(mapper.type());
153144
if (values.stream()
154145
.map(this::indexedValueForSearch)
155146
.anyMatch(indexType::equals)) {

server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java

+5-7
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131
import org.elasticsearch.common.xcontent.ObjectParser;
3232
import org.elasticsearch.common.xcontent.XContentBuilder;
3333
import org.elasticsearch.common.xcontent.XContentParser;
34+
import org.elasticsearch.index.mapper.DocumentMapper;
3435
import org.elasticsearch.index.mapper.IdFieldMapper;
3536
import org.elasticsearch.index.mapper.MappedFieldType;
36-
import org.elasticsearch.index.mapper.Uid;
3737

3838
import java.io.IOException;
3939
import java.util.ArrayList;
@@ -163,19 +163,17 @@ protected Query doToQuery(QueryShardContext context) throws IOException {
163163
if (this.ids.isEmpty()) {
164164
return Queries.newMatchNoDocsQuery("Missing ids in \"" + this.getName() + "\" query.");
165165
} else {
166+
final DocumentMapper mapper = context.getMapperService().documentMapper();
166167
Collection<String> typesForQuery;
167168
if (types.length == 0) {
168169
typesForQuery = context.queryTypes();
169170
} else if (types.length == 1 && MetaData.ALL.equals(types[0])) {
170-
typesForQuery = context.getMapperService().types();
171+
typesForQuery = Collections.singleton(mapper.type());
171172
} else {
172-
typesForQuery = new HashSet<>();
173-
Collections.addAll(typesForQuery, types);
173+
typesForQuery = new HashSet<>(Arrays.asList(types));
174174
}
175175

176-
final Collection<String> mappingTypes = context.getMapperService().types();
177-
assert mappingTypes.size() == 1;
178-
if (typesForQuery.contains(mappingTypes.iterator().next())) {
176+
if (typesForQuery.contains(mapper.type())) {
179177
return idField.termsQuery(new ArrayList<>(ids), context);
180178
} else {
181179
return new MatchNoDocsQuery("Type mismatch");

server/src/main/java/org/elasticsearch/index/query/QueryShardContext.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import java.io.IOException;
5757
import java.util.Arrays;
5858
import java.util.Collection;
59+
import java.util.Collections;
5960
import java.util.HashMap;
6061
import java.util.List;
6162
import java.util.Map;
@@ -262,11 +263,9 @@ MappedFieldType failIfFieldMappingNotFound(String name, MappedFieldType fieldMap
262263
*/
263264
public Collection<String> queryTypes() {
264265
String[] types = getTypes();
265-
if (types == null || types.length == 0) {
266-
return getMapperService().types();
267-
}
268-
if (types.length == 1 && types[0].equals("_all")) {
269-
return getMapperService().types();
266+
if (types == null || types.length == 0 || (types.length == 1 && types[0].equals("_all"))) {
267+
DocumentMapper mapper = getMapperService().documentMapper();
268+
return mapper == null ? Collections.emptyList() : Collections.singleton(mapper.type());
270269
}
271270
return Arrays.asList(types);
272271
}

server/src/main/java/org/elasticsearch/index/query/functionscore/RandomScoreFunctionBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ protected ScoreFunction doToFunction(QueryShardContext context) {
172172
fieldType = context.getMapperService().fullName(IdFieldMapper.NAME);
173173
}
174174
if (fieldType == null) {
175-
if (context.getMapperService().types().isEmpty()) {
175+
if (context.getMapperService().documentMapper() == null) {
176176
// no mappings: the index is empty anyway
177177
return new RandomScoreFunction(hash(context.nowInMillis()), salt, null);
178178
}

server/src/test/java/org/elasticsearch/index/mapper/TypeFieldTypeTests.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737
import org.mockito.Mockito;
3838

3939
import java.io.IOException;
40-
import java.util.Collections;
41-
import java.util.Set;
4240

4341
public class TypeFieldTypeTests extends FieldTypeTestCase {
4442
@Override
@@ -60,26 +58,27 @@ public void testTermsQuery() throws Exception {
6058
Mockito.when(context.indexVersionCreated()).thenReturn(indexVersionCreated);
6159

6260
MapperService mapperService = Mockito.mock(MapperService.class);
63-
Set<String> types = Collections.emptySet();
64-
Mockito.when(mapperService.types()).thenReturn(types);
61+
Mockito.when(mapperService.documentMapper()).thenReturn(null);
6562
Mockito.when(context.getMapperService()).thenReturn(mapperService);
6663

6764
TypeFieldMapper.TypeFieldType ft = new TypeFieldMapper.TypeFieldType();
6865
ft.setName(TypeFieldMapper.NAME);
6966
Query query = ft.termQuery("my_type", context);
7067
assertEquals(new MatchNoDocsQuery(), query);
7168

72-
types = Collections.singleton("my_type");
73-
Mockito.when(mapperService.types()).thenReturn(types);
69+
DocumentMapper mapper = Mockito.mock(DocumentMapper.class);
70+
Mockito.when(mapper.type()).thenReturn("my_type");
71+
Mockito.when(mapperService.documentMapper()).thenReturn(mapper);
7472
query = ft.termQuery("my_type", context);
7573
assertEquals(new MatchAllDocsQuery(), query);
7674

7775
Mockito.when(mapperService.hasNested()).thenReturn(true);
7876
query = ft.termQuery("my_type", context);
7977
assertEquals(Queries.newNonNestedFilter(context.indexVersionCreated()), query);
8078

81-
types = Collections.singleton("other_type");
82-
Mockito.when(mapperService.types()).thenReturn(types);
79+
mapper = Mockito.mock(DocumentMapper.class);
80+
Mockito.when(mapper.type()).thenReturn("other_type");
81+
Mockito.when(mapperService.documentMapper()).thenReturn(mapper);
8382
query = ft.termQuery("my_type", context);
8483
assertEquals(new MatchNoDocsQuery(), query);
8584
}

server/src/test/java/org/elasticsearch/index/query/IdsQueryBuilderTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ protected void doAssertLuceneQuery(IdsQueryBuilder queryBuilder, Query query, Se
8484
|| context.getQueryShardContext().fieldMapper(IdFieldMapper.NAME) == null
8585
// there are types, but disjoint from the query
8686
|| (allTypes == false &&
87-
Arrays.asList(queryBuilder.types()).indexOf(context.mapperService().types().iterator().next()) == -1)) {
87+
Arrays.asList(queryBuilder.types()).indexOf(context.mapperService().documentMapper().type()) == -1)) {
8888
assertThat(query, instanceOf(MatchNoDocsQuery.class));
8989
} else {
9090
assertThat(query, instanceOf(TermInSetQuery.class));

test/framework/src/main/java/org/elasticsearch/search/aggregations/AggregatorTestCase.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.elasticsearch.index.fielddata.IndexFieldDataCache;
4949
import org.elasticsearch.index.fielddata.IndexFieldDataService;
5050
import org.elasticsearch.index.mapper.ContentPath;
51+
import org.elasticsearch.index.mapper.DocumentMapper;
5152
import org.elasticsearch.index.mapper.MappedFieldType;
5253
import org.elasticsearch.index.mapper.Mapper.BuilderContext;
5354
import org.elasticsearch.index.mapper.MapperService;
@@ -60,7 +61,6 @@
6061
import org.elasticsearch.indices.breaker.NoneCircuitBreakerService;
6162
import org.elasticsearch.indices.fielddata.cache.IndicesFieldDataCache;
6263
import org.elasticsearch.mock.orig.Mockito;
63-
import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation;
6464
import org.elasticsearch.search.fetch.FetchPhase;
6565
import org.elasticsearch.search.fetch.subphase.DocValueFieldsFetchSubPhase;
6666
import org.elasticsearch.search.fetch.subphase.FetchSourceSubPhase;
@@ -129,7 +129,9 @@ protected AggregatorFactory<?> createAggregatorFactory(Query query,
129129
MapperService mapperService = mapperServiceMock();
130130
when(mapperService.getIndexSettings()).thenReturn(indexSettings);
131131
when(mapperService.hasNested()).thenReturn(false);
132-
when(mapperService.types()).thenReturn(Collections.singleton(TYPE_NAME));
132+
DocumentMapper mapper = mock(DocumentMapper.class);
133+
when(mapper.type()).thenReturn(TYPE_NAME);
134+
when(mapperService.documentMapper()).thenReturn(mapper);
133135
when(searchContext.mapperService()).thenReturn(mapperService);
134136
IndexFieldDataService ifds = new IndexFieldDataService(indexSettings,
135137
new IndicesFieldDataCache(Settings.EMPTY, new IndexFieldDataCache.Listener() {

0 commit comments

Comments
 (0)