【fabric源码--peer】创建Peer节点账本对象
2021-07-20 14:07:54 0 举报
基于fabric2.1源码 peer如何创建各类型账本对象 属于索引类图
作者其他创作
大纲/内容
两个数据库高度不同
调用protoutil.GetChainIDFromBlock(genesisBlock)从创世区块中获取链id作为ledgerID
T
遍历指定区块范围中的区块号
F
return l.recommitLostBlocks()将两个数据库恢复到指定高度
l.blockStore.GetBlockchainInfo()获得账本数据存储对象上最新的区块链信息 info
调用l.lastPersistedCommitHash()创建账本最后提交的hash值为l.commitHash
return nil
以db为主要参数,构建交易管理器txmgrdb用于存储当前有效交易的状态数据
db.Open()开启状态数据库
return txmgr.Commit()将验证过的数据更新批处理操作,提交到状态数据库---------------此方法提交模块详解-----------------
l.initTxMgr()初始化交易管理器
交换两者的区块高度信息(即交换后1低2高)
构造恢复对象列表recoverables(包括状态数据库和历史数据库)
在idStore中为该账本设置“处于构造中”的标志位其中 key为处于构造中 value为 LedgerID
return l.recommitLostBlocks(数据库现高度,需要恢复的高度,数据库对象)
根据btlPolicy实例化一个私有数据状态清除管理器pvtstatePurgeMgr为txmgr.pvtdataPurgeMgr
newKVLedger()将provider.的所有信息(包括刚获取的内容)作为参数传入,以创建一个新的及诶单账本对象 l
openInternal(ledgerID)打开或创建指定账本的Peer节点账本对象 lgr
调用p.idStore.ledgerIDExists(ledgerID)检查idStore数据库中是否已经存在该账本id exists
Create(genesisBlock)
构建一个集合信息提供者collInfoProvider主要包含ccInfoProvider
l.recommitLostBlocks(数据库现高度,需要恢复的高度,数据库对象)即参数2为数据库2的高度,使数据库1恢复到与数据库2相同高度,
r.CommitLostBlock(blockAndPvtdata)根据传参,提交账本数据到历史数据库
第一个数据库需要恢复的区块少于第2个
core\\ledger\\kvledger\\kv_ledger_provider.go
recoverable.ShouldRecover(lastAvailableBlockNum)检查两个数据库对象是否已经同步到当前高度并将需要更新的数据库对象添加到recoverers中
len(recoverers) == 0
p.historydbProvider.GetDBHandle(ledgerID)获得历史数据库提供者 historyDB
return levelDB.Commit()执行提交历史数据库方法--------------此方法提交模块详解-----------------
lgr.CommitLegacy()//提交区块与隐私数据 ---提交模块详解--
l.recoverDBs() //恢复不同步的状态数据库和历史数据库
len(recoverers) == 1
lastAvailableBlockNum := info.Height - 1 //获取最新区块号,即区块高低-1
l.syncStateAndHistoryDBWithBlockstore()根据区块存储恢复状态数据库和历史数据库
l.syncStateDBWithPvtdatastore()根据隐私数据存储,恢复状态数据库
创建状态数据库
r.CommitLostBlock(blockAndPvtdata)根据传参,提交账本数据到状态数据库
创建kvLedger对象 l,封装了ledgerID 、账本数据存储对象blockStore、交易管理器(含状态数据库)和历史数据库historyDB
创建区块数据存储对象流程图
获取链码事件监听器并为链码生命周期事件注册状态数据库
p.historydbProvider != nil
p.ledgerStoreProvider.Open(ledgerID)获得或创建区块账本数据存储对象blockStore(只有区块数据存储部分)
exists=true
循环结束
l.initBlockStore(btlPolicy)根据btlPolicy初始化一个区块存储(主要初始化私有数据存储部分)
p.vdbProvider.GetDBHandle(ledgerID)获得或创建状态数据库账本提供者vDB
0 条评论
回复 删除
下一页