Skip to content

Commit 293d1ad

Browse files
authored
Reduce ParseContext API surface (elastic#63731)
Reduce the API surface of ParseContext given that: - it does not need to implement Iterable - it does not need to expose MapperService, but rather a couple of specific methods that internally rely on MapperService - it does not need to expose DocumentMapperParser, but rather one method to get the parser context given a date formatter
1 parent 5a333ff commit 293d1ad

File tree

7 files changed

+37
-47
lines changed

7 files changed

+37
-47
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ public void parse(ParseContext context) throws IOException {
370370
Rewriteable.rewriteAndFetch(queryBuilder, queryShardContext, future);
371371
queryBuilder = future.actionGet();
372372

373-
Version indexVersion = context.mapperService().getIndexSettings().getIndexVersionCreated();
373+
Version indexVersion = context.indexSettings().getIndexVersionCreated();
374374
createQueryBuilderField(indexVersion, queryBuilderField, queryBuilder, context);
375375

376376
QueryBuilder queryBuilderForProcessing = queryBuilder.rewrite(new QueryShardContext(queryShardContext));
@@ -411,7 +411,7 @@ void processQuery(Query query, ParseContext context) {
411411
ParseContext.Document doc = context.doc();
412412
PercolatorFieldType pft = (PercolatorFieldType) this.fieldType();
413413
QueryAnalyzer.Result result;
414-
Version indexVersion = context.mapperService().getIndexSettings().getIndexVersionCreated();
414+
Version indexVersion = context.indexSettings().getIndexVersionCreated();
415415
result = QueryAnalyzer.analyze(query, indexVersion);
416416
if (result == QueryAnalyzer.Result.UNKNOWN) {
417417
doc.add(new Field(pft.extractionResultField.name(), EXTRACTION_FAILED, INDEXED_KEYWORD));
@@ -431,7 +431,7 @@ void processQuery(Query query, ParseContext context) {
431431
}
432432
}
433433

434-
Version indexVersionCreated = context.mapperService().getIndexSettings().getIndexVersionCreated();
434+
Version indexVersionCreated = context.indexSettings().getIndexVersionCreated();
435435
if (result.matchAllDocs) {
436436
doc.add(new Field(extractionResultField.name(), EXTRACTION_FAILED, INDEXED_KEYWORD));
437437
if (result.verified) {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,10 @@ DocumentMapperParser documentMapperParser() {
161161
return documentMapperParser;
162162
}
163163

164+
IndexAnalyzers indexAnalyzers() {
165+
return indexAnalyzers;
166+
}
167+
164168
public Mapping mapping() {
165169
return mapping;
166170
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ private static Mapper.Builder createBuilderFromDynamicValue(final ParseContext c
695695
Mapper.Builder builder = context.root().findTemplateBuilder(context, currentFieldName, XContentFieldType.STRING);
696696
if (builder == null) {
697697
builder = new TextFieldMapper.Builder(currentFieldName,
698-
() -> context.mapperService().getIndexAnalyzers().getDefaultIndexAnalyzer())
698+
() -> context.indexAnalyzers().getDefaultIndexAnalyzer())
699699
.addMultiField(new KeywordFieldMapper.Builder("keyword").ignoreAbove(256));
700700
}
701701
return builder;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public void postParse(ParseContext context) throws IOException {
170170
if (fieldType().isEnabled() == false) {
171171
return;
172172
}
173-
for (ParseContext.Document document : context) {
173+
for (ParseContext.Document document : context.docs()) {
174174
final List<String> paths = new ArrayList<>(document.getFields().size());
175175
String previousPath = ""; // used as a sentinel - field names can't be empty
176176
for (IndexableField field : document.getFields()) {

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

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@
2525
import org.apache.lucene.index.IndexableField;
2626
import org.apache.lucene.util.BytesRef;
2727
import org.elasticsearch.Version;
28+
import org.elasticsearch.common.time.DateFormatter;
2829
import org.elasticsearch.common.xcontent.XContentParser;
2930
import org.elasticsearch.index.IndexSettings;
31+
import org.elasticsearch.index.analysis.IndexAnalyzers;
3032

3133
import java.util.ArrayList;
3234
import java.util.Collection;
@@ -37,7 +39,7 @@
3739
import java.util.List;
3840
import java.util.Set;
3941

40-
public abstract class ParseContext implements Iterable<ParseContext.Document>{
42+
public abstract class ParseContext {
4143

4244
/** Fork of {@link org.apache.lucene.document.Document} with additional functionality. */
4345
public static class Document implements Iterable<IndexableField> {
@@ -168,8 +170,8 @@ public Iterable<Document> nonRootDocuments() {
168170
}
169171

170172
@Override
171-
public DocumentMapperParser docMapperParser() {
172-
return in.docMapperParser();
173+
public Mapper.TypeParser.ParserContext parserContext(DateFormatter dateFormatter) {
174+
return in.parserContext(dateFormatter);
173175
}
174176

175177
@Override
@@ -207,6 +209,11 @@ public Document rootDoc() {
207209
return in.rootDoc();
208210
}
209211

212+
@Override
213+
public List<Document> docs() {
214+
return in.docs();
215+
}
216+
210217
@Override
211218
public Document doc() {
212219
return in.doc();
@@ -228,8 +235,8 @@ public DocumentMapper docMapper() {
228235
}
229236

230237
@Override
231-
public MapperService mapperService() {
232-
return in.mapperService();
238+
public IndexAnalyzers indexAnalyzers() {
239+
return in.indexAnalyzers();
233240
}
234241

235242
@Override
@@ -272,11 +279,6 @@ public List<Mapper> getDynamicMappers() {
272279
return in.getDynamicMappers();
273280
}
274281

275-
@Override
276-
public Iterator<Document> iterator() {
277-
return in.iterator();
278-
}
279-
280282
@Override
281283
public void addIgnoredField(String field) {
282284
in.addIgnoredField(field);
@@ -289,33 +291,20 @@ public Collection<String> getIgnoredFields() {
289291
}
290292

291293
public static class InternalParseContext extends ParseContext {
292-
293294
private final DocumentMapper docMapper;
294-
295295
private final ContentPath path;
296-
297296
private final XContentParser parser;
298-
299297
private final Document document;
300-
301298
private final List<Document> documents;
302-
303299
private final SourceToParse sourceToParse;
304-
300+
private final long maxAllowedNumNestedDocs;
301+
private final List<Mapper> dynamicMappers;
302+
private final Set<String> ignoredFields = new HashSet<>();
305303
private Field version;
306-
307304
private SeqNoFieldMapper.SequenceIDFields seqID;
308-
309-
private final long maxAllowedNumNestedDocs;
310-
311305
private long numNestedDocs;
312-
313-
private final List<Mapper> dynamicMappers;
314-
315306
private boolean docsReversed = false;
316307

317-
private final Set<String> ignoredFields = new HashSet<>();
318-
319308
public InternalParseContext(DocumentMapper docMapper, SourceToParse source, XContentParser parser) {
320309
this.docMapper = docMapper;
321310
this.path = new ContentPath(0);
@@ -331,8 +320,8 @@ public InternalParseContext(DocumentMapper docMapper, SourceToParse source, XCon
331320
}
332321

333322
@Override
334-
public DocumentMapperParser docMapperParser() {
335-
return this.docMapper.documentMapperParser();
323+
public Mapper.TypeParser.ParserContext parserContext(DateFormatter dateFormatter) {
324+
return docMapper.documentMapperParser().parserContext(dateFormatter);
336325
}
337326

338327
@Override
@@ -360,7 +349,8 @@ public Document rootDoc() {
360349
return documents.get(0);
361350
}
362351

363-
List<Document> docs() {
352+
@Override
353+
public List<Document> docs() {
364354
return this.documents;
365355
}
366356

@@ -392,8 +382,8 @@ public DocumentMapper docMapper() {
392382
}
393383

394384
@Override
395-
public MapperService mapperService() {
396-
return docMapper.documentMapperParser().mapperService;
385+
public IndexAnalyzers indexAnalyzers() {
386+
return docMapper.indexAnalyzers();
397387
}
398388

399389
@Override
@@ -469,12 +459,6 @@ private List<Document> reorderParent(List<Document> docs) {
469459
return newDocs;
470460
}
471461

472-
@Override
473-
public Iterator<Document> iterator() {
474-
return documents.iterator();
475-
}
476-
477-
478462
@Override
479463
public void addIgnoredField(String field) {
480464
ignoredFields.add(field);
@@ -503,7 +487,7 @@ public Collection<String> getIgnoredFields() {
503487
*/
504488
public abstract Collection<String> getIgnoredFields();
505489

506-
public abstract DocumentMapperParser docMapperParser();
490+
public abstract Mapper.TypeParser.ParserContext parserContext(DateFormatter dateFormatter);
507491

508492
/**
509493
* Return a new context that will be within a copy-to operation.
@@ -580,6 +564,8 @@ public boolean isWithinMultiFields() {
580564

581565
public abstract Document rootDoc();
582566

567+
public abstract List<Document> docs();
568+
583569
public abstract Document doc();
584570

585571
protected abstract void addDoc(Document doc);
@@ -588,7 +574,7 @@ public boolean isWithinMultiFields() {
588574

589575
public abstract DocumentMapper docMapper();
590576

591-
public abstract MapperService mapperService();
577+
public abstract IndexAnalyzers indexAnalyzers();
592578

593579
public abstract Field version();
594580

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ private Mapper.Builder findTemplateBuilder(ParseContext context, String name, XC
274274
return null;
275275
}
276276
String dynamicType = matchType.defaultMappingType();
277-
Mapper.TypeParser.ParserContext parserContext = context.docMapperParser().parserContext(dateFormat);
277+
Mapper.TypeParser.ParserContext parserContext = context.parserContext(dateFormat);
278278
String mappingType = dynamicTemplate.mappingType(dynamicType);
279279
Mapper.TypeParser typeParser = parserContext.typeParser(mappingType);
280280
if (typeParser == null) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public SeqNoFieldMapper() {
180180
}
181181

182182
@Override
183-
public void preParse(ParseContext context) throws IOException {
183+
public void preParse(ParseContext context) {
184184
// see InternalEngine.innerIndex to see where the real version value is set
185185
// also see ParsedDocument.updateSeqID (called by innerIndex)
186186
SequenceIDFields seqID = SequenceIDFields.emptySeqID();
@@ -199,7 +199,7 @@ public void postParse(ParseContext context) throws IOException {
199199
// we share the parent docs fields to ensure good compression
200200
SequenceIDFields seqID = context.seqID();
201201
assert seqID != null;
202-
final Version versionCreated = context.mapperService().getIndexSettings().getIndexVersionCreated();
202+
final Version versionCreated = context.indexSettings().getIndexVersionCreated();
203203
final boolean includePrimaryTerm = versionCreated.before(Version.V_6_1_0);
204204
for (Document doc : context.nonRootDocuments()) {
205205
doc.add(seqID.seqNo);

0 commit comments

Comments
 (0)