Hyperledger Fabric V1.1 / Composer V0.19 - 达到gRPC消息最大限制(4MB)

时间:2018-04-02 21:55:55

标签: hyperledger-fabric hyperledger grpc hyperledger-composer

每当我尝试执行有效负载为>的事务或查询时~2MB我收到以下错误:

执行查询后,立即从运行业务网络应用程序的docker容器中执行:

[ERROR] lib/handler.js - Chat stream with peer - on error: 
"Error: 8 RESOURCE_EXHAUSTED: Received message larger than max (19090846 vs. 4194304)\n
at createStatusError (/usr/local/src/node_modules/grpc/src/client.js:64:15)\n
at ClientDuplexStream._emitStatusIfDone (/usr/local/src/node_modules/grpc/src/client.js:270:19)\n
at ClientDuplexStream._receiveStatus (/usr/local/src/node_modules/grpc/src/client.js:248:8)\n
at /usr/local/src/node_modules/grpc/src/client.js:804:12"

然后从应用程序端,到达超时时间:

{ Error: 2 UNKNOWN: error executing chaincode: failed to execute transaction: timeout expired while executing transaction
at new createStatusError (C:\Users\jean5\Fabric\Qostodian\qostodian-analyzer\node_modules\grpc\src\client.js:64:15)
at C:\Users\jean5\Fabric\Qostodian\qostodian-analyzer\node_modules\grpc\src\client.js:583:15
code: 2,
metadata: Metadata { _internal_repr: {} },
details: 'error executing chaincode: failed to execute transaction: timeout expired while executing transaction' }

当我尝试从查询中检索~18.2MB的数据时,这些错误表明GRPC默认限制为4MB(19090846 vs. 4194304)。

从我看到的Fabric是hardcoded to support up to 100MB already

MaxRecvMsgSize = 100 * 1024 * 1024
MaxSendMsgSize = 100 * 1024 * 1024

我还在hyperledger.org上找到了一个JIRA任务(FAB-5049),他们面临同样的问题。但是,没有讨论4MB限制的潜在修复方法。

问题1:如果结构硬编码为100MB,那么4MB限制来自哪里?

问题2:如何确保GRPC限制确实为100MB?

我还想知道是否可以在connection.json中或使用composer CLI安装/启动网络时明确设置GRPC限制。

1 个答案:

答案 0 :(得分:3)

GRPC的默认限制为4Mb。设置grpc上的连接时,您可以指定备用限制。要使用Composer 0.19执行此操作,您需要修改连接配置文件,该连接配置文件定义了您连接到的超级分层结构,并提供gprcOptions,其中包含grpc节点实现识别的选项。这里给出了在对等体上设置这些选项的示例。

"peer0.org1.example.com": {
    "url": "grpcs://peer0.org1.example.com:7051",
    "eventUrl": "grpcs://peer0.org1.example.com:7053"
    "grpcOptions": {
        "ssl-target-name-override": "peer.org1.example.com",
        "grpc.keepalive_time_ms": 600000,
        "grpc.max_send_message_length": 15728640,
        "grpc.max_receive_message_length": 15728640
    },
    "tlsCACerts": {
        "pem": "-----BEGIN CERTIFICATE----- <etc> "
    }
}

您也可以以类似的方式设置订货人的grpcOptions。请注意,消息长度是字节数,值-1表示无限制。

不幸的是,目前没有办法通过cli用新的配置文件更新卡片商店中的现有卡片。如果您使用的是文件系统卡存储,则可以手动为您的卡替换connection.json文件。