205 BlockHandle filter_block_handle, metaindex_block_handle, index_block_handle;
208 if (
ok() && r->filter_block != NULL) {
210 &filter_block_handle);
215 BlockBuilder meta_index_block(&r->options);
216 if (r->filter_block != NULL) {
218 std::string key =
"filter.";
219 key.append(r->options.filter_policy->Name());
220 std::string handle_encoding;
221 filter_block_handle.EncodeTo(&handle_encoding);
222 meta_index_block.Add(key, handle_encoding);
226 WriteBlock(&meta_index_block, &metaindex_block_handle);
231 if (r->pending_index_entry) {
232 r->options.comparator->FindShortSuccessor(&r->last_key);
233 std::string handle_encoding;
234 r->pending_handle.EncodeTo(&handle_encoding);
235 r->index_block.Add(r->last_key, Slice(handle_encoding));
236 r->pending_index_entry =
false;
238 WriteBlock(&r->index_block, &index_block_handle);
244 footer.set_metaindex_handle(metaindex_block_handle);
245 footer.set_index_handle(index_block_handle);
246 std::string footer_encoding;
247 footer.EncodeTo(&footer_encoding);
248 r->status = r->file->Append(footer_encoding);
249 if (r->status.ok()) {
250 r->offset += footer_encoding.size();
void WriteRawBlock(const Slice &data, CompressionType, BlockHandle *handle)
void WriteBlock(BlockBuilder *block, BlockHandle *handle)