mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
Merge pull request #111317 from wojtek-t/fix_leaking_goroutines_12
Clean shutdown of cloud controllers in integration tests
This commit is contained in:
commit
28fc2991a5
@ -31,6 +31,8 @@ import (
|
|||||||
"k8s.io/kubernetes/cmd/kube-controller-manager/app"
|
"k8s.io/kubernetes/cmd/kube-controller-manager/app"
|
||||||
kubecontrollerconfig "k8s.io/kubernetes/cmd/kube-controller-manager/app/config"
|
kubecontrollerconfig "k8s.io/kubernetes/cmd/kube-controller-manager/app/config"
|
||||||
"k8s.io/kubernetes/cmd/kube-controller-manager/app/options"
|
"k8s.io/kubernetes/cmd/kube-controller-manager/app/options"
|
||||||
|
|
||||||
|
"k8s.io/klog/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TearDownFunc is to be called to tear down a test server.
|
// TearDownFunc is to be called to tear down a test server.
|
||||||
@ -60,8 +62,18 @@ type Logger interface {
|
|||||||
// enough time to remove temporary files.
|
// enough time to remove temporary files.
|
||||||
func StartTestServer(t Logger, customFlags []string) (result TestServer, err error) {
|
func StartTestServer(t Logger, customFlags []string) (result TestServer, err error) {
|
||||||
stopCh := make(chan struct{})
|
stopCh := make(chan struct{})
|
||||||
|
var errCh chan error
|
||||||
tearDown := func() {
|
tearDown := func() {
|
||||||
close(stopCh)
|
close(stopCh)
|
||||||
|
|
||||||
|
// If the kube-controller-manager was started, let's wait for
|
||||||
|
// it to shutdown clearly.
|
||||||
|
if errCh != nil {
|
||||||
|
err, ok := <-errCh
|
||||||
|
if ok && err != nil {
|
||||||
|
klog.Errorf("Failed to shutdown test server clearly: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
if len(result.TmpDir) != 0 {
|
if len(result.TmpDir) != 0 {
|
||||||
os.RemoveAll(result.TmpDir)
|
os.RemoveAll(result.TmpDir)
|
||||||
}
|
}
|
||||||
@ -105,8 +117,10 @@ func StartTestServer(t Logger, customFlags []string) (result TestServer, err err
|
|||||||
return result, fmt.Errorf("failed to create config from options: %v", err)
|
return result, fmt.Errorf("failed to create config from options: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
errCh := make(chan error)
|
errCh = make(chan error)
|
||||||
go func(stopCh <-chan struct{}) {
|
go func(stopCh <-chan struct{}) {
|
||||||
|
defer close(errCh)
|
||||||
|
|
||||||
if err := app.Run(config.Complete(), stopCh); err != nil {
|
if err := app.Run(config.Complete(), stopCh); err != nil {
|
||||||
errCh <- err
|
errCh <- err
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,8 @@ import (
|
|||||||
"k8s.io/cloud-provider/app/config"
|
"k8s.io/cloud-provider/app/config"
|
||||||
"k8s.io/cloud-provider/options"
|
"k8s.io/cloud-provider/options"
|
||||||
cliflag "k8s.io/component-base/cli/flag"
|
cliflag "k8s.io/component-base/cli/flag"
|
||||||
|
|
||||||
|
"k8s.io/klog/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TearDownFunc is to be called to tear down a test server.
|
// TearDownFunc is to be called to tear down a test server.
|
||||||
@ -62,10 +64,20 @@ type Logger interface {
|
|||||||
// enough time to remove temporary files.
|
// enough time to remove temporary files.
|
||||||
func StartTestServer(t Logger, customFlags []string) (result TestServer, err error) {
|
func StartTestServer(t Logger, customFlags []string) (result TestServer, err error) {
|
||||||
stopCh := make(chan struct{})
|
stopCh := make(chan struct{})
|
||||||
|
var errCh chan error
|
||||||
configDoneCh := make(chan struct{})
|
configDoneCh := make(chan struct{})
|
||||||
var capturedConfig config.CompletedConfig
|
var capturedConfig config.CompletedConfig
|
||||||
tearDown := func() {
|
tearDown := func() {
|
||||||
close(stopCh)
|
close(stopCh)
|
||||||
|
|
||||||
|
// If cloud-controller-manager was started, let's wait for
|
||||||
|
// it to shutdown clearly.
|
||||||
|
if errCh != nil {
|
||||||
|
err, ok := <-errCh
|
||||||
|
if ok && err != nil {
|
||||||
|
klog.Errorf("Failed to shutdown test server clearly: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
if len(result.TmpDir) != 0 {
|
if len(result.TmpDir) != 0 {
|
||||||
os.RemoveAll(result.TmpDir)
|
os.RemoveAll(result.TmpDir)
|
||||||
}
|
}
|
||||||
@ -135,13 +147,14 @@ func StartTestServer(t Logger, customFlags []string) (result TestServer, err err
|
|||||||
listener.Close()
|
listener.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
errCh := make(chan error)
|
errCh = make(chan error)
|
||||||
go func() {
|
go func() {
|
||||||
|
defer close(errCh)
|
||||||
|
|
||||||
command.SetArgs(commandArgs)
|
command.SetArgs(commandArgs)
|
||||||
if err := command.Execute(); err != nil {
|
if err := command.Execute(); err != nil {
|
||||||
errCh <- err
|
errCh <- err
|
||||||
}
|
}
|
||||||
close(errCh)
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
select {
|
select {
|
||||||
|
Loading…
Reference in New Issue
Block a user