From a6cde484cdfe98a753b11db24905f093093ad6d4 Mon Sep 17 00:00:00 2001 From: Martijn van Groningen Date: Fri, 29 Aug 2025 09:55:37 +0200 Subject: [PATCH 1/2] Experiment with using tsdb doc values codec for _seq_no. Running metricsgenreceiver without this change: ``` "_seq_no": { "total": "369.9mb", "total_in_bytes": 387962443, "inverted_index": { "total": "0b", "total_in_bytes": 0 }, "stored_fields": "0b", "stored_fields_in_bytes": 0, "doc_values": "369.9mb", "doc_values_in_bytes": 387962443, "points": "0b", "points_in_bytes": 0, "norms": "0b", "norms_in_bytes": 0, "term_vectors": "0b", "term_vectors_in_bytes": 0, "knn_vectors": "0b", "knn_vectors_in_bytes": 0 } ``` and running metricsgenreceiver with this change: ``` "_seq_no": { "total": "212.3mb", "total_in_bytes": 222616293, "inverted_index": { "total": "0b", "total_in_bytes": 0 }, "stored_fields": "0b", "stored_fields_in_bytes": 0, "doc_values": "212.3mb", "doc_values_in_bytes": 222616293, "points": "0b", "points_in_bytes": 0, "norms": "0b", "norms_in_bytes": 0, "term_vectors": "0b", "term_vectors_in_bytes": 0, "knn_vectors": "0b", "knn_vectors_in_bytes": 0 } ``` metricsgenreceiver config: ``` receivers: metricsgen: start_now_minus: 72h interval: 5s interval_jitter_std_dev: 1ms real_time: false exit_after_end: true seed: 123 scenarios: - path: builtin/hostmetrics scale: 100 ``` --- .../elasticsearch/index/codec/PerFieldFormatSupplier.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java b/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java index ecb0d6d5eb3ca..8c18347df4e05 100644 --- a/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java +++ b/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java @@ -25,6 +25,7 @@ import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.Mapper; import org.elasticsearch.index.mapper.MapperService; +import org.elasticsearch.index.mapper.SeqNoFieldMapper; import org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper; /** @@ -122,9 +123,13 @@ boolean useTSDBDocValuesFormat(final String field) { } private boolean excludeFields(String fieldName) { + // TODO: should we just allow all fields to use tsdb doc values codec? // Avoid using tsdb codec for fields like _seq_no, _primary_term. // But _tsid and _ts_routing_hash should always use the tsdb codec. - return fieldName.startsWith("_") && fieldName.equals("_tsid") == false && fieldName.equals("_ts_routing_hash") == false; + return fieldName.startsWith("_") + && fieldName.equals("_tsid") == false + && fieldName.equals("_ts_routing_hash") == false + && fieldName.equals(SeqNoFieldMapper.NAME) == false; } private boolean isTimeSeriesModeIndex() { From b8416cf7331594b124447fe59e03182b3b6b06e5 Mon Sep 17 00:00:00 2001 From: Martijn van Groningen Date: Fri, 29 Aug 2025 16:08:57 +0200 Subject: [PATCH 2/2] added feature flag --- .../elasticsearch/index/codec/PerFieldFormatSupplier.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java b/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java index 8c18347df4e05..80545c16c563f 100644 --- a/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java +++ b/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java @@ -15,6 +15,7 @@ import org.apache.lucene.codecs.lucene90.Lucene90DocValuesFormat; import org.apache.lucene.codecs.lucene99.Lucene99HnswVectorsFormat; import org.elasticsearch.common.util.BigArrays; +import org.elasticsearch.common.util.FeatureFlag; import org.elasticsearch.index.IndexMode; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.IndexVersions; @@ -34,6 +35,8 @@ */ public class PerFieldFormatSupplier { + private static final FeatureFlag SEQNO_FIELD_USE_TSDB_DOC_VALUES_FORMAT = new FeatureFlag("seqno_field_use_tsdb_doc_values_format"); + private static final DocValuesFormat docValuesFormat = new Lucene90DocValuesFormat(); private static final KnnVectorsFormat knnVectorsFormat = new Lucene99HnswVectorsFormat(); private static final ES819TSDBDocValuesFormat tsdbDocValuesFormat = new ES819TSDBDocValuesFormat(); @@ -129,7 +132,7 @@ private boolean excludeFields(String fieldName) { return fieldName.startsWith("_") && fieldName.equals("_tsid") == false && fieldName.equals("_ts_routing_hash") == false - && fieldName.equals(SeqNoFieldMapper.NAME) == false; + && (SEQNO_FIELD_USE_TSDB_DOC_VALUES_FORMAT.isEnabled() && fieldName.equals(SeqNoFieldMapper.NAME) == false); } private boolean isTimeSeriesModeIndex() {