本系列目錄:超級賬本原始碼(v1.3)解析目錄當peer收到leader發來的block後,需要進行vscc、mvcc、commit三步操作。
這個過程,下面分析mvcc的核心**(hlf v1.3)。
在gossip/state/state.go
的listen
函式中收到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。
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.go
的validateandprepare
函式中:
a. 呼叫txmgr.pvtdatapurgemgr.waitforpreparetofinish()
(todo)
b. 呼叫core/ledger/kvledger/txmgmt/validator/valimpl/default_impl.go
的validateandpreparebatch
函式(核心),
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一起返回,最後更新了txmgr.current = ¤t
用於【commit】階段更新world state db.
c. 接著呼叫了validateandpreparepvtbatch
驗證了private read/write set 的雜湊的版本
d. 最後根據mvcc的驗證結果更新了block的metadata(tx是否有效)
在validateendorsertx
函式中,實際呼叫了validatetx
進行驗證。validatetx
首先檢查了read set的版本,然後檢查了range query的key的版本,最後檢查了private reads的hash的版本。
KCP C 版本 原始碼解析
kcp send 對使用者的資料根據mss值進行分片,然後將分片後的資料放入snd queue。kcp flush,每次被呼叫的時候遍歷出隊snd queue 條件為snd nxt snd una cwnd 對每個seg的sn與una編號,cmd ikcp cmd push,進行初始化後,放入snd...
Spring原始碼解析之 Aop原始碼解析(2)
spring aop 更多的是oop開發模式的乙個補充,幫助oop以更好的方式來解決對於需要解決業務功能模組之上統一管理 的功能 以一副圖來做為aop功能的說明更直觀些。對於類似系統的安全檢查,系統日誌,事務管理等相關功能,物件導向的開發方法並沒有更好的解決方法 aop引入了一些概念。更多的是spr...
原始碼解析 JDK原始碼之LinkedHashMap
linkedhashmap原始碼,基於 jdk1.6.43 他繼承了hashmap,並且實現了插入和訪問的有序功能 public class linkedhashmapextends hashmapimplements map 其也有乙個entry內部類,繼承了 hashmap 的entry 內部類...