Merge pull request #7362 from wojtek-t/density_events_histogram

Don't fail performance tests on single fail event
pull/6/head
Filip Grzadkowski 2015-04-28 17:05:57 +02:00
commit c2a78483b4
2 changed files with 36 additions and 9 deletions

View File

@ -18,6 +18,7 @@ package e2e
import (
"fmt"
"math"
"strconv"
"sync"
"time"
@ -108,7 +109,7 @@ var _ = Describe("Density", func() {
nameStr := strconv.Itoa(totalPods) + "-" + string(util.NewUUID())
RCName = "my-hostname-density" + nameStr
// Create a listener for events
// Create a listener for events.
events := make([](*api.Event), 0)
_, controller := framework.NewInformer(
&cache.ListWatch{
@ -130,8 +131,11 @@ var _ = Describe("Density", func() {
stop := make(chan struct{})
go controller.Run(stop)
// Start the replication controller
// Start the replication controller.
startTime := time.Now()
expectNoError(RunRC(c, RCName, ns, "gcr.io/google_containers/pause:go", totalPods))
e2eStartupTime := time.Now().Sub(startTime)
Logf("E2E startup time for %d pods: %v", totalPods, e2eStartupTime)
By("Waiting for all events to be recorded")
last := -1
@ -148,13 +152,9 @@ var _ = Describe("Density", func() {
}
Logf("Found %d events", current)
// Verify there were no pod killings or failures
By("Verifying there were no pod killings or failures")
for _, e := range events {
for _, s := range []string{"kill", "fail"} {
Expect(e.Reason).NotTo(ContainSubstring(s), "event:' %s', reason: '%s', message: '%s', field path: '%s'", e, e.ObjectMeta.Name, e.Message, e.InvolvedObject.FieldPath)
}
}
// Tune the threshold for allowed failures.
badEvents := BadEvents(events)
Expect(badEvents).NotTo(BeNumerically(">", int(math.Floor(0.01*float64(totalPods)))))
})
}

View File

@ -599,3 +599,30 @@ func VerifyContainersAreNotFailed(pod api.Pod) error {
}
return nil
}
// Prints the histogram of the events and returns the number of bad events.
func BadEvents(events []*api.Event) int {
type histogramKey struct {
reason string
source string
}
histogram := make(map[histogramKey]int)
for _, e := range events {
histogram[histogramKey{reason: e.Reason, source: e.Source.Component}]++
}
for key, number := range histogram {
Logf("- reason: %s, source: %s -> %d", key.reason, key.source, number)
}
badPatterns := []string{"kill", "fail"}
badEvents := 0
for key, number := range histogram {
for _, s := range badPatterns {
if strings.Contains(key.reason, s) {
Logf("WARNING %d events from %s with reason: %s", number, key.source, key.reason)
badEvents += number
break
}
}
}
return badEvents
}