7
7
8
8
"github.com/grafana/dskit/flagext"
9
9
"github.com/prometheus/common/model"
10
+ "github.com/stretchr/testify/assert"
10
11
"github.com/stretchr/testify/require"
11
12
12
13
"github.com/prometheus/client_golang/prometheus"
@@ -16,6 +17,8 @@ import (
16
17
"github.com/grafana/loki/pkg/storage/config"
17
18
"github.com/grafana/loki/pkg/storage/stores/indexshipper"
18
19
"github.com/grafana/loki/pkg/storage/stores/shipper"
20
+
21
+ "github.com/grafana/loki/pkg/storage/stores/shipper/indexgateway"
19
22
)
20
23
21
24
func Test_calculateMaxLookBack (t * testing.T ) {
@@ -144,44 +147,8 @@ func TestMultiKVSetup(t *testing.T) {
144
147
t .Run (target , func (t * testing.T ) {
145
148
prepareGlobalMetricsRegistry (t )
146
149
147
- cfg := Config {}
148
- cfg .SchemaConfig = config.SchemaConfig {
149
- Configs : []config.PeriodConfig {
150
- {
151
- IndexType : config .StorageTypeInMemory ,
152
- ObjectType : config .StorageTypeFileSystem ,
153
- RowShards : 16 ,
154
- Schema : "v11" ,
155
- From : config.DayTime {
156
- Time : model .Now (),
157
- },
158
- },
159
- },
160
- }
161
- flagext .DefaultValues (& cfg )
162
- // Set to 0 to find any free port.
163
- cfg .Server .HTTPListenPort = 0
164
- cfg .Server .GRPCListenPort = 0
165
- cfg .Target = []string {target }
166
-
167
- // Must be set, otherwise MultiKV config provider will not be set.
150
+ cfg := minimalWorkingConfig (t , dir , target )
168
151
cfg .RuntimeConfig .LoadPath = filepath .Join (dir , "config.yaml" )
169
-
170
- // This would be overwritten by the default values setting.
171
- cfg .StorageConfig = storage.Config {
172
- FSConfig : local.FSConfig {Directory : dir },
173
- BoltDBShipperConfig : shipper.Config {
174
- Config : indexshipper.Config {
175
- SharedStoreType : config .StorageTypeFileSystem ,
176
- ActiveIndexDirectory : dir ,
177
- CacheLocation : dir ,
178
- Mode : indexshipper .ModeWriteOnly ,
179
- },
180
- },
181
- }
182
- cfg .Ruler .Config .StoreConfig .Type = config .StorageTypeLocal
183
- cfg .Ruler .Config .StoreConfig .Local .Directory = dir
184
-
185
152
c , err := New (cfg )
186
153
require .NoError (t , err )
187
154
@@ -193,3 +160,101 @@ func TestMultiKVSetup(t *testing.T) {
193
160
})
194
161
}
195
162
}
163
+
164
+ func TestIndexGatewayRingMode_when_TargetIsRead (t * testing.T ) {
165
+ dir := t .TempDir ()
166
+
167
+ t .Run ("IndexGateway always set to ring mode when running as part of read target" , func (t * testing.T ) {
168
+ cfg := minimalWorkingConfig (t , dir , Read )
169
+ c , err := New (cfg )
170
+ require .NoError (t , err )
171
+
172
+ services , err := c .ModuleManager .InitModuleServices (Read )
173
+ defer func () {
174
+ for _ , service := range services {
175
+ service .StopAsync ()
176
+ }
177
+ }()
178
+
179
+ require .NoError (t , err )
180
+ assert .Equal (t , c .Cfg .IndexGateway .Mode , indexgateway .RingMode )
181
+ })
182
+
183
+ t .Run ("When IndexGateway is running independent of Read target" , func (t * testing.T ) {
184
+ t .Run ("IndexGateway respects configured simple mode" , func (t * testing.T ) {
185
+ cfg := minimalWorkingConfig (t , dir , IndexGatewayRing )
186
+ cfg .IndexGateway .Mode = indexgateway .SimpleMode
187
+ c , err := New (cfg )
188
+ require .NoError (t , err )
189
+
190
+ services , err := c .ModuleManager .InitModuleServices (IndexGateway )
191
+ defer func () {
192
+ for _ , service := range services {
193
+ service .StopAsync ()
194
+ }
195
+ }()
196
+
197
+ require .NoError (t , err )
198
+ assert .Equal (t , c .Cfg .IndexGateway .Mode , indexgateway .SimpleMode )
199
+ })
200
+
201
+ t .Run ("IndexGateway respects configured ring mode" , func (t * testing.T ) {
202
+ cfg := minimalWorkingConfig (t , dir , IndexGatewayRing )
203
+ cfg .IndexGateway .Mode = indexgateway .RingMode
204
+ c , err := New (cfg )
205
+ require .NoError (t , err )
206
+
207
+ services , err := c .ModuleManager .InitModuleServices (IndexGateway )
208
+ defer func () {
209
+ for _ , service := range services {
210
+ service .StopAsync ()
211
+ }
212
+ }()
213
+
214
+ require .NoError (t , err )
215
+ assert .Equal (t , c .Cfg .IndexGateway .Mode , indexgateway .RingMode )
216
+ })
217
+
218
+ })
219
+
220
+ }
221
+
222
+ func minimalWorkingConfig (t * testing.T , dir , target string ) Config {
223
+ prepareGlobalMetricsRegistry (t )
224
+
225
+ cfg := Config {}
226
+ cfg .SchemaConfig = config.SchemaConfig {
227
+ Configs : []config.PeriodConfig {
228
+ {
229
+ IndexType : config .StorageTypeInMemory ,
230
+ ObjectType : config .StorageTypeFileSystem ,
231
+ RowShards : 16 ,
232
+ Schema : "v11" ,
233
+ From : config.DayTime {
234
+ Time : model .Now (),
235
+ },
236
+ },
237
+ },
238
+ }
239
+ flagext .DefaultValues (& cfg )
240
+ // Set to 0 to find any free port.
241
+ cfg .Server .HTTPListenPort = 0
242
+ cfg .Server .GRPCListenPort = 0
243
+ cfg .Target = []string {target }
244
+
245
+ // This would be overwritten by the default values setting.
246
+ cfg .StorageConfig = storage.Config {
247
+ FSConfig : local.FSConfig {Directory : dir },
248
+ BoltDBShipperConfig : shipper.Config {
249
+ Config : indexshipper.Config {
250
+ SharedStoreType : config .StorageTypeFileSystem ,
251
+ ActiveIndexDirectory : dir ,
252
+ CacheLocation : dir ,
253
+ Mode : indexshipper .ModeWriteOnly ,
254
+ },
255
+ },
256
+ }
257
+ cfg .Ruler .Config .StoreConfig .Type = config .StorageTypeLocal
258
+ cfg .Ruler .Config .StoreConfig .Local .Directory = dir
259
+ return cfg
260
+ }
0 commit comments