| 
8 | 8 |  */  | 
9 | 9 | package org.elasticsearch.datastreams.mapper;  | 
10 | 10 | 
 
  | 
 | 11 | +import org.elasticsearch.cluster.metadata.IndexMetadata;  | 
11 | 12 | import org.elasticsearch.common.settings.Settings;  | 
12 | 13 | import org.elasticsearch.core.CheckedConsumer;  | 
13 | 14 | import org.elasticsearch.datastreams.DataStreamsPlugin;  | 
@@ -537,4 +538,199 @@ public void testFieldTypeWithDocValuesSkipper_CustomTimestampField() throws IOEx  | 
537 | 538 |             assertFalse(defaultTimestamp.fieldType().hasDocValuesSkipper());  | 
538 | 539 |         }  | 
539 | 540 |     }  | 
 | 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 | +    }  | 
540 | 736 | }  | 
0 commit comments