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

Function BuildTable

src/leveldb/db/builder.cc:17–77  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15namespace leveldb {
16
17Status BuildTable(const std::string& dbname, Env* env, const Options& options,
18 TableCache* table_cache, Iterator* iter, FileMetaData* meta) {
19 Status s;
20 meta->file_size = 0;
21 iter->SeekToFirst();
22
23 std::string fname = TableFileName(dbname, meta->number);
24 if (iter->Valid()) {
25 WritableFile* file;
26 s = env->NewWritableFile(fname, &file);
27 if (!s.ok()) {
28 return s;
29 }
30
31 TableBuilder* builder = new TableBuilder(options, file);
32 meta->smallest.DecodeFrom(iter->key());
33 for (; iter->Valid(); iter->Next()) {
34 Slice key = iter->key();
35 meta->largest.DecodeFrom(key);
36 builder->Add(key, iter->value());
37 }
38
39 // Finish and check for builder errors
40 s = builder->Finish();
41 if (s.ok()) {
42 meta->file_size = builder->FileSize();
43 assert(meta->file_size > 0);
44 }
45 delete builder;
46
47 // Finish and check for file errors
48 if (s.ok()) {
49 s = file->Sync();
50 }
51 if (s.ok()) {
52 s = file->Close();
53 }
54 delete file;
55 file = nullptr;
56
57 if (s.ok()) {
58 // Verify that the table is usable
59 Iterator* it = table_cache->NewIterator(ReadOptions(), meta->number,
60 meta->file_size);
61 s = it->status();
62 delete it;
63 }
64 }
65
66 // Check for input iterator errors
67 if (!iter->status().ok()) {
68 s = iter->status();
69 }
70
71 if (s.ok() && meta->file_size > 0) {
72 // Keep it
73 } else {
74 env->DeleteFile(fname);

Callers 2

WriteLevel0TableMethod · 0.85
ConvertLogToTableMethod · 0.85

Calls 15

TableFileNameFunction · 0.85
ReadOptionsClass · 0.50
SeekToFirstMethod · 0.45
ValidMethod · 0.45
NewWritableFileMethod · 0.45
DecodeFromMethod · 0.45
keyMethod · 0.45
NextMethod · 0.45
AddMethod · 0.45
valueMethod · 0.45
FinishMethod · 0.45
FileSizeMethod · 0.45

Tested by

no test coverage detected