MCPcopy Create free account
hub / github.com/ElementsProject/elements / Finish

Method Finish

src/leveldb/table/table_builder.cc:198–253  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

196Status TableBuilder::status() const { return rep_->status; }
197
198Status TableBuilder::Finish() {
199 Rep* r = rep_;
200 Flush();
201 assert(!r->closed);
202 r->closed = true;
203
204 BlockHandle filter_block_handle, metaindex_block_handle, index_block_handle;
205
206 // Write filter block
207 if (ok() && r->filter_block != nullptr) {
208 WriteRawBlock(r->filter_block->Finish(), kNoCompression,
209 &filter_block_handle);
210 }
211
212 // Write metaindex block
213 if (ok()) {
214 BlockBuilder meta_index_block(&r->options);
215 if (r->filter_block != nullptr) {
216 // Add mapping from "filter.Name" to location of filter data
217 std::string key = "filter.";
218 key.append(r->options.filter_policy->Name());
219 std::string handle_encoding;
220 filter_block_handle.EncodeTo(&handle_encoding);
221 meta_index_block.Add(key, handle_encoding);
222 }
223
224 // TODO(postrelease): Add stats and other meta blocks
225 WriteBlock(&meta_index_block, &metaindex_block_handle);
226 }
227
228 // Write index block
229 if (ok()) {
230 if (r->pending_index_entry) {
231 r->options.comparator->FindShortSuccessor(&r->last_key);
232 std::string handle_encoding;
233 r->pending_handle.EncodeTo(&handle_encoding);
234 r->index_block.Add(r->last_key, Slice(handle_encoding));
235 r->pending_index_entry = false;
236 }
237 WriteBlock(&r->index_block, &index_block_handle);
238 }
239
240 // Write footer
241 if (ok()) {
242 Footer footer;
243 footer.set_metaindex_handle(metaindex_block_handle);
244 footer.set_index_handle(index_block_handle);
245 std::string footer_encoding;
246 footer.EncodeTo(&footer_encoding);
247 r->status = r->file->Append(footer_encoding);
248 if (r->status.ok()) {
249 r->offset += footer_encoding.size();
250 }
251 }
252 return r->status;
253}
254
255void TableBuilder::Abandon() {

Callers 1

WriteBlockMethod · 0.45

Calls 10

okFunction · 0.85
set_metaindex_handleMethod · 0.80
set_index_handleMethod · 0.80
SliceClass · 0.50
NameMethod · 0.45
EncodeToMethod · 0.45
AddMethod · 0.45
FindShortSuccessorMethod · 0.45
AppendMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected