Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <stack> | 8 #include <stack> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 515 if (index->GetFileTrackerIDsByFileID(file_id).empty()) { | 515 if (index->GetFileTrackerIDsByFileID(file_id).empty()) { |
| 516 index->RemoveFileMetadata(file_id); | 516 index->RemoveFileMetadata(file_id); |
| 517 } | 517 } |
| 518 } | 518 } |
| 519 | 519 |
| 520 } // namespace | 520 } // namespace |
| 521 | 521 |
| 522 struct MetadataDatabase::CreateParam { | 522 struct MetadataDatabase::CreateParam { |
| 523 scoped_refptr<base::SequencedTaskRunner> worker_task_runner; | 523 scoped_refptr<base::SequencedTaskRunner> worker_task_runner; |
| 524 base::FilePath database_path; | 524 base::FilePath database_path; |
| 525 bool enable_on_disk_index; | |
| 525 leveldb::Env* env_override; | 526 leveldb::Env* env_override; |
| 526 | 527 |
| 527 CreateParam( | 528 CreateParam( |
| 528 const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner, | 529 const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner, |
| 529 const base::FilePath& database_path, | 530 const base::FilePath& database_path, |
| 531 bool enable_on_disk_index, | |
| 530 leveldb::Env* env_override) | 532 leveldb::Env* env_override) |
| 531 : worker_task_runner(worker_task_runner), | 533 : worker_task_runner(worker_task_runner), |
| 532 database_path(database_path), | 534 database_path(database_path), |
| 535 enable_on_disk_index(enable_on_disk_index), | |
| 533 env_override(env_override) {} | 536 env_override(env_override) {} |
| 534 }; | 537 }; |
| 535 | 538 |
| 536 // static | 539 // static |
| 537 void MetadataDatabase::Create( | 540 void MetadataDatabase::Create( |
| 538 const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner, | 541 const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner, |
| 539 const base::FilePath& database_path, | 542 const base::FilePath& database_path, |
| 540 leveldb::Env* env_override, | 543 leveldb::Env* env_override, |
| 541 const CreateCallback& callback) { | 544 const CreateCallback& callback) { |
| 545 bool enable_on_disk_index = !CommandLine::ForCurrentProcess()->HasSwitch( | |
| 546 kDisableMetadataDatabaseOnDisk); | |
| 547 | |
| 548 worker_task_runner->PostTask(FROM_HERE, base::Bind( | |
| 549 &MetadataDatabase::CreateOnWorkerTaskRunner, | |
| 550 base::Passed(make_scoped_ptr(new CreateParam( | |
| 551 worker_task_runner, | |
| 552 database_path, | |
| 553 enable_on_disk_index, | |
| 554 env_override))), | |
| 555 callback)); | |
| 556 } | |
| 557 | |
| 558 // static | |
| 559 void MetadataDatabase::CreateOnWorkerForTesting( | |
| 560 const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner, | |
| 561 const base::FilePath& database_path, | |
| 562 bool enable_on_disk_index, | |
| 563 leveldb::Env* env_override, | |
| 564 const CreateCallback& callback) { | |
| 542 worker_task_runner->PostTask(FROM_HERE, base::Bind( | 565 worker_task_runner->PostTask(FROM_HERE, base::Bind( |
|
tzik
2014/09/09 08:33:27
This PostTask is no longer needed, though we've no
peria
2014/09/10 05:40:12
Acknowledged.
| |
| 543 &MetadataDatabase::CreateOnWorkerTaskRunner, | 566 &MetadataDatabase::CreateOnWorkerTaskRunner, |
| 544 base::Passed(make_scoped_ptr(new CreateParam( | 567 base::Passed(make_scoped_ptr(new CreateParam( |
| 545 worker_task_runner, | 568 worker_task_runner, |
| 546 database_path, | 569 database_path, |
| 570 enable_on_disk_index, | |
| 547 env_override))), | 571 env_override))), |
| 548 callback)); | 572 callback)); |
| 549 } | 573 } |
| 550 | 574 |
| 551 // static | 575 // static |
| 552 SyncStatusCode MetadataDatabase::CreateForTesting( | 576 SyncStatusCode MetadataDatabase::CreateForTesting( |
| 553 scoped_ptr<LevelDBWrapper> db, | 577 scoped_ptr<LevelDBWrapper> db, |
| 554 bool enable_on_disk_index, | 578 bool enable_on_disk_index, |
| 555 scoped_ptr<MetadataDatabase>* metadata_database_out) { | 579 scoped_ptr<MetadataDatabase>* metadata_database_out) { |
| 556 scoped_ptr<MetadataDatabase> metadata_database( | 580 scoped_ptr<MetadataDatabase> metadata_database( |
| (...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1418 weak_ptr_factory_(this) { | 1442 weak_ptr_factory_(this) { |
| 1419 DCHECK(worker_task_runner.get()); | 1443 DCHECK(worker_task_runner.get()); |
| 1420 } | 1444 } |
| 1421 | 1445 |
| 1422 // static | 1446 // static |
| 1423 void MetadataDatabase::CreateOnWorkerTaskRunner( | 1447 void MetadataDatabase::CreateOnWorkerTaskRunner( |
| 1424 scoped_ptr<CreateParam> create_param, | 1448 scoped_ptr<CreateParam> create_param, |
| 1425 const CreateCallback& callback) { | 1449 const CreateCallback& callback) { |
| 1426 DCHECK(create_param->worker_task_runner->RunsTasksOnCurrentThread()); | 1450 DCHECK(create_param->worker_task_runner->RunsTasksOnCurrentThread()); |
| 1427 | 1451 |
| 1428 bool enable_on_disk_index = !CommandLine::ForCurrentProcess()->HasSwitch( | |
| 1429 kDisableMetadataDatabaseOnDisk); | |
| 1430 scoped_ptr<MetadataDatabase> metadata_database( | 1452 scoped_ptr<MetadataDatabase> metadata_database( |
| 1431 new MetadataDatabase(create_param->worker_task_runner, | 1453 new MetadataDatabase(create_param->worker_task_runner, |
| 1432 create_param->database_path, | 1454 create_param->database_path, |
| 1433 enable_on_disk_index, | 1455 create_param->enable_on_disk_index, |
| 1434 create_param->env_override)); | 1456 create_param->env_override)); |
| 1435 | 1457 |
| 1436 SyncStatusCode status = metadata_database->Initialize(); | 1458 SyncStatusCode status = metadata_database->Initialize(); |
| 1437 if (status == SYNC_DATABASE_ERROR_FAILED) { | 1459 if (status == SYNC_DATABASE_ERROR_FAILED) { |
| 1438 // Delete the previous instance to avoid creating a LevelDB instance for | 1460 // Delete the previous instance to avoid creating a LevelDB instance for |
| 1439 // the same path. | 1461 // the same path. |
| 1440 metadata_database.reset(); | 1462 metadata_database.reset(); |
| 1441 | 1463 |
| 1442 metadata_database.reset( | 1464 metadata_database.reset( |
| 1443 new MetadataDatabase(create_param->worker_task_runner, | 1465 new MetadataDatabase(create_param->worker_task_runner, |
| 1444 create_param->database_path, | 1466 create_param->database_path, |
| 1445 enable_on_disk_index, | 1467 create_param->enable_on_disk_index, |
| 1446 create_param->env_override)); | 1468 create_param->env_override)); |
| 1447 status = metadata_database->Initialize(); | 1469 status = metadata_database->Initialize(); |
| 1448 } | 1470 } |
| 1449 | 1471 |
| 1450 if (status != SYNC_STATUS_OK) | 1472 if (status != SYNC_STATUS_OK) |
| 1451 metadata_database.reset(); | 1473 metadata_database.reset(); |
| 1452 | 1474 |
| 1453 if (metadata_database) | 1475 if (metadata_database) |
| 1454 metadata_database->DetachFromSequence(); | 1476 metadata_database->DetachFromSequence(); |
| 1455 create_param->worker_task_runner->PostTask( | 1477 create_param->worker_task_runner->PostTask( |
| (...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1986 return false; | 2008 return false; |
| 1987 | 2009 |
| 1988 if (!parents.empty()) | 2010 if (!parents.empty()) |
| 1989 return false; | 2011 return false; |
| 1990 | 2012 |
| 1991 return true; | 2013 return true; |
| 1992 } | 2014 } |
| 1993 | 2015 |
| 1994 } // namespace drive_backend | 2016 } // namespace drive_backend |
| 1995 } // namespace sync_file_system | 2017 } // namespace sync_file_system |
| OLD | NEW |