LevelDB原始碼分析4 Status

2021-07-24 16:04:41 字數 1609 閱讀 6891

所在檔案:status.cc和status.h

leveldb用乙個status類來表示函式執行的狀態,用乙個enum型別來表示。當沒有錯誤時,state_為null,否則,會有錯誤碼。

status有乙個cosnt char* state_,為了節省記憶體,分為3個部分使用,意義如下:

const

char* state_;

enum

code ;

這些建構函式返回指定型別的status

// return a success status.

static status ok()

//yanke:建構函式:對於每一種error,都有乙個建構函式

static status notfound(const slice& msg, const slice& msg2 = slice())

static status corruption(const slice& msg, const slice& msg2 = slice())

static status notsupported(const slice& msg, const slice& msg2 = slice())

static status invalidargument(const slice& msg, const slice& msg2 = slice())

static status ioerror(const slice& msg, const slice& msg2 = slice())

這些都是呼叫下面的函式

//yanke:將slice轉為status的建構函式

status::status(code code, const slice& msg, const slice& msg2)

state_ = result;

}

複製建構函式和複製操作運算子

inline status::status(const status& s) 

inline void status::operator=(const status& s)

}

它們都呼叫copystate這個函式

const

char* status::copystate(const

char* state)

code函式的定義如下:先判斷state_是否為空,如果為空,則返回kok,否則取出第四個位元組轉為code型別,然後返回

code code() const
轉為string。格式為:「錯誤碼:」 + 「錯誤資訊」

//yanke:status轉為string

std::string status::tostring() const else

std::string result(type);

uint32_t length;

memcpy(&length, state_, sizeof(length));

return result;

}}

leveldb原始碼分析1

leveldb是乙個key value型的儲存引擎,由google開發,並宣布在bsd許可下開放源 plain git clone plain cd leveldb make all 此時生成libleveldb.a庫檔案。拷貝leveldb的標頭檔案到 usr include下 plain cp ...

levelDB原始碼分析 SSTable

sstable是bigtable中至關重要的一塊,對於leveldb來說也是如此,對leveldb的sstable實現細節的了解也有助於了解bigtable中一些實現細節。本節內容主要講述sstable的靜態布局結構,sstable檔案形成了不同level的層級結構,至於這個層級結構是如何形成的我們...

Leveldb原始碼分析 1

前言 看了一點oceanbase,沒有意志力繼續堅持下去了,暫時就此中斷,基本上算把master看完了,比較重要的update server和merge server 卻沒有細看。中間又陸續研究了hadoop的原始碼,主要是name node和寫入pipeline。主要的目的是想看看name nod...