超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题

目录

      • first-network 1.2.1
      • e2e_cli git1.2.1官方版本跑例子时
      • e2e_cli定制版1.2.1升级时
      • 带旧数据升级到1.2
        • 尝试1
        • 尝试2
      • 总结
      • 其他
        • configtxgen等工具版本
        • kafka/zookeeper版本问题
        • ccenv版本问题

first-network 1.2.1

无问题

e2e_cli git1.2.1官方版本跑例子时

docker tag 1.2.1镜像latest标签
order/peer加如下环境变量

GODEBUG=netdns=go

启动还是报错
超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第1张图片

Error: error endorsing query: rpc error: code = Unknown desc = Failed evaluating policy on signed data during check policy on channel [mychannel] with policy [/Channel/Application/Writers]: [Failed to reach implicit threshold of 1 sub-policies, required 1 remaining] - proposal response:

通过搜索引擎找到了解决方案 修改policies:fabric1-2下e2e-cli问题记录

按提示修改 e2e_cli下的configtx.yaml,在Org3处进行添加Org3MSP.member,如下。

Policies:
	Readers:
	Type: Signature
	Rule: "OR('Org3MSP.admin', 'Org3MSP.peer', 'Org3MSP.client', 'Org3MSP.member')"
	Writers:
	Type: Signature
	Rule: "OR('Org3MSP.admin', 'Org3MSP.client', 'Org3MSP.member')"
	Admins:
	Type: Signature
	Rule: "OR('Org3MSP.admin')"

e2e_cli定制版1.2.1升级时

域名改成公司分配域名,通道名改成bgihealth,mycc也相应变了下
先单纯更改域名启动改造后的e2e_cli-1.2.1项目
超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第2张图片
Error: got unexpected status: FORBIDDEN – Failed to reach implicit threshold of 1 sub-policies, required 1 remaining: permission denied

超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第3张图片
Evaluation Failed: Only 0 policies were satisfied, but needed 1 of
Failed to reach implicit threshold of 1 sub-policies, required 1 remaining: permission denied

对比yaml文件,发现EnableNodeOUs属性不同

超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第4张图片

更改yaml配置,重新生成证书和tx文件,问题解决

参考过的资料:

  • stackoverflow
  • 如何更新CHANNEL的ORDERER地址
  • 超级账本HYPERLEDGER:FABRIC部署过程时遇到的问题汇总

带旧数据升级到1.2

带旧数据升级时,因为1.1.1的证书生成没有使能EnableNodeOUs特性,
切换成1.2镜像时继续用1.0.6的证书,报错如下
超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第5张图片

Error: got unexpected status: BAD_REQUEST – cannot enable application capabilities without orderer support first

替换成1.2镜像时同时切换1.2证书,又报错如下
超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第6张图片
Error: got unexpected status: FORBIDDEN – Failed to reach implicit threshold of 1 sub-policies, required 1 remaining: permission denied

尝试1

方法无效

注释掉
signConfigtxAsPeerOrg 1 config_update_in_envelope.pb
# Prepare to sign the update as the PeerOrg2.Admin
setGlobals 0 2

超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第7张图片
无用

只注释掉
signConfigtxAsPeerOrg 1 config_update_in_envelope.pb

超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第8张图片

尝试2

比对1.0.6,1.1.1,1.2.1版本的configtx.yaml和crypto-config.yaml

考虑到crypto-config.yaml的1.1.1比1.0.6多了个EnableNodeOUs
还有1.2.1多了几个policies

超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第9张图片

后续突然想到导出升级过程中的config.json和modified_config.json,比对正常数据升级,发现旧数据还缺少V1_1的属性。
超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第10张图片

可能是搭建时用的是1.0.6版本工具创建的tx文件。
意识到一并升级V1_1属性和1.2看看

终于升级成功了。 测试读写也正常了

总结

我本次问题的主要原因,是因为脚本从1.0.6修改过来,缺少了一些属性,例如polices 、EnableNodeOUs。这些属性影响到了tx文件、证书,最终写在了区块里。而我们要做的是修正yaml文件后再使这些属性生效:清除区块链数据重新搭建也可,保持旧数据更新配置块也可。

其他

configtxgen等工具版本

升级时保持旧版本即可。升级后创建新通道文件时要对应升级后的版本。
configtx.yaml  crypto-config.yaml  configtxgen的版本

kafka/zookeeper版本问题

恢复1.1.1环境,出错如下:zookeeper中执行不了 docker-entrypoint.sh
超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第11张图片

后来发现是kafka/zookeeper被本机生成编译过,latest标签对应了旧版1.0.6

ccenv版本问题

先前复制了测试环境244服务器的旧数据,在213服务器上解决了升级属性的问题。然后切回244验证时,碰到如下问题
超级账本fabric带持久化数据升级到1.2时所遇的 implicit threshold 问题_第12张图片

智能合约启动报错如下:
在这里插入图片描述

后对比两台服务器镜像,发现ccenv版本不同。213并没有1.2的版本,而244的latest标签页是打在1.4上。
将两台服务器的ccenv latest镜像对应到1.2后,启动并升级成功。

你可能感兴趣的:(golang,centos,经验)