diff --git a/pkg/proxy/ipvs/ipset.go b/pkg/proxy/ipvs/ipset.go index d61992125a..4cba7ff4f5 100644 --- a/pkg/proxy/ipvs/ipset.go +++ b/pkg/proxy/ipvs/ipset.go @@ -123,7 +123,7 @@ func (set *IPSet) syncIPSetEntries() { } // Create active entries for _, entry := range set.activeEntries.Difference(currentIPSetEntries).List() { - if err := set.handle.AddEntry(entry, set.Name, true); err != nil { + if err := set.handle.AddEntry(entry, &set.IPSet, true); err != nil { glog.Errorf("Failed to add entry: %v to ip set: %s, error: %v", entry, set.Name, err) } else { glog.V(3).Infof("Successfully add entry: %v to ip set: %s", entry, set.Name) diff --git a/pkg/util/ipset/ipset.go b/pkg/util/ipset/ipset.go index 7ae2805009..608bba920c 100644 --- a/pkg/util/ipset/ipset.go +++ b/pkg/util/ipset/ipset.go @@ -34,10 +34,10 @@ type Interface interface { DestroySet(set string) error // DestroyAllSets deletes all sets. DestroyAllSets() error - // CreateSet creates a new set, it will ignore error when the set already exists if ignoreExistErr=true. + // CreateSet creates a new set. It will ignore error when the set already exists if ignoreExistErr=true. CreateSet(set *IPSet, ignoreExistErr bool) error - // AddEntry adds a new entry to the named set. - AddEntry(entry string, set string, ignoreExistErr bool) error + // AddEntry adds a new entry to the named set. It will ignore error when the entry already exists if ignoreExistErr=true. + AddEntry(entry string, set *IPSet, ignoreExistErr bool) error // DelEntry deletes one entry from the named set DelEntry(entry string, set string) error // Test test if an entry exists in the named set @@ -48,6 +48,7 @@ type Interface interface { ListSets() ([]string, error) // GetVersion returns the "X.Y" version string for ipset. GetVersion() (string, error) + // TODO: add comment message for ipset } // IPSetCmd represents the ipset util. We use ipset command for ipset execute. @@ -198,8 +199,8 @@ func (runner *runner) createSet(set *IPSet, ignoreExistErr bool) error { // AddEntry adds a new entry to the named set. // If the -exist option is specified, ipset ignores the error otherwise raised when // the same set (setname and create parameters are identical) already exists. -func (runner *runner) AddEntry(entry string, set string, ignoreExistErr bool) error { - args := []string{"add", set, entry} +func (runner *runner) AddEntry(entry string, set *IPSet, ignoreExistErr bool) error { + args := []string{"add", set.Name, entry} if ignoreExistErr { args = append(args, "-exist") } diff --git a/pkg/util/ipset/ipset_test.go b/pkg/util/ipset/ipset_test.go index 71d4ce26d5..e740a1ab55 100644 --- a/pkg/util/ipset/ipset_test.go +++ b/pkg/util/ipset/ipset_test.go @@ -233,6 +233,10 @@ func TestAddEntry(t *testing.T) { SetType: HashIPPort, } + testSet := &IPSet{ + Name: "FOOBAR", + } + fcmd := fakeexec.FakeCmd{ CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{ // Success @@ -254,7 +258,7 @@ func TestAddEntry(t *testing.T) { } runner := New(&fexec) // Create with ignoreExistErr = false, expect success - err := runner.AddEntry(testEntry.String(), "FOOBAR", false) + err := runner.AddEntry(testEntry.String(), testSet, false) if err != nil { t.Errorf("expected success, got %v", err) } @@ -265,7 +269,7 @@ func TestAddEntry(t *testing.T) { t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[0]) } // Create with ignoreExistErr = true, expect success - err = runner.AddEntry(testEntry.String(), "FOOBAR", true) + err = runner.AddEntry(testEntry.String(), testSet, true) if err != nil { t.Errorf("expected success, got %v", err) } @@ -276,7 +280,7 @@ func TestAddEntry(t *testing.T) { t.Errorf("wrong CombinedOutput() log, got %s", fcmd.CombinedOutputLog[1]) } // Create with ignoreExistErr = false, expect failure - err = runner.AddEntry(testEntry.String(), "FOOBAR", false) + err = runner.AddEntry(testEntry.String(), testSet, false) if err == nil { t.Errorf("expected failure, got nil") } diff --git a/pkg/util/ipset/testing/fake.go b/pkg/util/ipset/testing/fake.go index 2a58bdd399..79f8f38554 100644 --- a/pkg/util/ipset/testing/fake.go +++ b/pkg/util/ipset/testing/fake.go @@ -93,15 +93,15 @@ func (f *FakeIPSet) CreateSet(set *ipset.IPSet, ignoreExistErr bool) error { } // AddEntry is part of interface. -func (f *FakeIPSet) AddEntry(entry string, set string, ignoreExistErr bool) error { - if f.Entries[set].Has(entry) { +func (f *FakeIPSet) AddEntry(entry string, set *ipset.IPSet, ignoreExistErr bool) error { + if f.Entries[set.Name].Has(entry) { if !ignoreExistErr { // already exists return fmt.Errorf("Element cannot be added to the set: it's already added") } return nil } - f.Entries[set].Insert(entry) + f.Entries[set.Name].Insert(entry) return nil }