
# 区块链实例交易连接失败或连接超时
#### 问题现象
区块链实例交易连接失败或连接超时。
#### 排查思路
[•排查项一：]链码首次实例化后发起交易超时。
[•排查项二：]实例状态异常。
[•排查项三：]客户端所使用的fabric-SDK与区块链实例版本不匹配。
[•排查项四：]peer节点账本不同步。
[•排查项五：]DB文件不存在。
[•排查项六：]旧版本的CouchDB服务容器重启后，区块链实例不可用。
[•排查项七：]区块链应用客户端发起上链请求，返回请求超时，但数据可以上链
#### 解决方案
- 排查项一：链码首次实例化后发起交易超时。
  BCS实例3.0.x版本（对应Fabric v1.4.0内核）在实例化链码时，仅会拉起各组织其中一个Peer对应的链代码容器，而其余Peer的链代码构建和拉起将在该Peer首次进行交易背书时触发。该过程耗时较长，可能出现交易超时的情况：
  图1交易超时   
  ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0000001122022527.png "点击放大")
  如使用Go SDK进行区块链操作，则无需处理该问题，SDK会等待链码容器拉起，不会出现超时情况。
  如使用Java SDK进行交易，为避免该问题，可在应用中使用req.setProposalWaitTime()设置背书超时时间。如下图所示，将背书超时时间设定为60秒，可避免一般链码在这种该情况下的首次交易失败问题。
  图2交易失败   
  ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0000001122022693.png "点击放大") 
- 排查项二：BCS实例状态异常。
  登录BCS控制台，查看BCS实例状态，并根据状态提示进行排查解决。具体参考[区块链实例状态为"异常"时，如何排查解决？](https://support.huaweicloud.com/bcs_faq/bcs_faq_0401.html)。
  

- 排查项三：客户端所使用的fabric-SDK与区块链实例版本不匹配。
  进入BCS控制台，单击"实例管理"，单击交易异常的实例名称，查看版本信息。
  ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0000001224775031.png "点击放大")
  根据"版本信息"显示的Hyperledger Fabric版本，排查客户端所使用的fabric-sdk是否与其一致。如果版本不一致，会导致交易失败、交易超时等情况发生。
  解决方案
  根据实际的Hyperledger Fabric版本，下载对应的fabric-sdk包开发客户端。
  Fabric源码包下载地址：<https://github.com/hyperledger/fabric>。
  

- 排查项四：peer节点账本不同步。
  1. 进入BCS控制台，单击"实例管理"，选择交易异常的实例，进入区块链管理页面，并单击"区块浏览器"，选择交易异常的通道，查看"区块列表"中显示的当前通道区块数。
     图3区块列表   
     ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0254956133.png "点击放大") 
  
  2. 登录部署BCS区块链的云服务器，并执行docker ps\|grep k8s_peer指令查看peer容器，记录交易超时的peer节点容器ID。
     图4查看peer容器   
     ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0254956134.png "点击放大") 
  
  3. 执行docker exec -it {容器ID} bash进入容器。
     图5进入容器   
     ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0254956135.png "点击放大") 
  
  4. 执行peer channel list查看peer节点加入的通道。
     图6查看peer节点加入的通道   
     ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0254956136.png "点击放大") 
  
  5. 执行peer channel getinfo -c {通道名}查看peer节点账本落块情况。
     图7查看peer节点账本落块情况   
     ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0254956137.png "点击放大")
     如果peer节点账本落块数与区块链浏览器中查询结果存在差异，且10min后再次查询，该peer节点账本区块数一直未增长，则可能因为资源不足、并发过高导致peer节点落块不同步，造成交易状况异常。
     
  
  6. 若还是无法解决，请提工单咨询。在控制台页面右上角，选择"工单 \> 新建工单"，进入新建工单页面，按照页面提示选择问题类型创建工单。
   

- 排查项五： DB文件不存在。
  1. 登录部署BCS区块链的云服务器，并执行docker ps\|grep k8s_peer指令查看peer容器，记录交易状况异常的peer节点容器ID。
     图8查看peer容器   
     ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0254956138.png "点击放大") 
  
  2. 执行docker exec -it {容器ID} bash进入容器。
     图9bash进入容器   
     ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0254956139.png "点击放大") 
  
  3. 执行cd /var/log/baas-service/peer/进入peer节点日志存储路径，执行ll查看所有文件。
     图10查看所有文件   
     ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0254956140.png "点击放大") 
  
  4. 获取Peer节点的哈希值及序号： 登录区块链管理页面，单击"区块浏览器"，在"Peer节点状态列表"的"Peer节点域名"列查看。
     图11Peer节点状态列表   
     ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0255864327.png "点击放大") 
  
  5. Peer节点日志命名规则为peer-{哈希值}-{序号}.trace，执行 cat {文件名}\|grep -C 5 "Fail to recover DB: file does not exist"搜索异常信息**。**
     图12搜索异常信息   
     ![](https://support.huaweicloud.com/bcs_faq/zh-cn_image_0254956141.png "点击放大")
     
     如存在"Fail to recover DB: file does not exist"相关信息，表明peer节点DB文件不存在，会导致交易状况异常。
     
  
  6. 若还是无法解决，请提工单咨询。在控制台页面右上角，选择"工单 \> 新建工单"，进入新建工单页面，按照页面提示选择问题类型创建工单。
   

- 排查项六：旧版本的CouchDB服务容器重启后，区块链实例不可用。
  旧版本的CouchDB服务容器重启后，由于状态数据没有存入网盘中，所以重启后状态数据丢失，CouchDB重新加载区块数据生成状态数据，导致区块链实例在一段时间内不可用。
  十五万的区块数同步数据耗时2小时左右，同步数据期间peer的7051端口不可访问。
  解决方案：
  1. 将区块链实例升级至最新版本，后续再有版本升级或重启操作，将不会发生此类问题。
     ![](https://support.huaweicloud.com/bcs_faq/public_sys-resources/note_3.0-zh-cn.png)
     区块链实例首次升级至最新版本时，由于CouchDB容器挂载网盘并同步状态数据，会导致区块链实例一段时间无法交易，具体时间随账本区块数线性增加，每十五万的区块数同步数据耗时2小时左右，账本区块数可在"区块链管理"\>"区块浏览器"页面查看。
     
  
  2. 登录区块链服务BCS控制台，在实例卡片中，单击"更多 \> 更新版本"。
  
  3. 在弹出的窗口，可以查看当前实例版本，或者选择最新版本升级区块链实例。
     ![](https://support.huaweicloud.com/bcs_faq/public_sys-resources/note_3.0-zh-cn.png)
     - 更新版本期间会导致实例不可用，如果是联盟链还会影响到其他联盟参与方，请和联盟其他参与方达成共识后再操作，联盟所有成员都需要升级。
     
     - 请不要在链码安装或实例化时进行升级操作。
     
     - 支持社区Hyperledger Fabric 1.4到社区Hyperledger Fabric 2.2的跨大版本升级。如果是联盟链，请确保所有联盟成员组件升级到同一版本，否则无法正常交易。
     
     - BCS版本4.x.x对应社区Hyperledger Fabric 2.2版本。
     
     - 更新版本只支持低版本到高版本的更新，更新成功后不支持版本回滚，更新失败时才允许执行版本回滚操作。
       
   
- 排查项七：区块链应用客户端发起上链请求，返回请求超时，但数据可以上链。
  若检查发现客户端报错"request timed out or been cancelled"，组织节点日志报错"UTC is more than 15mos apart from current server time"，请确保客户端机器与组织节点机器的时间和时区保持一致。
  
 
