首页 > 其他 > 详细

Fabric错误场景

时间:2020-06-18 19:54:24      阅读:203      评论:0      收藏:0      [点我收藏+]

常见Fabric错误场景

1. Error: error getting endorser client for channel: endorser client failed to connect to orderer.rabbit.com:8051: failed to create new connection: context deadline exceeded

原因:CORE_PEER_ADDRESS=orderer.rabbit.com:8051 地址不对或peer节点未启动

2. Error: proposal failed (err: bad proposal response 500: access denied for [JoinChain][testc2]: [Failed verifying that proposal‘s creator satisfies local MSP principal during channelless check policy with policy [Admins]: [This identity is not an admin]])

原因:CORE_PEER_MSPCONFIGPATH=crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp msp地址未设置,或设置的地址不是admin

3. Error: failed to create deliver client: orderer client failed to connect to 192.168.127.129:7050: failed to create new connection: context deadline exceeded

原因:orderer节点地址不对,或orderer节点未启动

4. Error: got unexpected status: BAD_REQUEST -- error authorizing update: error validating ReadSet: readset expected key [Group] /Channel/Application at version 0, but got version 1

原因:通道已创建

5. got unexpected status: BAD_REQUEST -- error authorizing update: error validating DeltaSet: policy for [Group] /Channel/Application not satisfied: Failed to reach implicit threshold of 1 sub-policies, required 1 remaining

原因:通常表示频道创建事务的签名者没有其中一个联盟组织的管理员权限
最常见的原因是:
a) 该身份不在组织的管理员列表中。
b) 组织证书未由组织CA链有效签署。
c) 订货人不知道身份的组织。

其他一些不太可能的可能性因为您使用的是对等二进制而不是自定义代码
a) 签名与标识或有符号字节不匹配。
b) 身份是畸形的。

6. Cannot run peer because error when setting up MSP of type bccsp from directory /home/wff/jaderabbit/echain1/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp: could not initialize BCCSP Factories: Failed initializing BCCSP.: Could not initialize BCCSP SW [Failed to initialize software key store: An invalid KeyStore path provided. Path cannot be an empty string.] Could not find default SW BCCSP

原因:老版viper不会报错,这是由于你是用的最新版本的viper。如果你一定要使用最新版本的viper(我也想用),这里也可以提供一个不太正式的修改方案。
新版viper修改方法:github.com/hyperledger/fabric/peer/common/common.go

// SetBCCSPKeystorePath sets the file keystore path for the SW BCCSP provider
// to an absolute path relative to the config file
func SetBCCSPKeystorePath() {
    if path := config.GetPath("peer.BCCSP.SW.FileKeyStore.KeyStore"); path != "" {
        viper.Set("peer.BCCSP.SW.FileKeyStore.KeyStore", path)
    }
}

7. resource temporarily unavailable

原因:打开了相同的leveldb

8. error getting default signer: error obtaining the default signing identity: this MSP does not possess a valid default signing identity

原因:未初始化MSP,可以试试调用这个命令进行初始化

common.InitCmd(nil,[]string{})

9. proposal failed (err: bad proposal response 500: cannot create ledger from genesis block: LedgerID already exists)

原因:重复加入channel

10. error getting endorser and deliver clients: no endorser clients retrieved - this might indicate a bug

获取endorser客户端时,peerAddresses是空数组,须是元素为空串,长度为1的数组

11. Bad configuration detected: Received AliveMessage from a peer with the same PKI-ID as myself: tag:EMPTY alive_msg:<membership:<pki_id:"\206\0367dH\361\312\347\300l\035@1v\356\030\003\233*\355\241\234\262zf\352\264\367w\007\302\226" > timestamp:<inc_num:1554097615134317977 seq_num:539 > >

使用了相同的msp证书

12. error: chaincode fingerprint mismatch: data mismatch

安装链代码时,基本流程的工作方式如下:

  1. 考虑到包括传递在内的所有依赖关系,它被打包到存档文件中
  2. 使用golang环境在docker容器内复制并在那里编译
  3. 如果我没有弄错,下一个peer会建立新的chaincode容器并移动已编译的二进制文件 /usr/bin/local/chaincode
    现在,问题在于$GOPATH您的计算机中很可能存在差异,因此在不同的计算机上安装相同的链代码会带来不同的依赖关系,最终会产生不同的手指结果。
    您需要做的是将您的链代码打包在一个地方并分发包以安装它。
peer chaincode package -n name -v 1.0 -p path_to_your_chaincode

13. Got error while committing(unexpected Previous block hash. Expected PreviousHash =

通道创始块配置文件和orderer里的创始块配置不匹配

14. error: Error constructing Docker VM Name. ‘dev1-trembling--human--rabbit_02-1.0-f21065c44f48dc8183241105b2a4dac241d062f17f6678c851c9d6989df58c71‘ breaks Docker‘s repository naming rules

core.yaml中的peer.id有特殊字符

15. Error: error endorsing chaincode: rpc error: code = Unknown desc = access denied: channel [syschannel] creator org [Org1MSP]

没加入syschannel通道

  1. error Entry not found in index
    查询的数据不存在。最直观的可能就是你所查询的数据是脏数据,源数据已经被清除,再查询时,就会报这个错误

  2. 链码间调用无力吐槽之一,chaincode里面调用另外的chaincode时,错误是放在payload里面的。

     
    技术分享图片
    InvokeChaincode.png

    解决方法:

     

    args, channelID := [][]byte{[]byte(tee.MethodQueryDataByID), []byte(notificationID)}, stub.GetChannelID()
    response := stub.InvokeChaincode(tee.ChaincodeName, args, channelID)
    if response.Status != shim.OK {
        return nil, fmt.Errorf("error invoking chaincode %s[%s] to query notification in channel: %s, error: %v",
            tee.ChaincodeName, tee.MethodQueryDataByID, channelID, string(response.Payload))
    }
  1. 链码间调用无力吐槽之二,不能并发调用同一个channel上的链码(ps:到底怎么想的?),因为在调用其他链码时,本身会维护一个responseMap,key是chaidID+txID,如果存在,则报错channel exists
     
    技术分享图片
    并发调用

解决方法:老老实实一个个调用,上一个结果返回了再调用下一个。在我这里,并发难处理?不存在的。

  1. Error: could not assemble transaction, err proposal response was not successful, error code 500, msg chaincode registration failed: container exited with 2
    链码升级时报错,重启peer时发现启动不了,原来我链码中引用的一个config.go的文件,此文件有一个init函数会加载同目录下的一个yaml配置文件。而fabric 的链码打包安装到docker时,并不会加载非go的文件,因此,实例化时找这个文件找不到就panic报错了。由于fabric启动docker容器失败会自动删除docker容器,因此本应该能打印出来的错误被fabric给干掉了,因此出现题干的错误。谨记:所有的链码,必须是纯go文件写的,无任何非go依赖,如c文件,yml文件等,否则必然报错报错报错,还找不到原因!!!

  2. Description: failed to execute transaction 10eb8d06f4c8f43b3f6bacb19b97230edda4fbf87527a7e47ba3d602674c49ec: [channel syschannel] could not launch chaincode basis:20191125152021-152f4433: chaincode registration failed: container exited with 0
    链码调用时报错,删除所有的docker container和images再调用依然报错,重启peer后回复正常。猜测是ip或是端口问题。留据存疑。

21.Error: got unexpected status: NOT_FOUND -- channel does not exist
实例化链码时报错,查询节点加入的通道peer channel list时,发现已存在。原因??未知。猜测,kafka集群未初始化topic时,就加入了通道,导致实际通道加入失败,但peer又已经记录了通道状态为已加入?

  1. https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection
    实例化链码时失败报错,原因是服务器是不联网的,并且本地的镜像版本过低,导致服务器拉取最新的镜像而联网报错。解决方案更新本地镜像,docker save/docker load。

  2. cannot retrieve package for chaincode…, too many open files
    大并发invoke chaincode时报错。

【分析】

由于是生产代码,想上生产环境需要先申请才能上去,为加快查问题的速度,先从源码分析一下错误产生的原因

 
技术分享图片
image.png
 
技术分享图片
image.png
 
技术分享图片
image.png

根据文件调用栈可以看出,fabric在invoke链码时会去检查链码的实例化策略,这是为了防止有已经部署好的链码是绕过了这个策略实例化的。由于在检查时,会去本地文件系统读取链码信息,当大量并发时,超过系统设置的文件句柄,于是报错,too many open files.

【解决方案】

由于peer在进行链码调用时是因为要检查链码实例化策略才需要打开文件,且根据代码显示,技术分享图片文件未写入,且未占用句柄不关闭,所以这里的解决方案有:

    1. 临时方案。加大系统句柄数,修改/etc/security/limits.conf文件,末尾加上
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
    1. 永久方案。考虑将文件信息加入内存,不必每次都打开,但这里会出现一定的风险,也即文件和内存内容的同步,这里可以加入同步机制来处理。
      这里,为恢复环境为第一要,先采用临时方案,后续考虑永久方案。

    2. error received from Discovery Server: failed constructing descriptor for chaincodes:<name:"basis" >
      链码调用时报这个错,最后通过peer chaincodes list --instantiated -C mychannel测试发现,此台机器未实例化,而集群中的其他机器是实例化过的,重新实例化链码虽然不报错,但仍然无法实例化此台机器。重启此台机器的peer后,经过短暂的同步恢复正常。怀疑可能是并发实例化链码时产生实例化检查冲突导致本节点未启动实例化任务。

Fabric错误场景

原文:https://www.cnblogs.com/show58/p/13159321.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!