mirror of https://github.com/k3s-io/k3s
Merge pull request #956 from brendandburns/service
Fix the proxier when a service with the same port is re-created after being deleted.pull/6/head
commit
b4973bbac4
|
@ -199,10 +199,10 @@ func (proxier *Proxier) OnUpdate(services []api.Service) {
|
|||
for _, service := range services {
|
||||
activeServices.Insert(service.ID)
|
||||
info, exists := proxier.getServiceInfo(service.ID)
|
||||
if exists && info.port == service.Port {
|
||||
if exists && info.active && info.port == service.Port {
|
||||
continue
|
||||
}
|
||||
if exists {
|
||||
if exists && info.port != service.Port {
|
||||
proxier.StopProxy(service.ID)
|
||||
}
|
||||
glog.Infof("Adding a new service %s on port %d", service.ID, service.Port)
|
||||
|
|
|
@ -133,6 +133,33 @@ func TestProxyUpdateDelete(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestProxyUpdateDeleteUpdate(t *testing.T) {
|
||||
lb := NewLoadBalancerRR()
|
||||
lb.OnUpdate([]api.Endpoints{{JSONBase: api.JSONBase{ID: "echo"}, Endpoints: []string{net.JoinHostPort("127.0.0.1", port)}}})
|
||||
|
||||
p := NewProxier(lb)
|
||||
|
||||
proxyPort, err := p.addServiceOnUnusedPort("echo")
|
||||
if err != nil {
|
||||
t.Fatalf("error adding new service: %#v", err)
|
||||
}
|
||||
conn, err := net.Dial("tcp", net.JoinHostPort("127.0.0.1", proxyPort))
|
||||
if err != nil {
|
||||
t.Fatalf("error connecting to proxy: %v", err)
|
||||
}
|
||||
conn.Close()
|
||||
|
||||
p.OnUpdate([]api.Service{})
|
||||
if err := waitForClosedPort(p, proxyPort); err != nil {
|
||||
t.Fatalf(err.Error())
|
||||
}
|
||||
proxyPortNum, _ := strconv.Atoi(proxyPort)
|
||||
p.OnUpdate([]api.Service{
|
||||
{JSONBase: api.JSONBase{ID: "echo"}, Port: proxyPortNum},
|
||||
})
|
||||
testEchoConnection(t, "127.0.0.1", proxyPort)
|
||||
}
|
||||
|
||||
func TestProxyUpdatePort(t *testing.T) {
|
||||
lb := NewLoadBalancerRR()
|
||||
lb.OnUpdate([]api.Endpoints{{JSONBase: api.JSONBase{ID: "echo"}, Endpoints: []string{net.JoinHostPort("127.0.0.1", port)}}})
|
||||
|
@ -165,3 +192,44 @@ func TestProxyUpdatePort(t *testing.T) {
|
|||
}
|
||||
testEchoConnection(t, "127.0.0.1", newPort)
|
||||
}
|
||||
|
||||
func TestProxyUpdatePortLetsGoOfOldPort(t *testing.T) {
|
||||
lb := NewLoadBalancerRR()
|
||||
lb.OnUpdate([]api.Endpoints{{JSONBase: api.JSONBase{ID: "echo"}, Endpoints: []string{net.JoinHostPort("127.0.0.1", port)}}})
|
||||
|
||||
p := NewProxier(lb)
|
||||
|
||||
proxyPort, err := p.addServiceOnUnusedPort("echo")
|
||||
if err != nil {
|
||||
t.Fatalf("error adding new service: %#v", err)
|
||||
}
|
||||
|
||||
// add a new dummy listener in order to get a port that is free
|
||||
l, _ := net.Listen("tcp", ":0")
|
||||
_, newPort, _ := net.SplitHostPort(l.Addr().String())
|
||||
portNum, _ := strconv.Atoi(newPort)
|
||||
l.Close()
|
||||
|
||||
// Wait for the socket to actually get free.
|
||||
if err := waitForClosedPort(p, newPort); err != nil {
|
||||
t.Fatalf(err.Error())
|
||||
}
|
||||
if proxyPort == newPort {
|
||||
t.Errorf("expected difference, got %s %s", newPort, proxyPort)
|
||||
}
|
||||
p.OnUpdate([]api.Service{
|
||||
{JSONBase: api.JSONBase{ID: "echo"}, Port: portNum},
|
||||
})
|
||||
if err := waitForClosedPort(p, proxyPort); err != nil {
|
||||
t.Fatalf(err.Error())
|
||||
}
|
||||
testEchoConnection(t, "127.0.0.1", newPort)
|
||||
proxyPortNum, _ := strconv.Atoi(proxyPort)
|
||||
p.OnUpdate([]api.Service{
|
||||
{JSONBase: api.JSONBase{ID: "echo"}, Port: proxyPortNum},
|
||||
})
|
||||
if err := waitForClosedPort(p, newPort); err != nil {
|
||||
t.Fatalf(err.Error())
|
||||
}
|
||||
testEchoConnection(t, "127.0.0.1", proxyPort)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue