@@ -23,6 +23,82 @@ import (
23
23
"github.com/cortexproject/cortex/pkg/storage/tsdb"
24
24
)
25
25
26
+ func TestIngesterRollingUpdate (t * testing.T ) {
27
+
28
+ const blockRangePeriod = 5 * time .Second
29
+ nonPushV2SupportImage := "quay.io/cortexproject/cortex:v1.18.1"
30
+
31
+ s , err := e2e .NewScenario (networkName )
32
+ require .NoError (t , err )
33
+ defer s .Close ()
34
+
35
+ // Start dependencies.
36
+ consul := e2edb .NewConsulWithName ("consul" )
37
+ require .NoError (t , s .StartAndWaitReady (consul ))
38
+
39
+ flags := mergeFlags (
40
+ AlertmanagerLocalFlags (),
41
+ map [string ]string {
42
+ "-store.engine" : blocksStorageEngine ,
43
+ "-blocks-storage.backend" : "filesystem" ,
44
+ "-blocks-storage.tsdb.head-compaction-interval" : "4m" ,
45
+ "-blocks-storage.bucket-store.sync-interval" : "15m" ,
46
+ "-blocks-storage.bucket-store.index-cache.backend" : tsdb .IndexCacheBackendInMemory ,
47
+ "-blocks-storage.bucket-store.bucket-index.enabled" : "true" ,
48
+ "-querier.query-store-for-labels-enabled" : "true" ,
49
+ "-blocks-storage.tsdb.block-ranges-period" : blockRangePeriod .String (),
50
+ "-blocks-storage.tsdb.ship-interval" : "1s" ,
51
+ "-blocks-storage.tsdb.retention-period" : ((blockRangePeriod * 2 ) - 1 ).String (),
52
+ "-blocks-storage.tsdb.enable-native-histograms" : "true" ,
53
+ // Ingester.
54
+ "-ring.store" : "consul" ,
55
+ "-consul.hostname" : consul .NetworkHTTPEndpoint (),
56
+ // Distributor.
57
+ "-distributor.replication-factor" : "1" ,
58
+ // Store-gateway.
59
+ "-store-gateway.sharding-enabled" : "false" ,
60
+ // alert manager
61
+ "-alertmanager.web.external-url" : "http://localhost/alertmanager" ,
62
+ },
63
+ )
64
+
65
+ // make alert manager config dir
66
+ require .NoError (t , writeFileToSharedDir (s , "alertmanager_configs" , []byte {}))
67
+
68
+ path := path .Join (s .SharedDir (), "cortex-1" )
69
+
70
+ flags = mergeFlags (flags , map [string ]string {"-blocks-storage.filesystem.dir" : path })
71
+ // Start Cortex replicas.
72
+ // Start all other services.
73
+ ingester := e2ecortex .NewIngester ("ingester" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), flags , nonPushV2SupportImage )
74
+ distributor := e2ecortex .NewDistributor ("distributor" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), flags , "" )
75
+ storeGateway := e2ecortex .NewStoreGateway ("store-gateway" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), flags , "" )
76
+ querier := e2ecortex .NewQuerier ("querier" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), mergeFlags (flags , map [string ]string {
77
+ "-querier.store-gateway-addresses" : storeGateway .NetworkGRPCEndpoint ()}), "" )
78
+
79
+ require .NoError (t , s .StartAndWaitReady (querier , ingester , distributor , storeGateway ))
80
+
81
+ // Wait until Cortex replicas have updated the ring state.
82
+ require .NoError (t , distributor .WaitSumMetrics (e2e .Equals (512 ), "cortex_ring_tokens_total" ))
83
+ require .NoError (t , querier .WaitSumMetrics (e2e .Equals (512 ), "cortex_ring_tokens_total" ))
84
+
85
+ c , err := e2ecortex .NewClient (distributor .HTTPEndpoint (), querier .HTTPEndpoint (), "" , "" , "user-1" )
86
+ require .NoError (t , err )
87
+
88
+ now := time .Now ()
89
+
90
+ // series push
91
+ symbols1 , series , expectedVector := e2e .GenerateSeriesV2 ("test_series" , now , prompb.Label {Name : "job" , Value : "test" }, prompb.Label {Name : "foo" , Value : "bar" })
92
+ res , err := c .PushV2 (symbols1 , series )
93
+ require .NoError (t , err )
94
+ require .Equal (t , 200 , res .StatusCode )
95
+
96
+ // sample
97
+ result , err := c .Query ("test_series" , now )
98
+ require .NoError (t , err )
99
+ assert .Equal (t , expectedVector , result .(model.Vector ))
100
+ }
101
+
26
102
func TestIngest (t * testing.T ) {
27
103
const blockRangePeriod = 5 * time .Second
28
104
0 commit comments