VersionEdit記錄的是版本變化的增量。
【數據成員介紹】
compact_pointers_:這是一個vector,裏面的每項是一個由level,internalkey組成的pair,也就是說裏面記錄的是,compact到哪一層的,哪個key了;
comparator_:比較器的名稱;
deleted_files_:這是一個set,裏面的每一項是一個由level,sst文件的編號組成的pair,也就是說,裏面記錄的是哪裏一層被刪除的哪個文件;使用set是爲了查找方便;
new_files_:這是一個vector,裏面的每一項是一個由level,FileMetaData組成的pair,也就是說,裏面記錄的是在哪一層增加了什麼文件;使用vector是爲了循環方便;
has_comparator_:是否有比較器;
has_last_sequence_:是否有上一個序列號;
has_next_file_number_:是否有下一個文件編號;
has_prev_log_number_:是否有前一個日誌文件編號;
last_sequence_:上一個序列號;
log_number_:日誌文件編號;
next_file_number_:下一個文件編號;
pre_log_number_:前一個日誌文件的編號;
【方法成員介紹】
void AddFile(int level, uint64_t file,uint64_t file_size,const InternalKey& smallest,const InternalKey& largest)
作用:當新產生一個sst文件時,就要將level,FileMetaData信息增加到new_files_裏面;
void DeleteFile(int level, uint64_t file)
作用:當刪除一個sst文件的時候,要將level,number放進deleted_files_;
void VersionEdit::EncodeTo(std::string* dst)
作用:將VersionEdit結構,按照特定的格式,編碼成string,將結果保存在dst,當需要將變更保存在manifest文件時,就會將VersionEdit進行格式化,調用該函數。具體編碼格式如下圖:
Status VersionEdit::DecodeFrom(const Slice& src)
作用:將一個slice解析爲一個VersionEdit結構,知道編碼方式了,解碼方式我就不囉嗦了。一般在啓動實例的時候會從manifest文件中讀取內容,然後通過調用該函數進行解析。