9 #include <boost/scoped_ptr.hpp>
11 #include <leveldb/cache.h>
12 #include <leveldb/env.h>
13 #include <leveldb/filter_policy.h>
17 static void SetMaxOpenFiles(leveldb::Options *options) {
32 int default_open_files = options->max_open_files;
34 if (
sizeof(
void*) < 8) {
35 options->max_open_files = 64;
38 LogPrintf(
"LevelDB using max_open_files=%d (default=%d)\n",
39 options->max_open_files, default_open_files);
42 static leveldb::Options GetOptions(
size_t nCacheSize)
44 leveldb::Options options;
45 options.block_cache = leveldb::NewLRUCache(nCacheSize / 2);
46 options.write_buffer_size = nCacheSize / 4;
47 options.filter_policy = leveldb::NewBloomFilterPolicy(10);
48 options.compression = leveldb::kNoCompression;
49 if (leveldb::kMajorVersion > 1 || (leveldb::kMajorVersion == 1 && leveldb::kMinorVersion >= 16)) {
52 options.paranoid_checks =
true;
54 SetMaxOpenFiles(&options);
65 options = GetOptions(nCacheSize);
66 options.create_if_missing =
true;
68 penv = leveldb::NewMemEnv(leveldb::Env::Default());
72 LogPrintf(
"Wiping LevelDB in %s\n", path.string());
73 leveldb::Status result = leveldb::DestroyDB(path.string(),
options);
77 LogPrintf(
"Opening LevelDB in %s\n", path.string());
79 leveldb::Status status = leveldb::DB::Open(
options, path.string(), &
pdb);
81 LogPrintf(
"Opened LevelDB successfully\n");
107 return !(it->Valid());
121 const std::string errmsg =
"Fatal LevelDB error: " + status.ToString();
123 LogPrintf(
"You can use -debug=leveldb to get more complete diagnostic messages\n");