@@ -1028,6 +1028,7 @@ func TestIngester_Push(t *testing.T) {
1028
1028
maxExemplars int
1029
1029
oooTimeWindow time.Duration
1030
1030
disableNativeHistogram bool
1031
+ enableOOONativeHistograms bool
1031
1032
}{
1032
1033
"should record native histogram discarded" : {
1033
1034
reqs : []* cortexpb.WriteRequest {
@@ -1516,6 +1517,186 @@ func TestIngester_Push(t *testing.T) {
1516
1517
cortex_ingester_active_series{user="test"} 1
1517
1518
` ,
1518
1519
},
1520
+ "native histogram ooo disabled, should soft fail" : {
1521
+ reqs : []* cortexpb.WriteRequest {
1522
+ cortexpb .ToWriteRequest (
1523
+ []labels.Labels {metricLabels },
1524
+ nil ,
1525
+ nil ,
1526
+ []cortexpb.Histogram {cortexpb .HistogramToHistogramProto (1575043969 , tsdbutil .GenerateTestHistogram (1 ))},
1527
+ cortexpb .API ),
1528
+ cortexpb .ToWriteRequest (
1529
+ []labels.Labels {metricLabels },
1530
+ nil ,
1531
+ nil ,
1532
+ []cortexpb.Histogram {cortexpb .HistogramToHistogramProto (1575043969 - (10 ), tsdbutil .GenerateTestHistogram (1 ))},
1533
+ cortexpb .API ),
1534
+ },
1535
+ oooTimeWindow : 5 * time .Minute ,
1536
+ enableOOONativeHistograms : false ,
1537
+ expectedErr : httpgrpc .Errorf (http .StatusBadRequest , wrapWithUser (wrappedTSDBIngestErr (storage .ErrOOONativeHistogramsDisabled , model .Time (1575043969 - (10 )), cortexpb .FromLabelsToLabelAdapters (metricLabels )), userID ).Error ()),
1538
+ expectedIngested : []cortexpb.TimeSeries {
1539
+ {Labels : metricLabelAdapters , Histograms : []cortexpb.Histogram {cortexpb .HistogramToHistogramProto (1575043969 , tsdbutil .GenerateTestHistogram (1 ))}},
1540
+ },
1541
+ additionalMetrics : []string {
1542
+ "cortex_ingester_tsdb_head_samples_appended_total" ,
1543
+ "cortex_ingester_active_series" ,
1544
+ },
1545
+ expectedMetrics : `
1546
+ # HELP cortex_ingester_ingested_samples_failures_total The total number of samples that errored on ingestion.
1547
+ # TYPE cortex_ingester_ingested_samples_failures_total counter
1548
+ cortex_ingester_ingested_samples_failures_total 0
1549
+ # HELP cortex_ingester_ingested_samples_total The total number of samples ingested.
1550
+ # TYPE cortex_ingester_ingested_samples_total counter
1551
+ cortex_ingester_ingested_samples_total 0
1552
+ # HELP cortex_ingester_ingested_native_histograms_total The total number of native histograms ingested.
1553
+ # TYPE cortex_ingester_ingested_native_histograms_total counter
1554
+ cortex_ingester_ingested_native_histograms_total 1
1555
+ # HELP cortex_ingester_ingested_native_histograms_failures_total The total number of native histograms that errored on ingestion.
1556
+ # TYPE cortex_ingester_ingested_native_histograms_failures_total counter
1557
+ cortex_ingester_ingested_native_histograms_failures_total 1
1558
+ # HELP cortex_ingester_memory_users The current number of users in memory.
1559
+ # TYPE cortex_ingester_memory_users gauge
1560
+ cortex_ingester_memory_users 1
1561
+ # HELP cortex_ingester_tsdb_head_samples_appended_total Total number of appended samples.
1562
+ # TYPE cortex_ingester_tsdb_head_samples_appended_total counter
1563
+ cortex_ingester_tsdb_head_samples_appended_total{type="float",user="test"} 0
1564
+ cortex_ingester_tsdb_head_samples_appended_total{type="histogram",user="test"} 1
1565
+ # HELP cortex_ingester_memory_series The current number of series in memory.
1566
+ # TYPE cortex_ingester_memory_series gauge
1567
+ cortex_ingester_memory_series 1
1568
+ # HELP cortex_ingester_memory_series_created_total The total number of series that were created per user.
1569
+ # TYPE cortex_ingester_memory_series_created_total counter
1570
+ cortex_ingester_memory_series_created_total{user="test"} 1
1571
+ # HELP cortex_ingester_memory_series_removed_total The total number of series that were removed per user.
1572
+ # TYPE cortex_ingester_memory_series_removed_total counter
1573
+ cortex_ingester_memory_series_removed_total{user="test"} 0
1574
+ # HELP cortex_ingester_active_series Number of currently active series per user.
1575
+ # TYPE cortex_ingester_active_series gauge
1576
+ cortex_ingester_active_series{user="test"} 1
1577
+ ` ,
1578
+ },
1579
+ "native histogram ooo enabled, should soft fail on sample too old" : {
1580
+ reqs : []* cortexpb.WriteRequest {
1581
+ cortexpb .ToWriteRequest (
1582
+ []labels.Labels {metricLabels },
1583
+ nil ,
1584
+ nil ,
1585
+ []cortexpb.Histogram {cortexpb .HistogramToHistogramProto (1575043969 , tsdbutil .GenerateTestHistogram (1 ))},
1586
+ cortexpb .API ),
1587
+ cortexpb .ToWriteRequest (
1588
+ []labels.Labels {metricLabels },
1589
+ nil ,
1590
+ nil ,
1591
+ []cortexpb.Histogram {cortexpb .HistogramToHistogramProto (1575043969 - (600 * 1000 ), tsdbutil .GenerateTestHistogram (1 ))},
1592
+ cortexpb .API ),
1593
+ },
1594
+ oooTimeWindow : 5 * time .Minute ,
1595
+ enableOOONativeHistograms : true ,
1596
+ expectedErr : httpgrpc .Errorf (http .StatusBadRequest , wrapWithUser (wrappedTSDBIngestErr (storage .ErrTooOldSample , model .Time (1575043969 - (600 * 1000 )), cortexpb .FromLabelsToLabelAdapters (metricLabels )), userID ).Error ()),
1597
+ expectedIngested : []cortexpb.TimeSeries {
1598
+ {Labels : metricLabelAdapters , Histograms : []cortexpb.Histogram {cortexpb .HistogramToHistogramProto (1575043969 , tsdbutil .GenerateTestHistogram (1 ))}},
1599
+ },
1600
+ additionalMetrics : []string {
1601
+ "cortex_ingester_tsdb_head_samples_appended_total" ,
1602
+ "cortex_ingester_active_series" ,
1603
+ "cortex_discarded_samples_total" ,
1604
+ },
1605
+ expectedMetrics : `
1606
+ # HELP cortex_ingester_ingested_samples_failures_total The total number of samples that errored on ingestion.
1607
+ # TYPE cortex_ingester_ingested_samples_failures_total counter
1608
+ cortex_ingester_ingested_samples_failures_total 0
1609
+ # HELP cortex_ingester_ingested_samples_total The total number of samples ingested.
1610
+ # TYPE cortex_ingester_ingested_samples_total counter
1611
+ cortex_ingester_ingested_samples_total 0
1612
+ # HELP cortex_ingester_ingested_native_histograms_total The total number of native histograms ingested.
1613
+ # TYPE cortex_ingester_ingested_native_histograms_total counter
1614
+ cortex_ingester_ingested_native_histograms_total 1
1615
+ # HELP cortex_ingester_ingested_native_histograms_failures_total The total number of native histograms that errored on ingestion.
1616
+ # TYPE cortex_ingester_ingested_native_histograms_failures_total counter
1617
+ cortex_ingester_ingested_native_histograms_failures_total 1
1618
+ # HELP cortex_ingester_memory_users The current number of users in memory.
1619
+ # TYPE cortex_ingester_memory_users gauge
1620
+ cortex_ingester_memory_users 1
1621
+ # HELP cortex_ingester_tsdb_head_samples_appended_total Total number of appended samples.
1622
+ # TYPE cortex_ingester_tsdb_head_samples_appended_total counter
1623
+ cortex_ingester_tsdb_head_samples_appended_total{type="float",user="test"} 0
1624
+ cortex_ingester_tsdb_head_samples_appended_total{type="histogram",user="test"} 1
1625
+ # HELP cortex_ingester_memory_series The current number of series in memory.
1626
+ # TYPE cortex_ingester_memory_series gauge
1627
+ cortex_ingester_memory_series 1
1628
+ # HELP cortex_ingester_memory_series_created_total The total number of series that were created per user.
1629
+ # TYPE cortex_ingester_memory_series_created_total counter
1630
+ cortex_ingester_memory_series_created_total{user="test"} 1
1631
+ # HELP cortex_ingester_memory_series_removed_total The total number of series that were removed per user.
1632
+ # TYPE cortex_ingester_memory_series_removed_total counter
1633
+ cortex_ingester_memory_series_removed_total{user="test"} 0
1634
+ # HELP cortex_ingester_active_series Number of currently active series per user.
1635
+ # TYPE cortex_ingester_active_series gauge
1636
+ cortex_ingester_active_series{user="test"} 1
1637
+ # HELP cortex_discarded_samples_total The total number of samples that were discarded.
1638
+ # TYPE cortex_discarded_samples_total counter
1639
+ cortex_discarded_samples_total{reason="sample-too-old",user="test"} 1
1640
+ ` ,
1641
+ },
1642
+ "native histogram ooo enabled, should succeed" : {
1643
+ reqs : []* cortexpb.WriteRequest {
1644
+ cortexpb .ToWriteRequest (
1645
+ []labels.Labels {metricLabels },
1646
+ nil ,
1647
+ nil ,
1648
+ []cortexpb.Histogram {cortexpb .HistogramToHistogramProto (1575043969 , tsdbutil .GenerateTestHistogram (1 ))},
1649
+ cortexpb .API ),
1650
+ cortexpb .ToWriteRequest (
1651
+ []labels.Labels {metricLabels },
1652
+ nil ,
1653
+ nil ,
1654
+ []cortexpb.Histogram {cortexpb .HistogramToHistogramProto (1575043969 - (10 ), tsdbutil .GenerateTestHistogram (1 ))},
1655
+ cortexpb .API ),
1656
+ },
1657
+ oooTimeWindow : 5 * time .Minute ,
1658
+ enableOOONativeHistograms : true ,
1659
+ expectedIngested : []cortexpb.TimeSeries {
1660
+ {Labels : metricLabelAdapters , Histograms : []cortexpb.Histogram {cortexpb .HistogramToHistogramProto (1575043969 - (10 ), tsdbutil .GenerateTestHistogram (1 )), cortexpb .HistogramToHistogramProto (1575043969 , tsdbutil .GenerateTestHistogram (1 ))}},
1661
+ },
1662
+ additionalMetrics : []string {
1663
+ "cortex_ingester_tsdb_head_samples_appended_total" ,
1664
+ "cortex_ingester_active_series" ,
1665
+ },
1666
+ expectedMetrics : `
1667
+ # HELP cortex_ingester_ingested_samples_failures_total The total number of samples that errored on ingestion.
1668
+ # TYPE cortex_ingester_ingested_samples_failures_total counter
1669
+ cortex_ingester_ingested_samples_failures_total 0
1670
+ # HELP cortex_ingester_ingested_samples_total The total number of samples ingested.
1671
+ # TYPE cortex_ingester_ingested_samples_total counter
1672
+ cortex_ingester_ingested_samples_total 0
1673
+ # HELP cortex_ingester_ingested_native_histograms_total The total number of native histograms ingested.
1674
+ # TYPE cortex_ingester_ingested_native_histograms_total counter
1675
+ cortex_ingester_ingested_native_histograms_total 2
1676
+ # HELP cortex_ingester_ingested_native_histograms_failures_total The total number of native histograms that errored on ingestion.
1677
+ # TYPE cortex_ingester_ingested_native_histograms_failures_total counter
1678
+ cortex_ingester_ingested_native_histograms_failures_total 0
1679
+ # HELP cortex_ingester_memory_users The current number of users in memory.
1680
+ # TYPE cortex_ingester_memory_users gauge
1681
+ cortex_ingester_memory_users 1
1682
+ # HELP cortex_ingester_tsdb_head_samples_appended_total Total number of appended samples.
1683
+ # TYPE cortex_ingester_tsdb_head_samples_appended_total counter
1684
+ cortex_ingester_tsdb_head_samples_appended_total{type="float",user="test"} 0
1685
+ cortex_ingester_tsdb_head_samples_appended_total{type="histogram",user="test"} 2
1686
+ # HELP cortex_ingester_memory_series The current number of series in memory.
1687
+ # TYPE cortex_ingester_memory_series gauge
1688
+ cortex_ingester_memory_series 1
1689
+ # HELP cortex_ingester_memory_series_created_total The total number of series that were created per user.
1690
+ # TYPE cortex_ingester_memory_series_created_total counter
1691
+ cortex_ingester_memory_series_created_total{user="test"} 1
1692
+ # HELP cortex_ingester_memory_series_removed_total The total number of series that were removed per user.
1693
+ # TYPE cortex_ingester_memory_series_removed_total counter
1694
+ cortex_ingester_memory_series_removed_total{user="test"} 0
1695
+ # HELP cortex_ingester_active_series Number of currently active series per user.
1696
+ # TYPE cortex_ingester_active_series gauge
1697
+ cortex_ingester_active_series{user="test"} 1
1698
+ ` ,
1699
+ },
1519
1700
"should soft fail on two different sample values at the same timestamp" : {
1520
1701
reqs : []* cortexpb.WriteRequest {
1521
1702
cortexpb .ToWriteRequest (
@@ -1824,6 +2005,7 @@ func TestIngester_Push(t *testing.T) {
1824
2005
limits := defaultLimitsTestConfig ()
1825
2006
limits .MaxExemplars = testData .maxExemplars
1826
2007
limits .OutOfOrderTimeWindow = model .Duration (testData .oooTimeWindow )
2008
+ limits .EnableOOONativeHistograms = testData .enableOOONativeHistograms
1827
2009
limits .LimitsPerLabelSet = []validation.LimitsPerLabelSet {
1828
2010
{
1829
2011
LabelSet : labels .FromMap (map [string ]string {model .MetricNameLabel : "test" }),
0 commit comments