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

Method SaveTo

src/leveldb/db/version_set.cc:673–716  ·  view source on GitHub ↗

Save the current state in *v.

Source from the content-addressed store, hash-verified

671
672 // Save the current state in *v.
673 void SaveTo(Version* v) {
674 BySmallestKey cmp;
675 cmp.internal_comparator = &vset_->icmp_;
676 for (int level = 0; level < config::kNumLevels; level++) {
677 // Merge the set of added files with the set of pre-existing files.
678 // Drop any deleted files. Store the result in *v.
679 const std::vector<FileMetaData*>& base_files = base_->files_[level];
680 std::vector<FileMetaData*>::const_iterator base_iter = base_files.begin();
681 std::vector<FileMetaData*>::const_iterator base_end = base_files.end();
682 const FileSet* added_files = levels_[level].added_files;
683 v->files_[level].reserve(base_files.size() + added_files->size());
684 for (const auto& added_file : *added_files) {
685 // Add all smaller files listed in base_
686 for (std::vector<FileMetaData*>::const_iterator bpos =
687 std::upper_bound(base_iter, base_end, added_file, cmp);
688 base_iter != bpos; ++base_iter) {
689 MaybeAddFile(v, level, *base_iter);
690 }
691
692 MaybeAddFile(v, level, added_file);
693 }
694
695 // Add remaining base files
696 for (; base_iter != base_end; ++base_iter) {
697 MaybeAddFile(v, level, *base_iter);
698 }
699
700#ifndef NDEBUG
701 // Make sure there is no overlap in levels > 0
702 if (level > 0) {
703 for (uint32_t i = 1; i < v->files_[level].size(); i++) {
704 const InternalKey& prev_end = v->files_[level][i - 1]->largest;
705 const InternalKey& this_begin = v->files_[level][i]->smallest;
706 if (vset_->icmp_.Compare(prev_end, this_begin) >= 0) {
707 fprintf(stderr, "overlapping ranges in same level %s vs. %s\n",
708 prev_end.DebugString().c_str(),
709 this_begin.DebugString().c_str());
710 abort();
711 }
712 }
713 }
714#endif
715 }
716 }
717
718 void MaybeAddFile(Version* v, int level, FileMetaData* f) {
719 if (levels_[level].deleted_files.count(f->number) > 0) {

Callers 2

LogAndApplyMethod · 0.80
RecoverMethod · 0.80

Calls 6

beginMethod · 0.45
endMethod · 0.45
reserveMethod · 0.45
sizeMethod · 0.45
CompareMethod · 0.45
DebugStringMethod · 0.45

Tested by

no test coverage detected