88 "context"
99 "fmt"
1010 "log"
11+ "os"
12+ "strconv"
1113 "sync"
1214 "time"
1315
@@ -19,31 +21,37 @@ import (
1921)
2022
2123type SeriesProcessor struct {
22- blobStorage blob.Storage
23- seriesRepo * db.SeriesRepository
24- sessionRepo * db.SessionRepository
25- workflows workflow.Service
26- dbPollInterval time.Duration
24+ blobStorage blob.Storage
25+ seriesRepo * db.SeriesRepository
26+ sessionRepo * db.SessionRepository
27+ workflows workflow.Service
28+ dbPollInterval time.Duration
29+ parallelWorkers int
2730}
2831
2932func NewSeriesProcessor (env * app.AppEnvironment ) * SeriesProcessor {
3033 workflows , err := workflow .NewArgoService ()
3134 if err != nil {
3235 app .Fatalf ("failed to initialize workflows: %v" , err )
3336 }
37+ parallelWorkers := 1
38+ if val := os .Getenv ("PARALLEL_WORKERS" ); val != "" {
39+ var err error
40+ parallelWorkers , err = strconv .Atoi (val )
41+ if err != nil || parallelWorkers < 1 {
42+ app .Fatalf ("invalid PARALLEL_WORKERS value" )
43+ }
44+ }
3445 return & SeriesProcessor {
35- blobStorage : env .BlobStorage ,
36- seriesRepo : db .NewSeriesRepository (env .Spanner ),
37- sessionRepo : db .NewSessionRepository (env .Spanner ),
38- dbPollInterval : time .Minute ,
39- workflows : workflows ,
46+ blobStorage : env .BlobStorage ,
47+ seriesRepo : db .NewSeriesRepository (env .Spanner ),
48+ sessionRepo : db .NewSessionRepository (env .Spanner ),
49+ dbPollInterval : time .Minute ,
50+ workflows : workflows ,
51+ parallelWorkers : parallelWorkers ,
4052 }
4153}
4254
43- // Do not run more than this number of sessions in parallel.
44- // TODO: it'd be different for dev and prod, make it configurable.
45- const parallelWorkers = 1
46-
4755func (sp * SeriesProcessor ) Loop (ctx context.Context ) error {
4856 var wg sync.WaitGroup
4957 defer wg .Wait ()
@@ -107,7 +115,7 @@ func (sp *SeriesProcessor) seriesRunner(ctx context.Context, ch <-chan *db.Sessi
107115 var eg errgroup.Group
108116 defer eg .Wait ()
109117
110- eg .SetLimit (parallelWorkers )
118+ eg .SetLimit (sp . parallelWorkers )
111119 for {
112120 var session * db.Session
113121 select {
0 commit comments