11 VersionSet分析之2
11.4 LogAndApply()
前面接口小节中讲过其功能:在currentversion上应用指定的VersionEdit,生成新的MANIFEST信息,保存到磁盘上,并用作current version,故为Log And Apply。
参数edit也会被函数修改。
11.4.1 函数流程
S1 为edit设置log number等4个计数器。
if (edit->has_log_number_) {
assert(edit->log_number_>= log_number_);
assert(edit->log_number_< next_file_number_);
} else edit->SetLogNumber(log_number_);
if(!edit->has_prev_log_number_) edit->SetPrevLogNumber(prev_log_number_);
edit->SetNextFile(next_file_number_);
edit->SetLastSequence(last_sequence_);
要保证edit自己的log number是比较大的那个,否则就是致命错误。保证edit的log number小于next file number,否则就是致命错误-见9.1小节。
S2 创建一个新的Version v,并把新的edit变动保存