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



每次我尝试执行有效载荷为> 〜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:Usersjean5FabricQostodianqostodian-analyzernode_modulesgrpcsrcclient.js:64:15)
at C:Usersjean5FabricQostodianqostodian-analyzernode_modulesgrpcsrcclient.js:583:15
code: 2,
metadata: Metadata { _internal_repr: {} },
details: 'error executing chaincode: failed to execute transaction: timeout expired while executing transaction' }

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

从我所看到的面料中,已经为已经支持多达100MB的面料:

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

我还在hyperledger.org上找到了JIRA任务(Fab-5049(,在那里他们遇到了同一问题。但是,没有关于4MB限制的潜在修复的讨论。

问题1:如果面料用100MB进行了硬编码,那么4MB限制来自哪里?

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

我也想知道是否可以明确设置GRPC限制,例如在Connection.json中或使用COMPOSER CLI安装/启动网络时。

grpc施加默认限制为4MB。设置GRPC的连接时,您可以指定替代限制。要使用Composer 0.19进行此操作,您需要修改定义您连接到的HyperLeDger面料并提供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无法使用新的配置文件更新卡存储中的现有卡。如果您使用的是文件系统卡存储,则可以手动替换Connect.json文件。

最新更新