42 lines
957 B
Go
42 lines
957 B
Go
package leases
|
|
|
|
import (
|
|
"golang.org/x/net/context"
|
|
"google.golang.org/grpc/metadata"
|
|
)
|
|
|
|
const (
|
|
// GRPCHeader defines the header name for specifying a containerd lease.
|
|
GRPCHeader = "containerd-lease"
|
|
)
|
|
|
|
func withGRPCLeaseHeader(ctx context.Context, lid string) context.Context {
|
|
// also store on the grpc headers so it gets picked up by any clients
|
|
// that are using this.
|
|
txheader := metadata.Pairs(GRPCHeader, lid)
|
|
md, ok := metadata.FromOutgoingContext(ctx) // merge with outgoing context.
|
|
if !ok {
|
|
md = txheader
|
|
} else {
|
|
// order ensures the latest is first in this list.
|
|
md = metadata.Join(txheader, md)
|
|
}
|
|
|
|
return metadata.NewOutgoingContext(ctx, md)
|
|
}
|
|
|
|
func fromGRPCHeader(ctx context.Context) (string, bool) {
|
|
// try to extract for use in grpc servers.
|
|
md, ok := metadata.FromIncomingContext(ctx)
|
|
if !ok {
|
|
return "", false
|
|
}
|
|
|
|
values := md[GRPCHeader]
|
|
if len(values) == 0 {
|
|
return "", false
|
|
}
|
|
|
|
return values[0], true
|
|
}
|