func()

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)
	}
}