diff options
author | Christopher Speller <crspeller@gmail.com> | 2018-07-22 20:14:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-22 20:14:05 -0700 |
commit | bac3376278bfd8125879ca86e8eb26df85858d4c (patch) | |
tree | 8dec71c9deadf8c2138998a3cb6e93b3fec1c380 /vendor/google.golang.org/grpc/balancer/balancer.go | |
parent | 3539a9a60b24bd9c0c1360b17c8fe3e6ebf8cf3c (diff) | |
download | chat-bac3376278bfd8125879ca86e8eb26df85858d4c.tar.gz chat-bac3376278bfd8125879ca86e8eb26df85858d4c.tar.bz2 chat-bac3376278bfd8125879ca86e8eb26df85858d4c.zip |
Updating dependencies (#9139)
Diffstat (limited to 'vendor/google.golang.org/grpc/balancer/balancer.go')
-rw-r--r-- | vendor/google.golang.org/grpc/balancer/balancer.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/vendor/google.golang.org/grpc/balancer/balancer.go b/vendor/google.golang.org/grpc/balancer/balancer.go index 63b8d7137..f9d83c2f3 100644 --- a/vendor/google.golang.org/grpc/balancer/balancer.go +++ b/vendor/google.golang.org/grpc/balancer/balancer.go @@ -226,3 +226,45 @@ type Balancer interface { // ClientConn.RemoveSubConn for its existing SubConns. Close() } + +// ConnectivityStateEvaluator takes the connectivity states of multiple SubConns +// and returns one aggregated connectivity state. +// +// It's not thread safe. +type ConnectivityStateEvaluator struct { + numReady uint64 // Number of addrConns in ready state. + numConnecting uint64 // Number of addrConns in connecting state. + numTransientFailure uint64 // Number of addrConns in transientFailure. +} + +// RecordTransition records state change happening in subConn and based on that +// it evaluates what aggregated state should be. +// +// - If at least one SubConn in Ready, the aggregated state is Ready; +// - Else if at least one SubConn in Connecting, the aggregated state is Connecting; +// - Else the aggregated state is TransientFailure. +// +// Idle and Shutdown are not considered. +func (cse *ConnectivityStateEvaluator) RecordTransition(oldState, newState connectivity.State) connectivity.State { + // Update counters. + for idx, state := range []connectivity.State{oldState, newState} { + updateVal := 2*uint64(idx) - 1 // -1 for oldState and +1 for new. + switch state { + case connectivity.Ready: + cse.numReady += updateVal + case connectivity.Connecting: + cse.numConnecting += updateVal + case connectivity.TransientFailure: + cse.numTransientFailure += updateVal + } + } + + // Evaluate. + if cse.numReady > 0 { + return connectivity.Ready + } + if cse.numConnecting > 0 { + return connectivity.Connecting + } + return connectivity.TransientFailure +} |