@@ -35,14 +35,19 @@ type Queuer struct {
3535 log * log.Logger
3636}
3737
38+ // NewQueuer creates a new Queuer instance with the given name and max concurrency.
39+ // It initializes the database connection, job listeners, and worker.
40+ // If options are provided, it creates a worker with those options.
41+ // If any error occurs during initialization, it logs a panic error and exits the program.
42+ // It returns a pointer to the newly created Queuer instance.
3843func NewQueuer (name string , maxConcurrency int , options ... * model.OnError ) * Queuer {
3944 // Logger
4045 logger := log .New (os .Stdout , "Queuer: " , log .Ltime )
4146
4247 // Database
4348 dbConfig , err := helper .NewDatabaseConfiguration ()
4449 if err != nil {
45- logger .Fatalf ("failed to create database configuration: %v" , err )
50+ logger .Panicf ("failed to create database configuration: %v" , err )
4651 }
4752 dbConnection := helper .NewDatabase (
4853 "queuer" ,
@@ -54,44 +59,44 @@ func NewQueuer(name string, maxConcurrency int, options ...*model.OnError) *Queu
5459 var dbWorker database.WorkerDBHandlerFunctions
5560 dbJob , err = database .NewJobDBHandler (dbConnection )
5661 if err != nil {
57- logger .Fatalf ("failed to create job db handler: %v" , err )
62+ logger .Panicf ("failed to create job db handler: %v" , err )
5863 }
5964 dbWorker , err = database .NewWorkerDBHandler (dbConnection )
6065 if err != nil {
61- logger .Fatalf ("failed to create worker db handler: %v" , err )
66+ logger .Panicf ("failed to create worker db handler: %v" , err )
6267 }
6368
6469 // Job listeners
6570 jobInsertListener , err := database .NewQueuerListener (dbConfig , "job.INSERT" )
6671 if err != nil {
67- logger .Fatalf ("failed to create job insert listener: %v" , err )
72+ logger .Panicf ("failed to create job insert listener: %v" , err )
6873 }
6974 jobUpdateListener , err := database .NewQueuerListener (dbConfig , "job.UPDATE" )
7075 if err != nil {
71- logger .Fatalf ("failed to create job update listener: %v" , err )
76+ logger .Panicf ("failed to create job update listener: %v" , err )
7277 }
7378 jobDeleteListener , err := database .NewQueuerListener (dbConfig , "job.DELETE" )
7479 if err != nil {
75- logger .Fatalf ("failed to create job delete listener: %v" , err )
80+ logger .Panicf ("failed to create job delete listener: %v" , err )
7681 }
7782
7883 // Inserting worker
7984 var newWorker * model.Worker
8085 if len (options ) > 0 {
8186 newWorker , err = model .NewWorkerWithOptions (name , maxConcurrency , options [0 ])
8287 if err != nil {
83- logger .Fatalf ("error creating new worker with options: %v" , err )
88+ logger .Panicf ("error creating new worker with options: %v" , err )
8489 }
8590 } else {
8691 newWorker , err = model .NewWorker (name , maxConcurrency )
8792 if err != nil {
88- logger .Fatalf ("error creating new worker: %v" , err )
93+ logger .Panicf ("error creating new worker: %v" , err )
8994 }
9095 }
9196
9297 worker , err := dbWorker .InsertWorker (newWorker )
9398 if err != nil {
94- logger .Fatalf ("error inserting worker: %v" , err )
99+ logger .Panicf ("error inserting worker: %v" , err )
95100 }
96101 logger .Printf ("Worker %s created with RID %s" , worker .Name , worker .RID .String ())
97102
@@ -108,9 +113,12 @@ func NewQueuer(name string, maxConcurrency int, options ...*model.OnError) *Queu
108113 }
109114}
110115
116+ // Start starts the queuer by initializing the job listeners and starting the job poll ticker.
117+ // It checks if the queuer is initialized properly, and if not, it logs a panic error and exits the program.
118+ // It runs the job processing in a separate goroutine and listens for job events.
111119func (q * Queuer ) Start (ctx context.Context , cancel context.CancelFunc ) {
112120 if q .dbJob == nil || q .dbWorker == nil || q .jobInsertListener == nil || q .jobUpdateListener == nil || q .jobDeleteListener == nil {
113- q .log .Fatalln ("worker is not initialized properly" )
121+ q .log .Panicln ("worker is not initialized properly" )
114122 }
115123
116124 q .ctx = ctx
@@ -135,6 +143,8 @@ func (q *Queuer) Start(ctx context.Context, cancel context.CancelFunc) {
135143 }()
136144}
137145
146+ // Stop stops the queuer by closing the job listeners, cancelling all queued and running jobs,
147+ // and cancelling the context to stop the queuer.
138148func (q * Queuer ) Stop () error {
139149 if q .jobInsertListener != nil {
140150 err := q .jobInsertListener .Listener .Close ()
@@ -156,7 +166,7 @@ func (q *Queuer) Stop() error {
156166 }
157167
158168 // Cancel all queued and running jobs
159- err := q .CancelAllJobsByWorker (q .worker .RID )
169+ err := q .CancelAllJobsByWorker (q .worker .RID , 100 )
160170 if err != nil {
161171 return fmt .Errorf ("error cancelling all jobs by worker: %v" , err )
162172 }
0 commit comments