mirror of https://github.com/k3s-io/k3s
Limit the number of concurrent tests in integration.go
Integration test often time out because the machine is loaded. Instead of increasing timeout, this change hopes to address the issue by limiting the number of tests running simultaneously. Add a new flag in integration.go to specify the maximum number of concurrent tests. Set the default in travis and shippable configurations to be 4.pull/6/head
parent
2215a64567
commit
faf47b6f0b
|
@ -24,7 +24,7 @@ install:
|
||||||
script:
|
script:
|
||||||
- KUBE_RACE="-race" KUBE_COVER="y" KUBE_GOVERALLS_BIN="$HOME/gopath/bin/goveralls" KUBE_TIMEOUT='-timeout 300s' KUBE_COVERPROCS=8 KUBE_TEST_API_VERSIONS=$KUBE_TEST_API_VERSIONS ./hack/test-go.sh -- -p=2
|
- KUBE_RACE="-race" KUBE_COVER="y" KUBE_GOVERALLS_BIN="$HOME/gopath/bin/goveralls" KUBE_TIMEOUT='-timeout 300s' KUBE_COVERPROCS=8 KUBE_TEST_API_VERSIONS=$KUBE_TEST_API_VERSIONS ./hack/test-go.sh -- -p=2
|
||||||
- PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/test-cmd.sh
|
- PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/test-cmd.sh
|
||||||
- PATH=$HOME/gopath/bin:./third_party/etcd:$PATH KUBE_TEST_API_VERSIONS=$KUBE_TEST_API_VERSIONS ./hack/test-integration.sh
|
- PATH=$HOME/gopath/bin:./third_party/etcd:$PATH KUBE_TEST_API_VERSIONS=$KUBE_TEST_API_VERSIONS KUBE_INTEGRATION_TEST_MAX_CONCURRENCY=4 ./hack/test-integration.sh
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
irc: "chat.freenode.net#google-containers"
|
irc: "chat.freenode.net#google-containers"
|
||||||
|
|
|
@ -67,6 +67,8 @@ var (
|
||||||
fakeDocker1, fakeDocker2 dockertools.FakeDockerClient
|
fakeDocker1, fakeDocker2 dockertools.FakeDockerClient
|
||||||
// API version that should be used by the client to talk to the server.
|
// API version that should be used by the client to talk to the server.
|
||||||
apiVersion string
|
apiVersion string
|
||||||
|
// Limit the number of concurrent tests.
|
||||||
|
maxConcurrency int
|
||||||
)
|
)
|
||||||
|
|
||||||
type fakeKubeletClient struct{}
|
type fakeKubeletClient struct{}
|
||||||
|
@ -947,6 +949,8 @@ type testFunc func(*client.Client)
|
||||||
|
|
||||||
func addFlags(fs *pflag.FlagSet) {
|
func addFlags(fs *pflag.FlagSet) {
|
||||||
fs.StringVar(&apiVersion, "apiVersion", latest.Version, "API version that should be used by the client for communicating with the server")
|
fs.StringVar(&apiVersion, "apiVersion", latest.Version, "API version that should be used by the client for communicating with the server")
|
||||||
|
fs.IntVar(
|
||||||
|
&maxConcurrency, "maxConcurrency", -1, "Maximum number of tests to be run simultaneously. Unlimited if set to negative.")
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -994,16 +998,26 @@ func main() {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
// Only run at most maxConcurrency tests in parallel.
|
||||||
wg.Add(len(testFuncs))
|
numFinishedTests := 0
|
||||||
for i := range testFuncs {
|
for numFinishedTests < len(testFuncs) {
|
||||||
f := testFuncs[i]
|
numTestsToRun := len(testFuncs) - numFinishedTests
|
||||||
go func() {
|
if maxConcurrency > 0 && numTestsToRun > maxConcurrency {
|
||||||
f(kubeClient)
|
numTestsToRun = maxConcurrency
|
||||||
wg.Done()
|
}
|
||||||
}()
|
glog.Infof("Running %d tests in parallel.", numTestsToRun)
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(numTestsToRun)
|
||||||
|
for i := 0; i < numTestsToRun; i++ {
|
||||||
|
f := testFuncs[i+numFinishedTests]
|
||||||
|
go func() {
|
||||||
|
f(kubeClient)
|
||||||
|
wg.Done()
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
numFinishedTests += numTestsToRun
|
||||||
}
|
}
|
||||||
wg.Wait()
|
|
||||||
|
|
||||||
// Check that kubelet tried to make the containers.
|
// Check that kubelet tried to make the containers.
|
||||||
// Using a set to list unique creation attempts. Our fake is
|
// Using a set to list unique creation attempts. Our fake is
|
||||||
|
|
|
@ -26,7 +26,7 @@ KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
|
||||||
source "${KUBE_ROOT}/hack/lib/init.sh"
|
source "${KUBE_ROOT}/hack/lib/init.sh"
|
||||||
# Comma separated list of API Versions that should be tested.
|
# Comma separated list of API Versions that should be tested.
|
||||||
KUBE_TEST_API_VERSIONS=${KUBE_TEST_API_VERSIONS:-"v1beta1,v1beta3"}
|
KUBE_TEST_API_VERSIONS=${KUBE_TEST_API_VERSIONS:-"v1beta1,v1beta3"}
|
||||||
|
KUBE_INTEGRATION_TEST_MAX_CONCURRENCY=${KUBE_INTEGRATION_TEST_MAX_CONCURRENCY:-"-1"}
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
kube::etcd::cleanup
|
kube::etcd::cleanup
|
||||||
|
@ -44,7 +44,8 @@ runTests() {
|
||||||
|
|
||||||
kube::log::status "Running integration test scenario"
|
kube::log::status "Running integration test scenario"
|
||||||
|
|
||||||
"${KUBE_OUTPUT_HOSTBIN}/integration" --v=2 --apiVersion="$1"
|
"${KUBE_OUTPUT_HOSTBIN}/integration" --v=2 --apiVersion="$1" \
|
||||||
|
--maxConcurrency="${KUBE_INTEGRATION_TEST_MAX_CONCURRENCY}"
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ install:
|
||||||
script:
|
script:
|
||||||
- KUBE_RACE="-race" KUBE_COVER="y" KUBE_GOVERALLS_BIN="$HOME/gopath/bin/goveralls" KUBE_TIMEOUT='-timeout 300s' KUBE_COVERPROCS=8 KUBE_TEST_API_VERSIONS=$KUBE_TEST_API_VERSIONS ./hack/test-go.sh -- -p=2
|
- KUBE_RACE="-race" KUBE_COVER="y" KUBE_GOVERALLS_BIN="$HOME/gopath/bin/goveralls" KUBE_TIMEOUT='-timeout 300s' KUBE_COVERPROCS=8 KUBE_TEST_API_VERSIONS=$KUBE_TEST_API_VERSIONS ./hack/test-go.sh -- -p=2
|
||||||
- PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/test-cmd.sh
|
- PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/test-cmd.sh
|
||||||
- PATH=$HOME/gopath/bin:./third_party/etcd:$PATH KUBE_TEST_API_VERSIONS=$KUBE_TEST_API_VERSIONS ./hack/test-integration.sh
|
- PATH=$HOME/gopath/bin:./third_party/etcd:$PATH KUBE_TEST_API_VERSIONS=$KUBE_TEST_API_VERSIONS KUBE_INTEGRATION_TEST_MAX_CONCURRENCY=4 ./hack/test-integration.sh
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
irc: "chat.freenode.net#google-containers"
|
irc: "chat.freenode.net#google-containers"
|
||||||
|
|
Loading…
Reference in New Issue