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