Skip to content

Commit

Permalink
fixup! fixup! fixup! expr: refactor for avoid global evaluator usage
Browse files Browse the repository at this point in the history
  • Loading branch information
msaf1980 committed Jan 29, 2024
1 parent e7002f7 commit 334f41c
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 15 deletions.
24 changes: 12 additions & 12 deletions expr/expr.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ func (eval Evaluator) Fetch(ctx context.Context, exprs []parser.Expr, from, unti

// Eval evaluates expressions.
func (eval Evaluator) Eval(ctx context.Context, exp parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) (results []*types.MetricData, err error) {
rewritten, targets, err := eval.RewriteExpr(ctx, exp, from, until, values)
rewritten, targets, err := RewriteExpr(ctx, eval, exp, from, until, values)
if err != nil {
return nil, err
}
Expand All @@ -136,11 +136,19 @@ func (eval Evaluator) Eval(ctx context.Context, exp parser.Expr, from, until int
}
return results, nil
}
return eval.EvalExpr(ctx, exp, from, until, values)
return EvalExpr(ctx, eval, exp, from, until, values)
}

// NewEvaluator create evaluator with limiter and zipper
func NewEvaluator(limiter limiter.SimpleLimiter, zipper zipper.CarbonZipper) (*Evaluator, error) {
if zipper == nil {
return nil, ErrZipperNotInit
}
return &Evaluator{limiter: limiter, zipper: zipper}, nil
}

// EvalExpr is the main expression Evaluator.
func (eval Evaluator) EvalExpr(ctx context.Context, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) ([]*types.MetricData, error) {
func EvalExpr(ctx context.Context, eval interfaces.Evaluator, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) ([]*types.MetricData, error) {
if e.IsName() {
return values[parser.MetricRequest{Metric: e.Target(), From: from, Until: until}], nil
} else if e.IsConst() {
Expand Down Expand Up @@ -198,7 +206,7 @@ func (eval Evaluator) EvalExpr(ctx context.Context, e parser.Expr, from, until i
// applyByNode(foo*, 1, "%") -> (true, ["foo1", "foo2"], nil)
// sumSeries(foo) -> (false, nil, nil)
// Assumes that applyByNode only appears as the outermost function.
func (eval Evaluator) RewriteExpr(ctx context.Context, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) (bool, []string, error) {
func RewriteExpr(ctx context.Context, eval interfaces.Evaluator, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) (bool, []string, error) {
if e.IsFunc() {
metadata.FunctionMD.RLock()
f, ok := metadata.FunctionMD.RewriteFunctions[e.Target()]
Expand All @@ -210,14 +218,6 @@ func (eval Evaluator) RewriteExpr(ctx context.Context, e parser.Expr, from, unti
return false, nil, nil
}

// NewEvaluator create evaluator with limiter and zipper
func NewEvaluator(limiter limiter.SimpleLimiter, zipper zipper.CarbonZipper) (*Evaluator, error) {
if zipper == nil {
return nil, ErrZipperNotInit
}
return &Evaluator{limiter: limiter, zipper: zipper}, nil
}

// FetchAndEvalExp fetch data and evaluates expressions
func FetchAndEvalExp(ctx context.Context, eval interfaces.Evaluator, e parser.Expr, from, until int64, values map[parser.MetricRequest][]*types.MetricData) ([]*types.MetricData, merry.Error) {
targetValues, err := eval.Fetch(ctx, []parser.Expr{e}, from, until, values)
Expand Down
6 changes: 3 additions & 3 deletions expr/expr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ func TestEvalExpr(t *testing.T) {

eval, err := NewEvaluator(nil, th.NewTestZipper(nil))
if err == nil {
_, err = eval.EvalExpr(context.Background(), exp, request.From, request.Until, metricMap)
_, err = EvalExpr(context.Background(), eval, exp, request.From, request.Until, metricMap)
}
if err != nil {
t.Errorf("error='%v'", err)
Expand Down Expand Up @@ -465,7 +465,7 @@ func TestRewriteExpr(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
eval, err := NewEvaluator(nil, th.NewTestZipper(nil))
if err == nil {
rewritten, newTargets, err := eval.RewriteExpr(context.Background(), tt.e, 0, 1, tt.m)
rewritten, newTargets, err := RewriteExpr(context.Background(), eval, tt.e, 0, 1, tt.m)

if err != nil {
t.Errorf("failed to rewrite %v: %+v", tt.name, err)
Expand Down Expand Up @@ -522,7 +522,7 @@ func TestEvalCustomFromUntil(t *testing.T) {
exp, _, _ := parser.ParseExpr(tt.target)
eval, err := NewEvaluator(nil, th.NewTestZipper(nil))
if err == nil {
g, err := eval.EvalExpr(context.Background(), exp, tt.from, tt.until, tt.m)
g, err := EvalExpr(context.Background(), eval, exp, tt.from, tt.until, tt.m)
if err != nil {
t.Errorf("failed to eval %v: %s", tt.name, err)
return
Expand Down

0 comments on commit 334f41c

Please sign in to comment.