超级账本源码解析之MVCC

文章目录前置MVCC

本系列目录:超级账本源码(V1.3)解析目录

当peer收到leader发来的block后,需要进行VSCC、MVCC、commit三步操作。

上一篇博客里我们讲了【VSCC】这个过程,下面分析MVCC的核心代码(HLF v1.3)。

前置

    gossip/state/state.golisten函数中收到payload(其中有block和private data),通过queueNewMessage将其放入payloads中等待后续处理。
    然后在deliverPayloads函数中开始处理payloads中的payload,得到block和pvtData后,做了一些简单的检查,之后调用commitBlock函数。
    commitBblock中,调用了gossip/privdata/coordinator.go中的StoreBlock函数和UpdateLedgerHeight函数(TODO)。
    StoreBlock函数中,先进行了【VSCC】,然后调用core/ledger/kvledger/lv_ledger.go中的CommitWithPvtData函数,该函数第一步就是先做MVCC。

MVCC

    CommitWithPvtData主要做了三件事情:1,MVCC(ValidateAndPrepare);2,存储block(CommitWithPvtData);3,更新world state数据库(l.txtmgmt.Commit)。(可选的4,更新history数据库l.historyDB.Commit

    core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_txmgr.goValidateAndPrepare函数中:

    a. 调用txmgr.pvtdataPurgeMgr.WaitForPrepareToFinish()(TODO)

    b. 调用core/ledger/kvledger/txmgmt/validator/valimpl/default_impl.goValidateAndPrepareBatch函数(核心)

    c. 调用invokeNamespaceListeners (TODO)

    ValidateAndPrepareBatch函数中,

    a. 先调用preprocessProtoBlock函数对待验证的block做了预处理,包括去掉了VSCC过程中被标记为无效的TX,验证了有效TX的write set的有效性;

    b. 然后调用了core/ledger/kvledger/txmgmt/validator/statebasedval/state_based_validator.go中的ValidateAndPrepareBatch函数,该函数对每一个TX调用了validateEndorserTX验证读写集,检查通过的TX将读写集合并到batch一起返回

    c. 接着调用了validateAndPreparePvtBatch验证了private read/write set 的哈希的版本

    d. 最后根据MVCC的验证结果更新了block的metadata(tx是否有效)

    validateEndorserTX函数中,实际调用了validateTx进行验证。validateTx首先检查了read set的版本,然后检查了range query的key的版本,最后检查了private reads的hash的版本。

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

超级账本源码解析之MVCC

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » 超级账本源码解析之MVCC
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏