瀏覽代碼

libnetwork/i/setmatrix: devirtualize

There is only one implementation. Get rid of the interface.

Signed-off-by: Cory Snider <csnider@mirantis.com>
Cory Snider 2 年之前
父節點
當前提交
09d39c023c

+ 1 - 1
libnetwork/drivers/overlay/peerdb.go

@@ -63,7 +63,7 @@ func (p *peerEntryDB) UnMarshalDB() peerEntry {
 
 type peerMap struct {
 	// set of peerEntry, note they have to be objects and not pointers to maintain the proper equality checks
-	mp setmatrix.SetMatrix
+	mp *setmatrix.SetMatrix
 	sync.Mutex
 }
 

+ 22 - 39
libnetwork/internal/setmatrix/setmatrix.go

@@ -6,50 +6,26 @@ import (
 	mapset "github.com/deckarep/golang-set"
 )
 
-// SetMatrix is a map of Sets
-type SetMatrix interface {
-	// Get returns the members of the set for a specific key as a slice.
-	Get(key string) ([]interface{}, bool)
-	// Contains is used to verify if an element is in a set for a specific key
-	// returns true if the element is in the set
-	// returns true if there is a set for the key
-	Contains(key string, value interface{}) (bool, bool)
-	// Insert inserts the value in the set of a key
-	// returns true if the value is inserted (was not already in the set), false otherwise
-	// returns also the length of the set for the key
-	Insert(key string, value interface{}) (bool, int)
-	// Remove removes the value in the set for a specific key
-	// returns true if the value is deleted, false otherwise
-	// returns also the length of the set for the key
-	Remove(key string, value interface{}) (bool, int)
-	// Cardinality returns the number of elements in the set for a key
-	// returns false if the set is not present
-	Cardinality(key string) (int, bool)
-	// String returns the string version of the set, empty otherwise
-	// returns false if the set is not present
-	String(key string) (string, bool)
-	// Returns all the keys in the map
-	Keys() []string
-}
-
-type setMatrix struct {
+// SetMatrix is a map of Sets.
+type SetMatrix struct {
 	matrix map[string]mapset.Set
 
 	mu sync.Mutex
 }
 
-// NewSetMatrix creates a new set matrix object
-func NewSetMatrix() SetMatrix {
-	s := &setMatrix{}
+// NewSetMatrix creates a new set matrix object.
+func NewSetMatrix() *SetMatrix {
+	s := &SetMatrix{}
 	s.init()
 	return s
 }
 
-func (s *setMatrix) init() {
+func (s *SetMatrix) init() {
 	s.matrix = make(map[string]mapset.Set)
 }
 
-func (s *setMatrix) Get(key string) ([]interface{}, bool) {
+// Get returns the members of the set for a specific key as a slice.
+func (s *SetMatrix) Get(key string) ([]interface{}, bool) {
 	s.mu.Lock()
 	defer s.mu.Unlock()
 	set, ok := s.matrix[key]
@@ -59,7 +35,8 @@ func (s *setMatrix) Get(key string) ([]interface{}, bool) {
 	return set.ToSlice(), ok
 }
 
-func (s *setMatrix) Contains(key string, value interface{}) (bool, bool) {
+// Contains is used to verify if an element is in a set for a specific key.
+func (s *SetMatrix) Contains(key string, value interface{}) (containsElement, setExists bool) {
 	s.mu.Lock()
 	defer s.mu.Unlock()
 	set, ok := s.matrix[key]
@@ -69,7 +46,9 @@ func (s *setMatrix) Contains(key string, value interface{}) (bool, bool) {
 	return set.Contains(value), ok
 }
 
-func (s *setMatrix) Insert(key string, value interface{}) (bool, int) {
+// Insert inserts the value in the set of a key and returns whether the value is
+// inserted (was not already in the set) and the number of elements in the set.
+func (s *SetMatrix) Insert(key string, value interface{}) (insetrted bool, cardinality int) {
 	s.mu.Lock()
 	defer s.mu.Unlock()
 	set, ok := s.matrix[key]
@@ -82,7 +61,8 @@ func (s *setMatrix) Insert(key string, value interface{}) (bool, int) {
 	return set.Add(value), set.Cardinality()
 }
 
-func (s *setMatrix) Remove(key string, value interface{}) (bool, int) {
+// Remove removes the value in the set for a specific key.
+func (s *SetMatrix) Remove(key string, value interface{}) (removed bool, cardinality int) {
 	s.mu.Lock()
 	defer s.mu.Unlock()
 	set, ok := s.matrix[key]
@@ -90,7 +70,6 @@ func (s *setMatrix) Remove(key string, value interface{}) (bool, int) {
 		return false, 0
 	}
 
-	var removed bool
 	if set.Contains(value) {
 		set.Remove(value)
 		removed = true
@@ -103,7 +82,8 @@ func (s *setMatrix) Remove(key string, value interface{}) (bool, int) {
 	return removed, set.Cardinality()
 }
 
-func (s *setMatrix) Cardinality(key string) (int, bool) {
+// Cardinality returns the number of elements in the set for a key.
+func (s *SetMatrix) Cardinality(key string) (cardinality int, ok bool) {
 	s.mu.Lock()
 	defer s.mu.Unlock()
 	set, ok := s.matrix[key]
@@ -114,7 +94,9 @@ func (s *setMatrix) Cardinality(key string) (int, bool) {
 	return set.Cardinality(), ok
 }
 
-func (s *setMatrix) String(key string) (string, bool) {
+// String returns the string version of the set.
+// The empty string is returned if there is no set for key.
+func (s *SetMatrix) String(key string) (v string, ok bool) {
 	s.mu.Lock()
 	defer s.mu.Unlock()
 	set, ok := s.matrix[key]
@@ -124,7 +106,8 @@ func (s *setMatrix) String(key string) (string, bool) {
 	return set.String(), ok
 }
 
-func (s *setMatrix) Keys() []string {
+// Keys returns all the keys in the map.
+func (s *SetMatrix) Keys() []string {
 	s.mu.Lock()
 	defer s.mu.Unlock()
 	keys := make([]string, 0, len(s.matrix))

+ 1 - 1
libnetwork/internal/setmatrix/setmatrix_test.go

@@ -135,7 +135,7 @@ func TestSetSerialInsertDelete(t *testing.T) {
 	}
 }
 
-func insertDeleteRotuine(ctx context.Context, endCh chan int, s SetMatrix, key, value string) {
+func insertDeleteRotuine(ctx context.Context, endCh chan int, s *SetMatrix, key, value string) {
 	for {
 		select {
 		case <-ctx.Done():

+ 7 - 7
libnetwork/network.go

@@ -105,9 +105,9 @@ type svcMapEntry struct {
 }
 
 type svcInfo struct {
-	svcMap     setmatrix.SetMatrix
-	svcIPv6Map setmatrix.SetMatrix
-	ipMap      setmatrix.SetMatrix
+	svcMap     *setmatrix.SetMatrix
+	svcIPv6Map *setmatrix.SetMatrix
+	ipMap      *setmatrix.SetMatrix
 	service    map[string][]servicePorts
 }
 
@@ -1362,7 +1362,7 @@ func (n *network) updateSvcRecord(ep *Endpoint, localEps []*Endpoint, isAdd bool
 	}
 }
 
-func addIPToName(ipMap setmatrix.SetMatrix, name, serviceID string, ip net.IP) {
+func addIPToName(ipMap *setmatrix.SetMatrix, name, serviceID string, ip net.IP) {
 	reverseIP := netutils.ReverseIP(ip.String())
 	ipMap.Insert(reverseIP, ipInfo{
 		name:      name,
@@ -1370,7 +1370,7 @@ func addIPToName(ipMap setmatrix.SetMatrix, name, serviceID string, ip net.IP) {
 	})
 }
 
-func delIPToName(ipMap setmatrix.SetMatrix, name, serviceID string, ip net.IP) {
+func delIPToName(ipMap *setmatrix.SetMatrix, name, serviceID string, ip net.IP) {
 	reverseIP := netutils.ReverseIP(ip.String())
 	ipMap.Remove(reverseIP, ipInfo{
 		name:      name,
@@ -1378,7 +1378,7 @@ func delIPToName(ipMap setmatrix.SetMatrix, name, serviceID string, ip net.IP) {
 	})
 }
 
-func addNameToIP(svcMap setmatrix.SetMatrix, name, serviceID string, epIP net.IP) {
+func addNameToIP(svcMap *setmatrix.SetMatrix, name, serviceID string, epIP net.IP) {
 	// Since DNS name resolution is case-insensitive, Use the lower-case form
 	// of the name as the key into svcMap
 	lowerCaseName := strings.ToLower(name)
@@ -1388,7 +1388,7 @@ func addNameToIP(svcMap setmatrix.SetMatrix, name, serviceID string, epIP net.IP
 	})
 }
 
-func delNameToIP(svcMap setmatrix.SetMatrix, name, serviceID string, epIP net.IP) {
+func delNameToIP(svcMap *setmatrix.SetMatrix, name, serviceID string, epIP net.IP) {
 	lowerCaseName := strings.ToLower(name)
 	svcMap.Remove(lowerCaseName, svcMapEntry{
 		ip:        epIP.String(),

+ 1 - 1
libnetwork/service.go

@@ -54,7 +54,7 @@ type service struct {
 	// associated with it. At stable state the endpoint ID expected is 1
 	// but during transition and service change it is possible to have
 	// temporary more than 1
-	ipToEndpoint setmatrix.SetMatrix
+	ipToEndpoint *setmatrix.SetMatrix
 
 	deleted bool