Hyperledger Composer - 错误 8:RESOURCE_EXHAUSTED
Hyperledger Composer - Error 8: RESOURCE_EXHAUSTED
我在尝试更新与同一资产相关的两个资产时遇到错误。从 HL Composer v0.18.1 升级到 v0.19.4 后出现错误。
这里是模型:
asset Order identified by pullID {
o String pullID
--> PackCase caseNumber optional
}
asset PackCase identified by caseNumber{
o String caseNumber
--> Order[] orders optional
}
我想将 Order1 和 Order2 关联到 Packcase1。为此,我在交易处理器中使用此方法,它将订单插入 packcase.orders 数组并同时更新 order.casenumber 的引用:
function AssociatePackCaseToOrder(tx){
tx.order.caseNumber = tx.packCase;
tx.packCase.orders.push(tx.order);
return getAssetRegistry(namespaceAsset+'.Order')
.then(function(ordersRegistry){
return ordersRegistry.update(tx.order)
.then(function(){
console.info("Order Updated");
return getAssetRegistry(namespaceAsset+'.PackCase')
.then(function(packCaseRegistry){
return packCaseRegistry.update(tx.packCase)
.then(function(){
console.info("PackCase Updated");
})
})
})
})
}
但是当我尝试连续两次调用此方法时,出现此错误:
Error trying invoke business network. Error: No valid responses from any peers.\nResponse from attempted peer comms was an error:
Error: 8 RESOURCE_EXHAUSTED: received trailing metadata size exceeds limit",
"stack":"Error: Error trying invoke business network. Error: No valid responses from any peers.
Response from attempted peer comms was an error: Error: 8 RESOURCE_EXHAUSTED: received trailing metadata size exceeds limit
at _initializeChannel.then.then.then.then.catch (/usr/lib/node_modules/composer-rest-server/node_modules/composer-connector-hlfv1/lib/hlfconnection.js:967:34)
at <anonymous>
有谁知道错误的原因是什么?
我认为您的代码存在问题,并且 RESOURCE_EXHAUSTED(这可能来自 grpc 消息大小限制)- 可能是您将对象分配给字符串的第一行。
目前(虽然您还没有发布事务模型)您正在尝试将订单(或集合)与 PackCase 相关联 - 您的代码一次显示它的一个事务(您更新每个资源的注册表).下面显示的代码将 casenumber 引用添加到订单并将订单 ID(FQ 标识符)推送到 PackCase 上的数组中。
所以有了这样的模型:
asset Order identified by pullID {
o String pullID
o String caseNumber optional
--> PackCase packcase optional // this would make more sense naming-wise
}
asset PackCase identified by caseNumber {
o String caseNumber
--> Order[] orders optional
// o Order[] orders optional // alternative, see below.
}
transaction acpto {
--> Order order
--> PackCase packCase
}
您的交易码是这样的:
/**
* Associate the Packcase to order
* @param {org.acme.mynetwork.acpto} tx - the tx to be processed
* @transaction
**/
function AssociatePackCaseToOrder(tx){
var namespaceAsset = 'org.acme.mynetwork';
tx.order.caseNumber = tx.packCase.getIdentifier(); // eg. '1'
console.log(" case ref is " + tx.packCase.getIdentifier() );
console.log(" order ref is " + tx.order.getIdentifier() );
// tx.order.pullID = tx.order.getIdentifier(); // because its a relationship, will still have the FQ identifer hence commented out FYI
if(tx.packCase.orders == null) {
tx.packCase.orders = []; // initialise
}
tx.packCase.orders.push(tx.order);
return getAssetRegistry(namespaceAsset+'.Order')
.then(function(ordersRegistry){
return ordersRegistry.update(tx.order)
.then(function(){
console.info("Order Updated");
return getAssetRegistry(namespaceAsset+'.PackCase')
.then(function(packCaseRegistry){
return packCaseRegistry.update(tx.packCase)
.then(function(){
console.info("PackCase Updated");
})
})
})
})
}
你的方法:--> Order[] orders optional
{
"$class": "org.acme.mynetwork.PackCase",
"caseNumber": "5",
"orders": [
"resource:org.acme.mynetwork.Order#1",
"resource:org.acme.mynetwork.Order#2",
"resource:org.acme.mynetwork.Order#3"
]
}
备选方案Order[] orders optional
:
为订单 1、订单 2 和订单 3 提交 3 笔交易后,您将在 PackCase 资产中获得:
{
"$class": "org.acme.mynetwork.PackCase",
"caseNumber": "3",
"orders": [
{
"$class": "org.acme.mynetwork.Order",
"pullID": "1",
"caseNumber": "3"
},
{
"$class": "org.acme.mynetwork.Order",
"pullID": "2",
"caseNumber": "3"
}
{
"$class": "org.acme.mynetwork.Order",
"pullID": "3",
"caseNumber": "3"
}
]
}
可以这么说,订单案例编号已使用 PackCase
中的案例参考编号更新。
我在尝试更新与同一资产相关的两个资产时遇到错误。从 HL Composer v0.18.1 升级到 v0.19.4 后出现错误。
这里是模型:
asset Order identified by pullID {
o String pullID
--> PackCase caseNumber optional
}
asset PackCase identified by caseNumber{
o String caseNumber
--> Order[] orders optional
}
我想将 Order1 和 Order2 关联到 Packcase1。为此,我在交易处理器中使用此方法,它将订单插入 packcase.orders 数组并同时更新 order.casenumber 的引用:
function AssociatePackCaseToOrder(tx){
tx.order.caseNumber = tx.packCase;
tx.packCase.orders.push(tx.order);
return getAssetRegistry(namespaceAsset+'.Order')
.then(function(ordersRegistry){
return ordersRegistry.update(tx.order)
.then(function(){
console.info("Order Updated");
return getAssetRegistry(namespaceAsset+'.PackCase')
.then(function(packCaseRegistry){
return packCaseRegistry.update(tx.packCase)
.then(function(){
console.info("PackCase Updated");
})
})
})
})
}
但是当我尝试连续两次调用此方法时,出现此错误:
Error trying invoke business network. Error: No valid responses from any peers.\nResponse from attempted peer comms was an error:
Error: 8 RESOURCE_EXHAUSTED: received trailing metadata size exceeds limit",
"stack":"Error: Error trying invoke business network. Error: No valid responses from any peers.
Response from attempted peer comms was an error: Error: 8 RESOURCE_EXHAUSTED: received trailing metadata size exceeds limit
at _initializeChannel.then.then.then.then.catch (/usr/lib/node_modules/composer-rest-server/node_modules/composer-connector-hlfv1/lib/hlfconnection.js:967:34)
at <anonymous>
有谁知道错误的原因是什么?
我认为您的代码存在问题,并且 RESOURCE_EXHAUSTED(这可能来自 grpc 消息大小限制)- 可能是您将对象分配给字符串的第一行。
目前(虽然您还没有发布事务模型)您正在尝试将订单(或集合)与 PackCase 相关联 - 您的代码一次显示它的一个事务(您更新每个资源的注册表).下面显示的代码将 casenumber 引用添加到订单并将订单 ID(FQ 标识符)推送到 PackCase 上的数组中。
所以有了这样的模型:
asset Order identified by pullID {
o String pullID
o String caseNumber optional
--> PackCase packcase optional // this would make more sense naming-wise
}
asset PackCase identified by caseNumber {
o String caseNumber
--> Order[] orders optional
// o Order[] orders optional // alternative, see below.
}
transaction acpto {
--> Order order
--> PackCase packCase
}
您的交易码是这样的:
/**
* Associate the Packcase to order
* @param {org.acme.mynetwork.acpto} tx - the tx to be processed
* @transaction
**/
function AssociatePackCaseToOrder(tx){
var namespaceAsset = 'org.acme.mynetwork';
tx.order.caseNumber = tx.packCase.getIdentifier(); // eg. '1'
console.log(" case ref is " + tx.packCase.getIdentifier() );
console.log(" order ref is " + tx.order.getIdentifier() );
// tx.order.pullID = tx.order.getIdentifier(); // because its a relationship, will still have the FQ identifer hence commented out FYI
if(tx.packCase.orders == null) {
tx.packCase.orders = []; // initialise
}
tx.packCase.orders.push(tx.order);
return getAssetRegistry(namespaceAsset+'.Order')
.then(function(ordersRegistry){
return ordersRegistry.update(tx.order)
.then(function(){
console.info("Order Updated");
return getAssetRegistry(namespaceAsset+'.PackCase')
.then(function(packCaseRegistry){
return packCaseRegistry.update(tx.packCase)
.then(function(){
console.info("PackCase Updated");
})
})
})
})
}
你的方法:--> Order[] orders optional
{
"$class": "org.acme.mynetwork.PackCase",
"caseNumber": "5",
"orders": [
"resource:org.acme.mynetwork.Order#1",
"resource:org.acme.mynetwork.Order#2",
"resource:org.acme.mynetwork.Order#3"
]
}
备选方案Order[] orders optional
:
为订单 1、订单 2 和订单 3 提交 3 笔交易后,您将在 PackCase 资产中获得:
{
"$class": "org.acme.mynetwork.PackCase",
"caseNumber": "3",
"orders": [
{
"$class": "org.acme.mynetwork.Order",
"pullID": "1",
"caseNumber": "3"
},
{
"$class": "org.acme.mynetwork.Order",
"pullID": "2",
"caseNumber": "3"
}
{
"$class": "org.acme.mynetwork.Order",
"pullID": "3",
"caseNumber": "3"
}
]
}
可以这么说,订单案例编号已使用 PackCase
中的案例参考编号更新。