Review: a failure is the same by resource id, not by the host's words; bound files and /run/docker.sock are declared
The host's error text may carry a duration or a counter, and a resource looping on it would never have read as stuck. The previous row is read and compared here. Stuck needs a start to say. A container may mount the file a binding lands in; the runtime socket is declared under both of its spellings; the catalogue-wide test takes MESH_CATALOG.
This commit is contained in:
@@ -284,6 +284,20 @@ func TestTheSameFailureReportedAgainIsCountedNotRestarted(t *testing.T) {
|
||||
t.Fatalf("the failure began at %s and the row now says %s", *first.Since, *again.Since)
|
||||
}
|
||||
|
||||
// The same resource failing with different words — a duration, a counter — is still the same
|
||||
// failure: it is the resource that loops, not the sentence.
|
||||
reworded := Doing{Outcome: OutcomeFailed, Failed: []FailedResource{{ID: "img", Error: "no such image (after 31s)"}}}
|
||||
if err := inv.RecordDoing(ctx, id, reworded); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
still, _, err := inv.DoingOf(ctx, "looping")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if still.Times != StuckAfter+1 || !still.Stuck() {
|
||||
t.Fatalf("the same resource failing in other words restarted the count: %+v", still)
|
||||
}
|
||||
|
||||
// A different failure is a new situation, not a longer one.
|
||||
other := Doing{Outcome: OutcomeFailed, Failed: []FailedResource{{ID: "svc", Error: "unit not found"}}}
|
||||
if err := inv.RecordDoing(ctx, id, other); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user