每当我尝试执行有效负载为>的事务或查询时~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限制。
答案 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文件。