| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_INDEX_H_ | 5 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_INDEX_H_ |
| 6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_INDEX_H_ | 6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_INDEX_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/containers/hash_tables.h" | 13 #include "base/containers/hash_tables.h" |
| 14 #include "base/containers/scoped_ptr_hash_map.h" | 14 #include "base/containers/scoped_ptr_hash_map.h" |
| 15 #include "base/memory/scoped_vector.h" | 15 #include "base/memory/scoped_vector.h" |
| 16 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index_
interface.h" | 16 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index_
interface.h" |
| 17 #include "chrome/browser/sync_file_system/drive_backend/tracker_id_set.h" | 17 #include "chrome/browser/sync_file_system/drive_backend/tracker_id_set.h" |
| 18 | 18 |
| 19 namespace leveldb { | |
| 20 class DB; | |
| 21 class WriteBatch; | |
| 22 } | |
| 23 | |
| 24 namespace sync_file_system { | 19 namespace sync_file_system { |
| 25 namespace drive_backend { | 20 namespace drive_backend { |
| 26 | 21 |
| 27 class FileMetadata; | 22 class FileMetadata; |
| 28 class FileTracker; | 23 class FileTracker; |
| 24 class LevelDBWrapper; |
| 29 class ServiceMetadata; | 25 class ServiceMetadata; |
| 30 | 26 |
| 31 } // namespace drive_backend | 27 } // namespace drive_backend |
| 32 } // namespace sync_file_system | 28 } // namespace sync_file_system |
| 33 | 29 |
| 34 namespace BASE_HASH_NAMESPACE { | 30 namespace BASE_HASH_NAMESPACE { |
| 35 | 31 |
| 36 #if defined(COMPILER_GCC) | 32 #if defined(COMPILER_GCC) |
| 37 template<> struct hash<sync_file_system::drive_backend::ParentIDAndTitle> { | 33 template<> struct hash<sync_file_system::drive_backend::ParentIDAndTitle> { |
| 38 std::size_t operator()( | 34 std::size_t operator()( |
| (...skipping 18 matching lines...) Expand all Loading... |
| 57 ~DatabaseContents(); | 53 ~DatabaseContents(); |
| 58 ScopedVector<FileMetadata> file_metadata; | 54 ScopedVector<FileMetadata> file_metadata; |
| 59 ScopedVector<FileTracker> file_trackers; | 55 ScopedVector<FileTracker> file_trackers; |
| 60 }; | 56 }; |
| 61 | 57 |
| 62 // Maintains indexes of MetadataDatabase on memory. | 58 // Maintains indexes of MetadataDatabase on memory. |
| 63 class MetadataDatabaseIndex : public MetadataDatabaseIndexInterface { | 59 class MetadataDatabaseIndex : public MetadataDatabaseIndexInterface { |
| 64 public: | 60 public: |
| 65 virtual ~MetadataDatabaseIndex(); | 61 virtual ~MetadataDatabaseIndex(); |
| 66 | 62 |
| 67 static scoped_ptr<MetadataDatabaseIndex> Create( | 63 static scoped_ptr<MetadataDatabaseIndex> Create(LevelDBWrapper* db); |
| 68 leveldb::DB* db, leveldb::WriteBatch* batch); | |
| 69 static scoped_ptr<MetadataDatabaseIndex> CreateForTesting( | 64 static scoped_ptr<MetadataDatabaseIndex> CreateForTesting( |
| 70 DatabaseContents* contents); | 65 DatabaseContents* contents); |
| 71 | 66 |
| 72 // MetadataDatabaseIndexInterface overrides. | 67 // MetadataDatabaseIndexInterface overrides. |
| 73 virtual bool GetFileMetadata( | 68 virtual bool GetFileMetadata( |
| 74 const std::string& file_id, FileMetadata* metadata) const OVERRIDE; | 69 const std::string& file_id, FileMetadata* metadata) const OVERRIDE; |
| 75 virtual bool GetFileTracker( | 70 virtual bool GetFileTracker( |
| 76 int64 tracker_id, FileTracker* tracker) const OVERRIDE; | 71 int64 tracker_id, FileTracker* tracker) const OVERRIDE; |
| 77 virtual void StoreFileMetadata( | 72 virtual void StoreFileMetadata(scoped_ptr<FileMetadata> metadata) OVERRIDE; |
| 78 scoped_ptr<FileMetadata> metadata, leveldb::WriteBatch* batch) OVERRIDE; | 73 virtual void StoreFileTracker(scoped_ptr<FileTracker> tracker) OVERRIDE; |
| 79 virtual void StoreFileTracker( | 74 virtual void RemoveFileMetadata(const std::string& file_id) OVERRIDE; |
| 80 scoped_ptr<FileTracker> tracker, leveldb::WriteBatch* batch) OVERRIDE; | 75 virtual void RemoveFileTracker(int64 tracker_id) OVERRIDE; |
| 81 virtual void RemoveFileMetadata( | |
| 82 const std::string& file_id, leveldb::WriteBatch* batch) OVERRIDE; | |
| 83 virtual void RemoveFileTracker( | |
| 84 int64 tracker_id, leveldb::WriteBatch* batch) OVERRIDE; | |
| 85 virtual TrackerIDSet GetFileTrackerIDsByFileID( | 76 virtual TrackerIDSet GetFileTrackerIDsByFileID( |
| 86 const std::string& file_id) const OVERRIDE; | 77 const std::string& file_id) const OVERRIDE; |
| 87 virtual int64 GetAppRootTracker(const std::string& app_id) const OVERRIDE; | 78 virtual int64 GetAppRootTracker(const std::string& app_id) const OVERRIDE; |
| 88 virtual TrackerIDSet GetFileTrackerIDsByParentAndTitle( | 79 virtual TrackerIDSet GetFileTrackerIDsByParentAndTitle( |
| 89 int64 parent_tracker_id, | 80 int64 parent_tracker_id, |
| 90 const std::string& title) const OVERRIDE; | 81 const std::string& title) const OVERRIDE; |
| 91 virtual std::vector<int64> GetFileTrackerIDsByParent( | 82 virtual std::vector<int64> GetFileTrackerIDsByParent( |
| 92 int64 parent_tracker_id) const OVERRIDE; | 83 int64 parent_tracker_id) const OVERRIDE; |
| 93 virtual std::string PickMultiTrackerFileID() const OVERRIDE; | 84 virtual std::string PickMultiTrackerFileID() const OVERRIDE; |
| 94 virtual ParentIDAndTitle PickMultiBackingFilePath() const OVERRIDE; | 85 virtual ParentIDAndTitle PickMultiBackingFilePath() const OVERRIDE; |
| 95 virtual int64 PickDirtyTracker() const OVERRIDE; | 86 virtual int64 PickDirtyTracker() const OVERRIDE; |
| 96 virtual void DemoteDirtyTracker( | 87 virtual void DemoteDirtyTracker(int64 tracker_id) OVERRIDE; |
| 97 int64 tracker_id, leveldb::WriteBatch* batch) OVERRIDE; | |
| 98 virtual bool HasDemotedDirtyTracker() const OVERRIDE; | 88 virtual bool HasDemotedDirtyTracker() const OVERRIDE; |
| 99 virtual void PromoteDemotedDirtyTrackers(leveldb::WriteBatch* batch) OVERRIDE; | 89 virtual void PromoteDemotedDirtyTrackers() OVERRIDE; |
| 100 virtual size_t CountDirtyTracker() const OVERRIDE; | 90 virtual size_t CountDirtyTracker() const OVERRIDE; |
| 101 virtual size_t CountFileMetadata() const OVERRIDE; | 91 virtual size_t CountFileMetadata() const OVERRIDE; |
| 102 virtual size_t CountFileTracker() const OVERRIDE; | 92 virtual size_t CountFileTracker() const OVERRIDE; |
| 103 virtual void SetSyncRootTrackerID(int64 sync_root_id, | 93 virtual void SetSyncRootTrackerID(int64 sync_root_id) const OVERRIDE; |
| 104 leveldb::WriteBatch* batch) const OVERRIDE; | 94 virtual void SetLargestChangeID(int64 largest_change_id) const OVERRIDE; |
| 105 virtual void SetLargestChangeID(int64 largest_change_id, | 95 virtual void SetNextTrackerID(int64 next_tracker_id) const OVERRIDE; |
| 106 leveldb::WriteBatch* batch) const OVERRIDE; | |
| 107 virtual void SetNextTrackerID(int64 next_tracker_id, | |
| 108 leveldb::WriteBatch* batch) const OVERRIDE; | |
| 109 virtual int64 GetSyncRootTrackerID() const OVERRIDE; | 96 virtual int64 GetSyncRootTrackerID() const OVERRIDE; |
| 110 virtual int64 GetLargestChangeID() const OVERRIDE; | 97 virtual int64 GetLargestChangeID() const OVERRIDE; |
| 111 virtual int64 GetNextTrackerID() const OVERRIDE; | 98 virtual int64 GetNextTrackerID() const OVERRIDE; |
| 112 virtual std::vector<std::string> GetRegisteredAppIDs() const OVERRIDE; | 99 virtual std::vector<std::string> GetRegisteredAppIDs() const OVERRIDE; |
| 113 virtual std::vector<int64> GetAllTrackerIDs() const OVERRIDE; | 100 virtual std::vector<int64> GetAllTrackerIDs() const OVERRIDE; |
| 114 virtual std::vector<std::string> GetAllMetadataIDs() const OVERRIDE; | 101 virtual std::vector<std::string> GetAllMetadataIDs() const OVERRIDE; |
| 115 | 102 |
| 116 private: | 103 private: |
| 117 typedef base::ScopedPtrHashMap<std::string, FileMetadata> MetadataByID; | 104 typedef base::ScopedPtrHashMap<std::string, FileMetadata> MetadataByID; |
| 118 typedef base::ScopedPtrHashMap<int64, FileTracker> TrackerByID; | 105 typedef base::ScopedPtrHashMap<int64, FileTracker> TrackerByID; |
| 119 typedef base::hash_map<std::string, TrackerIDSet> TrackerIDsByFileID; | 106 typedef base::hash_map<std::string, TrackerIDSet> TrackerIDsByFileID; |
| 120 typedef base::hash_map<std::string, TrackerIDSet> TrackerIDsByTitle; | 107 typedef base::hash_map<std::string, TrackerIDSet> TrackerIDsByTitle; |
| 121 typedef std::map<int64, TrackerIDsByTitle> TrackerIDsByParentAndTitle; | 108 typedef std::map<int64, TrackerIDsByTitle> TrackerIDsByParentAndTitle; |
| 122 typedef base::hash_map<std::string, int64> TrackerIDByAppID; | 109 typedef base::hash_map<std::string, int64> TrackerIDByAppID; |
| 123 typedef base::hash_set<std::string> FileIDSet; | 110 typedef base::hash_set<std::string> FileIDSet; |
| 124 typedef base::hash_set<ParentIDAndTitle> PathSet; | 111 typedef base::hash_set<ParentIDAndTitle> PathSet; |
| 125 typedef std::set<int64> DirtyTrackers; | 112 typedef std::set<int64> DirtyTrackers; |
| 126 | 113 |
| 127 friend class MetadataDatabaseTest; | 114 friend class MetadataDatabaseTest; |
| 128 | 115 |
| 129 MetadataDatabaseIndex(); | 116 explicit MetadataDatabaseIndex(LevelDBWrapper* db); |
| 130 void Initialize(scoped_ptr<ServiceMetadata> service_metadata, | 117 void Initialize(scoped_ptr<ServiceMetadata> service_metadata, |
| 131 DatabaseContents* contents); | 118 DatabaseContents* contents); |
| 132 | 119 |
| 133 // Maintains |app_root_by_app_id_|. | 120 // Maintains |app_root_by_app_id_|. |
| 134 void AddToAppIDIndex(const FileTracker& new_tracker); | 121 void AddToAppIDIndex(const FileTracker& new_tracker); |
| 135 void UpdateInAppIDIndex(const FileTracker& old_tracker, | 122 void UpdateInAppIDIndex(const FileTracker& old_tracker, |
| 136 const FileTracker& new_tracker); | 123 const FileTracker& new_tracker); |
| 137 void RemoveFromAppIDIndex(const FileTracker& tracker); | 124 void RemoveFromAppIDIndex(const FileTracker& tracker); |
| 138 | 125 |
| 139 // Maintains |trackers_by_file_id_| and |multi_tracker_file_ids_|. | 126 // Maintains |trackers_by_file_id_| and |multi_tracker_file_ids_|. |
| 140 void AddToFileIDIndexes(const FileTracker& new_tracker); | 127 void AddToFileIDIndexes(const FileTracker& new_tracker); |
| 141 void UpdateInFileIDIndexes(const FileTracker& old_tracker, | 128 void UpdateInFileIDIndexes(const FileTracker& old_tracker, |
| 142 const FileTracker& new_tracker); | 129 const FileTracker& new_tracker); |
| 143 void RemoveFromFileIDIndexes(const FileTracker& tracker); | 130 void RemoveFromFileIDIndexes(const FileTracker& tracker); |
| 144 | 131 |
| 145 // Maintains |trackers_by_parent_and_title_| and |multi_backing_file_paths_|. | 132 // Maintains |trackers_by_parent_and_title_| and |multi_backing_file_paths_|. |
| 146 void AddToPathIndexes(const FileTracker& new_tracker); | 133 void AddToPathIndexes(const FileTracker& new_tracker); |
| 147 void UpdateInPathIndexes(const FileTracker& old_tracker, | 134 void UpdateInPathIndexes(const FileTracker& old_tracker, |
| 148 const FileTracker& new_tracker1); | 135 const FileTracker& new_tracker1); |
| 149 void RemoveFromPathIndexes(const FileTracker& tracker); | 136 void RemoveFromPathIndexes(const FileTracker& tracker); |
| 150 | 137 |
| 151 // Maintains |dirty_trackers_| and |demoted_dirty_trackers_|. | 138 // Maintains |dirty_trackers_| and |demoted_dirty_trackers_|. |
| 152 void AddToDirtyTrackerIndexes(const FileTracker& new_tracker); | 139 void AddToDirtyTrackerIndexes(const FileTracker& new_tracker); |
| 153 void UpdateInDirtyTrackerIndexes(const FileTracker& old_tracker, | 140 void UpdateInDirtyTrackerIndexes(const FileTracker& old_tracker, |
| 154 const FileTracker& new_tracker); | 141 const FileTracker& new_tracker); |
| 155 void RemoveFromDirtyTrackerIndexes(const FileTracker& tracker); | 142 void RemoveFromDirtyTrackerIndexes(const FileTracker& tracker); |
| 156 | 143 |
| 157 scoped_ptr<ServiceMetadata> service_metadata_; | 144 scoped_ptr<ServiceMetadata> service_metadata_; |
| 145 LevelDBWrapper* db_; // Not owned |
| 158 | 146 |
| 159 MetadataByID metadata_by_id_; | 147 MetadataByID metadata_by_id_; |
| 160 TrackerByID tracker_by_id_; | 148 TrackerByID tracker_by_id_; |
| 161 | 149 |
| 162 TrackerIDByAppID app_root_by_app_id_; | 150 TrackerIDByAppID app_root_by_app_id_; |
| 163 | 151 |
| 164 TrackerIDsByFileID trackers_by_file_id_; | 152 TrackerIDsByFileID trackers_by_file_id_; |
| 165 FileIDSet multi_tracker_file_ids_; | 153 FileIDSet multi_tracker_file_ids_; |
| 166 | 154 |
| 167 TrackerIDsByParentAndTitle trackers_by_parent_and_title_; | 155 TrackerIDsByParentAndTitle trackers_by_parent_and_title_; |
| 168 PathSet multi_backing_file_paths_; | 156 PathSet multi_backing_file_paths_; |
| 169 | 157 |
| 170 DirtyTrackers dirty_trackers_; | 158 DirtyTrackers dirty_trackers_; |
| 171 DirtyTrackers demoted_dirty_trackers_; | 159 DirtyTrackers demoted_dirty_trackers_; |
| 172 | 160 |
| 173 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseIndex); | 161 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseIndex); |
| 174 }; | 162 }; |
| 175 | 163 |
| 176 } // namespace drive_backend | 164 } // namespace drive_backend |
| 177 } // namespace sync_file_system | 165 } // namespace sync_file_system |
| 178 | 166 |
| 179 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_INDEX
_H_ | 167 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_INDEX
_H_ |
| OLD | NEW |