所在檔案: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...