in util/queue/queue.go [49:96]
func (q *Queue) Init(log logrus.FieldLogger, names []string, when time.Time) {
n := len(names)
found := make(map[string]bool, n)
q.lock.Lock()
defer q.lock.Unlock()
defer q.rouse()
if q.signal == nil {
q.signal = make(chan struct{})
}
if q.items == nil {
q.items = make(map[string]*item, n)
}
if q.queue == nil {
q.queue = make(priorityQueue, 0, n)
}
items := q.items
q.log = log
for _, name := range names {
found[name] = true
if _, ok := items[name]; ok {
continue
}
it := &item{
name: name,
when: when,
index: len(q.queue),
}
heap.Push(&q.queue, it)
items[name] = it
log.WithFields(logrus.Fields{
"when": when,
"name": name,
}).Info("Adding name to queue")
}
for name, it := range items {
if found[name] {
continue
}
log.WithField("name", name).Info("Removing name from queue")
heap.Remove(&q.queue, it.index)
delete(q.items, name)
}
}