balancergroup

package
v1.29.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2020 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Overview

Package balancergroup implements a utility struct to bind multiple balancers into one balancer.

Index

Constants

This section is empty.

Variables

View Source
var DefaultSubBalancerCloseTimeout = 15 * time.Minute

DefaultSubBalancerCloseTimeout is defined as a variable instead of const for testing.

TODO: make it a parameter for New().

View Source
var NewRandomWRR = wrr.NewRandom

NewRandomWRR is the WRR constructor used to pick sub-pickers from sub-balancers. It's to be modified in tests.

Functions

This section is empty.

Types

type BalancerGroup

type BalancerGroup struct {
	// contains filtered or unexported fields
}

BalancerGroup takes a list of balancers, and make them into one balancer.

Note that this struct doesn't implement balancer.Balancer, because it's not intended to be used directly as a balancer. It's expected to be used as a sub-balancer manager by a high level balancer.

Updates from ClientConn are forwarded to sub-balancers

  • service config update
  • Not implemented
  • address update
  • subConn state change
  • find the corresponding balancer and forward

Actions from sub-balances are forwarded to parent ClientConn

  • new/remove SubConn
  • picker update and health states change
  • sub-pickers are grouped into a group-picker
  • aggregated connectivity state is the overall state of all pickers.
  • resolveNow

Sub-balancers are only built when the balancer group is started. If the balancer group is closed, the sub-balancers are also closed. And it's guaranteed that no updates will be sent to parent ClientConn from a closed balancer group.

func New

func New(cc balancer.ClientConn, loadStore lrs.Store, logger *grpclog.PrefixLogger) *BalancerGroup

New creates a new BalancerGroup. Note that the BalancerGroup needs to be started to work.

func (*BalancerGroup) Add

func (bg *BalancerGroup) Add(id internal.Locality, weight uint32, builder balancer.Builder)

Add adds a balancer built by builder to the group, with given id and weight.

weight should never be zero.

func (*BalancerGroup) ChangeWeight

func (bg *BalancerGroup) ChangeWeight(id internal.Locality, newWeight uint32)

ChangeWeight changes the weight of the balancer.

newWeight should never be zero.

NOTE: It always results in a picker update now. This probably isn't necessary. But it seems better to do the update because it's a change in the picker (which is balancer's snapshot).

func (*BalancerGroup) Close

func (bg *BalancerGroup) Close()

Close closes the balancer. It stops sub-balancers, and removes the subconns. The BalancerGroup can be restarted later.

func (*BalancerGroup) HandleResolvedAddrs

func (bg *BalancerGroup) HandleResolvedAddrs(id internal.Locality, addrs []resolver.Address)

HandleResolvedAddrs handles addresses from resolver. It finds the balancer and forwards the update.

TODO: change this to UpdateClientConnState to handle addresses and balancer config.

func (*BalancerGroup) HandleSubConnStateChange

func (bg *BalancerGroup) HandleSubConnStateChange(sc balancer.SubConn, state connectivity.State)

HandleSubConnStateChange handles the state for the subconn. It finds the corresponding balancer and forwards the update.

func (*BalancerGroup) Remove

func (bg *BalancerGroup) Remove(id internal.Locality)

Remove removes the balancer with id from the group.

But doesn't close the balancer. The balancer is kept in a cache, and will be closed after timeout. Cleanup work (closing sub-balancer and removing subconns) will be done after timeout.

It also removes the picker generated from this balancer from the picker group. It always results in a picker update.

func (*BalancerGroup) Start

func (bg *BalancerGroup) Start()

Start starts the balancer group, including building all the sub-balancers, and send the existing addresses to them.

A BalancerGroup can be closed and started later. When a BalancerGroup is closed, it can still receive address updates, which will be applied when restarted.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL