mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-02 08:17:26 +00:00
Copies endpoint slices before any sorting
This commit is contained in:
parent
79a6bfb95f
commit
38241c7e80
@ -172,6 +172,21 @@ func filterValidEndpoints(endpoints []string) []string {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func endpointsAreEqual(left, right []string) bool {
|
||||||
|
if len(left) != len(right) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
leftSorted := make([]string, len(left))
|
||||||
|
copy(leftSorted, left)
|
||||||
|
sort.Strings(leftSorted)
|
||||||
|
rightSorted := make([]string, len(right))
|
||||||
|
copy(rightSorted, right)
|
||||||
|
sort.Strings(rightSorted)
|
||||||
|
|
||||||
|
return reflect.DeepEqual(leftSorted, rightSorted)
|
||||||
|
}
|
||||||
|
|
||||||
func shuffleEndpoints(endpoints []string) []string {
|
func shuffleEndpoints(endpoints []string) []string {
|
||||||
shuffled := make([]string, len(endpoints))
|
shuffled := make([]string, len(endpoints))
|
||||||
perm := rand.Perm(len(endpoints))
|
perm := rand.Perm(len(endpoints))
|
||||||
@ -221,11 +236,7 @@ func (lb *LoadBalancerRR) OnUpdate(endpoints []api.Endpoints) {
|
|||||||
for _, endpoint := range endpoints {
|
for _, endpoint := range endpoints {
|
||||||
existingEndpoints, exists := lb.endpointsMap[endpoint.Name]
|
existingEndpoints, exists := lb.endpointsMap[endpoint.Name]
|
||||||
validEndpoints := filterValidEndpoints(endpoint.Endpoints)
|
validEndpoints := filterValidEndpoints(endpoint.Endpoints)
|
||||||
// Need to compare sorted endpoints here, since they are shuffled below
|
if !exists || !endpointsAreEqual(existingEndpoints, validEndpoints) {
|
||||||
// before being put into endpointsMap
|
|
||||||
sort.Strings(existingEndpoints)
|
|
||||||
sort.Strings(validEndpoints)
|
|
||||||
if !exists || !reflect.DeepEqual(existingEndpoints, validEndpoints) {
|
|
||||||
glog.V(3).Infof("LoadBalancerRR: Setting endpoints for %s to %+v", endpoint.Name, endpoint.Endpoints)
|
glog.V(3).Infof("LoadBalancerRR: Setting endpoints for %s to %+v", endpoint.Name, endpoint.Endpoints)
|
||||||
updateServiceDetailMap(lb, endpoint.Name, validEndpoints)
|
updateServiceDetailMap(lb, endpoint.Name, validEndpoints)
|
||||||
// On update can be called without NewService being called externally.
|
// On update can be called without NewService being called externally.
|
||||||
|
Loading…
Reference in New Issue
Block a user