Unverified Commit 75859982 authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #57317 from m1093782566/notfound

Automatic merge from submit-queue (batch tested with PRs 57906, 57425, 56939, 57317, 57762). 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>. add "Not Found" error for ipset set & entry delete **What this PR does / why we need it**: Add "not found error" for ipset set and entry delete. For example, ``` [root@SHA1000130405 k8s-yml]# ipset list Name: KUBE-LOOP-BACK Type: hash:ip,port,ip Revision: 2 Header: family inet hashsize 1024 maxelem 65536 Size in memory: 16776 References: 1 Members: 172.17.0.2,udp:53,172.17.0.2 172.17.0.2,tcp:53,172.17.0.2 100.106.89.164,tcp:6443,100.106.89.164 [root@SHA1000130405 k8s-yml]# ipset delete foo ipset v6.19: The set with the given name does not exist [root@SHA1000130405 k8s-yml]# ipset del KUBE-LOOP-BACK 1.2.3.4,tcp:80,1.2.3.4 ipset v6.19: Syntax error: Third element is missing from 1.2.3.4,tcp:80,1.2.3.4. ``` Just need to filter the error message "does not exist" or "element is missing". We should ignore these error when try to make sure they are deleted. **Which issue(s) this PR fixes**: Fixes #57318 **Special notes for your reviewer**: **Release note**: ```release-note NONE ```
parents a75c73a8 5052f3ae
......@@ -114,7 +114,9 @@ func (set *IPSet) syncIPSetEntries() {
// Clean legacy entries
for _, entry := range currentIPSetEntries.Difference(set.activeEntries).List() {
if err := set.handle.DelEntry(entry, set.Name); err != nil {
glog.Errorf("Failed to delete ip set entry: %s from ip set: %s, error: %v", entry, set.Name, err)
if !utilipset.IsNotFoundError(err) {
glog.Errorf("Failed to delete ip set entry: %s from ip set: %s, error: %v", entry, set.Name, err)
}
} else {
glog.V(3).Infof("Successfully delete legacy ip set entry: %s from ip set: %s", entry, set.Name)
}
......
......@@ -852,6 +852,7 @@ func CleanupLeftovers(ipvs utilipvs.Interface, ipt utiliptables.Interface, ipset
encounteredError = false
err := ipvs.Flush()
if err != nil {
glog.Errorf("Error flushing IPVS rules: %v", err)
encounteredError = true
}
}
......@@ -859,6 +860,7 @@ func CleanupLeftovers(ipvs utilipvs.Interface, ipt utiliptables.Interface, ipset
nl := NewNetLinkHandle()
err := nl.DeleteDummyDevice(DefaultDummyDevice)
if err != nil {
glog.Errorf("Error deleting dummy device %s created by IPVS proxier: %v", DefaultDummyDevice, err)
encounteredError = true
}
// Clear iptables created by ipvs Proxier.
......@@ -870,7 +872,10 @@ func CleanupLeftovers(ipvs utilipvs.Interface, ipt utiliptables.Interface, ipset
for _, set := range ipSetsToDestroy {
err = ipset.DestroySet(set)
if err != nil {
encounteredError = true
if !utilipset.IsNotFoundError(err) {
glog.Errorf("Error removing ipset %s, error: %v", set, err)
encounteredError = true
}
}
}
return encounteredError
......
......@@ -322,4 +322,23 @@ func validatePortRange(portRange string) bool {
return true
}
// IsNotFoundError returns true if the error indicates "not found". It parses
// the error string looking for known values, which is imperfect but works in
// practice.
func IsNotFoundError(err error) bool {
es := err.Error()
if strings.Contains(es, "does not exist") {
// set with the same name already exists
// xref: https://github.com/Olipro/ipset/blob/master/lib/errcode.c#L32-L33
return true
}
if strings.Contains(es, "element is missing") {
// entry is missing from the set
// xref: https://github.com/Olipro/ipset/blob/master/lib/parse.c#L1904
// https://github.com/Olipro/ipset/blob/master/lib/parse.c#L1925
return true
}
return false
}
var _ = Interface(&runner{})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment