// ToTransportRequest fills the given transport request with information from // the given ReqMeta. func ToTransportRequest(reqMeta yarpc.CallReqMeta, req *transport.Request) { if reqMeta == nil { return } req.Procedure = reqMeta.GetProcedure() req.ShardKey = reqMeta.GetShardKey() req.RoutingKey = reqMeta.GetRoutingKey() req.RoutingDelegate = reqMeta.GetRoutingDelegate() req.Headers = transport.Headers(reqMeta.GetHeaders()) }
func (c thriftClient) buildTransportRequest( reqMeta yarpc.CallReqMeta, reqBody envelope.Enveloper, ) (*transport.Request, protocol.Protocol, error) { proto := c.p if !c.Enveloping { proto = disableEnvelopingProtocol{ Protocol: proto, Type: wire.Reply, // we only decode replies with this instance } } treq := transport.Request{ Caller: c.ch.Caller(), Service: c.ch.Service(), Encoding: Encoding, } meta.ToTransportRequest(reqMeta, &treq) // Always override the procedure name to the Thrift procedure name. treq.Procedure = procedureName(c.thriftService, reqBody.MethodName()) value, err := reqBody.ToWire() if err != nil { // ToWire validates the request. If it failed, we should return the error // as-is because it's not an encoding error. return nil, nil, err } reqEnvelopeType := reqBody.EnvelopeType() if reqEnvelopeType != wire.Call && reqEnvelopeType != wire.OneWay { return nil, nil, encoding.RequestBodyEncodeError( &treq, errUnexpectedEnvelopeType(reqEnvelopeType), ) } var buffer bytes.Buffer err = proto.EncodeEnveloped(wire.Envelope{ Name: reqBody.MethodName(), Type: reqEnvelopeType, SeqID: 1, // don't care Value: value, }, &buffer) if err != nil { return nil, nil, encoding.RequestBodyEncodeError(&treq, err) } treq.Body = &buffer return &treq, proto, nil }