MCPcopy Index your code
hub / github.com/cortexproject/cortex / TestQuerierWithBlocksStorageLimits

Function TestQuerierWithBlocksStorageLimits

integration/querier_test.go:383–484  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

381}
382
383func TestQuerierWithBlocksStorageLimits(t *testing.T) {
384 const blockRangePeriod = 5 * time.Second
385
386 s, err := e2e.NewScenario(networkName)
387 require.NoError(t, err)
388 defer s.Close()
389
390 // Configure the blocks storage to frequently compact TSDB head
391 // and ship blocks to the storage.
392 flags := mergeFlags(BlocksStorageFlags(), map[string]string{
393 "-blocks-storage.tsdb.block-ranges-period": blockRangePeriod.String(),
394 "-blocks-storage.tsdb.ship-interval": "1s",
395 "-blocks-storage.tsdb.retention-period": ((blockRangePeriod * 2) - 1).String(),
396 })
397
398 // Start dependencies.
399 consul := e2edb.NewConsul()
400 minio := e2edb.NewMinio(9000, flags["-blocks-storage.s3.bucket-name"])
401 require.NoError(t, s.StartAndWaitReady(consul, minio))
402
403 // Start Cortex components for the write path.
404 distributor := e2ecortex.NewDistributor("distributor", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), flags, "")
405 ingester := e2ecortex.NewIngester("ingester", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), flags, "")
406 require.NoError(t, s.StartAndWaitReady(distributor, ingester))
407
408 // Wait until the distributor has updated the ring.
409 require.NoError(t, distributor.WaitSumMetrics(e2e.Equals(512), "cortex_ring_tokens_total"))
410
411 // Push some series to Cortex.
412 c, err := e2ecortex.NewClient(distributor.HTTPEndpoint(), "", "", "", "user-1")
413 require.NoError(t, err)
414
415 seriesTimestamp := time.Now()
416 series2Timestamp := seriesTimestamp.Add(blockRangePeriod * 2)
417 series1, _ := generateSeries("series_1", seriesTimestamp, prompb.Label{Name: "job", Value: "test"})
418 series2, _ := generateSeries("series_2", seriesTimestamp, prompb.Label{Name: "job", Value: "test"})
419 // Make sure series in ingester has a different job label.
420 series3, _ := generateSeries("series_3", series2Timestamp, prompb.Label{Name: "job", Value: "prometheus"})
421
422 res, err := c.Push(series1)
423 require.NoError(t, err)
424 require.Equal(t, 200, res.StatusCode)
425
426 res, err = c.Push(series2)
427 require.NoError(t, err)
428 require.Equal(t, 200, res.StatusCode)
429
430 res, err = c.Push(series3)
431 require.NoError(t, err)
432 require.Equal(t, 200, res.StatusCode)
433
434 // Wait until the TSDB head is compacted and shipped to the storage.
435 // The shipped block contains the 1st and 2nd series, while the 3rd series is in the head.
436 require.NoError(t, ingester.WaitSumMetrics(e2e.Equals(1), "cortex_ingester_shipper_uploads_total"))
437 require.NoError(t, ingester.WaitSumMetrics(e2e.Equals(3), "cortex_ingester_memory_series_created_total"))
438 require.NoError(t, ingester.WaitSumMetrics(e2e.Equals(2), "cortex_ingester_memory_series_removed_total"))
439 require.NoError(t, ingester.WaitSumMetrics(e2e.Equals(1), "cortex_ingester_memory_series"))
440

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
StartAndWaitReadyMethod · 0.95
PushMethod · 0.95
QueryRangeRawMethod · 0.95
SeriesRawMethod · 0.95
LabelNamesRawMethod · 0.95
LabelValuesRawMethod · 0.95
NewScenarioFunction · 0.92
NewDistributorFunction · 0.92
NewIngesterFunction · 0.92
EqualsFunction · 0.92
NewClientFunction · 0.92

Tested by

no test coverage detected