Skip to content

Commit

Permalink
Merge pull request #77276 from vllry/automated-cherry-pick-of-#76732-…
Browse files Browse the repository at this point in the history
…upstream-release-1.14

Automated cherry pick of #76732: os exit when option is true
  • Loading branch information
k8s-ci-robot committed May 2, 2019
2 parents 8e8dea6 + 932060c commit b083bd4
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 14 deletions.
30 changes: 19 additions & 11 deletions cmd/kube-proxy/app/server.go
Expand Up @@ -92,6 +92,7 @@ const (
// proxyRun defines the interface to run a specified ProxyServer
type proxyRun interface {
Run() error
CleanupAndExit() error
}

// Options contains everything necessary to create and run a proxy server.
Expand Down Expand Up @@ -306,6 +307,11 @@ func (o *Options) Run() error {
if err != nil {
return err
}

if o.CleanupAndExit {
return proxyServer.CleanupAndExit()
}

o.proxyServer = proxyServer
return o.runLoop()
}
Expand Down Expand Up @@ -499,7 +505,6 @@ type ProxyServer struct {
Conntracker Conntracker // if nil, ignored
ProxyMode string
NodeRef *v1.ObjectReference
CleanupAndExit bool
CleanupIPVS bool
MetricsBindAddress string
EnableProfiling bool
Expand Down Expand Up @@ -551,19 +556,10 @@ func createClients(config componentbaseconfig.ClientConnectionConfiguration, mas
}

// Run runs the specified ProxyServer. This should never exit (unless CleanupAndExit is set).
// TODO: At the moment, Run() cannot return a nil error, otherwise it's caller will never exit. Update callers of Run to handle nil errors.
func (s *ProxyServer) Run() error {
// To help debugging, immediately log version
klog.Infof("Version: %+v", version.Get())
// remove iptables rules and exit
if s.CleanupAndExit {
encounteredError := userspace.CleanupLeftovers(s.IptInterface)
encounteredError = iptables.CleanupLeftovers(s.IptInterface) || encounteredError
encounteredError = ipvs.CleanupLeftovers(s.IpvsInterface, s.IptInterface, s.IpsetInterface, s.CleanupIPVS) || encounteredError
if encounteredError {
return errors.New("encountered an error while tearing down rules.")
}
return nil
}

// TODO(vmarmol): Use container config for this.
var oomAdjuster *oom.OOMAdjuster
Expand Down Expand Up @@ -709,3 +705,15 @@ func getConntrackMax(config kubeproxyconfig.KubeProxyConntrackConfiguration) (in
}
return 0, nil
}

// CleanupAndExit remove iptables rules and exit if success return nil
func (s *ProxyServer) CleanupAndExit() error {
encounteredError := userspace.CleanupLeftovers(s.IptInterface)
encounteredError = iptables.CleanupLeftovers(s.IptInterface) || encounteredError
encounteredError = ipvs.CleanupLeftovers(s.IpvsInterface, s.IptInterface, s.IpsetInterface, s.CleanupIPVS) || encounteredError
if encounteredError {
return errors.New("encountered an error while tearing down rules")
}

return nil
}
1 change: 0 additions & 1 deletion cmd/kube-proxy/app/server_others.go
Expand Up @@ -103,7 +103,6 @@ func newProxyServer(
IptInterface: iptInterface,
IpvsInterface: ipvsInterface,
IpsetInterface: ipsetInterface,
CleanupAndExit: cleanupAndExit,
}, nil
}

Expand Down
12 changes: 11 additions & 1 deletion cmd/kube-proxy/app/server_test.go
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package app

import (
"errors"
"fmt"
"io/ioutil"
"os"
Expand Down Expand Up @@ -108,7 +109,6 @@ func TestProxyServerWithCleanupAndExit(t *testing.T) {
assert.Nil(t, err, "unexpected error in NewProxyServer, addr: %s", addr)
assert.NotNil(t, proxyserver, "nil proxy server obj, addr: %s", addr)
assert.NotNil(t, proxyserver.IptInterface, "nil iptables intf, addr: %s", addr)
assert.True(t, proxyserver.CleanupAndExit, "false CleanupAndExit, addr: %s", addr)

// Clean up config for next test case
configz.Delete(kubeproxyconfig.GroupName)
Expand Down Expand Up @@ -540,6 +540,11 @@ func (s *fakeProxyServerLongRun) Run() error {
}
}

// CleanupAndExit runs in the specified ProxyServer.
func (s *fakeProxyServerLongRun) CleanupAndExit() error {
return nil
}

type fakeProxyServerError struct{}

// Run runs the specified ProxyServer.
Expand All @@ -549,3 +554,8 @@ func (s *fakeProxyServerError) Run() error {
return fmt.Errorf("mocking error from ProxyServer.Run()")
}
}

// CleanupAndExit runs in the specified ProxyServer.
func (s *fakeProxyServerError) CleanupAndExit() error {
return errors.New("mocking error from ProxyServer.CleanupAndExit()")
}
4 changes: 3 additions & 1 deletion cmd/kube-proxy/app/server_windows.go
Expand Up @@ -24,6 +24,8 @@ import (
"errors"
"fmt"
"net"

// Enable pprof HTTP handlers.
_ "net/http/pprof"

"k8s.io/api/core/v1"
Expand Down Expand Up @@ -63,7 +65,7 @@ func newProxyServer(config *proxyconfigapi.KubeProxyConfiguration, cleanupAndExi

// We omit creation of pretty much everything if we run in cleanup mode
if cleanupAndExit {
return &ProxyServer{CleanupAndExit: cleanupAndExit}, nil
return &ProxyServer{}, nil
}

client, eventClient, err := createClients(config.ClientConnection, master)
Expand Down

0 comments on commit b083bd4

Please sign in to comment.