c++ GRPC非法标头值

uujelgoq  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(143)

我试图找出一个错误,在我的应用程序,但我有点在黑暗中。
当调用一个服务时,我的客户机在收到带有“非法头值”Assert错误的响应时崩溃。
我正在使用开放遥测,并将span-context添加到我的客户端上下文中,如他们的示例所示。

// inject current context to grpc metadata
  auto current_ctx = opentelemetry::context::RuntimeContext::GetCurrent();
  GrpcClientCarrier carrier(context);
  auto prop = opentelemetry::context::propagation::GlobalTextMapPropagator::GetGlobalPropagator();
  prop->Inject(carrier, current_ctx);

字符串
span上下文被添加到我的所有服务中,但只有一个服务失败并出现此错误。
我在那里没有做任何不同的事情。
看起来span-id(00- 8703 a0 beea 6 ff 515 a32967 c40 dfb 41 fb-49 b3 c2fe 1ac 932 a9 -01)在元数据字节数组中。
如果我删除span上下文,它就可以工作。

raise 0x00007ffff67b918b
abort 0x00007ffff6798859
grpc::CoreCodegen::assert_fail(char const*, char const*, int) 0x0000555555769737
grpc::internal::CallOpSet<grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpRecvInitialMetadata, grpc::internal::CallOpRecvMessage<google::protobuf::MessageLite>, grpc::internal::CallOpClientSendClose, grpc::internal::CallOpClientRecvStatus>::ContinueFillOpsAfterInterception() 0x0000555555dd5c3b
grpc::internal::CallOpSet<grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpRecvInitialMetadata, grpc::internal::CallOpRecvMessage<google::protobuf::MessageLite>, grpc::internal::CallOpClientSendClose, grpc::internal::CallOpClientRecvStatus>::FillOps(grpc::internal::Call*) 0x0000555555dd5971
grpc::Channel::PerformOpsOnCall(grpc::internal::CallOpSetInterface*, grpc::internal::Call*) 0x00005555557a2482
grpc::internal::Call::PerformOps(grpc::internal::CallOpSetInterface*) 0x00005555557847e7
grpc::internal::BlockingUnaryCallImpl<google::protobuf::MessageLite, google::protobuf::MessageLite>::BlockingUnaryCallImpl(grpc::ChannelInterface*, grpc::internal::RpcMethod const&, grpc::ClientContext*, google::protobuf::MessageLite const&, google::protobuf::MessageLite*) 0x0000555555dd124b
grpc::internal::BlockingUnaryCall<grpc::station::StationId, grpc::station::DefaultResponse, google::protobuf::MessageLite, google::protobuf::MessageLite> client_unary_call.h:45

E1014 11:47:58.117958972 2120287 call.cc:926]                validate_metadata: {"created":"@1634204878.117940102","description":"Illegal header value","file":"/builds/grpc/src/core/lib/surface/validate_metadata.cc","file_line":51,"offset":55,"raw_bytes":"30 30 2d 38 37 30 33 61 30 62 65 65 61 36 66 66 35 31 35 61 33 32 39 36 37 63 34 30 64 66 62 34 31 66 62 2d 34 39 62 33 63 32 66 65 31 61 63 39 33 32 61 39 2d 30 31 7f '00-8703a0beea6ff515a32967c40dfb41fb-49b3c2fe1ac932a9-01.'\u0000"}
E1014 11:47:58.117989343 2120287 call_op_set.h:980]          assertion failed: false

tag5nh1u

tag5nh1u1#

您的上下文中可能有一些值没有为元数据正确编码,例如换行符(或者结尾处的空Unicode点\u0000?).
我在access_token_call_credentials插件上也遇到了类似的问题,就是我的token嵌入了一个尾随的换行符。

相关问题