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 25 matching lines...) Expand all Loading... |
36 #include "third_party/leveldatabase/src/include/leveldb/env.h" | 36 #include "third_party/leveldatabase/src/include/leveldb/env.h" |
37 #include "third_party/leveldatabase/src/include/leveldb/status.h" | 37 #include "third_party/leveldatabase/src/include/leveldb/status.h" |
38 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" | 38 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" |
39 #include "webkit/common/fileapi/file_system_util.h" | 39 #include "webkit/common/fileapi/file_system_util.h" |
40 | 40 |
41 namespace sync_file_system { | 41 namespace sync_file_system { |
42 namespace drive_backend { | 42 namespace drive_backend { |
43 | 43 |
44 namespace { | 44 namespace { |
45 | 45 |
| 46 void EmptyStatusCallback(SyncStatusCode status) {} |
| 47 |
46 std::string FileKindToString(FileKind file_kind) { | 48 std::string FileKindToString(FileKind file_kind) { |
47 switch (file_kind) { | 49 switch (file_kind) { |
48 case FILE_KIND_UNSUPPORTED: | 50 case FILE_KIND_UNSUPPORTED: |
49 return "unsupported"; | 51 return "unsupported"; |
50 case FILE_KIND_FILE: | 52 case FILE_KIND_FILE: |
51 return "file"; | 53 return "file"; |
52 case FILE_KIND_FOLDER: | 54 case FILE_KIND_FOLDER: |
53 return "folder"; | 55 return "folder"; |
54 } | 56 } |
55 | 57 |
(...skipping 1304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1360 tracker_to_be_activated->set_dirty(false); | 1362 tracker_to_be_activated->set_dirty(false); |
1361 | 1363 |
1362 index_->StoreFileTracker(tracker_to_be_activated.Pass(), batch.get()); | 1364 index_->StoreFileTracker(tracker_to_be_activated.Pass(), batch.get()); |
1363 | 1365 |
1364 WriteToDatabase(batch.Pass(), callback); | 1366 WriteToDatabase(batch.Pass(), callback); |
1365 return ACTIVATION_PENDING; | 1367 return ACTIVATION_PENDING; |
1366 } | 1368 } |
1367 | 1369 |
1368 void MetadataDatabase::LowerTrackerPriority(int64 tracker_id) { | 1370 void MetadataDatabase::LowerTrackerPriority(int64 tracker_id) { |
1369 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1371 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
1370 index_->DemoteDirtyTracker(tracker_id); | 1372 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch); |
| 1373 index_->DemoteDirtyTracker(tracker_id, batch.get()); |
| 1374 WriteToDatabase(batch.Pass(), base::Bind(&EmptyStatusCallback)); |
1371 } | 1375 } |
1372 | 1376 |
1373 void MetadataDatabase::PromoteLowerPriorityTrackersToNormal() { | 1377 void MetadataDatabase::PromoteLowerPriorityTrackersToNormal() { |
1374 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1378 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
1375 index_->PromoteDemotedDirtyTrackers(); | 1379 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch); |
| 1380 index_->PromoteDemotedDirtyTrackers(batch.get()); |
| 1381 WriteToDatabase(batch.Pass(), base::Bind(&EmptyStatusCallback)); |
1376 } | 1382 } |
1377 | 1383 |
1378 bool MetadataDatabase::GetNormalPriorityDirtyTracker( | 1384 bool MetadataDatabase::GetNormalPriorityDirtyTracker( |
1379 FileTracker* tracker_out) const { | 1385 FileTracker* tracker_out) const { |
1380 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1386 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
1381 | 1387 |
1382 int64 dirty_tracker_id = index_->PickDirtyTracker(); | 1388 int64 dirty_tracker_id = index_->PickDirtyTracker(); |
1383 if (!dirty_tracker_id) | 1389 if (!dirty_tracker_id) |
1384 return false; | 1390 return false; |
1385 | 1391 |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1786 const SyncStatusCallback& callback) { | 1792 const SyncStatusCallback& callback) { |
1787 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1793 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
1788 | 1794 |
1789 if (!batch) { | 1795 if (!batch) { |
1790 worker_task_runner_->PostTask( | 1796 worker_task_runner_->PostTask( |
1791 FROM_HERE, | 1797 FROM_HERE, |
1792 base::Bind(callback, SYNC_STATUS_OK)); | 1798 base::Bind(callback, SYNC_STATUS_OK)); |
1793 return; | 1799 return; |
1794 } | 1800 } |
1795 | 1801 |
| 1802 // TODO(peria): Write to DB on disk synchronously. |
1796 file_task_runner_->PostTask( | 1803 file_task_runner_->PostTask( |
1797 FROM_HERE, | 1804 FROM_HERE, |
1798 base::Bind(&WriteOnFileTaskRunner, | 1805 base::Bind(&WriteOnFileTaskRunner, |
1799 base::Unretained(db_.get()), | 1806 base::Unretained(db_.get()), |
1800 base::Passed(&batch), | 1807 base::Passed(&batch), |
1801 worker_task_runner_, | 1808 worker_task_runner_, |
1802 callback)); | 1809 callback)); |
1803 } | 1810 } |
1804 | 1811 |
1805 scoped_ptr<base::ListValue> MetadataDatabase::DumpFiles( | 1812 scoped_ptr<base::ListValue> MetadataDatabase::DumpFiles( |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2016 index_->StoreFileMetadata(app_root_metadata.Pass(), batch); | 2023 index_->StoreFileMetadata(app_root_metadata.Pass(), batch); |
2017 index_->StoreFileTracker(app_root_tracker.Pass(), batch); | 2024 index_->StoreFileTracker(app_root_tracker.Pass(), batch); |
2018 } | 2025 } |
2019 | 2026 |
2020 void MetadataDatabase::DetachFromSequence() { | 2027 void MetadataDatabase::DetachFromSequence() { |
2021 worker_sequence_checker_.DetachFromSequence(); | 2028 worker_sequence_checker_.DetachFromSequence(); |
2022 } | 2029 } |
2023 | 2030 |
2024 } // namespace drive_backend | 2031 } // namespace drive_backend |
2025 } // namespace sync_file_system | 2032 } // namespace sync_file_system |
OLD | NEW |