Commit 00d842af authored by tzik's avatar tzik Committed by Commit bot

[SyncFS] Simplify MetadataDatabase::Create

BUG=412367

Review URL: https://codereview.chromium.org/552983002

Cr-Commit-Position: refs/heads/master@{#293953}
parent 1b668a2e
...@@ -519,24 +519,35 @@ void RemoveFileTracker(int64 tracker_id, ...@@ -519,24 +519,35 @@ void RemoveFileTracker(int64 tracker_id,
} // namespace } // namespace
struct MetadataDatabase::CreateParam {
base::FilePath database_path;
leveldb::Env* env_override;
CreateParam(const base::FilePath& database_path,
leveldb::Env* env_override)
: database_path(database_path),
env_override(env_override) {}
};
// static // static
void MetadataDatabase::Create( void MetadataDatabase::Create(
const base::FilePath& database_path, const base::FilePath& database_path,
leveldb::Env* env_override, leveldb::Env* env_override,
const CreateCallback& callback) { const CreateCallback& callback) {
CreateOnWorkerTaskRunner( bool enable_on_disk_index = !CommandLine::ForCurrentProcess()->HasSwitch(
make_scoped_ptr(new CreateParam(database_path, env_override)), kDisableMetadataDatabaseOnDisk);
callback); scoped_ptr<MetadataDatabase> metadata_database(
new MetadataDatabase(database_path,
enable_on_disk_index,
env_override));
SyncStatusCode status = metadata_database->Initialize();
if (status == SYNC_DATABASE_ERROR_FAILED) {
// Delete the previous instance to avoid creating a LevelDB instance for
// the same path.
metadata_database.reset();
metadata_database.reset(
new MetadataDatabase(database_path,
enable_on_disk_index,
env_override));
status = metadata_database->Initialize();
}
if (status != SYNC_STATUS_OK)
metadata_database.reset();
callback.Run(status, metadata_database.Pass());
} }
// static // static
...@@ -1316,36 +1327,6 @@ MetadataDatabase::MetadataDatabase( ...@@ -1316,36 +1327,6 @@ MetadataDatabase::MetadataDatabase(
weak_ptr_factory_(this) { weak_ptr_factory_(this) {
} }
// static
void MetadataDatabase::CreateOnWorkerTaskRunner(
scoped_ptr<CreateParam> create_param,
const CreateCallback& callback) {
bool enable_on_disk_index = !CommandLine::ForCurrentProcess()->HasSwitch(
kDisableMetadataDatabaseOnDisk);
scoped_ptr<MetadataDatabase> metadata_database(
new MetadataDatabase(create_param->database_path,
enable_on_disk_index,
create_param->env_override));
SyncStatusCode status = metadata_database->Initialize();
if (status == SYNC_DATABASE_ERROR_FAILED) {
// Delete the previous instance to avoid creating a LevelDB instance for
// the same path.
metadata_database.reset();
metadata_database.reset(
new MetadataDatabase(create_param->database_path,
enable_on_disk_index,
create_param->env_override));
status = metadata_database->Initialize();
}
if (status != SYNC_STATUS_OK)
metadata_database.reset();
callback.Run(status, metadata_database.Pass());
}
SyncStatusCode MetadataDatabase::Initialize() { SyncStatusCode MetadataDatabase::Initialize() {
SyncStatusCode status = SYNC_STATUS_UNKNOWN; SyncStatusCode status = SYNC_STATUS_UNKNOWN;
bool created = false; bool created = false;
......
...@@ -352,15 +352,10 @@ class MetadataDatabase { ...@@ -352,15 +352,10 @@ class MetadataDatabase {
private: private:
friend class MetadataDatabaseTest; friend class MetadataDatabaseTest;
struct CreateParam;
MetadataDatabase( MetadataDatabase(const base::FilePath& database_path,
const base::FilePath& database_path, bool enable_on_disk_index,
bool enable_on_disk_index, leveldb::Env* env_override);
leveldb::Env* env_override);
static void CreateOnWorkerTaskRunner(
scoped_ptr<CreateParam> create_param,
const CreateCallback& callback);
SyncStatusCode Initialize(); SyncStatusCode Initialize();
// Database manipulation methods. // Database manipulation methods.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment