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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 | 130 |
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 const base::FilePath& database_path, | 136 const base::FilePath& database_path, |
138 leveldb::Env* env_override, | 137 leveldb::Env* env_override, |
139 const CreateCallback& callback); | 138 const CreateCallback& callback); |
140 static SyncStatusCode CreateForTesting( | 139 static SyncStatusCode CreateForTesting( |
141 scoped_ptr<leveldb::DB> db, | 140 scoped_ptr<LevelDBWrapper> db, |
142 scoped_ptr<MetadataDatabase>* metadata_database_out); | 141 scoped_ptr<MetadataDatabase>* metadata_database_out); |
143 | 142 |
144 ~MetadataDatabase(); | 143 ~MetadataDatabase(); |
145 | 144 |
146 static void ClearDatabase(scoped_ptr<MetadataDatabase> metadata_database); | 145 static void ClearDatabase(scoped_ptr<MetadataDatabase> metadata_database); |
147 | 146 |
148 int64 GetLargestFetchedChangeID() const; | 147 int64 GetLargestFetchedChangeID() const; |
149 int64 GetSyncRootTrackerID() const; | 148 int64 GetSyncRootTrackerID() const; |
150 bool HasSyncRoot() const; | 149 bool HasSyncRoot() const; |
151 | 150 |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 MetadataDatabase(base::SequencedTaskRunner* worker_task_runner, | 350 MetadataDatabase(base::SequencedTaskRunner* worker_task_runner, |
352 const base::FilePath& database_path, | 351 const base::FilePath& database_path, |
353 leveldb::Env* env_override); | 352 leveldb::Env* env_override); |
354 static void CreateOnWorkerTaskRunner( | 353 static void CreateOnWorkerTaskRunner( |
355 scoped_ptr<CreateParam> create_param, | 354 scoped_ptr<CreateParam> create_param, |
356 const CreateCallback& callback); | 355 const CreateCallback& callback); |
357 SyncStatusCode Initialize(); | 356 SyncStatusCode Initialize(); |
358 | 357 |
359 // Database manipulation methods. | 358 // Database manipulation methods. |
360 void RegisterTrackerAsAppRoot(const std::string& app_id, | 359 void RegisterTrackerAsAppRoot(const std::string& app_id, |
361 int64 tracker_id, | 360 int64 tracker_id); |
362 leveldb::WriteBatch* batch); | |
363 | 361 |
364 void CreateTrackerForParentAndFileID(const FileTracker& parent_tracker, | 362 void CreateTrackerForParentAndFileID(const FileTracker& parent_tracker, |
365 const std::string& file_id, | 363 const std::string& file_id); |
366 leveldb::WriteBatch* batch); | |
367 void CreateTrackerForParentAndFileMetadata(const FileTracker& parent_tracker, | 364 void CreateTrackerForParentAndFileMetadata(const FileTracker& parent_tracker, |
368 const FileMetadata& file_metadata, | 365 const FileMetadata& file_metadata, |
369 UpdateOption option, | 366 UpdateOption option); |
370 leveldb::WriteBatch* batch); | |
371 void CreateTrackerInternal(const FileTracker& parent_tracker, | 367 void CreateTrackerInternal(const FileTracker& parent_tracker, |
372 const std::string& file_id, | 368 const std::string& file_id, |
373 const FileDetails* details, | 369 const FileDetails* details, |
374 UpdateOption option, | 370 UpdateOption option); |
375 leveldb::WriteBatch* batch); | |
376 | 371 |
377 void MaybeAddTrackersForNewFile(const FileMetadata& file, | 372 void MaybeAddTrackersForNewFile(const FileMetadata& file, |
378 UpdateOption option, | 373 UpdateOption option); |
379 leveldb::WriteBatch* batch); | |
380 | 374 |
381 int64 IncrementTrackerID(leveldb::WriteBatch* batch); | 375 int64 IncrementTrackerID(); |
382 | 376 |
383 bool CanActivateTracker(const FileTracker& tracker); | 377 bool CanActivateTracker(const FileTracker& tracker); |
384 bool ShouldKeepDirty(const FileTracker& tracker) const; | 378 bool ShouldKeepDirty(const FileTracker& tracker) const; |
385 | 379 |
386 bool HasDisabledAppRoot(const FileTracker& tracker) const; | 380 bool HasDisabledAppRoot(const FileTracker& tracker) const; |
387 bool HasActiveTrackerForFileID(const std::string& file_id) const; | 381 bool HasActiveTrackerForFileID(const std::string& file_id) const; |
388 bool HasActiveTrackerForPath(int64 parent_tracker, | 382 bool HasActiveTrackerForPath(int64 parent_tracker, |
389 const std::string& title) const; | 383 const std::string& title) const; |
390 | 384 |
391 void RemoveUnneededTrackersForMissingFile(const std::string& file_id, | 385 void RemoveUnneededTrackersForMissingFile(const std::string& file_id); |
392 leveldb::WriteBatch* batch); | |
393 void UpdateByFileMetadata(const tracked_objects::Location& from_where, | 386 void UpdateByFileMetadata(const tracked_objects::Location& from_where, |
394 scoped_ptr<FileMetadata> file, | 387 scoped_ptr<FileMetadata> file, |
395 UpdateOption option, | 388 UpdateOption option); |
396 leveldb::WriteBatch* batch); | |
397 | 389 |
398 void WriteToDatabase(scoped_ptr<leveldb::WriteBatch> batch, | 390 void WriteToDatabase(const SyncStatusCallback& callback); |
399 const SyncStatusCallback& callback); | |
400 | 391 |
401 bool HasNewerFileMetadata(const std::string& file_id, int64 change_id); | 392 bool HasNewerFileMetadata(const std::string& file_id, int64 change_id); |
402 | 393 |
403 scoped_ptr<base::ListValue> DumpTrackers(); | 394 scoped_ptr<base::ListValue> DumpTrackers(); |
404 scoped_ptr<base::ListValue> DumpMetadata(); | 395 scoped_ptr<base::ListValue> DumpMetadata(); |
405 | 396 |
406 void AttachSyncRoot(const google_apis::FileResource& sync_root_folder, | 397 void AttachSyncRoot(const google_apis::FileResource& sync_root_folder); |
407 leveldb::WriteBatch* batch); | 398 void AttachInitialAppRoot(const google_apis::FileResource& app_root_folder); |
408 void AttachInitialAppRoot(const google_apis::FileResource& app_root_folder, | |
409 leveldb::WriteBatch* batch); | |
410 | 399 |
411 void ForceActivateTrackerByPath(int64 parent_tracker_id, | 400 void ForceActivateTrackerByPath(int64 parent_tracker_id, |
412 const std::string& title, | 401 const std::string& title, |
413 const std::string& file_id, | 402 const std::string& file_id); |
414 leveldb::WriteBatch* batch); | |
415 | 403 |
416 void DetachFromSequence(); | 404 void DetachFromSequence(); |
417 | 405 |
418 scoped_refptr<base::SequencedTaskRunner> worker_task_runner_; | 406 scoped_refptr<base::SequencedTaskRunner> worker_task_runner_; |
419 base::FilePath database_path_; | 407 base::FilePath database_path_; |
420 leveldb::Env* env_override_; | 408 leveldb::Env* env_override_; |
421 scoped_ptr<leveldb::DB> db_; | 409 scoped_ptr<LevelDBWrapper> db_; |
422 | 410 |
423 int64 largest_known_change_id_; | 411 int64 largest_known_change_id_; |
424 | 412 |
425 scoped_ptr<MetadataDatabaseIndexInterface> index_; | 413 scoped_ptr<MetadataDatabaseIndexInterface> index_; |
426 | 414 |
427 base::WeakPtrFactory<MetadataDatabase> weak_ptr_factory_; | 415 base::WeakPtrFactory<MetadataDatabase> weak_ptr_factory_; |
428 | 416 |
429 base::SequenceChecker worker_sequence_checker_; | 417 base::SequenceChecker worker_sequence_checker_; |
430 | 418 |
431 DISALLOW_COPY_AND_ASSIGN(MetadataDatabase); | 419 DISALLOW_COPY_AND_ASSIGN(MetadataDatabase); |
432 }; | 420 }; |
433 | 421 |
434 } // namespace drive_backend | 422 } // namespace drive_backend |
435 } // namespace sync_file_system | 423 } // namespace sync_file_system |
436 | 424 |
437 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_H_ | 425 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_H_ |
OLD | NEW |