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 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index.
h" | 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index.
h" |
6 | 6 |
7 #include <tuple> | 7 #include <tuple> |
| 8 #include <utility> |
8 | 9 |
9 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
10 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
11 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
12 #include "base/threading/thread_restrictions.h" | 13 #include "base/threading/thread_restrictions.h" |
13 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" | 14 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" |
14 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" | 15 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" |
15 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h" | 16 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h" |
16 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 17 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
17 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" | 18 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 ScopedVector<FileTracker> reachable_trackers; | 169 ScopedVector<FileTracker> reachable_trackers; |
169 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { | 170 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { |
170 FileTracker* tracker = contents->file_trackers[i]; | 171 FileTracker* tracker = contents->file_trackers[i]; |
171 if (ContainsKey(visited_trackers, tracker->tracker_id())) { | 172 if (ContainsKey(visited_trackers, tracker->tracker_id())) { |
172 reachable_trackers.push_back(tracker); | 173 reachable_trackers.push_back(tracker); |
173 contents->file_trackers[i] = nullptr; | 174 contents->file_trackers[i] = nullptr; |
174 } else { | 175 } else { |
175 PutFileTrackerDeletionToDB(tracker->tracker_id(), db); | 176 PutFileTrackerDeletionToDB(tracker->tracker_id(), db); |
176 } | 177 } |
177 } | 178 } |
178 contents->file_trackers = reachable_trackers.Pass(); | 179 contents->file_trackers = std::move(reachable_trackers); |
179 | 180 |
180 // List all |file_id| referred by a tracker. | 181 // List all |file_id| referred by a tracker. |
181 base::hash_set<std::string> referred_file_ids; | 182 base::hash_set<std::string> referred_file_ids; |
182 for (size_t i = 0; i < contents->file_trackers.size(); ++i) | 183 for (size_t i = 0; i < contents->file_trackers.size(); ++i) |
183 referred_file_ids.insert(contents->file_trackers[i]->file_id()); | 184 referred_file_ids.insert(contents->file_trackers[i]->file_id()); |
184 | 185 |
185 // Delete all unreferred metadata. | 186 // Delete all unreferred metadata. |
186 ScopedVector<FileMetadata> referred_file_metadata; | 187 ScopedVector<FileMetadata> referred_file_metadata; |
187 for (size_t i = 0; i < contents->file_metadata.size(); ++i) { | 188 for (size_t i = 0; i < contents->file_metadata.size(); ++i) { |
188 FileMetadata* metadata = contents->file_metadata[i]; | 189 FileMetadata* metadata = contents->file_metadata[i]; |
189 if (ContainsKey(referred_file_ids, metadata->file_id())) { | 190 if (ContainsKey(referred_file_ids, metadata->file_id())) { |
190 referred_file_metadata.push_back(metadata); | 191 referred_file_metadata.push_back(metadata); |
191 contents->file_metadata[i] = nullptr; | 192 contents->file_metadata[i] = nullptr; |
192 } else { | 193 } else { |
193 PutFileMetadataDeletionToDB(metadata->file_id(), db); | 194 PutFileMetadataDeletionToDB(metadata->file_id(), db); |
194 } | 195 } |
195 } | 196 } |
196 contents->file_metadata = referred_file_metadata.Pass(); | 197 contents->file_metadata = std::move(referred_file_metadata); |
197 } | 198 } |
198 | 199 |
199 } // namespace | 200 } // namespace |
200 | 201 |
201 // static | 202 // static |
202 scoped_ptr<MetadataDatabaseIndex> | 203 scoped_ptr<MetadataDatabaseIndex> |
203 MetadataDatabaseIndex::Create(LevelDBWrapper* db) { | 204 MetadataDatabaseIndex::Create(LevelDBWrapper* db) { |
204 DCHECK(db); | 205 DCHECK(db); |
205 | 206 |
206 scoped_ptr<ServiceMetadata> service_metadata = InitializeServiceMetadata(db); | 207 scoped_ptr<ServiceMetadata> service_metadata = InitializeServiceMetadata(db); |
207 if (!service_metadata) | 208 if (!service_metadata) |
208 return scoped_ptr<MetadataDatabaseIndex>(); | 209 return scoped_ptr<MetadataDatabaseIndex>(); |
209 | 210 |
210 DatabaseContents contents; | 211 DatabaseContents contents; |
211 PutVersionToDB(kCurrentDatabaseVersion, db); | 212 PutVersionToDB(kCurrentDatabaseVersion, db); |
212 ReadDatabaseContents(db, &contents); | 213 ReadDatabaseContents(db, &contents); |
213 RemoveUnreachableItemsFromDB(&contents, | 214 RemoveUnreachableItemsFromDB(&contents, |
214 service_metadata->sync_root_tracker_id(), | 215 service_metadata->sync_root_tracker_id(), |
215 db); | 216 db); |
216 | 217 |
217 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(db)); | 218 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(db)); |
218 index->Initialize(service_metadata.Pass(), &contents); | 219 index->Initialize(std::move(service_metadata), &contents); |
219 return index.Pass(); | 220 return index; |
220 } | 221 } |
221 | 222 |
222 // static | 223 // static |
223 scoped_ptr<MetadataDatabaseIndex> | 224 scoped_ptr<MetadataDatabaseIndex> |
224 MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents, | 225 MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents, |
225 LevelDBWrapper* db) { | 226 LevelDBWrapper* db) { |
226 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(db)); | 227 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(db)); |
227 index->Initialize(make_scoped_ptr(new ServiceMetadata), contents); | 228 index->Initialize(make_scoped_ptr(new ServiceMetadata), contents); |
228 return index.Pass(); | 229 return index; |
229 } | 230 } |
230 | 231 |
231 void MetadataDatabaseIndex::Initialize( | 232 void MetadataDatabaseIndex::Initialize( |
232 scoped_ptr<ServiceMetadata> service_metadata, | 233 scoped_ptr<ServiceMetadata> service_metadata, |
233 DatabaseContents* contents) { | 234 DatabaseContents* contents) { |
234 service_metadata_ = service_metadata.Pass(); | 235 service_metadata_ = std::move(service_metadata); |
235 | 236 |
236 for (size_t i = 0; i < contents->file_metadata.size(); ++i) | 237 for (size_t i = 0; i < contents->file_metadata.size(); ++i) |
237 StoreFileMetadata(make_scoped_ptr(contents->file_metadata[i])); | 238 StoreFileMetadata(make_scoped_ptr(contents->file_metadata[i])); |
238 contents->file_metadata.weak_clear(); | 239 contents->file_metadata.weak_clear(); |
239 | 240 |
240 for (size_t i = 0; i < contents->file_trackers.size(); ++i) | 241 for (size_t i = 0; i < contents->file_trackers.size(); ++i) |
241 StoreFileTracker(make_scoped_ptr(contents->file_trackers[i])); | 242 StoreFileTracker(make_scoped_ptr(contents->file_trackers[i])); |
242 contents->file_trackers.weak_clear(); | 243 contents->file_trackers.weak_clear(); |
243 | 244 |
244 UMA_HISTOGRAM_COUNTS("SyncFileSystem.MetadataNumber", metadata_by_id_.size()); | 245 UMA_HISTOGRAM_COUNTS("SyncFileSystem.MetadataNumber", metadata_by_id_.size()); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 | 279 |
279 void MetadataDatabaseIndex::StoreFileMetadata( | 280 void MetadataDatabaseIndex::StoreFileMetadata( |
280 scoped_ptr<FileMetadata> metadata) { | 281 scoped_ptr<FileMetadata> metadata) { |
281 PutFileMetadataToDB(*metadata.get(), db_); | 282 PutFileMetadataToDB(*metadata.get(), db_); |
282 if (!metadata) { | 283 if (!metadata) { |
283 NOTREACHED(); | 284 NOTREACHED(); |
284 return; | 285 return; |
285 } | 286 } |
286 | 287 |
287 std::string file_id = metadata->file_id(); | 288 std::string file_id = metadata->file_id(); |
288 metadata_by_id_.set(file_id, metadata.Pass()); | 289 metadata_by_id_.set(file_id, std::move(metadata)); |
289 } | 290 } |
290 | 291 |
291 void MetadataDatabaseIndex::StoreFileTracker( | 292 void MetadataDatabaseIndex::StoreFileTracker( |
292 scoped_ptr<FileTracker> tracker) { | 293 scoped_ptr<FileTracker> tracker) { |
293 PutFileTrackerToDB(*tracker.get(), db_); | 294 PutFileTrackerToDB(*tracker.get(), db_); |
294 if (!tracker) { | 295 if (!tracker) { |
295 NOTREACHED(); | 296 NOTREACHED(); |
296 return; | 297 return; |
297 } | 298 } |
298 | 299 |
(...skipping 11 matching lines...) Expand all Loading... |
310 } else { | 311 } else { |
311 DVLOG(3) << "Updating tracker: " << tracker->tracker_id() | 312 DVLOG(3) << "Updating tracker: " << tracker->tracker_id() |
312 << " " << GetTrackerTitle(*tracker); | 313 << " " << GetTrackerTitle(*tracker); |
313 | 314 |
314 UpdateInAppIDIndex(*old_tracker, *tracker); | 315 UpdateInAppIDIndex(*old_tracker, *tracker); |
315 UpdateInPathIndexes(*old_tracker, *tracker); | 316 UpdateInPathIndexes(*old_tracker, *tracker); |
316 UpdateInFileIDIndexes(*old_tracker, *tracker); | 317 UpdateInFileIDIndexes(*old_tracker, *tracker); |
317 UpdateInDirtyTrackerIndexes(*old_tracker, *tracker); | 318 UpdateInDirtyTrackerIndexes(*old_tracker, *tracker); |
318 } | 319 } |
319 | 320 |
320 tracker_by_id_.set(tracker_id, tracker.Pass()); | 321 tracker_by_id_.set(tracker_id, std::move(tracker)); |
321 } | 322 } |
322 | 323 |
323 void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id) { | 324 void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id) { |
324 PutFileMetadataDeletionToDB(file_id, db_); | 325 PutFileMetadataDeletionToDB(file_id, db_); |
325 metadata_by_id_.erase(file_id); | 326 metadata_by_id_.erase(file_id); |
326 } | 327 } |
327 | 328 |
328 void MetadataDatabaseIndex::RemoveFileTracker(int64_t tracker_id) { | 329 void MetadataDatabaseIndex::RemoveFileTracker(int64_t tracker_id) { |
329 PutFileTrackerDeletionToDB(tracker_id, db_); | 330 PutFileTrackerDeletionToDB(tracker_id, db_); |
330 | 331 |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
762 | 763 |
763 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; | 764 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; |
764 dirty_trackers_.erase(tracker_id); | 765 dirty_trackers_.erase(tracker_id); |
765 | 766 |
766 demoted_dirty_trackers_.erase(tracker_id); | 767 demoted_dirty_trackers_.erase(tracker_id); |
767 } | 768 } |
768 } | 769 } |
769 | 770 |
770 } // namespace drive_backend | 771 } // namespace drive_backend |
771 } // namespace sync_file_system | 772 } // namespace sync_file_system |
OLD | NEW |