Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(395)

Side by Side Diff: components/leveldb/leveldb_service_impl.cc

Issue 2625873004: Delete and try to recreate localstorage database on invalid schema version. (Closed)
Patch Set: 80 cols, and fix typo Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/leveldb/leveldb_service_impl.h" 5 #include "components/leveldb/leveldb_service_impl.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "components/leveldb/env_mojo.h" 10 #include "components/leveldb/env_mojo.h"
11 #include "components/leveldb/leveldb_database_impl.h" 11 #include "components/leveldb/leveldb_database_impl.h"
12 #include "components/leveldb/public/cpp/util.h" 12 #include "components/leveldb/public/cpp/util.h"
13 #include "mojo/public/cpp/bindings/strong_binding.h" 13 #include "mojo/public/cpp/bindings/strong_associated_binding.h"
14 #include "third_party/leveldatabase/env_chromium.h" 14 #include "third_party/leveldatabase/env_chromium.h"
15 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h" 15 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
16 #include "third_party/leveldatabase/src/include/leveldb/db.h" 16 #include "third_party/leveldatabase/src/include/leveldb/db.h"
17 #include "third_party/leveldatabase/src/include/leveldb/env.h" 17 #include "third_party/leveldatabase/src/include/leveldb/env.h"
18 #include "third_party/leveldatabase/src/include/leveldb/filter_policy.h" 18 #include "third_party/leveldatabase/src/include/leveldb/filter_policy.h"
19 #include "third_party/leveldatabase/src/include/leveldb/slice.h" 19 #include "third_party/leveldatabase/src/include/leveldb/slice.h"
20 20
21 namespace leveldb { 21 namespace leveldb {
22 22
23 LevelDBServiceImpl::LevelDBServiceImpl( 23 LevelDBServiceImpl::LevelDBServiceImpl(
24 scoped_refptr<base::SingleThreadTaskRunner> task_runner) 24 scoped_refptr<base::SingleThreadTaskRunner> task_runner)
25 : thread_(new LevelDBMojoProxy(std::move(task_runner))) {} 25 : thread_(new LevelDBMojoProxy(std::move(task_runner))) {}
26 26
27 LevelDBServiceImpl::~LevelDBServiceImpl() {} 27 LevelDBServiceImpl::~LevelDBServiceImpl() {}
28 28
29 void LevelDBServiceImpl::Open(filesystem::mojom::DirectoryPtr directory, 29 void LevelDBServiceImpl::Open(
30 const std::string& dbname, 30 filesystem::mojom::DirectoryPtr directory,
31 leveldb::mojom::LevelDBDatabaseRequest database, 31 const std::string& dbname,
32 const OpenCallback& callback) { 32 leveldb::mojom::LevelDBDatabaseAssociatedRequest database,
33 const OpenCallback& callback) {
33 OpenWithOptions(leveldb::mojom::OpenOptions::New(), std::move(directory), 34 OpenWithOptions(leveldb::mojom::OpenOptions::New(), std::move(directory),
34 dbname, std::move(database), callback); 35 dbname, std::move(database), callback);
35 } 36 }
36 37
37 void LevelDBServiceImpl::OpenWithOptions( 38 void LevelDBServiceImpl::OpenWithOptions(
38 leveldb::mojom::OpenOptionsPtr open_options, 39 leveldb::mojom::OpenOptionsPtr open_options,
39 filesystem::mojom::DirectoryPtr directory, 40 filesystem::mojom::DirectoryPtr directory,
40 const std::string& dbname, 41 const std::string& dbname,
41 leveldb::mojom::LevelDBDatabaseRequest database, 42 leveldb::mojom::LevelDBDatabaseAssociatedRequest database,
42 const OpenCallback& callback) { 43 const OpenCallback& callback) {
43 leveldb::Options options; 44 leveldb::Options options;
44 options.create_if_missing = open_options->create_if_missing; 45 options.create_if_missing = open_options->create_if_missing;
45 options.error_if_exists = open_options->error_if_exists; 46 options.error_if_exists = open_options->error_if_exists;
46 options.paranoid_checks = open_options->paranoid_checks; 47 options.paranoid_checks = open_options->paranoid_checks;
47 options.write_buffer_size = open_options->write_buffer_size; 48 options.write_buffer_size = open_options->write_buffer_size;
48 options.max_open_files = open_options->max_open_files; 49 options.max_open_files = open_options->max_open_files;
49 50
50 options.reuse_logs = leveldb_env::kDefaultLogReuseOptionValue; 51 options.reuse_logs = leveldb_env::kDefaultLogReuseOptionValue;
51 options.compression = leveldb::kSnappyCompression; 52 options.compression = leveldb::kSnappyCompression;
52 53
53 // Register our directory with the file thread. 54 // Register our directory with the file thread.
54 LevelDBMojoProxy::OpaqueDir* dir = 55 LevelDBMojoProxy::OpaqueDir* dir =
55 thread_->RegisterDirectory(std::move(directory)); 56 thread_->RegisterDirectory(std::move(directory));
56 57
57 std::unique_ptr<MojoEnv> env_mojo(new MojoEnv(thread_, dir)); 58 std::unique_ptr<MojoEnv> env_mojo(new MojoEnv(thread_, dir));
58 options.env = env_mojo.get(); 59 options.env = env_mojo.get();
59 60
60 leveldb::DB* db = nullptr; 61 leveldb::DB* db = nullptr;
61 leveldb::Status s = leveldb::DB::Open(options, dbname, &db); 62 leveldb::Status s = leveldb::DB::Open(options, dbname, &db);
62 63
63 if (s.ok()) { 64 if (s.ok()) {
64 mojo::MakeStrongBinding(base::MakeUnique<LevelDBDatabaseImpl>( 65 mojo::MakeStrongAssociatedBinding(
65 std::move(env_mojo), base::WrapUnique(db)), 66 base::MakeUnique<LevelDBDatabaseImpl>(std::move(env_mojo),
66 std::move(database)); 67 base::WrapUnique(db)),
68 std::move(database));
67 } 69 }
68 70
69 callback.Run(LeveldbStatusToError(s)); 71 callback.Run(LeveldbStatusToError(s));
70 } 72 }
71 73
72 void LevelDBServiceImpl::OpenInMemory( 74 void LevelDBServiceImpl::OpenInMemory(
73 leveldb::mojom::LevelDBDatabaseRequest database, 75 leveldb::mojom::LevelDBDatabaseAssociatedRequest database,
74 const OpenCallback& callback) { 76 const OpenCallback& callback) {
75 leveldb::Options options; 77 leveldb::Options options;
76 options.create_if_missing = true; 78 options.create_if_missing = true;
77 options.max_open_files = 0; // Use minimum. 79 options.max_open_files = 0; // Use minimum.
78 80
79 std::unique_ptr<leveldb::Env> env( 81 std::unique_ptr<leveldb::Env> env(
80 leveldb::NewMemEnv(leveldb::Env::Default())); 82 leveldb::NewMemEnv(leveldb::Env::Default()));
81 options.env = env.get(); 83 options.env = env.get();
82 84
83 leveldb::DB* db = nullptr; 85 leveldb::DB* db = nullptr;
84 leveldb::Status s = leveldb::DB::Open(options, "", &db); 86 leveldb::Status s = leveldb::DB::Open(options, "", &db);
85 87
86 if (s.ok()) { 88 if (s.ok()) {
87 mojo::MakeStrongBinding(base::MakeUnique<LevelDBDatabaseImpl>( 89 mojo::MakeStrongAssociatedBinding(base::MakeUnique<LevelDBDatabaseImpl>(
88 std::move(env), base::WrapUnique(db)), 90 std::move(env), base::WrapUnique(db)),
89 std::move(database)); 91 std::move(database));
90 } 92 }
91 93
92 callback.Run(LeveldbStatusToError(s)); 94 callback.Run(LeveldbStatusToError(s));
93 } 95 }
94 96
97 void LevelDBServiceImpl::Destroy(filesystem::mojom::DirectoryPtr directory,
98 const std::string& dbname,
99 const DestroyCallback& callback) {
100 leveldb::Options options;
101 // Register our directory with the file thread.
102 LevelDBMojoProxy::OpaqueDir* dir =
103 thread_->RegisterDirectory(std::move(directory));
104 std::unique_ptr<MojoEnv> env_mojo(new MojoEnv(thread_, dir));
105 options.env = env_mojo.get();
106 callback.Run(LeveldbStatusToError(leveldb::DestroyDB(dbname, options)));
107 }
108
95 } // namespace leveldb 109 } // namespace leveldb
OLDNEW
« no previous file with comments | « components/leveldb/leveldb_service_impl.h ('k') | components/leveldb/leveldb_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698