@@ -1490,6 +1490,7 @@ func TestDistributor_Push_LabelRemoval(t *testing.T) {
1490
1490
expectedSeries labels.Labels
1491
1491
removeReplica bool
1492
1492
removeLabels []string
1493
+ exemplars []cortexpb.Exemplar
1493
1494
}
1494
1495
1495
1496
cases := []testcase {
@@ -1536,6 +1537,20 @@ func TestDistributor_Push_LabelRemoval(t *testing.T) {
1536
1537
{Name : "cluster" , Value : "one" },
1537
1538
},
1538
1539
},
1540
+ // No labels left.
1541
+ {
1542
+ removeReplica : true ,
1543
+ removeLabels : []string {"cluster" },
1544
+ inputSeries : labels.Labels {
1545
+ {Name : "cluster" , Value : "one" },
1546
+ {Name : "__replica__" , Value : "two" },
1547
+ },
1548
+ expectedSeries : labels.Labels {},
1549
+ exemplars : []cortexpb.Exemplar {
1550
+ {Labels : cortexpb .FromLabelsToLabelAdapters (labels .FromStrings ("test" , "a" )), Value : 1 , TimestampMs : 0 },
1551
+ {Labels : cortexpb .FromLabelsToLabelAdapters (labels .FromStrings ("test" , "b" )), Value : 1 , TimestampMs : 0 },
1552
+ },
1553
+ },
1539
1554
}
1540
1555
1541
1556
for _ , tc := range cases {
@@ -1546,6 +1561,15 @@ func TestDistributor_Push_LabelRemoval(t *testing.T) {
1546
1561
limits .DropLabels = tc .removeLabels
1547
1562
limits .AcceptHASamples = tc .removeReplica
1548
1563
1564
+ expectedDiscardedSamples := 0
1565
+ expectedDiscardedExemplars := 0
1566
+ if tc .expectedSeries .Len () == 0 {
1567
+ expectedDiscardedSamples = 1
1568
+ expectedDiscardedExemplars = len (tc .exemplars )
1569
+ // Allow series with no labels to ingest
1570
+ limits .EnforceMetricName = false
1571
+ }
1572
+
1549
1573
ds , ingesters , _ , _ := prepare (t , prepConfig {
1550
1574
numIngesters : 2 ,
1551
1575
happyIngesters : 2 ,
@@ -1556,14 +1580,24 @@ func TestDistributor_Push_LabelRemoval(t *testing.T) {
1556
1580
1557
1581
// Push the series to the distributor
1558
1582
req := mockWriteRequest ([]labels.Labels {tc .inputSeries }, 1 , 1 , histogram )
1583
+ req .Timeseries [0 ].Exemplars = tc .exemplars
1559
1584
_ , err = ds [0 ].Push (ctx , req )
1560
1585
require .NoError (t , err )
1561
1586
1587
+ actualDiscardedSamples := testutil .ToFloat64 (ds [0 ].validateMetrics .DiscardedSamples .WithLabelValues (validation .DroppedByUserConfigurationOverride , "user" ))
1588
+ actualDiscardedExemplars := testutil .ToFloat64 (ds [0 ].validateMetrics .DiscardedExemplars .WithLabelValues (validation .DroppedByUserConfigurationOverride , "user" ))
1589
+ require .Equal (t , float64 (expectedDiscardedSamples ), actualDiscardedSamples )
1590
+ require .Equal (t , float64 (expectedDiscardedExemplars ), actualDiscardedExemplars )
1591
+
1562
1592
// Since each test pushes only 1 series, we do expect the ingester
1563
1593
// to have received exactly 1 series
1564
1594
for i := range ingesters {
1565
1595
timeseries := ingesters [i ].series ()
1566
- assert .Equal (t , 1 , len (timeseries ))
1596
+ expectedSeries := 1
1597
+ if tc .expectedSeries .Len () == 0 {
1598
+ expectedSeries = 0
1599
+ }
1600
+ assert .Equal (t , expectedSeries , len (timeseries ))
1567
1601
for _ , v := range timeseries {
1568
1602
assert .Equal (t , tc .expectedSeries , cortexpb .FromLabelAdaptersToLabels (v .Labels ))
1569
1603
}
@@ -3777,39 +3811,43 @@ func TestDistributor_Push_RelabelDropWillExportMetricOfDroppedSamples(t *testing
3777
3811
flagext .DefaultValues (& limits )
3778
3812
limits .MetricRelabelConfigs = metricRelabelConfigs
3779
3813
3780
- ds , ingesters , regs , _ := prepare (t , prepConfig {
3781
- numIngesters : 2 ,
3782
- happyIngesters : 2 ,
3783
- numDistributors : 1 ,
3784
- shardByAllLabels : true ,
3785
- limits : & limits ,
3786
- })
3787
-
3788
- // Push the series to the distributor
3789
- req := mockWriteRequest (inputSeries , 1 , 1 , false )
3790
- ctx := user .InjectOrgID (context .Background (), "userDistributorPushRelabelDropWillExportMetricOfDroppedSamples" )
3791
- _ , err = ds [0 ].Push (ctx , req )
3792
- require .NoError (t , err )
3814
+ for _ , histogramEnabled := range []bool {false , true } {
3815
+ ds , ingesters , _ , _ := prepare (t , prepConfig {
3816
+ numIngesters : 2 ,
3817
+ happyIngesters : 2 ,
3818
+ numDistributors : 1 ,
3819
+ shardByAllLabels : true ,
3820
+ limits : & limits ,
3821
+ })
3793
3822
3794
- // Since each test pushes only 1 series, we do expect the ingester
3795
- // to have received exactly 1 series
3796
- for i := range ingesters {
3797
- timeseries := ingesters [i ].series ()
3798
- assert .Equal (t , 1 , len (timeseries ))
3799
- }
3823
+ // Push the series to the distributor
3824
+ id := "user"
3825
+ req := mockWriteRequest (inputSeries , 1 , 1 , histogramEnabled )
3826
+ req .Timeseries [0 ].Exemplars = []cortexpb.Exemplar {
3827
+ {Labels : cortexpb .FromLabelsToLabelAdapters (labels .FromStrings ("test" , "a" )), Value : 1 , TimestampMs : 0 },
3828
+ {Labels : cortexpb .FromLabelsToLabelAdapters (labels .FromStrings ("test" , "b" )), Value : 1 , TimestampMs : 0 },
3829
+ }
3830
+ ctx := user .InjectOrgID (context .Background (), id )
3831
+ _ , err = ds [0 ].Push (ctx , req )
3832
+ require .NoError (t , err )
3800
3833
3801
- metrics := []string {"cortex_distributor_received_samples_total" , "cortex_discarded_samples_total" }
3834
+ for i := range ingesters {
3835
+ timeseries := ingesters [i ].series ()
3836
+ assert .Equal (t , 1 , len (timeseries ))
3837
+ }
3802
3838
3803
- expectedMetrics := `
3804
- # HELP cortex_discarded_samples_total The total number of samples that were discarded.
3805
- # TYPE cortex_discarded_samples_total counter
3806
- cortex_discarded_samples_total{reason="relabel_configuration",user="userDistributorPushRelabelDropWillExportMetricOfDroppedSamples"} 1
3807
- # HELP cortex_distributor_received_samples_total The total number of received samples, excluding rejected and deduped samples.
3808
- # TYPE cortex_distributor_received_samples_total counter
3809
- cortex_distributor_received_samples_total{type="float",user="userDistributorPushRelabelDropWillExportMetricOfDroppedSamples"} 1
3810
- cortex_distributor_received_samples_total{type="histogram",user="userDistributorPushRelabelDropWillExportMetricOfDroppedSamples"} 0
3811
- `
3812
- require .NoError (t , testutil .GatherAndCompare (regs [0 ], strings .NewReader (expectedMetrics ), metrics ... ))
3839
+ require .Equal (t , testutil .ToFloat64 (ds [0 ].validateMetrics .DiscardedSamples .WithLabelValues (validation .DroppedByRelabelConfiguration , id )), float64 (1 ))
3840
+ require .Equal (t , testutil .ToFloat64 (ds [0 ].validateMetrics .DiscardedExemplars .WithLabelValues (validation .DroppedByRelabelConfiguration , id )), float64 (2 ))
3841
+ receivedFloatSamples := testutil .ToFloat64 (ds [0 ].receivedSamples .WithLabelValues (id , "float" ))
3842
+ receivedHistogramSamples := testutil .ToFloat64 (ds [0 ].receivedSamples .WithLabelValues (id , "histogram" ))
3843
+ if histogramEnabled {
3844
+ require .Equal (t , receivedFloatSamples , float64 (0 ))
3845
+ require .Equal (t , receivedHistogramSamples , float64 (1 ))
3846
+ } else {
3847
+ require .Equal (t , receivedFloatSamples , float64 (1 ))
3848
+ require .Equal (t , receivedHistogramSamples , float64 (0 ))
3849
+ }
3850
+ }
3813
3851
}
3814
3852
3815
3853
func countMockIngestersCalls (ingesters []* mockIngester , name string ) int {
0 commit comments