upgrade grpc & etcd dependencies (#771)

This commit is contained in:
Kevin Wan
2021-06-21 09:05:20 +08:00
committed by GitHub
parent 74ee163761
commit 3e8cec5c78
11 changed files with 174 additions and 188 deletions

View File

@@ -1,7 +1,6 @@
package p2c
import (
"context"
"fmt"
"math"
"math/rand"
@@ -32,25 +31,24 @@ const (
logInterval = time.Minute
)
var emptyPickResult balancer.PickResult
func init() {
balancer.Register(newBuilder())
}
type p2cPickerBuilder struct{}
func newBuilder() balancer.Builder {
return base.NewBalancerBuilder(Name, new(p2cPickerBuilder))
}
func (b *p2cPickerBuilder) Build(readySCs map[resolver.Address]balancer.SubConn) balancer.Picker {
func (b *p2cPickerBuilder) Build(info base.PickerBuildInfo) balancer.Picker {
readySCs := info.ReadySCs
if len(readySCs) == 0 {
return base.NewErrPicker(balancer.ErrNoSubConnAvailable)
}
var conns []*subConn
for addr, conn := range readySCs {
for conn, connInfo := range readySCs {
conns = append(conns, &subConn{
addr: addr,
addr: connInfo.Address,
conn: conn,
success: initSuccess,
})
@@ -63,6 +61,10 @@ func (b *p2cPickerBuilder) Build(readySCs map[resolver.Address]balancer.SubConn)
}
}
func newBuilder() balancer.Builder {
return base.NewBalancerBuilder(Name, new(p2cPickerBuilder), base.Config{HealthCheck: true})
}
type p2cPicker struct {
conns []*subConn
r *rand.Rand
@@ -70,15 +72,14 @@ type p2cPicker struct {
lock sync.Mutex
}
func (p *p2cPicker) Pick(ctx context.Context, info balancer.PickInfo) (
conn balancer.SubConn, done func(balancer.DoneInfo), err error) {
func (p *p2cPicker) Pick(info balancer.PickInfo) (balancer.PickResult, error) {
p.lock.Lock()
defer p.lock.Unlock()
var chosen *subConn
switch len(p.conns) {
case 0:
return nil, nil, balancer.ErrNoSubConnAvailable
return emptyPickResult, balancer.ErrNoSubConnAvailable
case 1:
chosen = p.choose(p.conns[0], nil)
case 2:
@@ -103,7 +104,11 @@ func (p *p2cPicker) Pick(ctx context.Context, info balancer.PickInfo) (
atomic.AddInt64(&chosen.inflight, 1)
atomic.AddInt64(&chosen.requests, 1)
return chosen.conn, p.buildDoneFunc(chosen), nil
return balancer.PickResult{
SubConn: chosen.conn,
Done: p.buildDoneFunc(chosen),
}, nil
}
func (p *p2cPicker) buildDoneFunc(c *subConn) func(info balancer.DoneInfo) {

View File

@@ -12,6 +12,7 @@ import (
"github.com/tal-tech/go-zero/core/logx"
"github.com/tal-tech/go-zero/core/mathx"
"google.golang.org/grpc/balancer"
"google.golang.org/grpc/balancer/base"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/resolver"
"google.golang.org/grpc/status"
@@ -23,8 +24,8 @@ func init() {
func TestP2cPicker_PickNil(t *testing.T) {
builder := new(p2cPickerBuilder)
picker := builder.Build(nil)
_, _, err := picker.Pick(context.Background(), balancer.PickInfo{
picker := builder.Build(base.PickerBuildInfo{})
_, err := picker.Pick(balancer.PickInfo{
FullMethodName: "/",
Ctx: context.Background(),
})
@@ -61,18 +62,22 @@ func TestP2cPicker_Pick(t *testing.T) {
const total = 10000
builder := new(p2cPickerBuilder)
ready := make(map[resolver.Address]balancer.SubConn)
ready := make(map[balancer.SubConn]base.SubConnInfo)
for i := 0; i < test.candidates; i++ {
ready[resolver.Address{
Addr: strconv.Itoa(i),
}] = new(mockClientConn)
ready[new(mockClientConn)] = base.SubConnInfo{
Address: resolver.Address{
Addr: strconv.Itoa(i),
},
}
}
picker := builder.Build(ready)
picker := builder.Build(base.PickerBuildInfo{
ReadySCs: ready,
})
var wg sync.WaitGroup
wg.Add(total)
for i := 0; i < total; i++ {
_, done, err := picker.Pick(context.Background(), balancer.PickInfo{
result, err := picker.Pick(balancer.PickInfo{
FullMethodName: "/",
Ctx: context.Background(),
})
@@ -82,7 +87,7 @@ func TestP2cPicker_Pick(t *testing.T) {
}
go func() {
runtime.Gosched()
done(balancer.DoneInfo{
result.Done(balancer.DoneInfo{
Err: err,
})
wg.Done()

View File

@@ -18,8 +18,9 @@ type mockedClientConn struct {
state resolver.State
}
func (m *mockedClientConn) UpdateState(state resolver.State) {
func (m *mockedClientConn) UpdateState(state resolver.State) error {
m.state = state
return nil
}
func (m *mockedClientConn) ReportError(err error) {