mirror of https://github.com/k3s-io/k3s
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 ```pull/6/head
commit
7585998299
|
@ -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{})
|
||||
|
|
Loading…
Reference in New Issue