mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
Merge pull request #57651 from Lion-Wei/ipvs-3
Automatic merge from submit-queue (batch tested with PRs 57651, 56411, 56779, 57523, 57624). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Fix fake IPVS Real Server delete **What this PR does / why we need it**: Delete `Weight` equal in identify ipvs Realservice equal, since `Address` + `port` can indetify an unique `Realservice`. **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes #57674 **Special notes for your reviewer**: **Release note**: ```release-note NONE ```
This commit is contained in:
commit
2df01488fe
@ -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
|
||||
}
|
||||
|
||||
|
@ -113,46 +113,59 @@ func TestRealServer(t *testing.T) {
|
||||
Port: uint16(80),
|
||||
Protocol: string("TCP"),
|
||||
}
|
||||
rss := []*utilipvs.RealServer{
|
||||
{net.ParseIP("172.16.2.1"), 8080, 1},
|
||||
{net.ParseIP("172.16.2.2"), 8080, 2},
|
||||
{net.ParseIP("172.16.2.3"), 8080, 3},
|
||||
}
|
||||
err := fake.AddVirtualServer(vs)
|
||||
if err != nil {
|
||||
t.Errorf("Fail to add virutal server, error: %v", err)
|
||||
}
|
||||
// Add a real server to the virtual server
|
||||
rs1 := &utilipvs.RealServer{
|
||||
Address: net.ParseIP("172.16.2.1"),
|
||||
// Add real server to the virtual server
|
||||
for i := range rss {
|
||||
if err = fake.AddRealServer(vs, rss[i]); err != nil {
|
||||
t.Errorf("Fail to add real server, error: %v", err)
|
||||
}
|
||||
}
|
||||
// Delete a real server of the virtual server
|
||||
// Make sure any position of the list can be real deleted
|
||||
rssLen := len(rss)
|
||||
for i := range rss {
|
||||
// List all real servers of the virtual server
|
||||
list, err := fake.GetRealServers(vs)
|
||||
if err != nil {
|
||||
t.Errorf("Fail to get real servers of the virtual server, error: %v", err)
|
||||
}
|
||||
if len(list) != rssLen {
|
||||
t.Errorf("Expect %d virutal servers, got: %d", len(rss), len(list))
|
||||
}
|
||||
rsToDel := list[i]
|
||||
if err = fake.DeleteRealServer(vs, rsToDel); err != nil {
|
||||
t.Errorf("Fail to delete real server of the virtual server, error: %v", err)
|
||||
} else {
|
||||
dests, err := fake.GetRealServers(vs)
|
||||
if err != nil {
|
||||
t.Errorf("Fail to get real servers of the virtual server, error: %v", err)
|
||||
}
|
||||
for _, dest := range dests {
|
||||
if toRealServerKey(dest).String() == toRealServerKey(rsToDel).String() {
|
||||
t.Errorf("Expect real server %q be deleted.", rsToDel.String())
|
||||
}
|
||||
}
|
||||
if err = fake.AddRealServer(vs, rsToDel); err != nil {
|
||||
t.Errorf("Fail to add real server, error: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
// Test delete real server that not exist
|
||||
rs := &utilipvs.RealServer{
|
||||
Address: net.ParseIP("172.16.2.4"),
|
||||
Port: uint16(8080),
|
||||
Weight: 1,
|
||||
}
|
||||
err = fake.AddRealServer(vs, rs1)
|
||||
if err != nil {
|
||||
t.Errorf("Fail to add real server, error: %v", err)
|
||||
}
|
||||
// Add another real server to the virtual server
|
||||
rs2 := &utilipvs.RealServer{
|
||||
Address: net.ParseIP("172.16.3.2"),
|
||||
Port: uint16(8080),
|
||||
Weight: 2,
|
||||
}
|
||||
err = fake.AddRealServer(vs, rs2)
|
||||
if err != nil {
|
||||
t.Errorf("Fail to add real server, error: %v", err)
|
||||
}
|
||||
// List all real servers of the virtual server
|
||||
list, err := fake.GetRealServers(vs)
|
||||
if err != nil {
|
||||
t.Errorf("Fail to get real servers of the virtual server, error: %v", err)
|
||||
}
|
||||
if len(list) != 2 {
|
||||
t.Errorf("Expect 2 virutal servers, got: %d", len(list))
|
||||
}
|
||||
// Delete a real server of the virtual server
|
||||
err = fake.DeleteRealServer(vs, rs2)
|
||||
list, err = fake.GetRealServers(vs)
|
||||
if err != nil {
|
||||
t.Errorf("Fail to get real servers of the virtual server, error: %v", err)
|
||||
}
|
||||
if len(list) != 1 {
|
||||
t.Errorf("Expect 1 real server, got: %d", len(list))
|
||||
if err = fake.DeleteRealServer(vs, rs); err == nil {
|
||||
t.Errorf("Delete real server that not exist, Expect error, got nil")
|
||||
}
|
||||
// Delete the virtual server
|
||||
err = fake.DeleteVirtualServer(vs)
|
||||
|
Loading…
Reference in New Issue
Block a user