Adding a nil check in endpointslicecache

This commit is contained in:
Rob Scott 2019-09-05 16:46:58 -07:00
parent 397ed0e825
commit a1e3afa28e
No known key found for this signature in database
GPG Key ID: 05B37CFC2CDE8B85
2 changed files with 15 additions and 6 deletions

View File

@ -59,6 +59,10 @@ type endpointInfo struct {
Topology map[string]string
}
// spToEndpointMap stores groups Endpoint objects by ServicePortName and
// EndpointSlice name.
type spToEndpointMap map[ServicePortName]map[string]Endpoint
// NewEndpointSliceCache initializes an EndpointSliceCache.
func NewEndpointSliceCache(hostname string, isIPv6Mode *bool, recorder record.EventRecorder, makeEndpointInfo makeEndpointFunc) *EndpointSliceCache {
if makeEndpointInfo == nil {
@ -121,10 +125,15 @@ func (cache *EndpointSliceCache) EndpointsMap(serviceNN types.NamespacedName) En
}
// endpointInfoByServicePort groups endpoint info by service port name and address.
func (cache *EndpointSliceCache) endpointInfoByServicePort(serviceNN types.NamespacedName) map[ServicePortName]map[string]Endpoint {
endpointInfoBySP := map[ServicePortName]map[string]Endpoint{}
func (cache *EndpointSliceCache) endpointInfoByServicePort(serviceNN types.NamespacedName) spToEndpointMap {
endpointInfoBySP := spToEndpointMap{}
sliceInfoByName, ok := cache.sliceByServiceMap[serviceNN]
for _, sliceInfo := range cache.sliceByServiceMap[serviceNN] {
if !ok {
return endpointInfoBySP
}
for _, sliceInfo := range sliceInfoByName {
for _, port := range sliceInfo.Ports {
if port.Name == nil {
klog.Warningf("ignoring port with nil name %v", port)

View File

@ -163,7 +163,7 @@ func TestEndpointInfoByServicePort(t *testing.T) {
namespacedName types.NamespacedName
endpointSlices []*discovery.EndpointSlice
hostname string
expectedMap map[ServicePortName]map[string]Endpoint
expectedMap spToEndpointMap
}{
"simple use case with 3 endpoints": {
namespacedName: types.NamespacedName{Name: "svc1", Namespace: "ns1"},
@ -171,7 +171,7 @@ func TestEndpointInfoByServicePort(t *testing.T) {
endpointSlices: []*discovery.EndpointSlice{
generateEndpointSlice("svc1", "ns1", 1, 3, 999, []string{"host1", "host2"}, []*int32{utilpointer.Int32Ptr(80)}),
},
expectedMap: map[ServicePortName]map[string]Endpoint{
expectedMap: spToEndpointMap{
{NamespacedName: types.NamespacedName{Name: "svc1", Namespace: "ns1"}, Port: "port-0"}: {
"10.0.1.1": &BaseEndpointInfo{Endpoint: "10.0.1.1:80", IsLocal: false},
"10.0.1.2": &BaseEndpointInfo{Endpoint: "10.0.1.2:80", IsLocal: true},
@ -190,7 +190,7 @@ func TestEndpointInfoByServicePort(t *testing.T) {
got := esCache.endpointInfoByServicePort(tc.namespacedName)
if !reflect.DeepEqual(got, tc.expectedMap) {
t.Errorf("[%s] endpointInfoByServicePort does not match. Want: %v, Got: %v", name, tc.expectedMap, got)
t.Errorf("[%s] endpointInfoByServicePort does not match. Want: %+v, Got: %+v", name, tc.expectedMap, got)
}
}