leveldb源码中filter_block.cc中的FilterBlockBuilder::GenerateFilter()函数在源码哪些地方被调用了
时间: 2024-02-26 18:57:43 浏览: 126
leveldb 源码
FilterBlockBuilder::GenerateFilter() 函数在 leveldb 源码中主要被在 table_builder.cc 中的 TableBuilder::Finish() 函数中调用,具体代码如下:
```c++
Status TableBuilder::Finish() {
// ...
// Write filter block
if (ok() && options_.filter_policy != nullptr) {
// Generate filter for current data block
for (int i = 0; i < data_blocks_.size(); i++) {
// ...
}
// Generate filter for whole table
const size_t filter_size = filter_block_->CurrentSizeEstimate();
std::unique_ptr<char[]> filter_data(new char[filter_size]);
filter_block_->Finish(filter_data.get());
filter_block_handle_ = index_block_builder_.AddBlock(
filter_data.get(), filter_size);
}
// ...
}
```
在上面的代码中,TableBuilder::Finish() 函数会在写入数据块和索引块之前,调用 GenerateFilter() 函数来生成过滤器,并将其写入索引块中。
阅读全文