Skip to content

Commit e251d86

Browse files
committed
Test that @timestamp's DateFieldMapper is using docValuesSkipper
1 parent fd626a2 commit e251d86

File tree

1 file changed

+196
-0
lines changed

1 file changed

+196
-0
lines changed

modules/data-streams/src/test/java/org/elasticsearch/datastreams/mapper/DataStreamTimestampFieldMapperTests.java

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
*/
99
package org.elasticsearch.datastreams.mapper;
1010

11+
import org.elasticsearch.cluster.metadata.IndexMetadata;
1112
import org.elasticsearch.common.settings.Settings;
1213
import org.elasticsearch.core.CheckedConsumer;
1314
import org.elasticsearch.datastreams.DataStreamsPlugin;
@@ -537,4 +538,199 @@ public void testFieldTypeWithDocValuesSkipper_CustomTimestampField() throws IOEx
537538
assertFalse(defaultTimestamp.fieldType().hasDocValuesSkipper());
538539
}
539540
}
541+
542+
public void testFieldTypeWithDocValuesSkipper_TSDBModeDisabledDocValuesSkipper() throws IOException {
543+
final Settings settings = Settings.builder()
544+
.put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES.name())
545+
.put(IndexMetadata.INDEX_ROUTING_PATH.getKey(), "dim")
546+
.put(IndexSettings.TIME_SERIES_START_TIME.getKey(), "2021-04-28T00:00:00Z")
547+
.put(IndexSettings.TIME_SERIES_END_TIME.getKey(), "2021-04-29T00:00:00Z")
548+
.put(IndexSettings.USE_DOC_VALUES_SKIPPER.getKey(), false)
549+
.build();
550+
final MapperService mapperService = createMapperService(settings, timestampMapping(true, b -> {
551+
b.startObject(DataStreamTimestampFieldMapper.DEFAULT_PATH);
552+
b.field("type", "date");
553+
b.endObject();
554+
}));
555+
556+
final DateFieldMapper timestampMapper = (DateFieldMapper) mapperService.documentMapper()
557+
.mappers()
558+
.getMapper(DataStreamTimestampFieldMapper.DEFAULT_PATH);
559+
assumeTrue("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled());
560+
assertTrue(timestampMapper.fieldType().hasDocValues());
561+
assertFalse(timestampMapper.fieldType().hasDocValuesSkipper());
562+
assertTrue(timestampMapper.fieldType().isIndexed());
563+
}
564+
565+
public void testFieldTypeWithDocValuesSkipper_TSDBMode() throws IOException {
566+
final Settings settings = Settings.builder()
567+
.put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES.name())
568+
.put(IndexMetadata.INDEX_ROUTING_PATH.getKey(), "dim")
569+
.put(IndexSettings.TIME_SERIES_START_TIME.getKey(), "2021-04-28T00:00:00Z")
570+
.put(IndexSettings.TIME_SERIES_END_TIME.getKey(), "2021-04-29T00:00:00Z")
571+
.build();
572+
final MapperService mapperService = createMapperService(settings, timestampMapping(true, b -> {
573+
b.startObject(DataStreamTimestampFieldMapper.DEFAULT_PATH);
574+
b.field("type", "date");
575+
b.endObject();
576+
}));
577+
578+
final DateFieldMapper timestampMapper = (DateFieldMapper) mapperService.documentMapper()
579+
.mappers()
580+
.getMapper(DataStreamTimestampFieldMapper.DEFAULT_PATH);
581+
assertTrue(timestampMapper.fieldType().hasDocValues());
582+
if (IndexSettings.USE_DOC_VALUES_SKIPPER.get(settings)) {
583+
assumeTrue("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled());
584+
assertFalse(timestampMapper.fieldType().isIndexed());
585+
assertTrue(timestampMapper.fieldType().hasDocValuesSkipper());
586+
} else {
587+
// TODO: remove this 'else' branch when removing the `doc_values_skipper` feature flag
588+
assumeFalse("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled() == false);
589+
assertTrue(timestampMapper.fieldType().isIndexed());
590+
assertFalse(timestampMapper.fieldType().hasDocValuesSkipper());
591+
}
592+
}
593+
594+
public void testFieldTypeWithDocValuesSkipper_TSDBModeNoTimestampMapping() throws IOException {
595+
final Settings settings = Settings.builder()
596+
.put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES.name())
597+
.put(IndexMetadata.INDEX_ROUTING_PATH.getKey(), "dim")
598+
.put(IndexSettings.TIME_SERIES_START_TIME.getKey(), "2021-04-28T00:00:00Z")
599+
.put(IndexSettings.TIME_SERIES_END_TIME.getKey(), "2021-04-29T00:00:00Z")
600+
.build();
601+
final MapperService mapperService = createMapperService(settings, timestampMapping(true, b -> {}));
602+
603+
final DateFieldMapper timestampMapper = (DateFieldMapper) mapperService.documentMapper()
604+
.mappers()
605+
.getMapper(DataStreamTimestampFieldMapper.DEFAULT_PATH);
606+
assertTrue(timestampMapper.fieldType().hasDocValues());
607+
if (IndexSettings.USE_DOC_VALUES_SKIPPER.get(settings)) {
608+
assumeTrue("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled());
609+
assertFalse(timestampMapper.fieldType().isIndexed());
610+
assertTrue(timestampMapper.fieldType().hasDocValuesSkipper());
611+
} else {
612+
// TODO: remove this 'else' branch when removing the `doc_values_skipper` feature flag
613+
assumeFalse("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled() == false);
614+
assertTrue(timestampMapper.fieldType().isIndexed());
615+
assertFalse(timestampMapper.fieldType().hasDocValuesSkipper());
616+
}
617+
}
618+
619+
public void testFieldTypeWithDocValuesSkipper_TSDBModeTimestampDateNanos() throws IOException {
620+
final Settings settings = Settings.builder()
621+
.put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES.name())
622+
.put(IndexMetadata.INDEX_ROUTING_PATH.getKey(), "dim")
623+
.put(IndexSettings.TIME_SERIES_START_TIME.getKey(), "2021-04-28T00:00:00Z")
624+
.put(IndexSettings.TIME_SERIES_END_TIME.getKey(), "2021-04-29T00:00:00Z")
625+
.build();
626+
final MapperService mapperService = withMapping(
627+
new TestMapperServiceBuilder().settings(settings).applyDefaultMapping(false).build(),
628+
timestampMapping(true, b -> {
629+
b.startObject(DataStreamTimestampFieldMapper.DEFAULT_PATH);
630+
b.field("type", "date_nanos");
631+
b.endObject();
632+
})
633+
);
634+
635+
final DateFieldMapper timestampMapper = (DateFieldMapper) mapperService.documentMapper()
636+
.mappers()
637+
.getMapper(DataStreamTimestampFieldMapper.DEFAULT_PATH);
638+
assertTrue(timestampMapper.fieldType().hasDocValues());
639+
if (IndexSettings.USE_DOC_VALUES_SKIPPER.get(settings)) {
640+
assumeTrue("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled());
641+
assertFalse(timestampMapper.fieldType().isIndexed());
642+
assertTrue(timestampMapper.fieldType().hasDocValuesSkipper());
643+
} else {
644+
// TODO: remove this 'else' branch when removing the `doc_values_skipper` feature flag
645+
assumeFalse("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled() == false);
646+
assertTrue(timestampMapper.fieldType().isIndexed());
647+
assertFalse(timestampMapper.fieldType().hasDocValuesSkipper());
648+
}
649+
}
650+
651+
public void testFieldTypeWithDocValuesSkipper_TSDBModeExplicitTimestampIndexEnabledDocValuesSkipper() throws IOException {
652+
final Settings settings = Settings.builder()
653+
.put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES.name())
654+
.put(IndexMetadata.INDEX_ROUTING_PATH.getKey(), "dim")
655+
.put(IndexSettings.TIME_SERIES_START_TIME.getKey(), "2021-04-28T00:00:00Z")
656+
.put(IndexSettings.TIME_SERIES_END_TIME.getKey(), "2021-04-29T00:00:00Z")
657+
.build();
658+
final MapperService mapperService = createMapperService(settings, timestampMapping(true, b -> {
659+
b.startObject(DataStreamTimestampFieldMapper.DEFAULT_PATH);
660+
b.field("type", "date");
661+
b.field("index", true);
662+
b.endObject();
663+
}));
664+
665+
final DateFieldMapper timestampMapper = (DateFieldMapper) mapperService.documentMapper()
666+
.mappers()
667+
.getMapper(DataStreamTimestampFieldMapper.DEFAULT_PATH);
668+
assertTrue(timestampMapper.fieldType().hasDocValues());
669+
if (IndexSettings.USE_DOC_VALUES_SKIPPER.get(settings)) {
670+
assumeTrue("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled());
671+
assertFalse(timestampMapper.fieldType().isIndexed());
672+
assertTrue(timestampMapper.fieldType().hasDocValuesSkipper());
673+
} else {
674+
// TODO: remove this 'else' branch when removing the `doc_values_skipper` feature flag
675+
assumeFalse("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled() == false);
676+
assertTrue(timestampMapper.fieldType().isIndexed());
677+
assertFalse(timestampMapper.fieldType().hasDocValuesSkipper());
678+
}
679+
}
680+
681+
public void testFieldTypeWithDocValuesSkipper_TSDBModeExplicitTimestampIndexDisabledDocValuesSkipper() throws IOException {
682+
final Settings settings = Settings.builder()
683+
.put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES.name())
684+
.put(IndexMetadata.INDEX_ROUTING_PATH.getKey(), "dim")
685+
.put(IndexSettings.TIME_SERIES_START_TIME.getKey(), "2021-04-28T00:00:00Z")
686+
.put(IndexSettings.TIME_SERIES_END_TIME.getKey(), "2021-04-29T00:00:00Z")
687+
.put(IndexSettings.USE_DOC_VALUES_SKIPPER.getKey(), false)
688+
.build();
689+
final MapperService mapperService = createMapperService(settings, timestampMapping(true, b -> {
690+
b.startObject(DataStreamTimestampFieldMapper.DEFAULT_PATH);
691+
b.field("type", "date");
692+
b.field("index", true);
693+
b.endObject();
694+
}));
695+
696+
final DateFieldMapper timestampMapper = (DateFieldMapper) mapperService.documentMapper()
697+
.mappers()
698+
.getMapper(DataStreamTimestampFieldMapper.DEFAULT_PATH);
699+
assumeFalse("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled() == false);
700+
assertTrue(timestampMapper.fieldType().hasDocValues());
701+
assertFalse(timestampMapper.fieldType().hasDocValuesSkipper());
702+
assertTrue(timestampMapper.fieldType().isIndexed());
703+
}
704+
705+
public void testFieldTypeWithDocValuesSkipper_TSDBModeWithoutDefaultMapping() throws IOException {
706+
final Settings settings = Settings.builder()
707+
.put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES.name())
708+
.put(IndexMetadata.INDEX_ROUTING_PATH.getKey(), "dim")
709+
.put(IndexSettings.TIME_SERIES_START_TIME.getKey(), "2021-04-28T00:00:00Z")
710+
.put(IndexSettings.TIME_SERIES_END_TIME.getKey(), "2021-04-29T00:00:00Z")
711+
.build();
712+
final MapperService mapperService = withMapping(
713+
new TestMapperServiceBuilder().settings(settings).applyDefaultMapping(false).build(),
714+
timestampMapping(true, b -> {
715+
b.startObject(DataStreamTimestampFieldMapper.DEFAULT_PATH);
716+
b.field("type", "date");
717+
b.endObject();
718+
})
719+
);
720+
721+
final DateFieldMapper timestampMapper = (DateFieldMapper) mapperService.documentMapper()
722+
.mappers()
723+
.getMapper(DataStreamTimestampFieldMapper.DEFAULT_PATH);
724+
assertTrue(timestampMapper.fieldType().hasDocValues());
725+
if (IndexSettings.USE_DOC_VALUES_SKIPPER.get(settings)) {
726+
assumeTrue("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled());
727+
assertFalse(timestampMapper.fieldType().isIndexed());
728+
assertTrue(timestampMapper.fieldType().hasDocValuesSkipper());
729+
} else {
730+
// TODO: remove this 'else' branch when removing the `doc_values_skipper` feature flag
731+
assumeFalse("doc_values_skipper feature flag enabled", IndexSettings.DOC_VALUES_SKIPPER.isEnabled() == false);
732+
assertTrue(timestampMapper.fieldType().isIndexed());
733+
assertFalse(timestampMapper.fieldType().hasDocValuesSkipper());
734+
}
735+
}
540736
}

0 commit comments

Comments
 (0)