forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
leveldb_service_impl.cc
87 lines (68 loc) · 3.18 KB
/
leveldb_service_impl.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/leveldb/leveldb_service_impl.h"
#include "components/leveldb/env_mojo.h"
#include "components/leveldb/leveldb_database_impl.h"
#include "components/leveldb/public/cpp/util.h"
#include "third_party/leveldatabase/env_chromium.h"
#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
#include "third_party/leveldatabase/src/include/leveldb/db.h"
#include "third_party/leveldatabase/src/include/leveldb/env.h"
#include "third_party/leveldatabase/src/include/leveldb/filter_policy.h"
#include "third_party/leveldatabase/src/include/leveldb/slice.h"
namespace leveldb {
LevelDBServiceImpl::LevelDBServiceImpl(
scoped_refptr<base::SingleThreadTaskRunner> task_runner)
: thread_(new LevelDBMojoProxy(std::move(task_runner))) {}
LevelDBServiceImpl::~LevelDBServiceImpl() {}
void LevelDBServiceImpl::Open(filesystem::DirectoryPtr directory,
const mojo::String& dbname,
leveldb::LevelDBDatabaseRequest database,
const OpenCallback& callback) {
OpenWithOptions(leveldb::OpenOptions::New(), std::move(directory), dbname,
std::move(database), callback);
}
void LevelDBServiceImpl::OpenWithOptions(
leveldb::OpenOptionsPtr open_options,
filesystem::DirectoryPtr directory,
const mojo::String& dbname,
leveldb::LevelDBDatabaseRequest database,
const OpenCallback& callback) {
leveldb::Options options;
options.create_if_missing = open_options->create_if_missing;
options.error_if_exists = open_options->error_if_exists;
options.paranoid_checks = open_options->paranoid_checks;
options.write_buffer_size = open_options->write_buffer_size;
options.max_open_files = open_options->max_open_files;
options.reuse_logs = leveldb_env::kDefaultLogReuseOptionValue;
options.compression = leveldb::kSnappyCompression;
// Register our directory with the file thread.
LevelDBMojoProxy::OpaqueDir* dir =
thread_->RegisterDirectory(std::move(directory));
scoped_ptr<MojoEnv> env_mojo(new MojoEnv(thread_, dir));
options.env = env_mojo.get();
leveldb::DB* db = nullptr;
leveldb::Status s = leveldb::DB::Open(options, dbname.To<std::string>(), &db);
if (s.ok()) {
new LevelDBDatabaseImpl(std::move(database), std::move(env_mojo),
scoped_ptr<leveldb::DB>(db));
}
callback.Run(LeveldbStatusToError(s));
}
void LevelDBServiceImpl::OpenInMemory(leveldb::LevelDBDatabaseRequest database,
const OpenCallback& callback) {
leveldb::Options options;
options.create_if_missing = true;
options.max_open_files = 0; // Use minimum.
scoped_ptr<leveldb::Env> env(leveldb::NewMemEnv(leveldb::Env::Default()));
options.env = env.get();
leveldb::DB* db = nullptr;
leveldb::Status s = leveldb::DB::Open(options, "", &db);
if (s.ok()) {
new LevelDBDatabaseImpl(std::move(database), std::move(env),
scoped_ptr<leveldb::DB>(db));
}
callback.Run(LeveldbStatusToError(s));
}
} // namespace leveldb