summaryrefslogtreecommitdiff
path: root/db/version_set.cc
diff options
context:
space:
mode:
Diffstat (limited to 'db/version_set.cc')
-rw-r--r--db/version_set.cc43
1 files changed, 27 insertions, 16 deletions
diff --git a/db/version_set.cc b/db/version_set.cc
index fd5e3ab..4e37bf9 100644
--- a/db/version_set.cc
+++ b/db/version_set.cc
@@ -4,9 +4,8 @@
#include "db/version_set.h"
-#include <stdio.h>
-
#include <algorithm>
+#include <cstdio>
#include "db/filename.h"
#include "db/log_reader.h"
@@ -373,6 +372,10 @@ Status Version::Get(const ReadOptions& options, const LookupKey& k,
state->found = true;
return false;
}
+
+ // Not reached. Added to avoid false compilation warnings of
+ // "control reaches end of non-void function".
+ return false;
}
};
@@ -623,7 +626,7 @@ class VersionSet::Builder {
}
// Apply all of the edits in *edit to the current state.
- void Apply(VersionEdit* edit) {
+ void Apply(const VersionEdit* edit) {
// Update compaction pointers
for (size_t i = 0; i < edit->compact_pointers_.size(); i++) {
const int level = edit->compact_pointers_[i].first;
@@ -700,10 +703,10 @@ class VersionSet::Builder {
const InternalKey& prev_end = v->files_[level][i - 1]->largest;
const InternalKey& this_begin = v->files_[level][i]->smallest;
if (vset_->icmp_.Compare(prev_end, this_begin) >= 0) {
- fprintf(stderr, "overlapping ranges in same level %s vs. %s\n",
- prev_end.DebugString().c_str(),
- this_begin.DebugString().c_str());
- abort();
+ std::fprintf(stderr, "overlapping ranges in same level %s vs. %s\n",
+ prev_end.DebugString().c_str(),
+ this_begin.DebugString().c_str());
+ std::abort();
}
}
}
@@ -803,7 +806,6 @@ Status VersionSet::LogAndApply(VersionEdit* edit, port::Mutex* mu) {
// first call to LogAndApply (when opening the database).
assert(descriptor_file_ == nullptr);
new_manifest_file = DescriptorFileName(dbname_, manifest_file_number_);
- edit->SetNextFile(next_file_number_);
s = env_->NewWritableFile(new_manifest_file, &descriptor_file_);
if (s.ok()) {
descriptor_log_ = new log::Writer(descriptor_file_);
@@ -849,7 +851,7 @@ Status VersionSet::LogAndApply(VersionEdit* edit, port::Mutex* mu) {
delete descriptor_file_;
descriptor_log_ = nullptr;
descriptor_file_ = nullptr;
- env_->DeleteFile(new_manifest_file);
+ env_->RemoveFile(new_manifest_file);
}
}
@@ -895,6 +897,7 @@ Status VersionSet::Recover(bool* save_manifest) {
uint64_t log_number = 0;
uint64_t prev_log_number = 0;
Builder builder(this, current_);
+ int read_records = 0;
{
LogReporter reporter;
@@ -904,6 +907,7 @@ Status VersionSet::Recover(bool* save_manifest) {
Slice record;
std::string scratch;
while (reader.ReadRecord(&record, &scratch) && s.ok()) {
+ ++read_records;
VersionEdit edit;
s = edit.DecodeFrom(record);
if (s.ok()) {
@@ -978,6 +982,10 @@ Status VersionSet::Recover(bool* save_manifest) {
} else {
*save_manifest = true;
}
+ } else {
+ std::string error = s.ToString();
+ Log(options_->info_log, "Error recovering version set with %d records: %s",
+ read_records, error.c_str());
}
return s;
@@ -1097,11 +1105,12 @@ int VersionSet::NumLevelFiles(int level) const {
const char* VersionSet::LevelSummary(LevelSummaryStorage* scratch) const {
// Update code if kNumLevels changes
static_assert(config::kNumLevels == 7, "");
- snprintf(scratch->buffer, sizeof(scratch->buffer),
- "files[ %d %d %d %d %d %d %d ]", int(current_->files_[0].size()),
- int(current_->files_[1].size()), int(current_->files_[2].size()),
- int(current_->files_[3].size()), int(current_->files_[4].size()),
- int(current_->files_[5].size()), int(current_->files_[6].size()));
+ std::snprintf(
+ scratch->buffer, sizeof(scratch->buffer), "files[ %d %d %d %d %d %d %d ]",
+ int(current_->files_[0].size()), int(current_->files_[1].size()),
+ int(current_->files_[2].size()), int(current_->files_[3].size()),
+ int(current_->files_[4].size()), int(current_->files_[5].size()),
+ int(current_->files_[6].size()));
return scratch->buffer;
}
@@ -1294,7 +1303,7 @@ Compaction* VersionSet::PickCompaction() {
return c;
}
-// Finds the largest key in a vector of files. Returns true if files it not
+// Finds the largest key in a vector of files. Returns true if files is not
// empty.
bool FindLargestKey(const InternalKeyComparator& icmp,
const std::vector<FileMetaData*>& files,
@@ -1382,6 +1391,7 @@ void VersionSet::SetupOtherInputs(Compaction* c) {
current_->GetOverlappingInputs(level + 1, &smallest, &largest,
&c->inputs_[1]);
+ AddBoundaryInputs(icmp_, current_->files_[level + 1], &c->inputs_[1]);
// Get entire range covered by compaction
InternalKey all_start, all_limit;
@@ -1404,6 +1414,7 @@ void VersionSet::SetupOtherInputs(Compaction* c) {
std::vector<FileMetaData*> expanded1;
current_->GetOverlappingInputs(level + 1, &new_start, &new_limit,
&expanded1);
+ AddBoundaryInputs(icmp_, current_->files_[level + 1], &expanded1);
if (expanded1.size() == c->inputs_[1].size()) {
Log(options_->info_log,
"Expanding@%d %d+%d (%ld+%ld bytes) to %d+%d (%ld+%ld bytes)\n",
@@ -1498,7 +1509,7 @@ bool Compaction::IsTrivialMove() const {
void Compaction::AddInputDeletions(VersionEdit* edit) {
for (int which = 0; which < 2; which++) {
for (size_t i = 0; i < inputs_[which].size(); i++) {
- edit->DeleteFile(level_ + which, inputs_[which][i]->number);
+ edit->RemoveFile(level_ + which, inputs_[which][i]->number);
}
}
}