Skip to content

Commit

Permalink
refactor: removed compiler.go
Browse files Browse the repository at this point in the history
  • Loading branch information
ascandone authored and gfyrag committed Oct 16, 2024
1 parent 33fe17c commit b734f1a
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 145 deletions.
75 changes: 0 additions & 75 deletions internal/controller/ledger/compiler.go

This file was deleted.

51 changes: 0 additions & 51 deletions internal/controller/ledger/compiler_generated_test.go

This file was deleted.

63 changes: 54 additions & 9 deletions internal/controller/ledger/numscript_parser.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
package ledger

import (
"crypto/sha256"
"encoding/base64"

"github.com/bluele/gcache"
"github.com/formancehq/ledger/internal/machine/script/compiler"
)

//go:generate mockgen -write_source_comment=false -write_package_comment=false -source numscript_parser.go -destination numscript_parser_generated_test.go -package ledger . NumscriptParser

type NumscriptParser interface {
Expand All @@ -8,22 +16,59 @@ type NumscriptParser interface {
Parse(script string) (NumscriptRuntime, error)
}

type DefaultNumscriptParser struct {
compiler Compiler
}
type DefaultNumscriptParser struct{}

func (d *DefaultNumscriptParser) Parse(script string) (NumscriptRuntime, error) {
ret, err := d.compiler.Compile(script)
ret, err := compiler.Compile(script)
if err != nil {
return nil, err
return nil, newErrCompilationFailed(err)
}
return NewMachineNumscriptRuntimeAdapter(*ret), nil
}

func NewDefaultNumscriptParser(compiler Compiler) *DefaultNumscriptParser {
return &DefaultNumscriptParser{
compiler: compiler,
}
func NewDefaultNumscriptParser() *DefaultNumscriptParser {
return &DefaultNumscriptParser{}
}

var _ NumscriptParser = (*DefaultNumscriptParser)(nil)

type CacheConfiguration struct {
MaxCount uint
}

type CachedParser struct {
underlying NumscriptParser
cache gcache.Cache
}

func (c *CachedParser) Parse(script string) (NumscriptRuntime, error) {
digest := sha256.New()
_, err := digest.Write([]byte(script))
if err != nil {
return nil, err
}

cacheKey := base64.StdEncoding.EncodeToString(digest.Sum(nil))
v, err := c.cache.Get(cacheKey)
if err == nil {
return v.(NumscriptRuntime), nil
}

program, err := c.underlying.Parse(script)
if err != nil {
return nil, err
}

_ = c.cache.Set(cacheKey, program)

return program, nil
}

func NewCachedNumscriptParser(parser NumscriptParser, configuration CacheConfiguration) *CachedParser {
return &CachedParser{
underlying: parser,
cache: gcache.New(int(configuration.MaxCount)).LFU().Build(),
}
}

var _ NumscriptParser = (*CachedParser)(nil)
10 changes: 5 additions & 5 deletions internal/controller/system/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ type Controller interface {
type DefaultController struct {
store Store
listener ledgercontroller.Listener
compiler ledgercontroller.Compiler
parser ledgercontroller.NumscriptParser
registry *ledgercontroller.StateRegistry
databaseRetryConfiguration DatabaseRetryConfiguration

Expand All @@ -50,7 +50,7 @@ func (ctrl *DefaultController) GetLedgerController(ctx context.Context, name str
var ledgerController ledgercontroller.Controller = ledgercontroller.NewDefaultController(
*l,
store,
ledgercontroller.NewDefaultNumscriptParser(ctrl.compiler),
ledgercontroller.NewDefaultNumscriptParser(),
ledgercontroller.WithMeter(ctrl.meter),
)

Expand Down Expand Up @@ -132,9 +132,9 @@ func NewDefaultController(store Store, listener ledgercontroller.Listener, opts

type Option func(ctrl *DefaultController)

func WithCompiler(compiler ledgercontroller.Compiler) Option {
func WithParser(parser ledgercontroller.NumscriptParser) Option {
return func(ctrl *DefaultController) {
ctrl.compiler = compiler
ctrl.parser = parser
}
}

Expand All @@ -157,7 +157,7 @@ func WithTracer(t trace.Tracer) Option {
}

var defaultOptions = []Option{
WithCompiler(ledgercontroller.NewDefaultCompiler()),
WithParser(ledgercontroller.NewDefaultNumscriptParser()),
WithMeter(noopmetrics.Meter{}),
WithTracer(nooptracer.Tracer{}),
}
11 changes: 6 additions & 5 deletions internal/controller/system/module.go
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
package system

import (
"time"

ledgercontroller "github.com/formancehq/ledger/internal/controller/ledger"
"go.opentelemetry.io/otel/metric"
"go.opentelemetry.io/otel/trace"
"go.uber.org/fx"
"time"
)

type DatabaseRetryConfiguration struct {
MaxRetry int
Delay time.Duration
Delay time.Duration
}

type ModuleConfiguration struct {
NSCacheConfiguration ledgercontroller.CacheConfiguration
NSCacheConfiguration ledgercontroller.CacheConfiguration
DatabaseRetryConfiguration DatabaseRetryConfiguration
}

Expand All @@ -31,8 +32,8 @@ func NewFXModule(configuration ModuleConfiguration) fx.Option {
) *DefaultController {
options := make([]Option, 0)
if configuration.NSCacheConfiguration.MaxCount != 0 {
options = append(options, WithCompiler(ledgercontroller.NewCachedCompiler(
ledgercontroller.NewDefaultCompiler(),
options = append(options, WithParser(ledgercontroller.NewCachedNumscriptParser(
ledgercontroller.NewDefaultNumscriptParser(),
configuration.NSCacheConfiguration,
)))
}
Expand Down

0 comments on commit b734f1a

Please sign in to comment.