| 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 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_H_ | 5 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_H_ |
| 6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_H_ | 6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "chrome/browser/sync_file_system/sync_callbacks.h" | 22 #include "chrome/browser/sync_file_system/sync_callbacks.h" |
| 23 #include "chrome/browser/sync_file_system/sync_status_code.h" | 23 #include "chrome/browser/sync_file_system/sync_status_code.h" |
| 24 | 24 |
| 25 namespace base { | 25 namespace base { |
| 26 class FilePath; | 26 class FilePath; |
| 27 class SequencedTaskRunner; | 27 class SequencedTaskRunner; |
| 28 class SingleThreadTaskRunner; | 28 class SingleThreadTaskRunner; |
| 29 } | 29 } |
| 30 | 30 |
| 31 namespace leveldb { | 31 namespace leveldb { |
| 32 class DB; | |
| 33 class Env; | 32 class Env; |
| 34 class WriteBatch; | |
| 35 } | 33 } |
| 36 | 34 |
| 37 namespace google_apis { | 35 namespace google_apis { |
| 38 class ChangeResource; | 36 class ChangeResource; |
| 39 class FileResource; | 37 class FileResource; |
| 40 class ResourceEntry; | 38 class ResourceEntry; |
| 41 } | 39 } |
| 42 | 40 |
| 43 namespace tracked_objects { | 41 namespace tracked_objects { |
| 44 class Location; | 42 class Location; |
| 45 } | 43 } |
| 46 | 44 |
| 47 namespace sync_file_system { | 45 namespace sync_file_system { |
| 48 namespace drive_backend { | 46 namespace drive_backend { |
| 49 | 47 |
| 50 class FileDetails; | 48 class FileDetails; |
| 51 class FileMetadata; | 49 class FileMetadata; |
| 52 class FileTracker; | 50 class FileTracker; |
| 51 class LevelDBWrapper; |
| 53 class MetadataDatabaseIndexInterface; | 52 class MetadataDatabaseIndexInterface; |
| 54 class ServiceMetadata; | 53 class ServiceMetadata; |
| 55 | 54 |
| 56 // MetadataDatabase holds and maintains a LevelDB instance and its indexes, | 55 // MetadataDatabase holds and maintains a LevelDB instance and its indexes, |
| 57 // which holds 1)ServiceMetadata, 2)FileMetadata and 3)FileTracker. | 56 // which holds 1)ServiceMetadata, 2)FileMetadata and 3)FileTracker. |
| 58 // 1) ServiceMetadata is a singleton in the database which holds information for | 57 // 1) ServiceMetadata is a singleton in the database which holds information for |
| 59 // the backend. | 58 // the backend. |
| 60 // 2) FileMetadata represents a remote-side file and holds latest known | 59 // 2) FileMetadata represents a remote-side file and holds latest known |
| 61 // metadata of the remote file. | 60 // metadata of the remote file. |
| 62 // 3) FileTracker represents a synced or to-be-synced file and maintains | 61 // 3) FileTracker represents a synced or to-be-synced file and maintains |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 // The entry point of the MetadataDatabase for production code. | 131 // The entry point of the MetadataDatabase for production code. |
| 133 // If |env_override| is non-NULL, internal LevelDB uses |env_override| instead | 132 // If |env_override| is non-NULL, internal LevelDB uses |env_override| instead |
| 134 // of leveldb::Env::Default(). Use leveldb::MemEnv in test code for faster | 133 // of leveldb::Env::Default(). Use leveldb::MemEnv in test code for faster |
| 135 // testing. | 134 // testing. |
| 136 static void Create(base::SequencedTaskRunner* worker_task_runner, | 135 static void Create(base::SequencedTaskRunner* worker_task_runner, |
| 137 base::SequencedTaskRunner* file_task_runner, | 136 base::SequencedTaskRunner* file_task_runner, |
| 138 const base::FilePath& database_path, | 137 const base::FilePath& database_path, |
| 139 leveldb::Env* env_override, | 138 leveldb::Env* env_override, |
| 140 const CreateCallback& callback); | 139 const CreateCallback& callback); |
| 141 static SyncStatusCode CreateForTesting( | 140 static SyncStatusCode CreateForTesting( |
| 142 scoped_ptr<leveldb::DB> db, | 141 scoped_ptr<LevelDBWrapper> db, |
| 143 scoped_ptr<MetadataDatabase>* metadata_database_out); | 142 scoped_ptr<MetadataDatabase>* metadata_database_out); |
| 144 | 143 |
| 145 ~MetadataDatabase(); | 144 ~MetadataDatabase(); |
| 146 | 145 |
| 147 static void ClearDatabase(scoped_ptr<MetadataDatabase> metadata_database); | 146 static void ClearDatabase(scoped_ptr<MetadataDatabase> metadata_database); |
| 148 | 147 |
| 149 int64 GetLargestFetchedChangeID() const; | 148 int64 GetLargestFetchedChangeID() const; |
| 150 int64 GetSyncRootTrackerID() const; | 149 int64 GetSyncRootTrackerID() const; |
| 151 bool HasSyncRoot() const; | 150 bool HasSyncRoot() const; |
| 152 | 151 |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 base::SequencedTaskRunner* file_task_runner, | 352 base::SequencedTaskRunner* file_task_runner, |
| 354 const base::FilePath& database_path, | 353 const base::FilePath& database_path, |
| 355 leveldb::Env* env_override); | 354 leveldb::Env* env_override); |
| 356 static void CreateOnFileTaskRunner( | 355 static void CreateOnFileTaskRunner( |
| 357 scoped_ptr<CreateParam> create_param, | 356 scoped_ptr<CreateParam> create_param, |
| 358 const CreateCallback& callback); | 357 const CreateCallback& callback); |
| 359 SyncStatusCode InitializeOnFileTaskRunner(); | 358 SyncStatusCode InitializeOnFileTaskRunner(); |
| 360 | 359 |
| 361 // Database manipulation methods. | 360 // Database manipulation methods. |
| 362 void RegisterTrackerAsAppRoot(const std::string& app_id, | 361 void RegisterTrackerAsAppRoot(const std::string& app_id, |
| 363 int64 tracker_id, | 362 int64 tracker_id); |
| 364 leveldb::WriteBatch* batch); | |
| 365 | 363 |
| 366 void CreateTrackerForParentAndFileID(const FileTracker& parent_tracker, | 364 void CreateTrackerForParentAndFileID(const FileTracker& parent_tracker, |
| 367 const std::string& file_id, | 365 const std::string& file_id); |
| 368 leveldb::WriteBatch* batch); | |
| 369 void CreateTrackerForParentAndFileMetadata(const FileTracker& parent_tracker, | 366 void CreateTrackerForParentAndFileMetadata(const FileTracker& parent_tracker, |
| 370 const FileMetadata& file_metadata, | 367 const FileMetadata& file_metadata, |
| 371 UpdateOption option, | 368 UpdateOption option); |
| 372 leveldb::WriteBatch* batch); | |
| 373 void CreateTrackerInternal(const FileTracker& parent_tracker, | 369 void CreateTrackerInternal(const FileTracker& parent_tracker, |
| 374 const std::string& file_id, | 370 const std::string& file_id, |
| 375 const FileDetails* details, | 371 const FileDetails* details, |
| 376 UpdateOption option, | 372 UpdateOption option); |
| 377 leveldb::WriteBatch* batch); | |
| 378 | 373 |
| 379 void MaybeAddTrackersForNewFile(const FileMetadata& file, | 374 void MaybeAddTrackersForNewFile(const FileMetadata& file, |
| 380 UpdateOption option, | 375 UpdateOption option); |
| 381 leveldb::WriteBatch* batch); | |
| 382 | 376 |
| 383 int64 IncrementTrackerID(leveldb::WriteBatch* batch); | 377 int64 IncrementTrackerID(); |
| 384 | 378 |
| 385 bool CanActivateTracker(const FileTracker& tracker); | 379 bool CanActivateTracker(const FileTracker& tracker); |
| 386 bool ShouldKeepDirty(const FileTracker& tracker) const; | 380 bool ShouldKeepDirty(const FileTracker& tracker) const; |
| 387 | 381 |
| 388 bool HasDisabledAppRoot(const FileTracker& tracker) const; | 382 bool HasDisabledAppRoot(const FileTracker& tracker) const; |
| 389 bool HasActiveTrackerForFileID(const std::string& file_id) const; | 383 bool HasActiveTrackerForFileID(const std::string& file_id) const; |
| 390 bool HasActiveTrackerForPath(int64 parent_tracker, | 384 bool HasActiveTrackerForPath(int64 parent_tracker, |
| 391 const std::string& title) const; | 385 const std::string& title) const; |
| 392 | 386 |
| 393 void RemoveUnneededTrackersForMissingFile(const std::string& file_id, | 387 void RemoveUnneededTrackersForMissingFile(const std::string& file_id); |
| 394 leveldb::WriteBatch* batch); | |
| 395 void UpdateByFileMetadata(const tracked_objects::Location& from_where, | 388 void UpdateByFileMetadata(const tracked_objects::Location& from_where, |
| 396 scoped_ptr<FileMetadata> file, | 389 scoped_ptr<FileMetadata> file, |
| 397 UpdateOption option, | 390 UpdateOption option); |
| 398 leveldb::WriteBatch* batch); | |
| 399 | 391 |
| 400 void WriteToDatabase(scoped_ptr<leveldb::WriteBatch> batch, | 392 void WriteToDatabase(const SyncStatusCallback& callback); |
| 401 const SyncStatusCallback& callback); | |
| 402 | 393 |
| 403 bool HasNewerFileMetadata(const std::string& file_id, int64 change_id); | 394 bool HasNewerFileMetadata(const std::string& file_id, int64 change_id); |
| 404 | 395 |
| 405 scoped_ptr<base::ListValue> DumpTrackers(); | 396 scoped_ptr<base::ListValue> DumpTrackers(); |
| 406 scoped_ptr<base::ListValue> DumpMetadata(); | 397 scoped_ptr<base::ListValue> DumpMetadata(); |
| 407 | 398 |
| 408 void AttachSyncRoot(const google_apis::FileResource& sync_root_folder, | 399 void AttachSyncRoot(const google_apis::FileResource& sync_root_folder); |
| 409 leveldb::WriteBatch* batch); | 400 void AttachInitialAppRoot(const google_apis::FileResource& app_root_folder); |
| 410 void AttachInitialAppRoot(const google_apis::FileResource& app_root_folder, | |
| 411 leveldb::WriteBatch* batch); | |
| 412 | 401 |
| 413 void ForceActivateTrackerByPath(int64 parent_tracker_id, | 402 void ForceActivateTrackerByPath(int64 parent_tracker_id, |
| 414 const std::string& title, | 403 const std::string& title, |
| 415 const std::string& file_id, | 404 const std::string& file_id); |
| 416 leveldb::WriteBatch* batch); | |
| 417 | 405 |
| 418 void DetachFromSequence(); | 406 void DetachFromSequence(); |
| 419 | 407 |
| 420 scoped_refptr<base::SequencedTaskRunner> worker_task_runner_; | 408 scoped_refptr<base::SequencedTaskRunner> worker_task_runner_; |
| 421 scoped_refptr<base::SequencedTaskRunner> file_task_runner_; | 409 scoped_refptr<base::SequencedTaskRunner> file_task_runner_; |
| 422 base::FilePath database_path_; | 410 base::FilePath database_path_; |
| 423 leveldb::Env* env_override_; | 411 leveldb::Env* env_override_; |
| 424 scoped_ptr<leveldb::DB> db_; | 412 scoped_ptr<LevelDBWrapper> db_; |
| 425 | 413 |
| 426 int64 largest_known_change_id_; | 414 int64 largest_known_change_id_; |
| 427 | 415 |
| 428 scoped_ptr<MetadataDatabaseIndexInterface> index_; | 416 scoped_ptr<MetadataDatabaseIndexInterface> index_; |
| 429 | 417 |
| 430 base::WeakPtrFactory<MetadataDatabase> weak_ptr_factory_; | 418 base::WeakPtrFactory<MetadataDatabase> weak_ptr_factory_; |
| 431 | 419 |
| 432 base::SequenceChecker worker_sequence_checker_; | 420 base::SequenceChecker worker_sequence_checker_; |
| 433 | 421 |
| 434 DISALLOW_COPY_AND_ASSIGN(MetadataDatabase); | 422 DISALLOW_COPY_AND_ASSIGN(MetadataDatabase); |
| 435 }; | 423 }; |
| 436 | 424 |
| 437 } // namespace drive_backend | 425 } // namespace drive_backend |
| 438 } // namespace sync_file_system | 426 } // namespace sync_file_system |
| 439 | 427 |
| 440 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_H_ | 428 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_H_ |
| OLD | NEW |