From a548d542db48b4a080de74d6fcfac85d09242270 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Mon, 18 May 2015 13:13:42 -0700 Subject: [PATCH] Rename AffinityType to ServiceAffinity --- pkg/api/testing/fuzzer.go | 4 +-- pkg/api/types.go | 12 ++++---- pkg/api/v1/conversion_generated.go | 4 +-- pkg/api/v1/defaults.go | 2 +- pkg/api/v1/defaults_test.go | 4 +-- pkg/api/v1/types.go | 12 ++++---- pkg/api/v1beta1/defaults.go | 2 +- pkg/api/v1beta1/defaults_test.go | 4 +-- pkg/api/v1beta1/types.go | 12 ++++---- pkg/api/v1beta2/defaults.go | 2 +- pkg/api/v1beta2/defaults_test.go | 4 +-- pkg/api/v1beta2/types.go | 12 ++++---- pkg/api/v1beta3/conversion_generated.go | 4 +-- pkg/api/v1beta3/defaults.go | 2 +- pkg/api/v1beta3/defaults_test.go | 4 +-- pkg/api/v1beta3/types.go | 12 ++++---- pkg/api/validation/validation.go | 2 +- pkg/cloudprovider/cloud.go | 2 +- pkg/cloudprovider/fake/fake.go | 2 +- pkg/cloudprovider/gce/gce.go | 8 +++--- pkg/cloudprovider/openstack/openstack.go | 6 ++-- pkg/master/controller.go | 2 +- pkg/proxy/loadbalancer.go | 2 +- pkg/proxy/proxier.go | 6 ++-- pkg/proxy/roundrobin.go | 12 ++++---- pkg/proxy/roundrobin_test.go | 14 ++++----- pkg/registry/service/rest_test.go | 36 ++++++++++++------------ 27 files changed, 94 insertions(+), 94 deletions(-) diff --git a/pkg/api/testing/fuzzer.go b/pkg/api/testing/fuzzer.go index 49a27c77783..47a492b129d 100644 --- a/pkg/api/testing/fuzzer.go +++ b/pkg/api/testing/fuzzer.go @@ -182,8 +182,8 @@ func FuzzerFor(t *testing.T, version string, src rand.Source) *fuzz.Fuzzer { protocols := []api.Protocol{api.ProtocolTCP, api.ProtocolUDP} *p = protocols[c.Rand.Intn(len(protocols))] }, - func(p *api.AffinityType, c fuzz.Continue) { - types := []api.AffinityType{api.AffinityTypeClientIP, api.AffinityTypeNone} + func(p *api.ServiceAffinity, c fuzz.Continue) { + types := []api.ServiceAffinity{api.ServiceAffinityClientIP, api.ServiceAffinityNone} *p = types[c.Rand.Intn(len(types))] }, func(ct *api.Container, c fuzz.Continue) { diff --git a/pkg/api/types.go b/pkg/api/types.go index c6d6a39f3b1..7f2aa324970 100644 --- a/pkg/api/types.go +++ b/pkg/api/types.go @@ -969,14 +969,14 @@ type ServiceList struct { } // Session Affinity Type string -type AffinityType string +type ServiceAffinity string const ( - // AffinityTypeClientIP is the Client IP based. - AffinityTypeClientIP AffinityType = "ClientIP" + // ServiceAffinityClientIP is the Client IP based. + ServiceAffinityClientIP ServiceAffinity = "ClientIP" - // AffinityTypeNone - no session affinity. - AffinityTypeNone AffinityType = "None" + // ServiceAffinityNone - no session affinity. + ServiceAffinityNone ServiceAffinity = "None" ) // ServiceStatus represents the current status of a service @@ -1009,7 +1009,7 @@ type ServiceSpec struct { PublicIPs []string `json:"publicIPs,omitempty"` // Required: Supports "ClientIP" and "None". Used to maintain session affinity. - SessionAffinity AffinityType `json:"sessionAffinity,omitempty"` + SessionAffinity ServiceAffinity `json:"sessionAffinity,omitempty"` } type ServicePort struct { diff --git a/pkg/api/v1/conversion_generated.go b/pkg/api/v1/conversion_generated.go index 6257c752680..3d0a8d25dc5 100644 --- a/pkg/api/v1/conversion_generated.go +++ b/pkg/api/v1/conversion_generated.go @@ -4057,7 +4057,7 @@ func convert_v1_ServiceSpec_To_api_ServiceSpec(in *ServiceSpec, out *newer.Servi } else { out.PublicIPs = nil } - out.SessionAffinity = newer.AffinityType(in.SessionAffinity) + out.SessionAffinity = newer.ServiceAffinity(in.SessionAffinity) return nil } @@ -4093,7 +4093,7 @@ func convert_api_ServiceSpec_To_v1_ServiceSpec(in *newer.ServiceSpec, out *Servi } else { out.PublicIPs = nil } - out.SessionAffinity = AffinityType(in.SessionAffinity) + out.SessionAffinity = ServiceAffinity(in.SessionAffinity) return nil } diff --git a/pkg/api/v1/defaults.go b/pkg/api/v1/defaults.go index 10515332a11..728c73b6602 100644 --- a/pkg/api/v1/defaults.go +++ b/pkg/api/v1/defaults.go @@ -69,7 +69,7 @@ func addDefaultingFuncs() { }, func(obj *ServiceSpec) { if obj.SessionAffinity == "" { - obj.SessionAffinity = AffinityTypeNone + obj.SessionAffinity = ServiceAffinityNone } for i := range obj.Ports { sp := &obj.Ports[i] diff --git a/pkg/api/v1/defaults_test.go b/pkg/api/v1/defaults_test.go index 09667ef841c..0504423fa7b 100644 --- a/pkg/api/v1/defaults_test.go +++ b/pkg/api/v1/defaults_test.go @@ -159,8 +159,8 @@ func TestSetDefaultService(t *testing.T) { svc := ¤t.Service{} obj2 := roundTrip(t, runtime.Object(svc)) svc2 := obj2.(*current.Service) - if svc2.Spec.SessionAffinity != current.AffinityTypeNone { - t.Errorf("Expected default sesseion affinity type:%s, got: %s", current.AffinityTypeNone, svc2.Spec.SessionAffinity) + if svc2.Spec.SessionAffinity != current.ServiceAffinityNone { + t.Errorf("Expected default sesseion affinity type:%s, got: %s", current.ServiceAffinityNone, svc2.Spec.SessionAffinity) } } diff --git a/pkg/api/v1/types.go b/pkg/api/v1/types.go index a85bd74f8f8..e0e34e9524f 100644 --- a/pkg/api/v1/types.go +++ b/pkg/api/v1/types.go @@ -951,14 +951,14 @@ type ReplicationControllerList struct { } // Session Affinity Type string -type AffinityType string +type ServiceAffinity string const ( - // AffinityTypeClientIP is the Client IP based. - AffinityTypeClientIP AffinityType = "ClientIP" + // ServiceAffinityClientIP is the Client IP based. + ServiceAffinityClientIP ServiceAffinity = "ClientIP" - // AffinityTypeNone - no session affinity. - AffinityTypeNone AffinityType = "None" + // ServiceAffinityNone - no session affinity. + ServiceAffinityNone ServiceAffinity = "None" ) // ServiceStatus represents the current status of a service @@ -987,7 +987,7 @@ type ServiceSpec struct { PublicIPs []string `json:"publicIPs,omitempty" description:"externally visible IPs (e.g. load balancers) that should be proxied to this service"` // Optional: Supports "ClientIP" and "None". Used to maintain session affinity. - SessionAffinity AffinityType `json:"sessionAffinity,omitempty" description:"enable client IP based session affinity; must be ClientIP or None; defaults to None"` + SessionAffinity ServiceAffinity `json:"sessionAffinity,omitempty" description:"enable client IP based session affinity; must be ClientIP or None; defaults to None"` } type ServicePort struct { diff --git a/pkg/api/v1beta1/defaults.go b/pkg/api/v1beta1/defaults.go index 4f8c775c5fc..31b9784c699 100644 --- a/pkg/api/v1beta1/defaults.go +++ b/pkg/api/v1beta1/defaults.go @@ -74,7 +74,7 @@ func addDefaultingFuncs() { obj.Protocol = ProtocolTCP } if obj.SessionAffinity == "" { - obj.SessionAffinity = AffinityTypeNone + obj.SessionAffinity = ServiceAffinityNone } for i := range obj.Ports { sp := &obj.Ports[i] diff --git a/pkg/api/v1beta1/defaults_test.go b/pkg/api/v1beta1/defaults_test.go index 7a83c934110..78f10e2d502 100644 --- a/pkg/api/v1beta1/defaults_test.go +++ b/pkg/api/v1beta1/defaults_test.go @@ -149,8 +149,8 @@ func TestSetDefaultService(t *testing.T) { if svc2.Protocol != current.ProtocolTCP { t.Errorf("Expected default protocol :%s, got: %s", current.ProtocolTCP, svc2.Protocol) } - if svc2.SessionAffinity != current.AffinityTypeNone { - t.Errorf("Expected default sesseion affinity type:%s, got: %s", current.AffinityTypeNone, svc2.SessionAffinity) + if svc2.SessionAffinity != current.ServiceAffinityNone { + t.Errorf("Expected default sesseion affinity type:%s, got: %s", current.ServiceAffinityNone, svc2.SessionAffinity) } } diff --git a/pkg/api/v1beta1/types.go b/pkg/api/v1beta1/types.go index b7807e84d1a..da4b1821e0c 100644 --- a/pkg/api/v1beta1/types.go +++ b/pkg/api/v1beta1/types.go @@ -793,14 +793,14 @@ type PodTemplate struct { } // Session Affinity Type string -type AffinityType string +type ServiceAffinity string const ( - // AffinityTypeClientIP is the Client IP based. - AffinityTypeClientIP AffinityType = "ClientIP" + // ServiceAffinityClientIP is the Client IP based. + ServiceAffinityClientIP ServiceAffinity = "ClientIP" - // AffinityTypeNone - no session affinity. - AffinityTypeNone AffinityType = "None" + // ServiceAffinityNone - no session affinity. + ServiceAffinityNone ServiceAffinity = "None" ) const ( @@ -856,7 +856,7 @@ type Service struct { ProxyPort int `json:"proxyPort,omitempty" description:"if non-zero, a pre-allocated host port used for this service by the proxy on each node; assigned by the master and ignored on input"` // Optional: Supports "ClientIP" and "None". Used to maintain session affinity. - SessionAffinity AffinityType `json:"sessionAffinity,omitempty" description:"enable client IP based session affinity; must be ClientIP or None; defaults to None"` + SessionAffinity ServiceAffinity `json:"sessionAffinity,omitempty" description:"enable client IP based session affinity; must be ClientIP or None; defaults to None"` // Optional: Ports to expose on the service. If this field is // specified, the legacy fields (Port, PortName, Protocol, and diff --git a/pkg/api/v1beta2/defaults.go b/pkg/api/v1beta2/defaults.go index 10f548eaeb0..16bcc737b84 100644 --- a/pkg/api/v1beta2/defaults.go +++ b/pkg/api/v1beta2/defaults.go @@ -75,7 +75,7 @@ func addDefaultingFuncs() { obj.Protocol = ProtocolTCP } if obj.SessionAffinity == "" { - obj.SessionAffinity = AffinityTypeNone + obj.SessionAffinity = ServiceAffinityNone } for i := range obj.Ports { sp := &obj.Ports[i] diff --git a/pkg/api/v1beta2/defaults_test.go b/pkg/api/v1beta2/defaults_test.go index 78af77ac447..b41477fef5d 100644 --- a/pkg/api/v1beta2/defaults_test.go +++ b/pkg/api/v1beta2/defaults_test.go @@ -149,8 +149,8 @@ func TestSetDefaultService(t *testing.T) { if svc2.Protocol != current.ProtocolTCP { t.Errorf("Expected default protocol :%s, got: %s", current.ProtocolTCP, svc2.Protocol) } - if svc2.SessionAffinity != current.AffinityTypeNone { - t.Errorf("Expected default sesseion affinity type:%s, got: %s", current.AffinityTypeNone, svc2.SessionAffinity) + if svc2.SessionAffinity != current.ServiceAffinityNone { + t.Errorf("Expected default sesseion affinity type:%s, got: %s", current.ServiceAffinityNone, svc2.SessionAffinity) } } diff --git a/pkg/api/v1beta2/types.go b/pkg/api/v1beta2/types.go index 1e6caa11338..fdc78e2adb6 100644 --- a/pkg/api/v1beta2/types.go +++ b/pkg/api/v1beta2/types.go @@ -799,14 +799,14 @@ type PodTemplate struct { } // Session Affinity Type string -type AffinityType string +type ServiceAffinity string const ( - // AffinityTypeClientIP is the Client IP based. - AffinityTypeClientIP AffinityType = "ClientIP" + // ServiceAffinityClientIP is the Client IP based. + ServiceAffinityClientIP ServiceAffinity = "ClientIP" - // AffinityTypeNone - no session affinity. - AffinityTypeNone AffinityType = "None" + // ServiceAffinityNone - no session affinity. + ServiceAffinityNone ServiceAffinity = "None" ) const ( @@ -864,7 +864,7 @@ type Service struct { ProxyPort int `json:"proxyPort,omitempty" description:"if non-zero, a pre-allocated host port used for this service by the proxy on each node; assigned by the master and ignored on input"` // Optional: Supports "ClientIP" and "None". Used to maintain session affinity. - SessionAffinity AffinityType `json:"sessionAffinity,omitempty" description:"enable client IP based session affinity; must be ClientIP or None; defaults to None"` + SessionAffinity ServiceAffinity `json:"sessionAffinity,omitempty" description:"enable client IP based session affinity; must be ClientIP or None; defaults to None"` // Optional: Ports to expose on the service. If this field is // specified, the legacy fields (Port, PortName, Protocol, and diff --git a/pkg/api/v1beta3/conversion_generated.go b/pkg/api/v1beta3/conversion_generated.go index 069390927b7..2955dba6c18 100644 --- a/pkg/api/v1beta3/conversion_generated.go +++ b/pkg/api/v1beta3/conversion_generated.go @@ -3871,7 +3871,7 @@ func convert_v1beta3_ServiceSpec_To_api_ServiceSpec(in *ServiceSpec, out *newer. } else { out.PublicIPs = nil } - out.SessionAffinity = newer.AffinityType(in.SessionAffinity) + out.SessionAffinity = newer.ServiceAffinity(in.SessionAffinity) return nil } @@ -3907,7 +3907,7 @@ func convert_api_ServiceSpec_To_v1beta3_ServiceSpec(in *newer.ServiceSpec, out * } else { out.PublicIPs = nil } - out.SessionAffinity = AffinityType(in.SessionAffinity) + out.SessionAffinity = ServiceAffinity(in.SessionAffinity) return nil } diff --git a/pkg/api/v1beta3/defaults.go b/pkg/api/v1beta3/defaults.go index 70d56bcb440..674f7797ab9 100644 --- a/pkg/api/v1beta3/defaults.go +++ b/pkg/api/v1beta3/defaults.go @@ -71,7 +71,7 @@ func addDefaultingFuncs() { }, func(obj *ServiceSpec) { if obj.SessionAffinity == "" { - obj.SessionAffinity = AffinityTypeNone + obj.SessionAffinity = ServiceAffinityNone } for i := range obj.Ports { sp := &obj.Ports[i] diff --git a/pkg/api/v1beta3/defaults_test.go b/pkg/api/v1beta3/defaults_test.go index dca59583ecc..a323bdf779b 100644 --- a/pkg/api/v1beta3/defaults_test.go +++ b/pkg/api/v1beta3/defaults_test.go @@ -159,8 +159,8 @@ func TestSetDefaultService(t *testing.T) { svc := ¤t.Service{} obj2 := roundTrip(t, runtime.Object(svc)) svc2 := obj2.(*current.Service) - if svc2.Spec.SessionAffinity != current.AffinityTypeNone { - t.Errorf("Expected default sesseion affinity type:%s, got: %s", current.AffinityTypeNone, svc2.Spec.SessionAffinity) + if svc2.Spec.SessionAffinity != current.ServiceAffinityNone { + t.Errorf("Expected default sesseion affinity type:%s, got: %s", current.ServiceAffinityNone, svc2.Spec.SessionAffinity) } } diff --git a/pkg/api/v1beta3/types.go b/pkg/api/v1beta3/types.go index 53cd3ef9b8c..b2040b53053 100644 --- a/pkg/api/v1beta3/types.go +++ b/pkg/api/v1beta3/types.go @@ -955,14 +955,14 @@ type ReplicationControllerList struct { } // Session Affinity Type string -type AffinityType string +type ServiceAffinity string const ( - // AffinityTypeClientIP is the Client IP based. - AffinityTypeClientIP AffinityType = "ClientIP" + // ServiceAffinityClientIP is the Client IP based. + ServiceAffinityClientIP ServiceAffinity = "ClientIP" - // AffinityTypeNone - no session affinity. - AffinityTypeNone AffinityType = "None" + // ServiceAffinityNone - no session affinity. + ServiceAffinityNone ServiceAffinity = "None" ) // ServiceStatus represents the current status of a service @@ -991,7 +991,7 @@ type ServiceSpec struct { PublicIPs []string `json:"publicIPs,omitempty" description:"externally visible IPs (e.g. load balancers) that should be proxied to this service"` // Optional: Supports "ClientIP" and "None". Used to maintain session affinity. - SessionAffinity AffinityType `json:"sessionAffinity,omitempty" description:"enable client IP based session affinity; must be ClientIP or None; defaults to None"` + SessionAffinity ServiceAffinity `json:"sessionAffinity,omitempty" description:"enable client IP based session affinity; must be ClientIP or None; defaults to None"` } type ServicePort struct { diff --git a/pkg/api/validation/validation.go b/pkg/api/validation/validation.go index 2b519b309ea..4db92e95b44 100644 --- a/pkg/api/validation/validation.go +++ b/pkg/api/validation/validation.go @@ -985,7 +985,7 @@ func ValidatePodTemplateUpdate(newPod, oldPod *api.PodTemplate) errs.ValidationE return allErrs } -var supportedSessionAffinityType = util.NewStringSet(string(api.AffinityTypeClientIP), string(api.AffinityTypeNone)) +var supportedSessionAffinityType = util.NewStringSet(string(api.ServiceAffinityClientIP), string(api.ServiceAffinityNone)) // ValidateService tests if required fields in the service are set. func ValidateService(service *api.Service) errs.ValidationErrorList { diff --git a/pkg/cloudprovider/cloud.go b/pkg/cloudprovider/cloud.go index 4075fc2b35d..59418aeb40d 100644 --- a/pkg/cloudprovider/cloud.go +++ b/pkg/cloudprovider/cloud.go @@ -63,7 +63,7 @@ type TCPLoadBalancer interface { // if so, what its IP address or hostname is. GetTCPLoadBalancer(name, region string) (endpoint string, exists bool, err error) // CreateTCPLoadBalancer creates a new tcp load balancer. Returns the IP address or hostname of the balancer - CreateTCPLoadBalancer(name, region string, externalIP net.IP, ports []int, hosts []string, affinityType api.AffinityType) (string, error) + CreateTCPLoadBalancer(name, region string, externalIP net.IP, ports []int, hosts []string, affinityType api.ServiceAffinity) (string, error) // UpdateTCPLoadBalancer updates hosts under the specified load balancer. UpdateTCPLoadBalancer(name, region string, hosts []string) error // DeleteTCPLoadBalancer deletes a specified load balancer. diff --git a/pkg/cloudprovider/fake/fake.go b/pkg/cloudprovider/fake/fake.go index cdabd2a0365..c0daf8832cf 100644 --- a/pkg/cloudprovider/fake/fake.go +++ b/pkg/cloudprovider/fake/fake.go @@ -101,7 +101,7 @@ func (f *FakeCloud) GetTCPLoadBalancer(name, region string) (endpoint string, ex // CreateTCPLoadBalancer is a test-spy implementation of TCPLoadBalancer.CreateTCPLoadBalancer. // It adds an entry "create" into the internal method call record. -func (f *FakeCloud) CreateTCPLoadBalancer(name, region string, externalIP net.IP, ports []int, hosts []string, affinityType api.AffinityType) (string, error) { +func (f *FakeCloud) CreateTCPLoadBalancer(name, region string, externalIP net.IP, ports []int, hosts []string, affinityType api.ServiceAffinity) (string, error) { f.addCall("create") f.Balancers = append(f.Balancers, FakeBalancer{name, region, externalIP, ports, hosts}) return f.ExternalIP.String(), f.Err diff --git a/pkg/cloudprovider/gce/gce.go b/pkg/cloudprovider/gce/gce.go index 15d3c81a789..f63569d7462 100644 --- a/pkg/cloudprovider/gce/gce.go +++ b/pkg/cloudprovider/gce/gce.go @@ -294,11 +294,11 @@ func isHTTPErrorCode(err error, code int) bool { } // translate from what K8s supports to what the cloud provider supports for session affinity. -func translateAffinityType(affinityType api.AffinityType) GCEAffinityType { +func translateAffinityType(affinityType api.ServiceAffinity) GCEAffinityType { switch affinityType { - case api.AffinityTypeClientIP: + case api.ServiceAffinityClientIP: return GCEAffinityTypeClientIP - case api.AffinityTypeNone: + case api.ServiceAffinityNone: return GCEAffinityTypeNone default: glog.Errorf("unexpected affinity type: %v", affinityType) @@ -309,7 +309,7 @@ func translateAffinityType(affinityType api.AffinityType) GCEAffinityType { // CreateTCPLoadBalancer is an implementation of TCPLoadBalancer.CreateTCPLoadBalancer. // TODO(a-robinson): Don't just ignore specified IP addresses. Check if they're // owned by the project and available to be used, and use them if they are. -func (gce *GCECloud) CreateTCPLoadBalancer(name, region string, externalIP net.IP, ports []int, hosts []string, affinityType api.AffinityType) (string, error) { +func (gce *GCECloud) CreateTCPLoadBalancer(name, region string, externalIP net.IP, ports []int, hosts []string, affinityType api.ServiceAffinity) (string, error) { err := gce.makeTargetPool(name, region, hosts, translateAffinityType(affinityType)) if err != nil { if !isHTTPErrorCode(err, http.StatusConflict) { diff --git a/pkg/cloudprovider/openstack/openstack.go b/pkg/cloudprovider/openstack/openstack.go index f4a8aa0ef8c..5f80d97b316 100644 --- a/pkg/cloudprovider/openstack/openstack.go +++ b/pkg/cloudprovider/openstack/openstack.go @@ -480,7 +480,7 @@ func (lb *LoadBalancer) GetTCPLoadBalancer(name, region string) (endpoint string // a list of regions (from config) and query/create loadbalancers in // each region. -func (lb *LoadBalancer) CreateTCPLoadBalancer(name, region string, externalIP net.IP, ports []int, hosts []string, affinity api.AffinityType) (string, error) { +func (lb *LoadBalancer) CreateTCPLoadBalancer(name, region string, externalIP net.IP, ports []int, hosts []string, affinity api.ServiceAffinity) (string, error) { glog.V(4).Infof("CreateTCPLoadBalancer(%v, %v, %v, %v, %v, %v)", name, region, externalIP, ports, hosts, affinity) if len(ports) > 1 { @@ -489,9 +489,9 @@ func (lb *LoadBalancer) CreateTCPLoadBalancer(name, region string, externalIP ne var persistence *vips.SessionPersistence switch affinity { - case api.AffinityTypeNone: + case api.ServiceAffinityNone: persistence = nil - case api.AffinityTypeClientIP: + case api.ServiceAffinityClientIP: persistence = &vips.SessionPersistence{Type: "SOURCE_IP"} default: return "", fmt.Errorf("unsupported load balancer affinity: %v", affinity) diff --git a/pkg/master/controller.go b/pkg/master/controller.go index 462d6b0f99a..cf2b1bf7090 100644 --- a/pkg/master/controller.go +++ b/pkg/master/controller.go @@ -181,7 +181,7 @@ func (c *Controller) CreateMasterServiceIfNeeded(serviceName string, serviceIP n // maintained by this code, not by the pod selector Selector: nil, PortalIP: serviceIP.String(), - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, }, } _, err := c.ServiceRegistry.CreateService(ctx, svc) diff --git a/pkg/proxy/loadbalancer.go b/pkg/proxy/loadbalancer.go index c540b9155e7..0e4c6b4ae54 100644 --- a/pkg/proxy/loadbalancer.go +++ b/pkg/proxy/loadbalancer.go @@ -29,7 +29,7 @@ type LoadBalancer interface { // NextEndpoint returns the endpoint to handle a request for the given // service-port and source address. NextEndpoint(service ServicePortName, srcAddr net.Addr) (string, error) - NewService(service ServicePortName, sessionAffinityType api.AffinityType, stickyMaxAgeMinutes int) error + NewService(service ServicePortName, sessionAffinityType api.ServiceAffinity, stickyMaxAgeMinutes int) error CleanupStaleStickySessions(service ServicePortName) } diff --git a/pkg/proxy/proxier.go b/pkg/proxy/proxier.go index 628967fd90d..6984d83510a 100644 --- a/pkg/proxy/proxier.go +++ b/pkg/proxy/proxier.go @@ -41,7 +41,7 @@ type serviceInfo struct { socket proxySocket timeout time.Duration publicIPs []string // TODO: make this net.IP - sessionAffinityType api.AffinityType + sessionAffinityType api.ServiceAffinity stickyMaxAgeMinutes int } @@ -208,8 +208,8 @@ func (proxier *Proxier) addServiceOnPort(service ServicePortName, protocol api.P protocol: protocol, socket: sock, timeout: timeout, - sessionAffinityType: api.AffinityTypeNone, // default - stickyMaxAgeMinutes: 180, // TODO: paramaterize this in the API. + sessionAffinityType: api.ServiceAffinityNone, // default + stickyMaxAgeMinutes: 180, // TODO: paramaterize this in the API. } proxier.setServiceInfo(service, si) diff --git a/pkg/proxy/roundrobin.go b/pkg/proxy/roundrobin.go index 4d5863083fd..292e3ea997e 100644 --- a/pkg/proxy/roundrobin.go +++ b/pkg/proxy/roundrobin.go @@ -45,7 +45,7 @@ type affinityState struct { } type affinityPolicy struct { - affinityType api.AffinityType + affinityType api.ServiceAffinity affinityMap map[string]*affinityState // map client IP -> affinity info ttlMinutes int } @@ -65,7 +65,7 @@ type balancerState struct { affinity affinityPolicy } -func newAffinityPolicy(affinityType api.AffinityType, ttlMinutes int) *affinityPolicy { +func newAffinityPolicy(affinityType api.ServiceAffinity, ttlMinutes int) *affinityPolicy { return &affinityPolicy{ affinityType: affinityType, affinityMap: make(map[string]*affinityState), @@ -80,7 +80,7 @@ func NewLoadBalancerRR() *LoadBalancerRR { } } -func (lb *LoadBalancerRR) NewService(svcPort ServicePortName, affinityType api.AffinityType, ttlMinutes int) error { +func (lb *LoadBalancerRR) NewService(svcPort ServicePortName, affinityType api.ServiceAffinity, ttlMinutes int) error { lb.lock.Lock() defer lb.lock.Unlock() lb.newServiceInternal(svcPort, affinityType, ttlMinutes) @@ -88,7 +88,7 @@ func (lb *LoadBalancerRR) NewService(svcPort ServicePortName, affinityType api.A } // This assumes that lb.lock is already held. -func (lb *LoadBalancerRR) newServiceInternal(svcPort ServicePortName, affinityType api.AffinityType, ttlMinutes int) *balancerState { +func (lb *LoadBalancerRR) newServiceInternal(svcPort ServicePortName, affinityType api.ServiceAffinity, ttlMinutes int) *balancerState { if ttlMinutes == 0 { ttlMinutes = 180 //default to 3 hours if not specified. Should 0 be unlimeted instead???? } @@ -103,7 +103,7 @@ func (lb *LoadBalancerRR) newServiceInternal(svcPort ServicePortName, affinityTy // return true if this service is using some form of session affinity. func isSessionAffinity(affinity *affinityPolicy) bool { // Should never be empty string, but checking for it to be safe. - if affinity.affinityType == "" || affinity.affinityType == api.AffinityTypeNone { + if affinity.affinityType == "" || affinity.affinityType == api.ServiceAffinityNone { return false } return true @@ -262,7 +262,7 @@ func (lb *LoadBalancerRR) OnUpdate(allEndpoints []api.Endpoints) { // OnUpdate can be called without NewService being called externally. // To be safe we will call it here. A new service will only be created // if one does not already exist. - state = lb.newServiceInternal(svcPort, api.AffinityTypeNone, 0) + state = lb.newServiceInternal(svcPort, api.ServiceAffinityNone, 0) state.endpoints = slice.ShuffleStrings(newEndpoints) // Reset the round-robin index. diff --git a/pkg/proxy/roundrobin_test.go b/pkg/proxy/roundrobin_test.go index d225d8a94f2..e03e4a88ca5 100644 --- a/pkg/proxy/roundrobin_test.go +++ b/pkg/proxy/roundrobin_test.go @@ -351,7 +351,7 @@ func TestStickyLoadBalanceWorksWithSingleEndpoint(t *testing.T) { if err == nil || len(endpoint) != 0 { t.Errorf("Didn't fail with non-existent service") } - loadBalancer.NewService(service, api.AffinityTypeClientIP, 0) + loadBalancer.NewService(service, api.ServiceAffinityClientIP, 0) endpoints := make([]api.Endpoints, 1) endpoints[0] = api.Endpoints{ ObjectMeta: api.ObjectMeta{Name: service.Name, Namespace: service.Namespace}, @@ -375,7 +375,7 @@ func TestStickyLoadBalanaceWorksWithMultipleEndpoints(t *testing.T) { t.Errorf("Didn't fail with non-existent service") } - loadBalancer.NewService(service, api.AffinityTypeClientIP, 0) + loadBalancer.NewService(service, api.ServiceAffinityClientIP, 0) endpoints := make([]api.Endpoints, 1) endpoints[0] = api.Endpoints{ ObjectMeta: api.ObjectMeta{Name: service.Name, Namespace: service.Namespace}, @@ -409,7 +409,7 @@ func TestStickyLoadBalanaceWorksWithMultipleEndpointsStickyNone(t *testing.T) { t.Errorf("Didn't fail with non-existent service") } - loadBalancer.NewService(service, api.AffinityTypeNone, 0) + loadBalancer.NewService(service, api.ServiceAffinityNone, 0) endpoints := make([]api.Endpoints, 1) endpoints[0] = api.Endpoints{ ObjectMeta: api.ObjectMeta{Name: service.Name, Namespace: service.Namespace}, @@ -447,7 +447,7 @@ func TestStickyLoadBalanaceWorksWithMultipleEndpointsRemoveOne(t *testing.T) { t.Errorf("Didn't fail with non-existent service") } - loadBalancer.NewService(service, api.AffinityTypeClientIP, 0) + loadBalancer.NewService(service, api.ServiceAffinityClientIP, 0) endpoints := make([]api.Endpoints, 1) endpoints[0] = api.Endpoints{ ObjectMeta: api.ObjectMeta{Name: service.Name, Namespace: service.Namespace}, @@ -521,7 +521,7 @@ func TestStickyLoadBalanceWorksWithMultipleEndpointsAndUpdates(t *testing.T) { t.Errorf("Didn't fail with non-existent service") } - loadBalancer.NewService(service, api.AffinityTypeClientIP, 0) + loadBalancer.NewService(service, api.ServiceAffinityClientIP, 0) endpoints := make([]api.Endpoints, 1) endpoints[0] = api.Endpoints{ ObjectMeta: api.ObjectMeta{Name: service.Name, Namespace: service.Namespace}, @@ -581,7 +581,7 @@ func TestStickyLoadBalanceWorksWithServiceRemoval(t *testing.T) { if err == nil || len(endpoint) != 0 { t.Errorf("Didn't fail with non-existent service") } - loadBalancer.NewService(fooService, api.AffinityTypeClientIP, 0) + loadBalancer.NewService(fooService, api.ServiceAffinityClientIP, 0) endpoints := make([]api.Endpoints, 2) endpoints[0] = api.Endpoints{ ObjectMeta: api.ObjectMeta{Name: fooService.Name, Namespace: fooService.Namespace}, @@ -593,7 +593,7 @@ func TestStickyLoadBalanceWorksWithServiceRemoval(t *testing.T) { }, } barService := ServicePortName{types.NamespacedName{"testnamespace", "bar"}, ""} - loadBalancer.NewService(barService, api.AffinityTypeClientIP, 0) + loadBalancer.NewService(barService, api.ServiceAffinityClientIP, 0) endpoints[1] = api.Endpoints{ ObjectMeta: api.ObjectMeta{Name: barService.Name, Namespace: barService.Namespace}, Subsets: []api.EndpointSubset{ diff --git a/pkg/registry/service/rest_test.go b/pkg/registry/service/rest_test.go index cb96eb4ca12..98529b71823 100644 --- a/pkg/registry/service/rest_test.go +++ b/pkg/registry/service/rest_test.go @@ -67,7 +67,7 @@ func TestServiceRegistryCreate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -108,7 +108,7 @@ func TestServiceStorageValidatesCreate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: ""}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -119,7 +119,7 @@ func TestServiceStorageValidatesCreate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Protocol: api.ProtocolTCP, }}, @@ -161,7 +161,7 @@ func TestServiceRegistryUpdate(t *testing.T) { ResourceVersion: svc.ResourceVersion}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz2"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -204,7 +204,7 @@ func TestServiceStorageValidatesUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: ""}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -215,7 +215,7 @@ func TestServiceStorageValidatesUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: api.ServiceSpec{ Selector: map[string]string{"ThisSelectorFailsValidation": "ok"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -242,7 +242,7 @@ func TestServiceRegistryExternalService(t *testing.T) { Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, CreateExternalLoadBalancer: true, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -269,7 +269,7 @@ func TestServiceRegistryDelete(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -291,7 +291,7 @@ func TestServiceRegistryDeleteExternal(t *testing.T) { Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, CreateExternalLoadBalancer: true, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -315,7 +315,7 @@ func TestServiceRegistryUpdateExternalService(t *testing.T) { Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, CreateExternalLoadBalancer: false, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -351,7 +351,7 @@ func TestServiceRegistryUpdateMultiPortExternalService(t *testing.T) { Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, CreateExternalLoadBalancer: true, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Name: "p", Port: 6502, @@ -490,7 +490,7 @@ func TestServiceRegistryIPAllocation(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -511,7 +511,7 @@ func TestServiceRegistryIPAllocation(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "bar"}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -540,7 +540,7 @@ func TestServiceRegistryIPAllocation(t *testing.T) { Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, PortalIP: testIP, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -565,7 +565,7 @@ func TestServiceRegistryIPReallocation(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "foo"}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -588,7 +588,7 @@ func TestServiceRegistryIPReallocation(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "bar"}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -613,7 +613,7 @@ func TestServiceRegistryIPUpdate(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "1"}, Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP, @@ -657,7 +657,7 @@ func TestServiceRegistryIPExternalLoadBalancer(t *testing.T) { Spec: api.ServiceSpec{ Selector: map[string]string{"bar": "baz"}, CreateExternalLoadBalancer: true, - SessionAffinity: api.AffinityTypeNone, + SessionAffinity: api.ServiceAffinityNone, Ports: []api.ServicePort{{ Port: 6502, Protocol: api.ProtocolTCP,