add p2c peak ewma load balancer

This commit is contained in:
kevin
2020-08-06 20:55:38 +08:00
parent c7544d0e60
commit 63583d4744
24 changed files with 304 additions and 282 deletions

View File

@@ -5,25 +5,15 @@ import (
"path"
"zero/core/breaker"
"zero/rpcx/internal/codes"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
func acceptable(err error) bool {
switch status.Code(err) {
case codes.DeadlineExceeded, codes.Internal, codes.Unavailable, codes.DataLoss:
return false
default:
return true
}
}
func BreakerInterceptor(ctx context.Context, method string, req, reply interface{},
cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
breakerName := path.Join(cc.Target(), method)
return breaker.DoWithAcceptable(breakerName, func() error {
return invoker(ctx, method, req, reply, cc, opts...)
}, acceptable)
}, codes.Acceptable)
}

View File

@@ -5,6 +5,7 @@ import (
"zero/core/breaker"
"zero/core/stat"
rcodes "zero/rpcx/internal/codes"
"github.com/stretchr/testify/assert"
"google.golang.org/grpc/codes"
@@ -32,7 +33,7 @@ func TestBreakerInterceptorNotFound(t *testing.T) {
for i := 0; i < 1000; i++ {
assert.Equal(t, err, breaker.DoWithAcceptable("call", func() error {
return err
}, acceptable))
}, rcodes.Acceptable))
}
}
@@ -42,7 +43,7 @@ func TestBreakerInterceptorDeadlineExceeded(t *testing.T) {
for i := 0; i < 1000; i++ {
e := breaker.DoWithAcceptable("call", func() error {
return err
}, acceptable)
}, rcodes.Acceptable)
errs[e]++
}
assert.Equal(t, 2, len(errs))