Revert "grpc: avoid allocations for each message (#1939)" (#1941)

This reverts commit 2a23224d911b0aeccf0614afb937a18ad7d59bca.
This commit is contained in:
Asim Aslam 2020-08-18 14:44:29 +01:00 committed by Vasiliy Tolstov
parent 4cb6fca7e9
commit 7ef834f0a8

40
grpc.go
View File

@ -8,7 +8,6 @@ import (
"net" "net"
"reflect" "reflect"
"strings" "strings"
"sync"
"sync/atomic" "sync/atomic"
"time" "time"
@ -25,11 +24,9 @@ import (
) )
type grpcClient struct { type grpcClient struct {
opts client.Options opts client.Options
codecs map[string]encoding.Codec pool *pool
pool *pool once atomic.Value
once atomic.Value
sync.RWMutex
} }
func init() { func init() {
@ -304,13 +301,18 @@ func (g *grpcClient) maxSendMsgSizeValue() int {
} }
func (g *grpcClient) newGRPCCodec(contentType string) (encoding.Codec, error) { func (g *grpcClient) newGRPCCodec(contentType string) (encoding.Codec, error) {
g.RLock() codecs := make(map[string]encoding.Codec)
defer g.RUnlock() if g.opts.Context != nil {
if v := g.opts.Context.Value(codecsKey{}); v != nil {
if c, ok := g.codecs[contentType]; ok { codecs = v.(map[string]encoding.Codec)
}
}
if c, ok := codecs[contentType]; ok {
return wrapCodec{c}, nil
}
if c, ok := defaultGRPCCodecs[contentType]; ok {
return wrapCodec{c}, nil return wrapCodec{c}, nil
} }
return nil, fmt.Errorf("Unsupported Content-Type: %s", contentType) return nil, fmt.Errorf("Unsupported Content-Type: %s", contentType)
} }
@ -719,22 +721,6 @@ func newClient(opts ...client.Option) client.Client {
c = options.Wrappers[i-1](c) c = options.Wrappers[i-1](c)
} }
rc.codecs = make(map[string]encoding.Codec, len(defaultGRPCCodecs))
for k, v := range defaultGRPCCodecs {
rc.codecs[k] = v
}
var codecs map[string]encoding.Codec
if rc.opts.Context != nil {
if v := rc.opts.Context.Value(codecsKey{}); v != nil {
codecs = v.(map[string]encoding.Codec)
}
}
for k, v := range codecs {
rc.codecs[k] = v
}
return c return c
} }