@@ -16,6 +16,7 @@ import (
1616 "github.com/grafana/dskit/user"
1717 "github.com/prometheus/client_golang/prometheus"
1818 "github.com/prometheus/common/model"
19+ "github.com/thanos-io/objstore"
1920 "golang.org/x/net/http2"
2021 "golang.org/x/net/http2/h2c"
2122
@@ -51,7 +52,6 @@ func addExecuteCommand(app *kingpin.Application) {
5152 cmd .Flag ("engine" , "Engine version (1 or 2)" ).Default ("2" ).IntVar (& engineVersion )
5253
5354 cmd .Action (func (_ * kingpin.ParseContext ) error {
54- storageBucket = cfg .Bucket
5555 orgID = cfg .OrgID
5656
5757 parsed , err := parseTimeConfig (& cfg )
@@ -69,22 +69,29 @@ func addExecuteCommand(app *kingpin.Application) {
6969
7070 switch engineVersion {
7171 case 1 :
72- return doExecuteLocallyV1 (params )
72+ return doExecuteLocallyV1 (params , cfg . Bucket )
7373 case 2 :
74- return doExecuteLocallyV2 (params )
74+ return doExecuteLocallyV2 (params , MustGCSDataobjBucket ( cfg . Bucket ) )
7575 default :
7676 return fmt .Errorf ("unsupported engine version: %d (must be 1 or 2)" , engineVersion )
7777 }
7878 })
7979}
8080
81+ func initV2Settings () {
82+ if indexStoragePrefix == "" {
83+ level .Warn (logger ).Log ("msg" , "index storage prefix is not set. using default value." )
84+ indexStoragePrefix = "index/v0"
85+ }
86+ }
87+
8188// doExecuteLocallyV1 executes a query using the V1 engine
82- func doExecuteLocallyV1 (params logql.LiteralParams ) error {
89+ func doExecuteLocallyV1 (params logql.LiteralParams , bucketName string ) error {
8390 if indexStoragePrefix == "" {
8491 level .Warn (logger ).Log ("msg" , "index storage prefix is not set. v1 engine may not find any chunks." )
8592 }
8693 level .Info (logger ).Log ("msg" , "executing local query with V1 engine" )
87- result , err := doLocalQueryWithV1Engine (params )
94+ result , err := doLocalQueryWithV1Engine (params , bucketName )
8895 if err != nil {
8996 level .Error (logger ).Log ("msg" , "local query with V1 engine failed" , "error" , err )
9097 return fmt .Errorf ("V1 query execution failed: %w" , err )
@@ -93,29 +100,32 @@ func doExecuteLocallyV1(params logql.LiteralParams) error {
93100}
94101
95102// doExecuteLocallyV2 executes a query using the V2 engine
96- func doExecuteLocallyV2 (params logql.LiteralParams ) error {
103+ func doExecuteLocallyV2 (params logql.LiteralParams , bucket objstore.Bucket ) error {
104+ initV2Settings ()
97105 level .Info (logger ).Log ("msg" , "executing local query with V2 engine" )
98- result , err := doLocalQueryWithV2Engine (params )
106+ result , err := doLocalQueryWithV2Engine (params , bucket )
99107 if err != nil {
100108 level .Error (logger ).Log ("msg" , "V2 query execution failed" , "error" , err )
101109 return fmt .Errorf ("V2 query execution failed: %w" , err )
102110 }
103111 return checkResult (result )
104112}
105113
106- func doExecuteLocallyV2Scheduler (params logql.LiteralParams ) error {
114+ func doExecuteLocallyV2Scheduler (params logql.LiteralParams , bucket objstore.Bucket ) error {
115+ initV2Settings ()
107116 level .Info (logger ).Log ("msg" , "executing local query with V2 engine via local scheduler and worker" )
108- result , err := doLocalQueryWithV2EngineScheduler (params )
117+ result , err := doLocalQueryWithV2EngineScheduler (params , bucket )
109118 if err != nil {
110119 level .Error (logger ).Log ("msg" , "v2 query execution failed" , "error" , err )
111120 return fmt .Errorf ("v2 query execution failed: %w" , err )
112121 }
113122 return checkResult (result )
114123}
115124
116- func doExecuteLocallyV2SchedulerRemote (params logql.LiteralParams ) error {
125+ func doExecuteLocallyV2SchedulerRemote (params logql.LiteralParams , bucket objstore.Bucket ) error {
126+ initV2Settings ()
117127 level .Info (logger ).Log ("msg" , "executing local query with V2 engine via remote scheduler and worker" )
118- result , err := doLocalQueryWithV2EngineSchedulerRemote (params )
128+ result , err := doLocalQueryWithV2EngineSchedulerRemote (params , bucket )
119129 if err != nil {
120130 level .Error (logger ).Log ("msg" , "v2 query execution failed" , "error" , err )
121131 return fmt .Errorf ("v2 query execution failed: %w" , err )
@@ -138,23 +148,23 @@ func checkResult(result logqlmodel.Result) error {
138148}
139149
140150// doLocalQueryWithV2Engine executes a query using the V2 engine
141- func doLocalQueryWithV2Engine (params logql.LiteralParams ) (logqlmodel.Result , error ) {
151+ func doLocalQueryWithV2Engine (params logql.LiteralParams , bucket objstore. Bucket ) (logqlmodel.Result , error ) {
142152 logger := glog .NewLogfmtLogger (os .Stderr )
143153 ms := metastore .NewObjectMetastore (
144- MustDataobjBucket () ,
154+ bucket ,
145155 metastore.Config {IndexStoragePrefix : "index/v0" },
146156 logger ,
147157 metastore .NewObjectMetastoreMetrics (prometheus .DefaultRegisterer ),
148158 )
149159
150160 ctx := user .InjectOrgID (context .Background (), orgID )
151- qe := engine .NewBasic (engine.ExecutorConfig {BatchSize : 512 }, ms , MustDataobjBucket () , logql .NoLimits , prometheus .DefaultRegisterer , logger )
161+ qe := engine .NewBasic (engine.ExecutorConfig {BatchSize : 512 }, ms , bucket , logql .NoLimits , prometheus .DefaultRegisterer , logger )
152162 query := qe .Query (params )
153163 return query .Exec (ctx )
154164}
155165
156166// doLocalQueryWithV1Engine executes a query using the V1 engine
157- func doLocalQueryWithV1Engine (params logql.LiteralParams ) (logqlmodel.Result , error ) {
167+ func doLocalQueryWithV1Engine (params logql.LiteralParams , bucketName string ) (logqlmodel.Result , error ) {
158168 ctx := user .InjectOrgID (context .Background (), orgID )
159169
160170 l := & validation.Limits {}
@@ -175,7 +185,7 @@ func doLocalQueryWithV1Engine(params logql.LiteralParams) (logqlmodel.Result, er
175185 ObjectStore : bucket.ConfigWithNamedStores {
176186 Config : bucket.Config {
177187 GCS : gcs.Config {
178- BucketName : storageBucket ,
188+ BucketName : bucketName ,
179189 },
180190 },
181191 },
@@ -226,7 +236,7 @@ func doLocalQueryWithV1Engine(params logql.LiteralParams) (logqlmodel.Result, er
226236 return query .Exec (ctx )
227237}
228238
229- func doLocalQueryWithV2EngineScheduler (params logql.LiteralParams ) (logqlmodel.Result , error ) {
239+ func doLocalQueryWithV2EngineScheduler (params logql.LiteralParams , bucket objstore. Bucket ) (logqlmodel.Result , error ) {
230240 ctx := user .InjectOrgID (context .Background (), orgID )
231241
232242 sched , err := engine .NewScheduler (engine.SchedulerParams {
@@ -239,16 +249,14 @@ func doLocalQueryWithV2EngineScheduler(params logql.LiteralParams) (logqlmodel.R
239249 return logqlmodel.Result {}, fmt .Errorf ("starting scheduler service: %w" , err )
240250 }
241251
242- b := MustDataobjBucket ()
243-
244252 metastoreMetrics := metastore .NewObjectMetastoreMetrics (prometheus .DefaultRegisterer )
245253 msConfig := metastore.Config {IndexStoragePrefix : "index/v0" }
246254 workerLogger := glog .With (logger , "component" , "worker" )
247255 worker , err := engine .NewWorker (engine.WorkerParams {
248256 Logger : workerLogger ,
249257 AdvertiseAddr : nil ,
250- Bucket : b ,
251- Metastore : metastore .NewObjectMetastore (b , msConfig , workerLogger , metastoreMetrics ),
258+ Bucket : bucket ,
259+ Metastore : metastore .NewObjectMetastore (bucket , msConfig , workerLogger , metastoreMetrics ),
252260 LocalScheduler : sched ,
253261 Config : engine.WorkerConfig {
254262 SchedulerLookupAddress : "" ,
@@ -274,7 +282,7 @@ func doLocalQueryWithV2EngineScheduler(params logql.LiteralParams) (logqlmodel.R
274282 BatchSize : 128 ,
275283 },
276284 },
277- Metastore : metastore .NewObjectMetastore (b , msConfig , engineLogger , metastoreMetrics ),
285+ Metastore : metastore .NewObjectMetastore (bucket , msConfig , engineLogger , metastoreMetrics ),
278286 Scheduler : sched ,
279287 Limits : logql .NoLimits ,
280288 })
@@ -285,7 +293,8 @@ func doLocalQueryWithV2EngineScheduler(params logql.LiteralParams) (logqlmodel.R
285293 return e .Execute (ctx , params )
286294}
287295
288- func doLocalQueryWithV2EngineSchedulerRemote (params logql.LiteralParams ) (logqlmodel.Result , error ) {
296+ // doLocalQueryWithV2EngineSchedulerRemote executes a query using the V2 engine via remote scheduler and workers so it also executes the serialization logic.
297+ func doLocalQueryWithV2EngineSchedulerRemote (params logql.LiteralParams , bucket objstore.Bucket ) (logqlmodel.Result , error ) {
289298 ctx := user .InjectOrgID (context .Background (), orgID )
290299
291300 schedSrv , schedSvc , err := newServerService ("scheduler" , 3101 , logger , prometheus .NewRegistry ())
@@ -313,19 +322,18 @@ func doLocalQueryWithV2EngineSchedulerRemote(params logql.LiteralParams) (logqlm
313322 return logqlmodel.Result {}, fmt .Errorf ("starting worker service: %w" , err )
314323 }
315324
316- b := MustDataobjBucket ()
317325 metastoreMetrics := metastore .NewObjectMetastoreMetrics (prometheus .DefaultRegisterer )
318- msConfig := metastore.Config {IndexStoragePrefix : "index/v0" }
326+ msConfig := metastore.Config {IndexStoragePrefix : indexStoragePrefix }
319327 workerLogger := glog .With (logger , "component" , "worker" )
320328 worker , err := engine .NewWorker (engine.WorkerParams {
321329 Logger : workerLogger ,
322330 AdvertiseAddr : workerSrv .HTTPListenAddr (),
323- Bucket : b ,
324- Metastore : metastore .NewObjectMetastore (b , msConfig , workerLogger , metastoreMetrics ),
331+ Bucket : bucket ,
332+ Metastore : metastore .NewObjectMetastore (bucket , msConfig , workerLogger , metastoreMetrics ),
325333 LocalScheduler : nil ,
326334 Config : engine.WorkerConfig {
327335 SchedulerLookupAddress : schedSrv .HTTPListenAddr ().String (),
328- SchedulerLookupInterval : 60 ,
336+ SchedulerLookupInterval : time . Minute ,
329337 WorkerThreads : 64 ,
330338 },
331339 Executor : engine.ExecutorConfig {
@@ -348,7 +356,7 @@ func doLocalQueryWithV2EngineSchedulerRemote(params logql.LiteralParams) (logqlm
348356 BatchSize : 128 ,
349357 },
350358 },
351- Metastore : metastore .NewObjectMetastore (b , msConfig , engineLogger , metastoreMetrics ),
359+ Metastore : metastore .NewObjectMetastore (bucket , msConfig , engineLogger , metastoreMetrics ),
352360 Scheduler : sched ,
353361 Limits : logql .NoLimits ,
354362 })
0 commit comments