Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(883)

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/metadata_database_index.h

Issue 428063002: [SyncFS] Replace leveldb classes with LevelDBWrapper (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase on cl/437943002 Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698