LevelDb之manifest檔案

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

從這篇文章開始想寫寫leveldb的小知識。先瞭解manifest檔案,因為這個檔案關係到執行個體的讀取。至於這個檔案的內部結構以及如何來的,等會再聊。

if instances[Name], err = leveldb.OpenFile(Dir, instance); err != nil {        return errors.New(fmt.Sprintf(`leveldbs: err while open %s : %s`, Dir, err.Error()))}

這段代碼在manifest檔案損壞的情況下會出現報錯,報錯內容:

ERROR leveldb: manifest corrupted: missing [file=MANIFEST-*******]

報錯原因:leveldb在預存程序中因為一些其他原因導致程式突然的down掉可能導致manifest檔案損害或者丟失。這樣就只能手動repair下了,打不開一個instance 就沒有辦法執行get命令。repair的業務方代碼可以這樣寫,這裡以Golang代碼來說明:

if instances[cfgIns.Name], err = leveldb.OpenFile(Dir, instance); err != nil {    if instances[cfgIns.Name], err = leveldb.RecoverFile(Dir, instance); err != nil {        return errors.New(fmt.Sprintf(`err while recoverfile%s : %s`, Dir, err.Error()))    }}

RecoverFile 這個API函數的源碼是:

func RecoverFile(path string, o *opt.Options) (db *DB, err error) {    stor, err := storage.OpenFile(path)    if err != nil {        return    }    db, err = Recover(stor, o)    if err != nil {        stor.Close()    } else {        db.closer = stor    }    return}

manifest檔案損壞或者丟失修複還是蠻簡單的,說明Google的大神早就想到了這些東西。通過上面的例子先感受下manifest檔案的存在,下面我們學習下manifest檔案結構和檔案的由來。檔案結構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.