运行调用或查询操作将强制链码容器重新启动

问题描述 投票:1回答:1

我不确定社区是否意识到此问题,但是我尝试在[面料样品]:https://github.com/hyperledger/fabric-samples下运行余额转移应用程序。一切似乎运行顺利。但是,在运行查询或调用操作时,包含链码的docker容器崩溃并重新启动。您可以通过运行来检查docker ps -a。状态将显示容器刚刚启动。

我查询了被查询的对等方的日志,看来问题出在这里:

2018-01-17 07:06:33.654 UTC [container] lockContainer -> DEBU 891 waiting for container(dev-peer0.org1.example.com-mycc-v0) lock 2018-01-17 07:06:33.654 UTC [container] lockContainer -> DEBU 892 got container (dev-peer0.org1.example.com-mycc-v0) lock 2018-01-17 07:06:33.655 UTC [dockercontroller] Start -> DEBU 893 Cleanup container dev-peer0.org1.example.com-mycc-v0 ****2018-01-17 07:06:33.693 UTC [chaincode] processStream -> ERRO 894 Error handling chaincode support stream: rpc error: code = Canceled desc = context canceled**** 2018-01-17 07:06:33.693 UTC [chaincode] deregisterHandler -> DEBU 895 Deregister handler: mycc:v0 2018-01-17 07:06:34.343 UTC [dockercontroller] stopInternal -> DEBU 896 Stopped container dev-peer0.org1.example.com-mycc-v0 2018-01-17 07:06:34.343 UTC [dockercontroller] stopInternal -> DEBU 897 Kill container dev-peer0.org1.example.com-mycc-v0 (API error (409): {"message":"Cannot kill container: dev-peer0.org1.example.com-mycc-v0: Container d818357f76068ab0a9efbf70be9b9a19fd7f6cc7bbe11eaba95c0a61d208ceac is not running"} ) 2018-01-17 07:06:34.459 UTC [dockercontroller] stopInternal -> DEBU 898 Removed container dev-peer0.org1.example.com-mycc-v0 2018-01-17 07:06:34.459 UTC [dockercontroller] Start -> DEBU 899 Start container dev-peer0.org1.example.com-mycc-v0 2018-01-17 07:06:34.459 UTC [dockercontroller] createContainer -> DEBU 89a Create container: dev-peer0.org1.example.com-mycc-v0 2018-01-17 07:06:34.724 UTC [dockercontroller] createContainer -> DEBU 89b Created container: dev-peer0.org1.example.com-mycc-v0-f021beca29998638e0bb7caa7af8fda7f1e709518214a3181d259abcb2347093

知道发生了什么吗?

hyperledger-fabric
1个回答
0
投票

存在两种类型的链码

  1. 系统链码(对等二进制文件的一部分)

  2. 应用程序链代码(由智能合约/链代码开发人员开发)

系统链代码是对等二进制文件本身的一部分,而应用程序链代码在Docker容器中实例化。有各种系统链码,例如LSCC,CSCC,QSCC等。LSCC是指生命周期系统链代码,它管理应用程序链代码的生命周期。LSCC包含各种与链码相关的逻辑,例如安装逻辑,实例化逻辑,升级逻辑,调用和查询逻辑。


所以,重点是

如果chaincode容器已经启动并运行然后,执行查询/调用函数并将结果返回给呼叫者。else由于任何原因,如果链码容器被杀死并且无法运行通过gRPC的请求然后,LSCC调用/查询逻辑再次启动chaincode容器,直到准备好处理呼叫者发出的请求。

© www.soinside.com 2019 - 2024. All rights reserved.