超級賬本fabric帶持久化數據升級到1.2時所遇的 implicit threshold 問題

first-network 1.2.1

無問題

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

docker tag 1.2.1鏡像latest標籤
order/peer加如下環境變量

GODEBUG=netdns=go

啓動還是報錯
在這裏插入圖片描述

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項目
在這裏插入圖片描述
Error: got unexpected status: FORBIDDEN – Failed to reach implicit threshold of 1 sub-policies, required 1 remaining: permission denied

在這裏插入圖片描述
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屬性不同

在這裏插入圖片描述

更改yaml配置,重新生成證書和tx文件,問題解決

參考過的資料:

帶舊數據升級到1.2

帶舊數據升級時,因爲1.1.1的證書生成沒有使能EnableNodeOUs特性,
切換成1.2鏡像時繼續用1.0.6的證書,報錯如下
在這裏插入圖片描述

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

替換成1.2鏡像時同時切換1.2證書,又報錯如下
在這裏插入圖片描述
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

在這裏插入圖片描述
無用

只註釋掉
signConfigtxAsPeerOrg 1 config_update_in_envelope.pb

在這裏插入圖片描述

嘗試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

在這裏插入圖片描述

後續突然想到導出升級過程中的config.json和modified_config.json,比對正常數據升級,發現舊數據還缺少V1_1的屬性。
在這裏插入圖片描述

可能是搭建時用的是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
在這裏插入圖片描述

後來發現是kafka/zookeeper被本機生成編譯過,latest標籤對應了舊版1.0.6

ccenv版本問題

先前複製了測試環境244服務器的舊數據,在213服務器上解決了升級屬性的問題。然後切回244驗證時,碰到如下問題
在這裏插入圖片描述

智能合約啓動報錯如下:
在這裏插入圖片描述

後對比兩臺服務器鏡像,發現ccenv版本不同。213並沒有1.2的版本,而244的latest標籤頁是打在1.4上。
將兩臺服務器的ccenv latest鏡像對應到1.2後,啓動並升級成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章