1- package worker
1+ package storage
22
33import (
44 "context"
@@ -19,16 +19,17 @@ import (
1919)
2020
2121type AsyncBlockRunnerConfig struct {
22- MaxBlockSize int
23- Schedule cron. Schedule
22+ HashLogsBlockMaxSize int `mapstructure:"worker-async-block-hasher-max-block-size" description:"Max block size" default:"1000"`
23+ HashLogsBlockCRONSpec string `mapstructure:"worker-async-block-hasher-schedule" description:" Schedule" default:"0 * * * * *"`
2424}
2525
2626type AsyncBlockRunner struct {
27- stopChannel chan chan struct {}
28- logger logging.Logger
29- db * bun.DB
30- cfg AsyncBlockRunnerConfig
31- tracer trace.Tracer
27+ stopChannel chan chan struct {}
28+ logger logging.Logger
29+ db * bun.DB
30+ tracer trace.Tracer
31+ maxBlockSize int
32+ schedule cron.Schedule
3233}
3334
3435func (r * AsyncBlockRunner ) Name () string {
@@ -38,7 +39,7 @@ func (r *AsyncBlockRunner) Name() string {
3839func (r * AsyncBlockRunner ) Run (ctx context.Context ) error {
3940
4041 now := time .Now ()
41- next := r .cfg . Schedule .Next (now ).Sub (now )
42+ next := r .schedule .Next (now ).Sub (now )
4243
4344 for {
4445 select {
@@ -48,7 +49,7 @@ func (r *AsyncBlockRunner) Run(ctx context.Context) error {
4849 }
4950
5051 now = time .Now ()
51- next = r .cfg . Schedule .Next (now ).Sub (now )
52+ next = r .schedule .Next (now ).Sub (now )
5253 case ch := <- r .stopChannel :
5354 close (ch )
5455 return nil
@@ -106,17 +107,24 @@ func (r *AsyncBlockRunner) processLedger(ctx context.Context, l ledger.Ledger) e
106107 var err error
107108 _ , err = r .db .NewRaw (fmt .Sprintf (`
108109 call "%s".create_blocks(?, ?)
109- ` , l .Bucket ), l .Name , r .cfg . MaxBlockSize ).
110+ ` , l .Bucket ), l .Name , r .maxBlockSize ).
110111 Exec (ctx )
111112 return err
112113}
113114
114- func NewAsyncBlockRunner (logger logging.Logger , db * bun.DB , cfg AsyncBlockRunnerConfig , opts ... Option ) * AsyncBlockRunner {
115+ func NewAsyncBlockRunner (
116+ logger logging.Logger ,
117+ db * bun.DB ,
118+ schedule cron.Schedule ,
119+ maxBlockSize int ,
120+ opts ... Option ,
121+ ) * AsyncBlockRunner {
115122 ret := & AsyncBlockRunner {
116- stopChannel : make (chan chan struct {}),
117- logger : logger ,
118- db : db ,
119- cfg : cfg ,
123+ stopChannel : make (chan chan struct {}),
124+ logger : logger ,
125+ db : db ,
126+ schedule : schedule ,
127+ maxBlockSize : maxBlockSize ,
120128 }
121129
122130 for _ , opt := range append (defaultOptions , opts ... ) {
@@ -137,3 +145,33 @@ func WithTracer(tracer trace.Tracer) Option {
137145var defaultOptions = []Option {
138146 WithTracer (noop.Tracer {}),
139147}
148+
149+ type AsyncBlockRunnerFactory struct {}
150+
151+ func (f * AsyncBlockRunnerFactory ) CreateRunner (config AsyncBlockRunnerConfig ) (any , error ) {
152+ return func (
153+ logger logging.Logger ,
154+ db * bun.DB ,
155+ traceProvider trace.TracerProvider ,
156+ ) (Runner , error ) {
157+ parser := cron .NewParser (cron .Second | cron .Minute | cron .Hour | cron .Dom | cron .Month | cron .Dow )
158+ schedule , err := parser .Parse (config .HashLogsBlockCRONSpec )
159+ if err != nil {
160+ return nil , err
161+ }
162+
163+ return NewAsyncBlockRunner (
164+ logger ,
165+ db ,
166+ schedule ,
167+ config .HashLogsBlockMaxSize ,
168+ WithTracer (traceProvider .Tracer ("AsyncBlockRunner" )),
169+ ), nil
170+ }, nil
171+ }
172+
173+ var _ RunnerFactory [AsyncBlockRunnerConfig ] = (* AsyncBlockRunnerFactory )(nil )
174+
175+ func init () {
176+ RegisterRunnerFactory (& AsyncBlockRunnerFactory {})
177+ }
0 commit comments