(t *testing.T)
| 873 | } |
| 874 | |
| 875 | func TestQuerierDistributedExecution(t *testing.T) { |
| 876 | // e2e test setup |
| 877 | s, err := e2e.NewScenario(networkName) |
| 878 | require.NoError(t, err) |
| 879 | defer s.Close() |
| 880 | |
| 881 | // initialize the flags |
| 882 | flags := mergeFlags( |
| 883 | BlocksStorageFlags(), |
| 884 | map[string]string{ |
| 885 | "-blocks-storage.tsdb.block-ranges-period": (5 * time.Second).String(), |
| 886 | "-blocks-storage.tsdb.ship-interval": "1s", |
| 887 | "-blocks-storage.tsdb.retention-period": ((5 * time.Second * 2) - 1).String(), |
| 888 | "-querier.thanos-engine": "true", |
| 889 | // enable distributed execution (logical plan execution) |
| 890 | "-querier.distributed-exec-enabled": "true", |
| 891 | }, |
| 892 | ) |
| 893 | |
| 894 | minio := e2edb.NewMinio(9000, flags["-blocks-storage.s3.bucket-name"]) |
| 895 | consul := e2edb.NewConsul() |
| 896 | require.NoError(t, s.StartAndWaitReady(consul, minio)) |
| 897 | |
| 898 | // start services |
| 899 | distributor := e2ecortex.NewDistributor("distributor", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), flags, "") |
| 900 | ingester := e2ecortex.NewIngester("ingester", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), flags, "") |
| 901 | queryScheduler := e2ecortex.NewQueryScheduler("query-scheduler", flags, "") |
| 902 | storeGateway := e2ecortex.NewStoreGateway("store-gateway", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), flags, "") |
| 903 | require.NoError(t, s.StartAndWaitReady(queryScheduler, distributor, ingester, storeGateway)) |
| 904 | flags = mergeFlags(flags, map[string]string{ |
| 905 | "-querier.store-gateway-addresses": strings.Join([]string{storeGateway.NetworkGRPCEndpoint()}, ","), |
| 906 | }) |
| 907 | |
| 908 | queryFrontend := e2ecortex.NewQueryFrontend("query-frontend", mergeFlags(flags, map[string]string{ |
| 909 | "-frontend.scheduler-address": queryScheduler.NetworkGRPCEndpoint(), |
| 910 | }), "") |
| 911 | require.NoError(t, s.Start(queryFrontend)) |
| 912 | |
| 913 | querier := e2ecortex.NewQuerier("querier", e2ecortex.RingStoreConsul, consul.NetworkHTTPEndpoint(), mergeFlags(flags, map[string]string{ |
| 914 | "-querier.scheduler-address": queryScheduler.NetworkGRPCEndpoint(), |
| 915 | }), "") |
| 916 | require.NoError(t, s.StartAndWaitReady(querier)) |
| 917 | |
| 918 | // wait until the distributor and querier has updated the ring. |
| 919 | require.NoError(t, distributor.WaitSumMetrics(e2e.Equals(512), "cortex_ring_tokens_total")) |
| 920 | require.NoError(t, querier.WaitSumMetrics(e2e.Equals(2*512), "cortex_ring_tokens_total")) |
| 921 | |
| 922 | c, err := e2ecortex.NewClient(distributor.HTTPEndpoint(), queryFrontend.HTTPEndpoint(), "", "", "user-1") |
| 923 | require.NoError(t, err) |
| 924 | |
| 925 | series1Timestamp := time.Now() |
| 926 | series2Timestamp := series1Timestamp.Add(time.Minute * 1) |
| 927 | series1, expectedVector1 := generateSeries("series_1", series1Timestamp, prompb.Label{Name: "series_1", Value: "series_1"}) |
| 928 | series2, expectedVector2 := generateSeries("series_2", series2Timestamp, prompb.Label{Name: "series_2", Value: "series_2"}) |
| 929 | |
| 930 | res, err := c.Push(series1) |
| 931 | require.NoError(t, err) |
| 932 | require.Equal(t, 200, res.StatusCode) |
nothing calls this directly
no test coverage detected