Skip to content

Commit

Permalink
Use enum for EngineType in GRPC
Browse files Browse the repository at this point in the history
GRPC is used for communication between thanos components and
defaultEngine was a string before. Enum makes more sense, and
hence the request.Enigne type has been changed to
querypb.EngineType.
Default case is handled with another default value provided in
the enum.

Signed-off-by: Pradyumna Krishna <git@onpy.in>
  • Loading branch information
PradyumnaKrishna committed Apr 11, 2023
1 parent e4fb9ac commit e973de7
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 113 deletions.
10 changes: 6 additions & 4 deletions cmd/thanos/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
"github.com/thanos-community/promql-engine/api"

apiv1 "github.com/thanos-io/thanos/pkg/api/query"
"github.com/thanos-io/thanos/pkg/api/query/querypb"
"github.com/thanos-io/thanos/pkg/compact/downsample"
"github.com/thanos-io/thanos/pkg/component"
"github.com/thanos-io/thanos/pkg/discovery/cache"
Expand Down Expand Up @@ -333,7 +334,7 @@ func registerQuery(app *extkingpin.App) {
*queryTelemetryDurationQuantiles,
*queryTelemetrySamplesQuantiles,
*queryTelemetrySeriesQuantiles,
apiv1.PromqlEngineType(*defaultEngine),
*defaultEngine,
storeRateLimits,
queryMode(*promqlQueryMode),
)
Expand Down Expand Up @@ -409,7 +410,7 @@ func runQuery(
queryTelemetryDurationQuantiles []float64,
queryTelemetrySamplesQuantiles []int64,
queryTelemetrySeriesQuantiles []int64,
defaultEngine apiv1.PromqlEngineType,
defaultEngine string,
storeRateLimits store.SeriesSelectLimits,
queryMode queryMode,
) error {
Expand Down Expand Up @@ -713,7 +714,7 @@ func runQuery(
logger,
endpoints.GetEndpointStatus,
*engineFactory,
defaultEngine,
apiv1.PromqlEngineType(defaultEngine),
lookbackDeltaCreator,
queryableCreator,
// NOTE: Will share the same replica label as the query for now.
Expand Down Expand Up @@ -798,7 +799,8 @@ func runQuery(
info.WithQueryAPIInfoFunc(),
)

grpcAPI := apiv1.NewGRPCAPI(time.Now, queryReplicaLabels, queryableCreator, *engineFactory, defaultEngine, lookbackDeltaCreator, instantDefaultMaxSourceResolution)
defaultEngineType := querypb.EngineType(querypb.EngineType_value[defaultEngine])
grpcAPI := apiv1.NewGRPCAPI(time.Now, queryReplicaLabels, queryableCreator, *engineFactory, defaultEngineType, lookbackDeltaCreator, instantDefaultMaxSourceResolution)
storeServer := store.NewLimitedStoreServer(store.NewInstrumentedStoreServer(reg, proxy), reg, storeRateLimits)
s := grpcserver.New(logger, reg, tracer, grpcLogOpts, tagOpts, comp, grpcProbe,
grpcserver.WithServer(apiv1.RegisterQueryServer(grpcAPI)),
Expand Down
20 changes: 10 additions & 10 deletions pkg/api/query/grpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ type GRPCAPI struct {
replicaLabels []string
queryableCreate query.QueryableCreator
engineFactory QueryEngineFactory
defaultEngine PromqlEngineType
defaultEngine querypb.EngineType
lookbackDeltaCreate func(int64) time.Duration
defaultMaxResolutionSeconds time.Duration
}
Expand All @@ -34,7 +34,7 @@ func NewGRPCAPI(
replicaLabels []string,
creator query.QueryableCreator,
engineFactory QueryEngineFactory,
defaultEngine PromqlEngineType,
defaultEngine querypb.EngineType,
lookbackDeltaCreate func(int64) time.Duration,
defaultMaxResolutionSeconds time.Duration,
) *GRPCAPI {
Expand Down Expand Up @@ -104,15 +104,15 @@ func (g *GRPCAPI) Query(request *querypb.QueryRequest, server querypb.Query_Quer
)

var engine v1.QueryEngine
engineParam := PromqlEngineType(request.Engine)
if engineParam == "" {
engineParam := request.Engine
if engineParam == querypb.EngineType_default {
engineParam = g.defaultEngine
}

switch engineParam {
case PromqlEnginePrometheus:
case querypb.EngineType_prometheus:
engine = g.engineFactory.GetPrometheusEngine()
case PromqlEngineThanos:
case querypb.EngineType_thanos:
engine = g.engineFactory.GetThanosEngine()
default:
return status.Error(codes.InvalidArgument, "invalid engine parameter")
Expand Down Expand Up @@ -206,15 +206,15 @@ func (g *GRPCAPI) QueryRange(request *querypb.QueryRangeRequest, srv querypb.Que
interval := time.Duration(request.IntervalSeconds) * time.Second

var engine v1.QueryEngine
engineParam := PromqlEngineType(request.Engine)
if engineParam == "" {
engineParam := request.Engine
if engineParam == querypb.EngineType_default {
engineParam = g.defaultEngine
}

switch engineParam {
case PromqlEnginePrometheus:
case querypb.EngineType_prometheus:
engine = g.engineFactory.GetPrometheusEngine()
case PromqlEngineThanos:
case querypb.EngineType_thanos:
engine = g.engineFactory.GetThanosEngine()
default:
return status.Error(codes.InvalidArgument, "invalid engine parameter")
Expand Down
2 changes: 1 addition & 1 deletion pkg/api/query/grpc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ func TestGRPCQueryAPIErrorHandling(t *testing.T) {
engineFactory := QueryEngineFactory{
prometheusEngine: test.engine,
}
api := NewGRPCAPI(time.Now, nil, queryableCreator, engineFactory, PromqlEnginePrometheus, lookbackDeltaFunc, 0)
api := NewGRPCAPI(time.Now, nil, queryableCreator, engineFactory, querypb.EngineType_prometheus, lookbackDeltaFunc, 0)
t.Run("range_query", func(t *testing.T) {
rangeRequest := &querypb.QueryRangeRequest{
Query: "metric",
Expand Down
Loading

0 comments on commit e973de7

Please sign in to comment.