summaryrefslogtreecommitdiff
path: root/db/version_set.h
diff options
context:
space:
mode:
authorSanjay Ghemawat <sanjay@google.com>2014-12-11 08:13:18 -0800
committerChris Mumford <cmumford@chromium.org>2015-08-11 14:56:39 -0700
commitac1d69da31205a979b5a8510f33c31ae977530f0 (patch)
treea1bbfceb74a93d34bda9544f8ad62f3555884805 /db/version_set.h
parent77948e7eec0613fb5cbecb7e320b9498607030b5 (diff)
downloadleveldb-ac1d69da31205a979b5a8510f33c31ae977530f0.tar.gz
LevelDB now attempts to reuse the preceding MANIFEST and log file when re-opened.
(Based on a suggestion by cmumford.) "open" benchmark on my workstation speeds up significantly since we can now avoid three fdatasync calls and a compaction per open: Before: ~80000 microseconds After: ~130 microseconds Details: (1) Added Options::reuse_logs (currently defaults to false) to control new behavior. The intention is to change the default to true after some baking. (2) Added Env::NewAppendableFile() whose default implementation returns a not-supported error. (3) VersionSet::Recovery attempts to reuse the MANIFEST from which it is recovering. (4) DBImpl recovery attempts to reuse the last log file and memtable. (5) db_test.cc now tests a new configuration that sets reuse_logs to true. (6) fault_injection_test also tests a reuse_logs==true config. (7) Added a new recovery_test.
Diffstat (limited to 'db/version_set.h')
-rw-r--r--db/version_set.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/db/version_set.h b/db/version_set.h
index 8dc14b8..1dec745 100644
--- a/db/version_set.h
+++ b/db/version_set.h
@@ -179,7 +179,7 @@ class VersionSet {
EXCLUSIVE_LOCKS_REQUIRED(mu);
// Recover the last saved descriptor from persistent storage.
- Status Recover();
+ Status Recover(bool *save_manifest);
// Return the current version.
Version* current() const { return current_; }
@@ -274,6 +274,8 @@ class VersionSet {
friend class Compaction;
friend class Version;
+ bool ReuseManifest(const std::string& dscname, const std::string& dscbase);
+
void Finalize(Version* v);
void GetRange(const std::vector<FileMetaData*>& inputs,