From b842f008fcbd20be5c37670c38eef905db2d48b6 Mon Sep 17 00:00:00 2001 From: Lion-Wei Date: Thu, 28 Dec 2017 21:54:58 +0800 Subject: [PATCH] Modify ipvs real server equal --- pkg/util/ipvs/testing/fake.go | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/pkg/util/ipvs/testing/fake.go b/pkg/util/ipvs/testing/fake.go index b33f091213..6e015a20ee 100644 --- a/pkg/util/ipvs/testing/fake.go +++ b/pkg/util/ipvs/testing/fake.go @@ -18,6 +18,8 @@ package testing import ( "fmt" + "net" + "strconv" utilipvs "k8s.io/kubernetes/pkg/util/ipvs" ) @@ -39,6 +41,15 @@ func (s *serviceKey) String() string { return fmt.Sprintf("%s:%d/%s", s.IP, s.Port, s.Protocol) } +type realServerKey struct { + Address net.IP + Port uint16 +} + +func (r *realServerKey) String() string { + return net.JoinHostPort(r.Address.String(), strconv.Itoa(int(r.Port))) +} + //NewFake creates a fake ipvs implementation - a cache store. func NewFake() *FakeIPVS { return &FakeIPVS{ @@ -55,6 +66,13 @@ func toServiceKey(serv *utilipvs.VirtualServer) serviceKey { } } +func toRealServerKey(rs *utilipvs.RealServer) *realServerKey { + return &realServerKey{ + Address: rs.Address, + Port: rs.Port, + } +} + //AddVirtualServer is a fake implementation, it simply adds the VirtualServer into the cache store. func (f *FakeIPVS) AddVirtualServer(serv *utilipvs.VirtualServer) error { if serv == nil { @@ -159,18 +177,19 @@ func (f *FakeIPVS) DeleteRealServer(serv *utilipvs.VirtualServer, dest *utilipvs return fmt.Errorf("Failed to delete destination for service %v, service not found", key.String()) } dests := f.Destinations[key] - var i int - for i = range dests { - if dests[i].Equal(dest) { + exist := false + for i := range dests { + if toRealServerKey(dests[i]).String() == toRealServerKey(dest).String() { + // Delete one element + f.Destinations[key] = append(f.Destinations[key][:i], f.Destinations[key][i+1:]...) + exist = true break } } // Not Found - if i >= len(f.Destinations[key]) { + if !exist { return fmt.Errorf("Failed to delete real server for service %v, real server not found", key.String()) } - // Delete one element - f.Destinations[key] = append(f.Destinations[key][:i], f.Destinations[key][i+1:]...) return nil }