From e6b9b5e0c3633d1486ff2ac9af280fbdc8117b2f Mon Sep 17 00:00:00 2001 From: m1093782566 Date: Mon, 18 Dec 2017 17:22:26 +0800 Subject: [PATCH] add not found error for ipset set and entry delete --- pkg/proxy/ipvs/ipset.go | 4 +++- pkg/proxy/ipvs/proxier.go | 5 ++++- pkg/util/ipset/ipset.go | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/pkg/proxy/ipvs/ipset.go b/pkg/proxy/ipvs/ipset.go index 0a01f0bacc6..d61992125ae 100644 --- a/pkg/proxy/ipvs/ipset.go +++ b/pkg/proxy/ipvs/ipset.go @@ -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) } diff --git a/pkg/proxy/ipvs/proxier.go b/pkg/proxy/ipvs/proxier.go index 5f5a09d2447..104a5e9a353 100644 --- a/pkg/proxy/ipvs/proxier.go +++ b/pkg/proxy/ipvs/proxier.go @@ -824,7 +824,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 diff --git a/pkg/util/ipset/ipset.go b/pkg/util/ipset/ipset.go index ba92bff74bf..56993c26305 100644 --- a/pkg/util/ipset/ipset.go +++ b/pkg/util/ipset/ipset.go @@ -322,4 +322,20 @@ 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 + return true + } + if strings.Contains(es, "element is missing") { + // entry is missing from the set + return true + } + return false +} + var _ = Interface(&runner{})