Rename poller to scheduler

This commit is contained in:
Ken Hibino
2019-12-28 13:33:24 -08:00
parent 49d6ab5df0
commit fef5ae6d3f
4 changed files with 65 additions and 65 deletions

53
scheduler.go Normal file
View File

@@ -0,0 +1,53 @@
package asynq
import (
"log"
"time"
"github.com/hibiken/asynq/internal/rdb"
)
type scheduler struct {
rdb *rdb.RDB
// channel to communicate back to the long running "scheduler" goroutine.
done chan struct{}
// poll interval on average
avgInterval time.Duration
}
func newScheduler(r *rdb.RDB, avgInterval time.Duration) *scheduler {
return &scheduler{
rdb: r,
done: make(chan struct{}),
avgInterval: avgInterval,
}
}
func (s *scheduler) terminate() {
log.Println("[INFO] Scheduler shutting down...")
// Signal the scheduler goroutine to stop polling.
s.done <- struct{}{}
}
// start starts the "scheduler" goroutine.
func (s *scheduler) start() {
go func() {
for {
select {
case <-s.done:
log.Println("[INFO] Scheduler done.")
return
case <-time.After(s.avgInterval):
s.exec()
}
}
}()
}
func (s *scheduler) exec() {
if err := s.rdb.CheckAndEnqueue(); err != nil {
log.Printf("[ERROR] could not forward scheduled tasks: %v\n", err)
}
}