allocations improvements and tunnel fixes (#1248)

* reduce allocations in tunnel code

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>

* another allocation fix

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>

* allocate maps with len if it known

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>

* allocate key for send once

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
Василий Толстов 2020-02-24 17:15:20 +03:00
parent f91ec84d59
commit 144014db34
3 changed files with 13 additions and 4 deletions

View File

@ -155,7 +155,7 @@ func (g *grpcCodec) ReadHeader(m *codec.Message, mt codec.MessageType) error {
m = new(codec.Message) m = new(codec.Message)
} }
if m.Header == nil { if m.Header == nil {
m.Header = make(map[string]string) m.Header = make(map[string]string, len(md))
} }
for k, v := range md { for k, v := range md {
m.Header[k] = strings.Join(v, ",") m.Header[k] = strings.Join(v, ",")

13
grpc.go
View File

@ -110,13 +110,18 @@ func (g *grpcClient) next(request client.Request, opts client.CallOptions) (sele
} }
func (g *grpcClient) call(ctx context.Context, node *registry.Node, req client.Request, rsp interface{}, opts client.CallOptions) error { func (g *grpcClient) call(ctx context.Context, node *registry.Node, req client.Request, rsp interface{}, opts client.CallOptions) error {
var header map[string]string
address := node.Address address := node.Address
header := make(map[string]string) header = make(map[string]string)
if md, ok := metadata.FromContext(ctx); ok { if md, ok := metadata.FromContext(ctx); ok {
header = make(map[string]string, len(md))
for k, v := range md { for k, v := range md {
header[k] = v header[k] = v
} }
} else {
header = make(map[string]string)
} }
// set timeout in nanoseconds // set timeout in nanoseconds
@ -182,13 +187,17 @@ func (g *grpcClient) call(ctx context.Context, node *registry.Node, req client.R
} }
func (g *grpcClient) stream(ctx context.Context, node *registry.Node, req client.Request, opts client.CallOptions) (client.Stream, error) { func (g *grpcClient) stream(ctx context.Context, node *registry.Node, req client.Request, opts client.CallOptions) (client.Stream, error) {
var header map[string]string
address := node.Address address := node.Address
header := make(map[string]string)
if md, ok := metadata.FromContext(ctx); ok { if md, ok := metadata.FromContext(ctx); ok {
header = make(map[string]string, len(md))
for k, v := range md { for k, v := range md {
header[k] = v header[k] = v
} }
} else {
header = make(map[string]string)
} }
// set timeout in nanoseconds // set timeout in nanoseconds

View File

@ -27,7 +27,7 @@ func (r *response) Header() map[string]string {
if err != nil { if err != nil {
return map[string]string{} return map[string]string{}
} }
hdr := make(map[string]string) hdr := make(map[string]string, len(md))
for k, v := range md { for k, v := range md {
hdr[k] = strings.Join(v, ",") hdr[k] = strings.Join(v, ",")
} }