Skip to content

Commit de1db98

Browse files
authored
[8.x] Refactor DocumentDimensions to RoutingFields (#116321) (#116604)
* Refactor DocumentDimensions to RoutingFields (#116321) * Refactor DocumentDimensions to RoutingFields * update * add test * add test * updates from review * updates from review * spotless * remove final from subclass * fix final (cherry picked from commit 2054357) # Conflicts: # server/src/main/java/org/elasticsearch/index/mapper/TimeSeriesIdFieldMapper.java * fix imports
1 parent 97859f5 commit de1db98

File tree

23 files changed

+557
-475
lines changed

23 files changed

+557
-475
lines changed

modules/aggregations/src/main/java/org/elasticsearch/aggregations/bucket/timeseries/InternalTimeSeries.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import org.apache.lucene.util.PriorityQueue;
1414
import org.elasticsearch.common.io.stream.StreamInput;
1515
import org.elasticsearch.common.io.stream.StreamOutput;
16-
import org.elasticsearch.index.mapper.TimeSeriesIdFieldMapper;
16+
import org.elasticsearch.index.mapper.RoutingPathFields;
1717
import org.elasticsearch.search.aggregations.AggregationReduceContext;
1818
import org.elasticsearch.search.aggregations.AggregatorReducer;
1919
import org.elasticsearch.search.aggregations.InternalAggregation;
@@ -68,7 +68,7 @@ public void writeTo(StreamOutput out) throws IOException {
6868

6969
@Override
7070
public Map<String, Object> getKey() {
71-
return TimeSeriesIdFieldMapper.decodeTsidAsMap(key);
71+
return RoutingPathFields.decodeAsMap(key);
7272
}
7373

7474
@Override

modules/aggregations/src/main/java/org/elasticsearch/aggregations/bucket/timeseries/TimeSeriesAggregator.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.apache.lucene.util.BytesRef;
1414
import org.elasticsearch.core.Releasables;
1515
import org.elasticsearch.index.fielddata.SortedBinaryDocValues;
16+
import org.elasticsearch.index.mapper.RoutingPathFields;
1617
import org.elasticsearch.index.mapper.TimeSeriesIdFieldMapper;
1718
import org.elasticsearch.search.aggregations.AggregationExecutionContext;
1819
import org.elasticsearch.search.aggregations.Aggregator;
@@ -161,11 +162,11 @@ public void collect(int doc, long bucket) throws IOException {
161162
if (currentTsidOrd == aggCtx.getTsidHashOrd()) {
162163
tsid = currentTsid;
163164
} else {
164-
TimeSeriesIdFieldMapper.TimeSeriesIdBuilder tsidBuilder = new TimeSeriesIdFieldMapper.TimeSeriesIdBuilder(null);
165+
RoutingPathFields routingPathFields = new RoutingPathFields(null);
165166
for (TsidConsumer consumer : dimensionConsumers.values()) {
166-
consumer.accept(doc, tsidBuilder);
167+
consumer.accept(doc, routingPathFields);
167168
}
168-
currentTsid = tsid = tsidBuilder.buildLegacyTsid().toBytesRef();
169+
currentTsid = tsid = TimeSeriesIdFieldMapper.buildLegacyTsid(routingPathFields).toBytesRef();
169170
}
170171
long bucketOrdinal = bucketOrds.add(bucket, tsid);
171172
if (bucketOrdinal < 0) { // already seen
@@ -189,6 +190,6 @@ InternalTimeSeries buildResult(InternalTimeSeries.InternalBucket[] topBuckets) {
189190

190191
@FunctionalInterface
191192
interface TsidConsumer {
192-
void accept(int docId, TimeSeriesIdFieldMapper.TimeSeriesIdBuilder tsidBuilder) throws IOException;
193+
void accept(int docId, RoutingPathFields routingFields) throws IOException;
193194
}
194195
}

modules/aggregations/src/test/java/org/elasticsearch/aggregations/bucket/timeseries/InternalTimeSeriesTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.elasticsearch.common.settings.Settings;
1616
import org.elasticsearch.common.util.MockBigArrays;
1717
import org.elasticsearch.common.util.MockPageCacheRecycler;
18+
import org.elasticsearch.index.mapper.RoutingPathFields;
1819
import org.elasticsearch.index.mapper.TimeSeriesIdFieldMapper;
1920
import org.elasticsearch.indices.breaker.NoneCircuitBreakerService;
2021
import org.elasticsearch.search.aggregations.AggregationReduceContext;
@@ -42,12 +43,12 @@ private List<InternalBucket> randomBuckets(boolean keyed, InternalAggregations a
4243
List<Map<String, Object>> keys = randomKeys(bucketKeys(randomIntBetween(1, 4)), numberOfBuckets);
4344
for (int j = 0; j < numberOfBuckets; j++) {
4445
long docCount = randomLongBetween(0, Long.MAX_VALUE / (20L * numberOfBuckets));
45-
var builder = new TimeSeriesIdFieldMapper.TimeSeriesIdBuilder(null);
46+
var routingPathFields = new RoutingPathFields(null);
4647
for (var entry : keys.get(j).entrySet()) {
47-
builder.addString(entry.getKey(), (String) entry.getValue());
48+
routingPathFields.addString(entry.getKey(), (String) entry.getValue());
4849
}
4950
try {
50-
var key = builder.buildLegacyTsid().toBytesRef();
51+
var key = TimeSeriesIdFieldMapper.buildLegacyTsid(routingPathFields).toBytesRef();
5152
bucketList.add(new InternalBucket(key, docCount, aggregations, keyed));
5253
} catch (IOException e) {
5354
throw new UncheckedIOException(e);

modules/aggregations/src/test/java/org/elasticsearch/aggregations/bucket/timeseries/TimeSeriesAggregatorTests.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
import org.elasticsearch.index.mapper.MappedFieldType;
3131
import org.elasticsearch.index.mapper.MapperBuilderContext;
3232
import org.elasticsearch.index.mapper.NumberFieldMapper;
33+
import org.elasticsearch.index.mapper.RoutingPathFields;
3334
import org.elasticsearch.index.mapper.TimeSeriesIdFieldMapper;
34-
import org.elasticsearch.index.mapper.TimeSeriesIdFieldMapper.TimeSeriesIdBuilder;
3535
import org.elasticsearch.search.aggregations.InternalAggregations;
3636
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder;
3737
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
@@ -93,10 +93,10 @@ public static void writeTS(RandomIndexWriter iw, long timestamp, Object[] dimens
9393
final List<IndexableField> fields = new ArrayList<>();
9494
fields.add(new SortedNumericDocValuesField(DataStreamTimestampFieldMapper.DEFAULT_PATH, timestamp));
9595
fields.add(new LongPoint(DataStreamTimestampFieldMapper.DEFAULT_PATH, timestamp));
96-
final TimeSeriesIdBuilder builder = new TimeSeriesIdBuilder(null);
96+
RoutingPathFields routingPathFields = new RoutingPathFields(null);
9797
for (int i = 0; i < dimensions.length; i += 2) {
9898
if (dimensions[i + 1] instanceof Number n) {
99-
builder.addLong(dimensions[i].toString(), n.longValue());
99+
routingPathFields.addLong(dimensions[i].toString(), n.longValue());
100100
if (dimensions[i + 1] instanceof Integer || dimensions[i + 1] instanceof Long) {
101101
fields.add(new NumericDocValuesField(dimensions[i].toString(), ((Number) dimensions[i + 1]).longValue()));
102102
} else if (dimensions[i + 1] instanceof Float) {
@@ -105,7 +105,7 @@ public static void writeTS(RandomIndexWriter iw, long timestamp, Object[] dimens
105105
fields.add(new DoubleDocValuesField(dimensions[i].toString(), (double) dimensions[i + 1]));
106106
}
107107
} else {
108-
builder.addString(dimensions[i].toString(), dimensions[i + 1].toString());
108+
routingPathFields.addString(dimensions[i].toString(), dimensions[i + 1].toString());
109109
fields.add(new SortedSetDocValuesField(dimensions[i].toString(), new BytesRef(dimensions[i + 1].toString())));
110110
}
111111
}
@@ -118,7 +118,9 @@ public static void writeTS(RandomIndexWriter iw, long timestamp, Object[] dimens
118118
fields.add(new DoubleDocValuesField(metrics[i].toString(), (double) metrics[i + 1]));
119119
}
120120
}
121-
fields.add(new SortedDocValuesField(TimeSeriesIdFieldMapper.NAME, builder.buildLegacyTsid().toBytesRef()));
121+
fields.add(
122+
new SortedDocValuesField(TimeSeriesIdFieldMapper.NAME, TimeSeriesIdFieldMapper.buildLegacyTsid(routingPathFields).toBytesRef())
123+
);
122124
iw.addDocument(fields);
123125
}
124126

server/src/main/java/org/elasticsearch/index/IndexMode.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.elasticsearch.index.codec.CodecService;
2424
import org.elasticsearch.index.mapper.DataStreamTimestampFieldMapper;
2525
import org.elasticsearch.index.mapper.DateFieldMapper;
26-
import org.elasticsearch.index.mapper.DocumentDimensions;
2726
import org.elasticsearch.index.mapper.FieldMapper;
2827
import org.elasticsearch.index.mapper.IdFieldMapper;
2928
import org.elasticsearch.index.mapper.KeywordFieldMapper;
@@ -33,6 +32,8 @@
3332
import org.elasticsearch.index.mapper.NestedLookup;
3433
import org.elasticsearch.index.mapper.ProvidedIdFieldMapper;
3534
import org.elasticsearch.index.mapper.RoutingFieldMapper;
35+
import org.elasticsearch.index.mapper.RoutingFields;
36+
import org.elasticsearch.index.mapper.RoutingPathFields;
3637
import org.elasticsearch.index.mapper.SourceFieldMapper;
3738
import org.elasticsearch.index.mapper.TimeSeriesIdFieldMapper;
3839
import org.elasticsearch.index.mapper.TimeSeriesRoutingHashFieldMapper;
@@ -111,8 +112,8 @@ public IdFieldMapper buildIdFieldMapper(BooleanSupplier fieldDataEnabled) {
111112
}
112113

113114
@Override
114-
public DocumentDimensions buildDocumentDimensions(IndexSettings settings) {
115-
return DocumentDimensions.Noop.INSTANCE;
115+
public RoutingFields buildRoutingFields(IndexSettings settings) {
116+
return RoutingFields.Noop.INSTANCE;
116117
}
117118

118119
@Override
@@ -209,9 +210,9 @@ public IdFieldMapper buildIdFieldMapper(BooleanSupplier fieldDataEnabled) {
209210
}
210211

211212
@Override
212-
public DocumentDimensions buildDocumentDimensions(IndexSettings settings) {
213+
public RoutingFields buildRoutingFields(IndexSettings settings) {
213214
IndexRouting.ExtractFromSource routing = (IndexRouting.ExtractFromSource) settings.getIndexRouting();
214-
return new TimeSeriesIdFieldMapper.TimeSeriesIdBuilder(routing.builder());
215+
return new RoutingPathFields(routing.builder());
215216
}
216217

217218
@Override
@@ -287,8 +288,8 @@ public MetadataFieldMapper timeSeriesRoutingHashFieldMapper() {
287288
}
288289

289290
@Override
290-
public DocumentDimensions buildDocumentDimensions(IndexSettings settings) {
291-
return DocumentDimensions.Noop.INSTANCE;
291+
public RoutingFields buildRoutingFields(IndexSettings settings) {
292+
return RoutingFields.Noop.INSTANCE;
292293
}
293294

294295
@Override
@@ -368,8 +369,8 @@ public IdFieldMapper buildIdFieldMapper(BooleanSupplier fieldDataEnabled) {
368369
}
369370

370371
@Override
371-
public DocumentDimensions buildDocumentDimensions(IndexSettings settings) {
372-
return DocumentDimensions.Noop.INSTANCE;
372+
public RoutingFields buildRoutingFields(IndexSettings settings) {
373+
return RoutingFields.Noop.INSTANCE;
373374
}
374375

375376
@Override
@@ -524,7 +525,7 @@ public String getName() {
524525
/**
525526
* How {@code time_series_dimension} fields are handled by indices in this mode.
526527
*/
527-
public abstract DocumentDimensions buildDocumentDimensions(IndexSettings settings);
528+
public abstract RoutingFields buildRoutingFields(IndexSettings settings);
528529

529530
/**
530531
* @return Whether timestamps should be validated for being withing the time range of an index.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ private void indexValue(DocumentParserContext context, Boolean value) {
499499
}
500500

501501
if (fieldType().isDimension()) {
502-
context.getDimensions().addBoolean(fieldType().name(), value).validate(context.indexSettings());
502+
context.getRoutingFields().addBoolean(fieldType().name(), value);
503503
}
504504
if (indexed) {
505505
context.doc().add(new StringField(fieldType().name(), value ? Values.TRUE : Values.FALSE, Field.Store.NO));

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

Lines changed: 0 additions & 92 deletions
This file was deleted.

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ private enum Scope {
126126
private final DynamicMapperSize dynamicMappersSize;
127127
private final Map<String, ObjectMapper> dynamicObjectMappers;
128128
private final Map<String, List<RuntimeField>> dynamicRuntimeFields;
129-
private final DocumentDimensions dimensions;
129+
private final RoutingFields routingFields;
130130
private final ObjectMapper parent;
131131
private final ObjectMapper.Dynamic dynamic;
132132
private String id;
@@ -158,7 +158,7 @@ private DocumentParserContext(
158158
String id,
159159
Field version,
160160
SeqNoFieldMapper.SequenceIDFields seqID,
161-
DocumentDimensions dimensions,
161+
RoutingFields routingFields,
162162
ObjectMapper parent,
163163
ObjectMapper.Dynamic dynamic,
164164
Set<String> fieldsAppliedFromTemplates,
@@ -178,7 +178,7 @@ private DocumentParserContext(
178178
this.id = id;
179179
this.version = version;
180180
this.seqID = seqID;
181-
this.dimensions = dimensions;
181+
this.routingFields = routingFields;
182182
this.parent = parent;
183183
this.dynamic = dynamic;
184184
this.fieldsAppliedFromTemplates = fieldsAppliedFromTemplates;
@@ -201,7 +201,7 @@ private DocumentParserContext(ObjectMapper parent, ObjectMapper.Dynamic dynamic,
201201
in.id,
202202
in.version,
203203
in.seqID,
204-
in.dimensions,
204+
in.routingFields,
205205
parent,
206206
dynamic,
207207
in.fieldsAppliedFromTemplates,
@@ -231,7 +231,7 @@ protected DocumentParserContext(
231231
null,
232232
null,
233233
SeqNoFieldMapper.SequenceIDFields.emptySeqID(),
234-
DocumentDimensions.fromIndexSettings(mappingParserContext.getIndexSettings()),
234+
RoutingFields.fromIndexSettings(mappingParserContext.getIndexSettings()),
235235
parent,
236236
dynamic,
237237
new HashSet<>(),
@@ -762,8 +762,8 @@ public XContentParser parser() {
762762
/**
763763
* The collection of dimensions for this document.
764764
*/
765-
public DocumentDimensions getDimensions() {
766-
return dimensions;
765+
public RoutingFields getRoutingFields() {
766+
return routingFields;
767767
}
768768

769769
public abstract ContentPath path();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ protected void parseCreateField(DocumentParserContext context) throws IOExceptio
567567

568568
private void indexValue(DocumentParserContext context, InetAddress address) {
569569
if (dimension) {
570-
context.getDimensions().addIp(fieldType().name(), address).validate(context.indexSettings());
570+
context.getRoutingFields().addIp(fieldType().name(), address);
571571
}
572572
if (indexed) {
573573
Field field = new InetAddressPoint(fieldType().name(), address);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -946,7 +946,7 @@ private void indexValue(DocumentParserContext context, String value) {
946946
final BytesRef binaryValue = new BytesRef(value);
947947

948948
if (fieldType().isDimension()) {
949-
context.getDimensions().addString(fieldType().name(), binaryValue).validate(context.indexSettings());
949+
context.getRoutingFields().addString(fieldType().name(), binaryValue);
950950
}
951951

952952
// If the UTF8 encoding of the field value is bigger than the max length 32766, Lucene fill fail the indexing request and, to

0 commit comments

Comments
 (0)