Skip to content

Commit

Permalink
Merge pull request #228 from sak0/fix_redundantCode
Browse files Browse the repository at this point in the history
loadbalancer: fix redundant code
  • Loading branch information
ChaoyongLiang authored Jan 21, 2025
2 parents d50069b + c3b50c7 commit b84b62b
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 33 deletions.
17 changes: 17 additions & 0 deletions plugin/loadbalancer/common/half_open.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package common

import (
"github.com/polarismesh/polaris-go/pkg/model"
"github.com/polarismesh/polaris-go/pkg/plugin/loadbalancer"
)

// SelectAvailableInstanceSet select available instance set
Expand All @@ -35,3 +36,19 @@ func SelectAvailableInstanceSet(clsValue *model.ClusterValue, hasLimitedInstance
targetInstances := clsValue.GetInstancesSet(hasLimitedInstances, includeHalfOpen)
return targetInstances
}

// SelectAvailableInstanceSetFromCriteria select available instance from criteria
func SelectAvailableInstanceSetFromCriteria(criteria *loadbalancer.Criteria,
inputInstances model.ServiceInstances) (*model.InstanceSet, error) {
cluster := criteria.Cluster
svcClusters := inputInstances.GetServiceClusters()
clusterValue := cluster.GetClusterValue()
targetInstances := SelectAvailableInstanceSet(clusterValue, cluster.HasLimitedInstances,
cluster.IncludeHalfOpen)
if targetInstances.TotalWeight() == 0 {
return nil, model.NewSDKError(model.ErrCodeAPIInstanceNotFound, nil,
"instances of %s in cluster %s all weight 0 (instance count %d) in load balance",
svcClusters.GetServiceKey(), *cluster, targetInstances.Count())
}
return targetInstances, nil
}
18 changes: 6 additions & 12 deletions plugin/loadbalancer/hash/hash.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,17 +65,9 @@ func (g *LoadBalancer) Destroy() error {
// ChooseInstance 获取单个服务实例
func (g *LoadBalancer) ChooseInstance(criteria *loadbalancer.Criteria,
inputInstances model.ServiceInstances) (model.Instance, error) {
cluster := criteria.Cluster
svcClusters := inputInstances.GetServiceClusters()
clusterValue := cluster.GetClusterValue()
var instance model.Instance
svcInstances := svcClusters.GetServiceInstances()
targetInstances := lbcommon.SelectAvailableInstanceSet(clusterValue, cluster.HasLimitedInstances,
cluster.IncludeHalfOpen)
if targetInstances.TotalWeight() == 0 {
return nil, model.NewSDKError(model.ErrCodeAPIInstanceNotFound, nil,
"instances of %s in cluster %s all weight 0 (instance count %d) in load balance",
svcClusters.GetServiceKey(), *cluster, targetInstances.Count())
targetInstances, err := lbcommon.SelectAvailableInstanceSetFromCriteria(criteria, inputInstances)
if err != nil {
return nil, err
}
hashValue, err := lbcommon.CalcHashValue(criteria, g.hashFunc)
if err != nil {
Expand All @@ -86,7 +78,9 @@ func (g *LoadBalancer) ChooseInstance(criteria *loadbalancer.Criteria,
// 按照权重区间来寻找
targetIndex := search.BinarySearch(weightedSlice, uint64(targetValue))
instanceIndex := targetInstances.GetInstances()[targetIndex]
instance = svcInstances.GetInstances()[instanceIndex.Index]

instance := inputInstances.GetServiceClusters().GetServiceInstances().GetInstances()[instanceIndex.Index]

return instance, nil
}

Expand Down
14 changes: 4 additions & 10 deletions plugin/loadbalancer/maglev/maglev.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,17 +79,11 @@ func (m *MaglevLoadBalancer) getOrBuildHashRing(instSet *model.InstanceSet) (mod
// ChooseInstance 获取单个服务实例
func (m *MaglevLoadBalancer) ChooseInstance(criteria *loadbalancer.Criteria,
inputInstances model.ServiceInstances) (model.Instance, error) {
cluster := criteria.Cluster
svcClusters := inputInstances.GetServiceClusters()
clusterValue := cluster.GetClusterValue()
svcInstances := svcClusters.GetServiceInstances()
targetInstances := lbcommon.SelectAvailableInstanceSet(clusterValue, cluster.HasLimitedInstances,
cluster.IncludeHalfOpen)
if targetInstances.TotalWeight() == 0 {
return nil, model.NewSDKError(model.ErrCodeAPIInstanceNotFound, nil,
"instances of %s in cluster %s all weight 0 (instance count %d) in load balance",
svcClusters.GetServiceKey(), *cluster, targetInstances.Count())
targetInstances, err := lbcommon.SelectAvailableInstanceSetFromCriteria(criteria, inputInstances)
if err != nil {
return nil, err
}
svcInstances := inputInstances.GetServiceClusters().GetServiceInstances()
selector, err := m.getOrBuildHashRing(targetInstances)
if err != nil {
return nil, model.NewSDKError(model.ErrCodeInternalError, err, "fail to build maglev table")
Expand Down
15 changes: 4 additions & 11 deletions plugin/loadbalancer/ringhash/ringhash.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,16 +78,9 @@ func (k *KetamaLoadBalancer) getOrBuildHashRing(instSet *model.InstanceSet) (mod
// ChooseInstance 获取单个服务实例
func (k *KetamaLoadBalancer) ChooseInstance(criteria *loadbalancer.Criteria,
inputInstances model.ServiceInstances) (model.Instance, error) {
cluster := criteria.Cluster
svcClusters := inputInstances.GetServiceClusters()
clusterValue := cluster.GetClusterValue()
svcInstances := svcClusters.GetServiceInstances()
targetInstances := lbcommon.SelectAvailableInstanceSet(clusterValue, cluster.HasLimitedInstances,
cluster.IncludeHalfOpen)
if targetInstances.TotalWeight() == 0 {
return nil, model.NewSDKError(model.ErrCodeAPIInstanceNotFound, nil,
"instances of %s in cluster %s all weight 0 (instance count %d) in load balance",
svcClusters.GetServiceKey(), *cluster, targetInstances.Count())
targetInstances, err := lbcommon.SelectAvailableInstanceSetFromCriteria(criteria, inputInstances)
if err != nil {
return nil, err
}
selector, err := k.getOrBuildHashRing(targetInstances)
if err != nil {
Expand All @@ -101,7 +94,7 @@ func (k *KetamaLoadBalancer) ChooseInstance(criteria *loadbalancer.Criteria,
criteria.ReplicateInfo.Nodes = nodes.GetInstances()
}

instance := svcInstances.GetInstances()[index]
instance := inputInstances.GetInstances()[index]
return instance, nil
}

Expand Down

0 comments on commit b84b62b

Please sign in to comment.