@@ -444,11 +444,6 @@ func runCli() {
444
444
Usage : "Run only HTTP server (no queue workers)" ,
445
445
Value : false ,
446
446
},
447
- & cli.IntFlag {
448
- Name : "queue-workers" ,
449
- Usage : "Number of queue worker goroutines" ,
450
- Value : 1 ,
451
- },
452
447
},
453
448
Action : func (context * cli.Context ) error {
454
449
if context .Bool ("json-logging" ) {
@@ -481,14 +476,13 @@ func runCli() {
481
476
482
477
queueOnly := context .Bool ("queue-only" )
483
478
serverOnly := context .Bool ("server-only" )
484
- numWorkers := context .Int ("queue-workers" )
485
479
486
480
enableQueue := redisURL != "" && ! serverOnly
487
481
enableServer := ! queueOnly
488
482
489
483
if os .Getenv ("QUEUE_MODE" ) == "true" {
490
484
enableQueue = true
491
- if os .Getenv ("SERVER _MODE " ) != "true" {
485
+ if os .Getenv ("SERVER_MODE " ) != "true" {
492
486
enableServer = false
493
487
}
494
488
}
@@ -497,10 +491,9 @@ func runCli() {
497
491
Bool ("enable_queue" , enableQueue ).
498
492
Bool ("enable_server" , enableServer ).
499
493
Str ("redis_url" , redisURL ).
500
- Int ("queue_workers" , numWorkers ).
501
494
Msg ("Starting ZK Prover service" )
502
495
503
- var workers []* server.QueueWorker
496
+ var workers []server.QueueWorker
504
497
var redisQueue * server.RedisQueue
505
498
var instance server.RunningJob
506
499
@@ -514,22 +507,49 @@ func runCli() {
514
507
return fmt .Errorf ("failed to connect to Redis: %w" , err )
515
508
}
516
509
517
- startResultCleanup (redisQueue )
510
+ startCleanupRoutines (redisQueue )
518
511
519
512
if stats , err := redisQueue .GetQueueStats (); err == nil {
520
513
logging .Logger ().Info ().Interface ("initial_queue_stats" , stats ).Msg ("Redis connection successful" )
521
514
}
522
515
523
- if numWorkers <= 0 {
524
- numWorkers = 1
516
+ logging .Logger ().Info ().Msg ("Starting queue workers" )
517
+
518
+ startAllWorkers := runMode == prover .Forester || runMode == prover .ForesterTest
519
+
520
+ var workersStarted []string
521
+
522
+ // Start update worker for batch-update circuits or forester modes
523
+ if startAllWorkers || containsCircuit (circuits , "update" ) || containsCircuit (circuits , "update-test" ) {
524
+ updateWorker := server .NewUpdateQueueWorker (redisQueue , psv1 , psv2 )
525
+ workers = append (workers , updateWorker )
526
+ go updateWorker .Start ()
527
+ workersStarted = append (workersStarted , "update" )
525
528
}
526
529
527
- logging .Logger ().Info ().Int ("workers" , numWorkers ).Msg ("Starting queue workers" )
530
+ // Start append worker for batch-append circuits or forester modes
531
+ if startAllWorkers || containsCircuit (circuits , "append-with-proofs" ) || containsCircuit (circuits , "append-with-proofs-test" ) {
532
+ appendWorker := server .NewAppendQueueWorker (redisQueue , psv1 , psv2 )
533
+ workers = append (workers , appendWorker )
534
+ go appendWorker .Start ()
535
+ workersStarted = append (workersStarted , "append" )
536
+ }
528
537
529
- for i := 0 ; i < numWorkers ; i ++ {
530
- worker := server .NewQueueWorker (i + 1 , redisQueue , psv1 , psv2 )
531
- workers = append (workers , worker )
532
- go worker .Start ()
538
+ // Start address append worker for address-append circuits or forester modes
539
+ if startAllWorkers || containsCircuit (circuits , "address-append" ) || containsCircuit (circuits , "address-append-test" ) {
540
+ addressAppendWorker := server .NewAddressAppendQueueWorker (redisQueue , psv1 , psv2 )
541
+ workers = append (workers , addressAppendWorker )
542
+ go addressAppendWorker .Start ()
543
+ workersStarted = append (workersStarted , "address-append" )
544
+ }
545
+
546
+ if len (workersStarted ) == 0 {
547
+ logging .Logger ().Warn ().Msg ("No queue workers started - no matching circuits found" )
548
+ } else {
549
+ logging .Logger ().Info ().
550
+ Strs ("workers_started" , workersStarted ).
551
+ Bool ("forester_mode" , startAllWorkers ).
552
+ Msg ("Queue workers started" )
533
553
}
534
554
}
535
555
@@ -931,17 +951,68 @@ func debugProvingSystemKeys(keysDirPath string, runMode prover.RunMode, circuits
931
951
}
932
952
}
933
953
934
- func startResultCleanup (redisQueue * server.RedisQueue ) {
954
+ func startCleanupRoutines (redisQueue * server.RedisQueue ) {
955
+ logging .Logger ().Info ().Msg ("Running immediate cleanup on startup" )
956
+
957
+ if err := redisQueue .CleanupOldRequests (); err != nil {
958
+ logging .Logger ().Error ().
959
+ Err (err ).
960
+ Msg ("Failed to cleanup old proof requests on startup" )
961
+ } else {
962
+ logging .Logger ().Info ().Msg ("Startup cleanup of old proof requests completed" )
963
+ }
964
+
965
+ if err := redisQueue .CleanupOldResults (); err != nil {
966
+ logging .Logger ().Error ().
967
+ Err (err ).
968
+ Msg ("Failed to cleanup old results on startup" )
969
+ } else {
970
+ logging .Logger ().Info ().Msg ("Startup cleanup of old results completed" )
971
+ }
972
+
973
+ // Start cleanup for old proof requests (every 10 minutes)
974
+ go func () {
975
+ requestTicker := time .NewTicker (10 * time .Minute )
976
+ defer requestTicker .Stop ()
977
+
978
+ logging .Logger ().Info ().Msg ("Started old proof requests cleanup routine (every 10 minutes)" )
979
+
980
+ for range requestTicker .C {
981
+ if err := redisQueue .CleanupOldRequests (); err != nil {
982
+ logging .Logger ().Error ().
983
+ Err (err ).
984
+ Msg ("Failed to cleanup old proof requests" )
985
+ } else {
986
+ logging .Logger ().Debug ().Msg ("Old proof requests cleanup completed" )
987
+ }
988
+ }
989
+ }()
990
+
991
+ // Start less frequent cleanup for old results (every 1 hour)
935
992
go func () {
936
- ticker := time .NewTicker (1 * time .Hour )
937
- defer ticker .Stop ()
993
+ resultTicker := time .NewTicker (1 * time .Hour )
994
+ defer resultTicker .Stop ()
995
+
996
+ logging .Logger ().Info ().Msg ("Started old results cleanup routine (every 1 hour)" )
938
997
939
- for range ticker .C {
998
+ for range resultTicker .C {
940
999
if err := redisQueue .CleanupOldResults (); err != nil {
941
1000
logging .Logger ().Error ().
942
1001
Err (err ).
943
1002
Msg ("Failed to cleanup old results" )
1003
+ } else {
1004
+ logging .Logger ().Debug ().Msg ("Old results cleanup completed" )
944
1005
}
945
1006
}
946
1007
}()
947
1008
}
1009
+
1010
+ // containsCircuit checks if the circuits slice contains the specified circuit
1011
+ func containsCircuit (circuits []string , circuit string ) bool {
1012
+ for _ , c := range circuits {
1013
+ if c == circuit {
1014
+ return true
1015
+ }
1016
+ }
1017
+ return false
1018
+ }
0 commit comments