MCPcopy Create free account
hub / github.com/chen3feng/toft / LoadFileInfo

Method LoadFileInfo

storage/sstable/reader/sstable_reader_impl.cpp:22–116  ·  view source on GitHub ↗

SSTableReader internal implementation.

Source from the content-addressed store, hash-verified

20
21// SSTableReader internal implementation.
22bool SSTableReader::Impl::LoadFileInfo(File *file_base,
23 hfile::DataIndex *data_index,
24 hfile::FileInfo *file_info,
25 hfile::FileTrailer *file_trailer) {
26 // Load file trailer
27 const int tailer_size = hfile::FileTrailer::TrailerSize();
28 bool s = file_base->Seek(-tailer_size, SEEK_END);
29
30 int64_t current_pos = file_base->Tell();
31 file_base->Seek(0, SEEK_END);
32 LOG(INFO)<< "current_pos:" << current_pos << ", file size:" << file_base->Tell();
33 file_base->Seek(current_pos, SEEK_SET);
34
35 if (!s) {
36 LOG(ERROR)<< "Fail to seek";
37 return false;
38 }
39 std::string buffer;
40 buffer.resize(tailer_size);
41 int64_t size = file_base->Read((void*) buffer.c_str(), tailer_size);
42 if (tailer_size != size) {
43 LOG(ERROR)<< "Read file trailer failed. read size:" << buffer.size()
44 << ",TrailerSize: " << tailer_size;
45 return false;
46 }
47 if (!file_trailer->DecodeFromString(buffer)) {
48 LOG(ERROR)<< "parse file trailer failed, invalid format!";
49 return false;
50 }
51
52 // if don't need file info, just return
53 if (!file_info)
54 return true;
55 int64_t file_info_length = file_trailer->data_index_offset()
56 - file_trailer->file_info_offset();
57 if (file_info_length < 0) {
58 LOG(ERROR)<< "get invalid file info length: " << file_info_length;
59 return false;
60 }
61
62 s = file_base->Seek(file_trailer->file_info_offset(), SEEK_SET);
63 if (!s) {
64 LOG(ERROR)<< "Fail to seek file";
65 return false;
66 }
67
68 buffer.resize(file_info_length);
69 size = file_base->Read((void*) buffer.c_str(), file_info_length);
70 if (size != file_info_length) {
71 LOG(ERROR)<< "read file info failed";
72 return false;
73 }
74
75 if (!file_info->DecodeFromString(buffer)) {
76 LOG(ERROR)<< "parse file info failed, invalid format!";
77 return false;
78 }
79

Callers

nothing calls this directly

Calls 9

resizeMethod · 0.80
data_index_offsetMethod · 0.80
file_info_offsetMethod · 0.80
meta_index_offsetMethod · 0.80
SeekMethod · 0.45
TellMethod · 0.45
ReadMethod · 0.45
sizeMethod · 0.45
DecodeFromStringMethod · 0.45

Tested by

no test coverage detected