| 1063 | } |
| 1064 | |
| 1065 | Status VersionSet::WriteSnapshot(log::Writer* log) { |
| 1066 | // TODO: Break up into multiple records to reduce memory usage on recovery? |
| 1067 | |
| 1068 | // Save metadata |
| 1069 | VersionEdit edit; |
| 1070 | edit.SetComparatorName(icmp_.user_comparator()->Name()); |
| 1071 | |
| 1072 | // Save compaction pointers |
| 1073 | for (int level = 0; level < config::kNumLevels; level++) { |
| 1074 | if (!compact_pointer_[level].empty()) { |
| 1075 | InternalKey key; |
| 1076 | key.DecodeFrom(compact_pointer_[level]); |
| 1077 | edit.SetCompactPointer(level, key); |
| 1078 | } |
| 1079 | } |
| 1080 | |
| 1081 | // Save files |
| 1082 | for (int level = 0; level < config::kNumLevels; level++) { |
| 1083 | const std::vector<FileMetaData*>& files = current_->files_[level]; |
| 1084 | for (size_t i = 0; i < files.size(); i++) { |
| 1085 | const FileMetaData* f = files[i]; |
| 1086 | edit.AddFile(level, f->number, f->file_size, f->smallest, f->largest); |
| 1087 | } |
| 1088 | } |
| 1089 | |
| 1090 | std::string record; |
| 1091 | edit.EncodeTo(&record); |
| 1092 | return log->AddRecord(record); |
| 1093 | } |
| 1094 | |
| 1095 | int VersionSet::NumLevelFiles(int level) const { |
| 1096 | assert(level >= 0); |
nothing calls this directly
no test coverage detected