Skip to content

Commit 9f4f75c

Browse files
committed
mantle/kola/harness: warn about memory starvation periodically
Every 5 minutes that a test is waiting on memory we'll get a log message about it, which will help to see what's going on even if we don't have debug turned on.
1 parent c671b23 commit 9f4f75c

1 file changed

Lines changed: 14 additions & 4 deletions

File tree

mantle/kola/harness.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1747,7 +1747,7 @@ func makeNonExclusiveTest(bucket int, tests []*register.Test, flight platform.Fl
17471747
return nonExclusiveWrapper
17481748
}
17491749

1750-
func reserveMemoryCountForTest(t *register.Test, needed int) bool {
1750+
func reserveMemoryCountForTest(t *register.Test, needed int, logger func(format string, args ...interface{})) bool {
17511751
reservedMemoryCountMutex.Lock()
17521752
defer reservedMemoryCountMutex.Unlock()
17531753
avail, err := system.GetCurrentMemAvailableMiB()
@@ -1762,11 +1762,11 @@ func reserveMemoryCountForTest(t *register.Test, needed int) bool {
17621762
reservedMemoryCountMiB += needed
17631763
reserved := reservedMemoryCountMiB
17641764
t.ReservedMemoryCountMiB = needed
1765-
plog.Debugf("Reserved %d MiB for %s (available: %d MiB, reserved total: %d MiB)",
1765+
logger("Reserved %d MiB for %s (available: %d MiB, reserved total: %d MiB)",
17661766
needed, t.Name, avail, reserved)
17671767
return true
17681768
}
1769-
plog.Debugf("Waiting on memory to run %s: need %d MiB, effective available %d MiB (system: %d MiB, reserved: %d MiB)",
1769+
logger("Waiting on memory to run %s: need %d MiB, effective available %d MiB (system: %d MiB, reserved: %d MiB)",
17701770
t.Name, needed, effective, avail, reservedMemoryCountMiB)
17711771
return false
17721772
}
@@ -1784,7 +1784,17 @@ func reserveMemoryCountForTest(t *register.Test, needed int) bool {
17841784
func waitForMemory(h *harness.H, flight platform.Flight, t *register.Test) {
17851785
if flight.Platform() == "qemu" {
17861786
needed := getNeededMemoryMiB(t)
1787-
for !reserveMemoryCountForTest(t, needed) {
1787+
start := time.Now()
1788+
logger := plog.Debugf
1789+
for !reserveMemoryCountForTest(t, needed, logger) {
1790+
// After a period of time switch the logger so we get some
1791+
// info even if debug isn't turned on.
1792+
if time.Since(start) > 5*time.Minute {
1793+
logger = plog.Warningf
1794+
start = time.Now() // reset counter
1795+
} else {
1796+
logger = plog.Debugf
1797+
}
17881798
// sleep between 0 and 20 seconds and try again
17891799
time.Sleep(time.Duration(rand.Intn(20)) * time.Second)
17901800
}

0 commit comments

Comments
 (0)