The waiter moved to mesh-sdk buildrun (fix/734-lost-ask, d96b9fd6), where every asker of the build seats shares it. The builder hears DEAD_LETTERS for the go, node and image seats and asks a given-up part of a build again at once, with the seat's words as why, instead of waiting for the check bound. The checker keeps what it does with a lost ask (a try ends as error, a check is asked again) and its verdict words.
31 lines
1.6 KiB
Go
31 lines
1.6 KiB
Go
package check
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/delivery"
|
|
"git.novox.be/novox/mesh-sdk/go/delivery/buildrun"
|
|
)
|
|
|
|
// **An ask the build seat gave up on ends its step** (novox/hq issue 734): mesh-sdk buildrun.LostAskWaiter hands the
|
|
// waiting asker a failed step on the node buildrun.LostNode when DEAD_LETTERS keeps the ask's copy (buildrun.HearDeadLetters,
|
|
// granted by buscompose DeadLetterReads), and, under buildrun.NotTakenBound, when no build node took the ask within the
|
|
// bound. What follows is the checker's: a try ends as error (Tryer.run), with the not-taken bound at the step bound
|
|
// (Tryer.NotTaken); a check is asked again under its claim, at most LostAskTries times, then fails as not heard and is
|
|
// judged again when the nodes change (Checker.try). A check's ask has no not-taken bound: it waits in the stream as long as
|
|
// the backlog is (ADR 0525 §9), and a check ended for a backlog would owe its pull request a failure.
|
|
|
|
// LostAskTries is how often a check asks again whose ask was given up, before it fails as not heard (UnheardWords) and is
|
|
// judged again when the nodes change.
|
|
const LostAskTries = 3
|
|
|
|
// IsLostAsk says whether a verdict failed because the build seat gave its ask up (buildrun.LostWords).
|
|
func IsLostAsk(v delivery.Verdict) bool {
|
|
return v.State == delivery.VerdictFail && strings.Contains(v.Failed.Words, buildrun.LostWords)
|
|
}
|
|
|
|
// IsNotTaken says whether a verdict failed because no build node took its ask within the bound (buildrun.NotTakenWords).
|
|
func IsNotTaken(v delivery.Verdict) bool {
|
|
return v.State == delivery.VerdictFail && strings.Contains(v.Failed.Words, buildrun.NotTakenWords)
|
|
}
|