Skip to content

Commit b84b62b

Browse files
Merge pull request #228 from sak0/fix_redundantCode
loadbalancer: fix redundant code
2 parents d50069b + c3b50c7 commit b84b62b

File tree

4 files changed

+31
-33
lines changed

4 files changed

+31
-33
lines changed

plugin/loadbalancer/common/half_open.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package common
1919

2020
import (
2121
"github.com/polarismesh/polaris-go/pkg/model"
22+
"github.com/polarismesh/polaris-go/pkg/plugin/loadbalancer"
2223
)
2324

2425
// SelectAvailableInstanceSet select available instance set
@@ -35,3 +36,19 @@ func SelectAvailableInstanceSet(clsValue *model.ClusterValue, hasLimitedInstance
3536
targetInstances := clsValue.GetInstancesSet(hasLimitedInstances, includeHalfOpen)
3637
return targetInstances
3738
}
39+
40+
// SelectAvailableInstanceSetFromCriteria select available instance from criteria
41+
func SelectAvailableInstanceSetFromCriteria(criteria *loadbalancer.Criteria,
42+
inputInstances model.ServiceInstances) (*model.InstanceSet, error) {
43+
cluster := criteria.Cluster
44+
svcClusters := inputInstances.GetServiceClusters()
45+
clusterValue := cluster.GetClusterValue()
46+
targetInstances := SelectAvailableInstanceSet(clusterValue, cluster.HasLimitedInstances,
47+
cluster.IncludeHalfOpen)
48+
if targetInstances.TotalWeight() == 0 {
49+
return nil, model.NewSDKError(model.ErrCodeAPIInstanceNotFound, nil,
50+
"instances of %s in cluster %s all weight 0 (instance count %d) in load balance",
51+
svcClusters.GetServiceKey(), *cluster, targetInstances.Count())
52+
}
53+
return targetInstances, nil
54+
}

plugin/loadbalancer/hash/hash.go

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,9 @@ func (g *LoadBalancer) Destroy() error {
6565
// ChooseInstance 获取单个服务实例
6666
func (g *LoadBalancer) ChooseInstance(criteria *loadbalancer.Criteria,
6767
inputInstances model.ServiceInstances) (model.Instance, error) {
68-
cluster := criteria.Cluster
69-
svcClusters := inputInstances.GetServiceClusters()
70-
clusterValue := cluster.GetClusterValue()
71-
var instance model.Instance
72-
svcInstances := svcClusters.GetServiceInstances()
73-
targetInstances := lbcommon.SelectAvailableInstanceSet(clusterValue, cluster.HasLimitedInstances,
74-
cluster.IncludeHalfOpen)
75-
if targetInstances.TotalWeight() == 0 {
76-
return nil, model.NewSDKError(model.ErrCodeAPIInstanceNotFound, nil,
77-
"instances of %s in cluster %s all weight 0 (instance count %d) in load balance",
78-
svcClusters.GetServiceKey(), *cluster, targetInstances.Count())
68+
targetInstances, err := lbcommon.SelectAvailableInstanceSetFromCriteria(criteria, inputInstances)
69+
if err != nil {
70+
return nil, err
7971
}
8072
hashValue, err := lbcommon.CalcHashValue(criteria, g.hashFunc)
8173
if err != nil {
@@ -86,7 +78,9 @@ func (g *LoadBalancer) ChooseInstance(criteria *loadbalancer.Criteria,
8678
// 按照权重区间来寻找
8779
targetIndex := search.BinarySearch(weightedSlice, uint64(targetValue))
8880
instanceIndex := targetInstances.GetInstances()[targetIndex]
89-
instance = svcInstances.GetInstances()[instanceIndex.Index]
81+
82+
instance := inputInstances.GetServiceClusters().GetServiceInstances().GetInstances()[instanceIndex.Index]
83+
9084
return instance, nil
9185
}
9286

plugin/loadbalancer/maglev/maglev.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,11 @@ func (m *MaglevLoadBalancer) getOrBuildHashRing(instSet *model.InstanceSet) (mod
7979
// ChooseInstance 获取单个服务实例
8080
func (m *MaglevLoadBalancer) ChooseInstance(criteria *loadbalancer.Criteria,
8181
inputInstances model.ServiceInstances) (model.Instance, error) {
82-
cluster := criteria.Cluster
83-
svcClusters := inputInstances.GetServiceClusters()
84-
clusterValue := cluster.GetClusterValue()
85-
svcInstances := svcClusters.GetServiceInstances()
86-
targetInstances := lbcommon.SelectAvailableInstanceSet(clusterValue, cluster.HasLimitedInstances,
87-
cluster.IncludeHalfOpen)
88-
if targetInstances.TotalWeight() == 0 {
89-
return nil, model.NewSDKError(model.ErrCodeAPIInstanceNotFound, nil,
90-
"instances of %s in cluster %s all weight 0 (instance count %d) in load balance",
91-
svcClusters.GetServiceKey(), *cluster, targetInstances.Count())
82+
targetInstances, err := lbcommon.SelectAvailableInstanceSetFromCriteria(criteria, inputInstances)
83+
if err != nil {
84+
return nil, err
9285
}
86+
svcInstances := inputInstances.GetServiceClusters().GetServiceInstances()
9387
selector, err := m.getOrBuildHashRing(targetInstances)
9488
if err != nil {
9589
return nil, model.NewSDKError(model.ErrCodeInternalError, err, "fail to build maglev table")

plugin/loadbalancer/ringhash/ringhash.go

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,9 @@ func (k *KetamaLoadBalancer) getOrBuildHashRing(instSet *model.InstanceSet) (mod
7878
// ChooseInstance 获取单个服务实例
7979
func (k *KetamaLoadBalancer) ChooseInstance(criteria *loadbalancer.Criteria,
8080
inputInstances model.ServiceInstances) (model.Instance, error) {
81-
cluster := criteria.Cluster
82-
svcClusters := inputInstances.GetServiceClusters()
83-
clusterValue := cluster.GetClusterValue()
84-
svcInstances := svcClusters.GetServiceInstances()
85-
targetInstances := lbcommon.SelectAvailableInstanceSet(clusterValue, cluster.HasLimitedInstances,
86-
cluster.IncludeHalfOpen)
87-
if targetInstances.TotalWeight() == 0 {
88-
return nil, model.NewSDKError(model.ErrCodeAPIInstanceNotFound, nil,
89-
"instances of %s in cluster %s all weight 0 (instance count %d) in load balance",
90-
svcClusters.GetServiceKey(), *cluster, targetInstances.Count())
81+
targetInstances, err := lbcommon.SelectAvailableInstanceSetFromCriteria(criteria, inputInstances)
82+
if err != nil {
83+
return nil, err
9184
}
9285
selector, err := k.getOrBuildHashRing(targetInstances)
9386
if err != nil {
@@ -101,7 +94,7 @@ func (k *KetamaLoadBalancer) ChooseInstance(criteria *loadbalancer.Criteria,
10194
criteria.ReplicateInfo.Nodes = nodes.GetInstances()
10295
}
10396

104-
instance := svcInstances.GetInstances()[index]
97+
instance := inputInstances.GetInstances()[index]
10598
return instance, nil
10699
}
107100

0 commit comments

Comments
 (0)