Chromium Code Reviews| Index: chrome/browser/sync_file_system/drive_backend/metadata_database.cc |
| diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc |
| index 3cc4f86ec9b7bb0dd0abc46071be0e2ff8e5d99f..a2ac5b7bc83a6dbb970a79b7e0ede61e1b958c79 100644 |
| --- a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc |
| +++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc |
| @@ -191,19 +191,6 @@ scoped_ptr<FileTracker> CloneFileTracker(const FileTracker* obj) { |
| return scoped_ptr<FileTracker>(new FileTracker(*obj)); |
| } |
| -void WriteOnFileTaskRunner( |
| - leveldb::DB* db, |
| - scoped_ptr<leveldb::WriteBatch> batch, |
| - scoped_refptr<base::SequencedTaskRunner> worker_task_runner, |
| - const SyncStatusCallback& callback) { |
| - DCHECK(db); |
| - DCHECK(batch); |
| - leveldb::Status status = db->Write(leveldb::WriteOptions(), batch.get()); |
| - worker_task_runner->PostTask( |
| - FROM_HERE, |
| - base::Bind(callback, LevelDBStatusToSyncStatusCode(status))); |
| -} |
| - |
| // Returns true if |db| has no content. |
| bool IsDatabaseEmpty(leveldb::DB* db) { |
| DCHECK(db); |
| @@ -543,16 +530,13 @@ void RemoveFileTracker(int64 tracker_id, |
| struct MetadataDatabase::CreateParam { |
| scoped_refptr<base::SequencedTaskRunner> worker_task_runner; |
| - scoped_refptr<base::SequencedTaskRunner> file_task_runner; |
| base::FilePath database_path; |
| leveldb::Env* env_override; |
| CreateParam(base::SequencedTaskRunner* worker_task_runner, |
| - base::SequencedTaskRunner* file_task_runner, |
| const base::FilePath& database_path, |
| leveldb::Env* env_override) |
| : worker_task_runner(worker_task_runner), |
| - file_task_runner(file_task_runner), |
| database_path(database_path), |
| env_override(env_override) { |
| } |
| @@ -560,15 +544,13 @@ struct MetadataDatabase::CreateParam { |
| // static |
| void MetadataDatabase::Create(base::SequencedTaskRunner* worker_task_runner, |
| - base::SequencedTaskRunner* file_task_runner, |
| const base::FilePath& database_path, |
| leveldb::Env* env_override, |
| const CreateCallback& callback) { |
| - file_task_runner->PostTask(FROM_HERE, base::Bind( |
| - &MetadataDatabase::CreateOnFileTaskRunner, |
| + worker_task_runner->PostTask(FROM_HERE, base::Bind( |
| + &MetadataDatabase::CreateOnWorkerTaskRunner, |
| base::Passed(make_scoped_ptr(new CreateParam( |
| worker_task_runner, |
| - file_task_runner, |
| database_path, |
| env_override))), |
| callback)); |
| @@ -580,31 +562,29 @@ SyncStatusCode MetadataDatabase::CreateForTesting( |
| scoped_ptr<MetadataDatabase>* metadata_database_out) { |
| scoped_ptr<MetadataDatabase> metadata_database( |
| new MetadataDatabase(base::ThreadTaskRunnerHandle::Get(), |
| - base::ThreadTaskRunnerHandle::Get(), |
| base::FilePath(), NULL)); |
| metadata_database->db_ = db.Pass(); |
| - SyncStatusCode status = |
| - metadata_database->InitializeOnFileTaskRunner(); |
| + SyncStatusCode status = metadata_database->Initialize(); |
| if (status == SYNC_STATUS_OK) |
| *metadata_database_out = metadata_database.Pass(); |
| return status; |
| } |
| MetadataDatabase::~MetadataDatabase() { |
| - file_task_runner_->DeleteSoon(FROM_HERE, db_.release()); |
| + worker_task_runner_->DeleteSoon(FROM_HERE, db_.release()); |
| } |
| // static |
| void MetadataDatabase::ClearDatabase( |
| scoped_ptr<MetadataDatabase> metadata_database) { |
| DCHECK(metadata_database); |
| - scoped_refptr<base::SequencedTaskRunner> file_task_runner = |
| - metadata_database->file_task_runner_; |
| + scoped_refptr<base::SequencedTaskRunner> worker_task_runner = |
| + metadata_database->worker_task_runner_; |
|
nhiroki
2014/08/04 05:27:14
nit: You can just call "metadata_database->worker_
nhiroki
2014/08/04 05:28:44
Oops... sorry. I missed that |metadata_database| w
peria
2014/08/04 05:52:34
Acknowledged.
|
| base::FilePath database_path = metadata_database->database_path_; |
| DCHECK(!database_path.empty()); |
| metadata_database.reset(); |
| - file_task_runner->PostTask( |
| + worker_task_runner->PostTask( |
| FROM_HERE, |
| base::Bind(base::IgnoreResult(base::DeleteFile), |
| database_path, true /* recursive */)); |
| @@ -1423,30 +1403,25 @@ void MetadataDatabase::GetRegisteredAppIDs(std::vector<std::string>* app_ids) { |
| MetadataDatabase::MetadataDatabase( |
| base::SequencedTaskRunner* worker_task_runner, |
| - base::SequencedTaskRunner* file_task_runner, |
| const base::FilePath& database_path, |
| leveldb::Env* env_override) |
| : worker_task_runner_(worker_task_runner), |
| - file_task_runner_(file_task_runner), |
| database_path_(database_path), |
| env_override_(env_override), |
| largest_known_change_id_(0), |
| weak_ptr_factory_(this) { |
| DCHECK(worker_task_runner); |
| - DCHECK(file_task_runner); |
| } |
| // static |
| -void MetadataDatabase::CreateOnFileTaskRunner( |
| +void MetadataDatabase::CreateOnWorkerTaskRunner( |
| scoped_ptr<CreateParam> create_param, |
| const CreateCallback& callback) { |
|
nhiroki
2014/08/04 05:27:14
Can you check 'worker_sequence_checker_' here?
peria
2014/08/04 05:52:34
This is a static method, so we cannot use member v
|
| scoped_ptr<MetadataDatabase> metadata_database( |
| new MetadataDatabase(create_param->worker_task_runner.get(), |
| - create_param->file_task_runner.get(), |
| create_param->database_path, |
| create_param->env_override)); |
| - SyncStatusCode status = |
| - metadata_database->InitializeOnFileTaskRunner(); |
| + SyncStatusCode status = metadata_database->Initialize(); |
| if (status != SYNC_STATUS_OK) |
| metadata_database.reset(); |
| @@ -1457,9 +1432,9 @@ void MetadataDatabase::CreateOnFileTaskRunner( |
| callback, status, base::Passed(&metadata_database))); |
| } |
| -SyncStatusCode MetadataDatabase::InitializeOnFileTaskRunner() { |
| +SyncStatusCode MetadataDatabase::Initialize() { |
| base::ThreadRestrictions::AssertIOAllowed(); |
| - DCHECK(file_task_runner_->RunsTasksOnCurrentThread()); |
| + DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
|
nhiroki
2014/08/04 05:27:15
You may have to use "worker_sequence_checker_".
peria
2014/08/04 05:52:34
Done.
|
| SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| bool created = false; |
| @@ -1744,14 +1719,10 @@ void MetadataDatabase::WriteToDatabase(scoped_ptr<leveldb::WriteBatch> batch, |
| return; |
| } |
| - // TODO(peria): Write to DB on disk synchronously. |
| - file_task_runner_->PostTask( |
| + leveldb::Status status = db_->Write(leveldb::WriteOptions(), batch.get()); |
| + worker_task_runner_->PostTask( |
| FROM_HERE, |
| - base::Bind(&WriteOnFileTaskRunner, |
| - base::Unretained(db_.get()), |
| - base::Passed(&batch), |
| - worker_task_runner_, |
| - callback)); |
| + base::Bind(callback, LevelDBStatusToSyncStatusCode(status))); |
|
nhiroki
2014/08/04 05:27:15
I guess you don't have to post a task here since y
peria
2014/08/04 05:52:34
Done.
|
| } |
| scoped_ptr<base::ListValue> MetadataDatabase::DumpFiles( |