// Done removes a built node from the queue.
func (q *BuildQueue) Done(key NodeKey) {
delete(q.running, key)
+
if key.level > 0 {
delete(q.queued, key)
+
return
}
// Fail keeps a node in the queue, but it cannot start until Retry.
func (q *BuildQueue) Fail(key NodeKey) {
delete(q.running, key)
+
if key.level > 0 {
q.retry = append(q.retry, key)
return
// Retry lets the failed nodes start again.
func (q *BuildQueue) Retry() {
clear(q.failed)
+
for _, key := range q.retry {
heap.Push(&q.merges, key)
}