【问题标题】:How to fix "context finished before block retrieved: context canceled" occurred while instantiating chaincode?实例化链码时如何解决“在检索块之前完成上下文:上下文已取消”?
【发布时间】:2019-09-08 00:58:55
【问题描述】:

实例化命令成功完成,但在分析对等日志时,您可能会注意到:

2019-04-17 17:25:52.581 UTC [gossip.state] commitBlock -> DEBU 48c [canal-contrato] 已提交区块 [1] 与 1 个交易

2019-04-17 17:25:52.581 UTC [common.deliver] DeliverBlocks -> DEBU 48d [channel: canal-contrato] 为 192.168.16.1:48230 交付块 (0xc00023f9c0)

2019-04-17 17:25:52.581 UTC [fsblkstorage] waitForBlock -> DEBU 48e 将等待更新的块。 maxAvailaBlockNumber=[1], waitForBlockNum=[2]

2019-04-17 17:25:52.586 UTC [common.deliver] DeliverBlocks -> DEBU 48f 上下文取消,中止等待下一个块

2019-04-17 17:25:52.586 UTC [common.deliverevents] func1 -> DEBU 490 关闭交付流

2019-04-17 17:25:52.586 UTC [comm.grpc.server] 1 -> INFO 491 流式调用已完成 {"grpc.start_time": "2019-04-17T17:25:50.441Z ","grpc.service":"protos.Deliver","grpc.method":"DeliverFiltered","grpc.peer_address":"192.168.16.1:48230","error":"上下文在块检索前完成:上下文取消”,“grpc.code”:“未知”,“grpc.call_duration”:“2.144399922s”}

谁能告诉我我可能做错了什么以及这个错误的后果是什么?

注意事项:

  • orderer 日志不显示任何类型的错误
  • 所有容器运行正常
  • 我使用的是节点版本 8.9.0(使用 npm 5.5.1)
  • 我有 1 个组织,有 1 个同行、1 个 CA 和 1 个已订购(仅用于测试)
  • 我使用的是 hyperlegder fabric 1.4 版

【问题讨论】:

  • 我认为您需要检查上下文超时。查找使用context.WithTimeout() 的代码片段。
  • 如果你正在开发这段代码,你需要搜索客户端向服务器执行GRPC请求的地方。每个 GRPC 请求都有一个上下文,因此您需要检查谁在为这些上下文设置超时。并且可能会增加这些超时时间。
  • 抱歉这个菜鸟问题,但我想在哪里进行这种可能的修改?我遵循平衡转移示例(fabric-samples)之类的结构,但在 node.js 中部署了链代码。
  • 恐怕我无法回答这个问题,因为我不是超级账本用户。如果您作为系统工程师或 devops 而不是开发人员使用此软件,请尝试分析配置文件。也许有超时设置。看起来请求在 2 秒后超时(从您的日志中可以看出)。

标签: hyperledger-fabric instantiation grpc grpc-go chaincode


【解决方案1】:

这不是错误。您正在使用连接到对等方并等待实例化完成的 SDK。对等方接收到块,当它收到时 - SDK 关闭 gRPC 流,因为它不再需要它,并且对等方记录此内容以通知您为什么它从服务器端关闭流。

【讨论】:

    猜你喜欢
    • 2019-09-14
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2020-05-30
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多