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 "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 15 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index_
interface.h" |
| 16 #include "chrome/browser/sync_file_system/drive_backend/tracker_id_set.h" |
16 | 17 |
17 namespace sync_file_system { | 18 namespace sync_file_system { |
18 namespace drive_backend { | 19 namespace drive_backend { |
19 | 20 |
20 struct ParentIDAndTitle { | 21 class FileMetadata; |
21 int64 parent_id; | 22 class FileTracker; |
22 std::string title; | 23 struct DatabaseContents; |
23 | |
24 ParentIDAndTitle(); | |
25 ParentIDAndTitle(int64 parent_id, const std::string& title); | |
26 }; | |
27 | |
28 bool operator==(const ParentIDAndTitle& left, const ParentIDAndTitle& right); | |
29 bool operator<(const ParentIDAndTitle& left, const ParentIDAndTitle& right); | |
30 | 24 |
31 } // namespace drive_backend | 25 } // namespace drive_backend |
32 } // namespace sync_file_system | 26 } // namespace sync_file_system |
33 | 27 |
34 namespace BASE_HASH_NAMESPACE { | 28 namespace BASE_HASH_NAMESPACE { |
35 | 29 |
36 #if defined(COMPILER_GCC) | 30 #if defined(COMPILER_GCC) |
37 template<> struct hash<sync_file_system::drive_backend::ParentIDAndTitle> { | 31 template<> struct hash<sync_file_system::drive_backend::ParentIDAndTitle> { |
38 std::size_t operator()( | 32 std::size_t operator()( |
39 const sync_file_system::drive_backend::ParentIDAndTitle& v) const { | 33 const sync_file_system::drive_backend::ParentIDAndTitle& v) const { |
40 return base::HashInts64(v.parent_id, hash<std::string>()(v.title)); | 34 return base::HashInts64(v.parent_id, hash<std::string>()(v.title)); |
41 } | 35 } |
42 }; | 36 }; |
43 #elif defined(COMPILER_MSVC) | 37 #elif defined(COMPILER_MSVC) |
44 inline size_t hash_value( | 38 inline size_t hash_value( |
45 const sync_file_system::drive_backend::ParentIDAndTitle& v) { | 39 const sync_file_system::drive_backend::ParentIDAndTitle& v) { |
46 return base::HashInts64(v.parent_id, hash_value(v.title)); | 40 return base::HashInts64(v.parent_id, hash_value(v.title)); |
47 } | 41 } |
48 #endif // COMPILER | 42 #endif // COMPILER |
49 | 43 |
50 } // namespace BASE_HASH_NAMESPACE | 44 } // namespace BASE_HASH_NAMESPACE |
51 | 45 |
52 namespace sync_file_system { | 46 namespace sync_file_system { |
53 namespace drive_backend { | 47 namespace drive_backend { |
54 | 48 |
55 class FileMetadata; | 49 // Maintains indexes of MetadataDatabase on memory. |
56 class FileTracker; | 50 class MetadataDatabaseIndex : public MetadataDatabaseIndexInterface { |
57 struct DatabaseContents; | |
58 | |
59 // Maintains indexes of MetadataDatabase. This class doesn't modify database | |
60 // entries on memory nor on disk. | |
61 class MetadataDatabaseIndex { | |
62 public: | 51 public: |
63 explicit MetadataDatabaseIndex(DatabaseContents* content); | 52 explicit MetadataDatabaseIndex(DatabaseContents* content); |
64 ~MetadataDatabaseIndex(); | 53 virtual ~MetadataDatabaseIndex(); |
65 | 54 |
66 // Returns FileMetadata identified by |file_id| if exists, otherwise returns | 55 // MetadataDatabaseIndexInterface overrides. |
67 // NULL. | 56 virtual const FileMetadata* GetFileMetadata( |
68 const FileMetadata* GetFileMetadata(const std::string& file_id) const; | 57 const std::string& file_id) const OVERRIDE; |
69 | 58 virtual const FileTracker* GetFileTracker(int64 tracker_id) const OVERRIDE; |
70 // Returns FileTracker identified by |tracker_id| if exists, otherwise returns | 59 virtual void StoreFileMetadata(scoped_ptr<FileMetadata> metadata) OVERRIDE; |
71 // NULL. | 60 virtual void StoreFileTracker(scoped_ptr<FileTracker> tracker) OVERRIDE; |
72 const FileTracker* GetFileTracker(int64 tracker_id) const; | 61 virtual void RemoveFileMetadata(const std::string& file_id) OVERRIDE; |
73 | 62 virtual void RemoveFileTracker(int64 tracker_id) OVERRIDE; |
74 // Stores |metadata| and updates indexes. | 63 virtual TrackerIDSet GetFileTrackerIDsByFileID( |
75 // This overwrites existing FileMetadata for the same |file_id|. | 64 const std::string& file_id) const OVERRIDE; |
76 void StoreFileMetadata(scoped_ptr<FileMetadata> metadata); | 65 virtual int64 GetAppRootTracker(const std::string& app_id) const OVERRIDE; |
77 | 66 virtual TrackerIDSet GetFileTrackerIDsByParentAndTitle( |
78 // Stores |tracker| and updates indexes. | |
79 // This overwrites existing FileTracker for the same |tracker_id|. | |
80 void StoreFileTracker(scoped_ptr<FileTracker> tracker); | |
81 | |
82 // Removes FileMetadata identified by |file_id| from indexes. | |
83 void RemoveFileMetadata(const std::string& file_id); | |
84 | |
85 // Removes FileTracker identified by |tracker_id| from indexes. | |
86 void RemoveFileTracker(int64 tracker_id); | |
87 | |
88 // Returns a set of FileTracker that have |file_id| as its own. | |
89 TrackerIDSet GetFileTrackerIDsByFileID(const std::string& file_id) const; | |
90 | |
91 // Returns an app-root tracker identified by |app_id|. Returns 0 if not | |
92 // found. | |
93 int64 GetAppRootTracker(const std::string& app_id) const; | |
94 | |
95 // Returns a set of FileTracker that have |parent_tracker_id| and |title|. | |
96 TrackerIDSet GetFileTrackerIDsByParentAndTitle( | |
97 int64 parent_tracker_id, | 67 int64 parent_tracker_id, |
98 const std::string& title) const; | 68 const std::string& title) const OVERRIDE; |
99 | 69 virtual std::vector<int64> GetFileTrackerIDsByParent( |
100 std::vector<int64> GetFileTrackerIDsByParent(int64 parent_tracker_id) const; | 70 int64 parent_tracker_id) const OVERRIDE; |
101 | 71 virtual std::string PickMultiTrackerFileID() const OVERRIDE; |
102 // Returns the |file_id| of a file that has multiple trackers. | 72 virtual ParentIDAndTitle PickMultiBackingFilePath() const OVERRIDE; |
103 std::string PickMultiTrackerFileID() const; | 73 virtual int64 PickDirtyTracker() const OVERRIDE; |
104 | 74 virtual void DemoteDirtyTracker(int64 tracker_id) OVERRIDE; |
105 // Returns a pair of |parent_tracker_id| and |title| that has multiple file | 75 virtual bool HasDemotedDirtyTracker() const OVERRIDE; |
106 // at the path. | 76 virtual void PromoteDemotedDirtyTrackers() OVERRIDE; |
107 ParentIDAndTitle PickMultiBackingFilePath() const; | 77 virtual size_t CountDirtyTracker() const OVERRIDE; |
108 | 78 virtual size_t CountFileMetadata() const OVERRIDE; |
109 // Returns a FileTracker whose |dirty| is set and which isn't demoted. | 79 virtual size_t CountFileTracker() const OVERRIDE; |
110 // Returns 0 if not found. | 80 virtual std::vector<std::string> GetRegisteredAppIDs() const OVERRIDE; |
111 int64 PickDirtyTracker() const; | 81 virtual std::vector<int64> GetAllTrackerIDs() const OVERRIDE; |
112 | 82 virtual std::vector<std::string> GetAllMetadataIDs() const OVERRIDE; |
113 // Demotes a dirty tracker. | |
114 void DemoteDirtyTracker(int64 tracker_id); | |
115 | |
116 bool HasDemotedDirtyTracker() const; | |
117 | |
118 // Promotes all demoted dirty trackers to normal dirty trackers. | |
119 void PromoteDemotedDirtyTrackers(); | |
120 | |
121 size_t CountDirtyTracker() const; | |
122 size_t CountFileMetadata() const; | |
123 size_t CountFileTracker() const; | |
124 std::vector<std::string> GetRegisteredAppIDs() const; | |
125 std::vector<int64> GetAllTrackerIDs() const; | |
126 std::vector<std::string> GetAllMetadataIDs() const; | |
127 | 83 |
128 private: | 84 private: |
129 typedef base::ScopedPtrHashMap<std::string, FileMetadata> MetadataByID; | 85 typedef base::ScopedPtrHashMap<std::string, FileMetadata> MetadataByID; |
130 typedef base::ScopedPtrHashMap<int64, FileTracker> TrackerByID; | 86 typedef base::ScopedPtrHashMap<int64, FileTracker> TrackerByID; |
131 typedef base::hash_map<std::string, TrackerIDSet> TrackerIDsByFileID; | 87 typedef base::hash_map<std::string, TrackerIDSet> TrackerIDsByFileID; |
132 typedef base::hash_map<std::string, TrackerIDSet> TrackerIDsByTitle; | 88 typedef base::hash_map<std::string, TrackerIDSet> TrackerIDsByTitle; |
133 typedef std::map<int64, TrackerIDsByTitle> TrackerIDsByParentAndTitle; | 89 typedef std::map<int64, TrackerIDsByTitle> TrackerIDsByParentAndTitle; |
134 typedef base::hash_map<std::string, int64> TrackerIDByAppID; | 90 typedef base::hash_map<std::string, int64> TrackerIDByAppID; |
135 typedef base::hash_set<std::string> FileIDSet; | 91 typedef base::hash_set<std::string> FileIDSet; |
136 typedef base::hash_set<ParentIDAndTitle> PathSet; | 92 typedef base::hash_set<ParentIDAndTitle> PathSet; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 DirtyTrackers dirty_trackers_; | 132 DirtyTrackers dirty_trackers_; |
177 DirtyTrackers demoted_dirty_trackers_; | 133 DirtyTrackers demoted_dirty_trackers_; |
178 | 134 |
179 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseIndex); | 135 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseIndex); |
180 }; | 136 }; |
181 | 137 |
182 } // namespace drive_backend | 138 } // namespace drive_backend |
183 } // namespace sync_file_system | 139 } // namespace sync_file_system |
184 | 140 |
185 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_INDEX
_H_ | 141 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_INDEX
_H_ |
OLD | NEW |