manifest檔案是儲存每次壓縮記錄的。current檔案裡面只有一條記錄,就是現在有些小的manifest檔案。
只有資料庫重新open的時候才會用到manifest檔案來進行恢復。
manifest檔案的格式是record,讀取的時候會先讀取資料型別,類似klognumber,讀取到型別之後再讀取內容。
見啟動流程
筆者採用gdb跟蹤的方式(縷出leveldb啟動的流程(後續**詳解還沒完全寫完):
3-1 建立db資料夾,初始化dbimpl全域性變數
在gdb除錯列印這個option可以看到leveldb的預設設定,包括預設的比較函式,預設塊大小等:
db::open->dbimpl::dbimpl 在首次初始化db引數option_的時候建立的db資料夾
具體建立就在sanitizeoptions中;另外,在初始化dbimpl時還初始化了versions_全域性變數,在第一次recover中將使用versions_變數進行恢復操作,見
3-2建立第乙個manifest檔案和current檔案
db::open->impl->recover 首次建立進入recover時沒有current檔案,無法恢復。
所以走newdb分支
通過gdb跟蹤,可以看到整個db的第乙個manifest檔案就是在newdb中建立出來的,名字就是 manifest-000001,這也是為何上面setnextfile為2的原因,因為第乙個數字給了manifest檔案了。
並且可以看到,record資訊是
「\001\032leveldb.bytewisecomparator\002\000\003\002\004」
分別對應**中的new_db.encodeto()函式中的各個字段
3-3 恢復資料庫
dbimpl::recover -> versionset::recover
如果不是第一次建立資料庫,則實際上為恢復資料庫中current檔案中的所有資料庫到快取中;如果時第一次建立資料庫,則無需做什麼
接下來,在db::open中建立了第乙個log檔案000003.log
uboot啟動流程概述 uboot啟動流程
u boot系統啟動流程 大多數bootloader都分為stage1和stage2兩大部分,u boot也不例外。依賴於cpu體系結構的 如裝置初始化 等 通常都放在stage1,且可以用組合語言來實現,而stage2則通常用c語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。2.1...
activity啟動流程 App啟動流程三問
裡面涉及到哪些重要的成員呢?都分別負責了什麼,比如ams?啟動流程了解後,對我們開發有什麼幫助呢?1 比如啟動優化,分析啟動過程,其實可以優化啟動速度的地方有三個地方 activity的oncreate方法,同樣進行執行緒處理,懶載入。或者預建立activity,提前類載入等等。2 又比如外掛程式化...
Linux的啟動流程
首先介紹一下linux的啟動流程,分為四部 1.bios啟動 2.bootloader啟動 3.kernel啟動 4.init啟動 bios啟動主要工作如下 1.加電自檢硬體 2.選擇啟動裝置 硬碟,光碟機,軟碟機,u盤等 3.讀取啟動裝置的資訊,如硬碟的mbr資訊 bootloader主要工作如下...