60
// It copies all headers to outgoing context only if they are exist in incoming context
61
// and doesn't exist in outgoing context already.
62
>
func Propagate(ctx context.Context) context.Context {
headers.go
63
>
headersToAppend := make([]string, 0, len(propagateHeaders)*2)
64
>
mdOutgoing, mdOutgoingExist := metadata.FromOutgoingContext(ctx)
65
>
for _, headerName := range propagateHeaders {
66
>
if incomingValue := metadata.ValueFromIncomingContext(ctx, headerName); len(incomingValue) > 0 && len(mdOutgoing.Get(headerName)) == 0 {
67
headersToAppend = append(headersToAppend, headerName, incomingValue[0])
68
}
69
}
71
>
if mdOutgoingExist {
72
ctx = metadata.AppendToOutgoingContext(ctx, headersToAppend...)
74
ctx = metadata.NewOutgoingContext(ctx, metadata.Pairs(headersToAppend...))
75
}
76
}
78
}
79