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 |