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

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

Issue 1545223002: Switch to standard integer types in chrome/browser/, part 4 of 4. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 4 years, 12 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
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 #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 8
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/string_util.h" 11 #include "base/strings/string_util.h"
12 #include "base/threading/thread_restrictions.h" 12 #include "base/threading/thread_restrictions.h"
13 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants. 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_util.h" 14 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h"
15 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h" 15 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h"
16 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" 16 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
17 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 17 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
18 #include "chrome/browser/sync_file_system/logger.h" 18 #include "chrome/browser/sync_file_system/logger.h"
19 #include "third_party/leveldatabase/src/include/leveldb/db.h" 19 #include "third_party/leveldatabase/src/include/leveldb/db.h"
20 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" 20 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
21 21
22 // LevelDB database schema 22 // LevelDB database schema
23 // ======================= 23 // =======================
24 // 24 //
25 // NOTE 25 // NOTE
26 // - Entries are sorted by keys. 26 // - Entries are sorted by keys.
27 // - int64 value is serialized as a string by base::Int64ToString(). 27 // - int64_t value is serialized as a string by base::Int64ToString().
28 // - ServiceMetadata, FileMetadata, and FileTracker values are serialized 28 // - ServiceMetadata, FileMetadata, and FileTracker values are serialized
29 // as a string by SerializeToString() of protocol buffers. 29 // as a string by SerializeToString() of protocol buffers.
30 // 30 //
31 // Version 3 31 // Version 3
32 // # Version of this schema 32 // # Version of this schema
33 // key: "VERSION" 33 // key: "VERSION"
34 // value: "3" 34 // value: "3"
35 // 35 //
36 // # Metadata of the SyncFS service 36 // # Metadata of the SyncFS service
37 // key: "SERVICE" 37 // key: "SERVICE"
38 // value: <ServiceMetadata 'service_metadata'> 38 // value: <ServiceMetadata 'service_metadata'>
39 // 39 //
40 // # Metadata of remote files 40 // # Metadata of remote files
41 // key: "FILE: " + <string 'file_id'> 41 // key: "FILE: " + <string 'file_id'>
42 // value: <FileMetadata 'metadata'> 42 // value: <FileMetadata 'metadata'>
43 // 43 //
44 // # Trackers of local file updates 44 // # Trackers of local file updates
45 // key: "TRACKER: " + <int64 'tracker_id'> 45 // key: "TRACKER: " + <int64_t 'tracker_id'>
46 // value: <FileTracker 'tracker'> 46 // value: <FileTracker 'tracker'>
47 47
48 namespace sync_file_system { 48 namespace sync_file_system {
49 namespace drive_backend { 49 namespace drive_backend {
50 50
51 ParentIDAndTitle::ParentIDAndTitle() : parent_id(0) {} 51 ParentIDAndTitle::ParentIDAndTitle() : parent_id(0) {}
52 ParentIDAndTitle::ParentIDAndTitle(int64 parent_id, 52 ParentIDAndTitle::ParentIDAndTitle(int64_t parent_id, const std::string& title)
53 const std::string& title)
54 : parent_id(parent_id), title(title) {} 53 : parent_id(parent_id), title(title) {}
55 54
56 bool operator==(const ParentIDAndTitle& left, const ParentIDAndTitle& right) { 55 bool operator==(const ParentIDAndTitle& left, const ParentIDAndTitle& right) {
57 return left.parent_id == right.parent_id && left.title == right.title; 56 return left.parent_id == right.parent_id && left.title == right.title;
58 } 57 }
59 58
60 bool operator<(const ParentIDAndTitle& left, const ParentIDAndTitle& right) { 59 bool operator<(const ParentIDAndTitle& left, const ParentIDAndTitle& right) {
61 return std::tie(left.parent_id, left.title) < 60 return std::tie(left.parent_id, left.title) <
62 std::tie(right.parent_id, right.title); 61 std::tie(right.parent_id, right.title);
63 } 62 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 "Failed to parse a FileMetadata"); 94 "Failed to parse a FileMetadata");
96 continue; 95 continue;
97 } 96 }
98 97
99 contents->file_metadata.push_back(metadata.release()); 98 contents->file_metadata.push_back(metadata.release());
100 continue; 99 continue;
101 } 100 }
102 101
103 std::string tracker_id_str; 102 std::string tracker_id_str;
104 if (RemovePrefix(key, kFileTrackerKeyPrefix, &tracker_id_str)) { 103 if (RemovePrefix(key, kFileTrackerKeyPrefix, &tracker_id_str)) {
105 int64 tracker_id = 0; 104 int64_t tracker_id = 0;
106 if (!base::StringToInt64(tracker_id_str, &tracker_id)) { 105 if (!base::StringToInt64(tracker_id_str, &tracker_id)) {
107 util::Log(logging::LOG_WARNING, FROM_HERE, 106 util::Log(logging::LOG_WARNING, FROM_HERE,
108 "Failed to parse TrackerID"); 107 "Failed to parse TrackerID");
109 continue; 108 continue;
110 } 109 }
111 110
112 scoped_ptr<FileTracker> tracker(new FileTracker); 111 scoped_ptr<FileTracker> tracker(new FileTracker);
113 if (!tracker->ParseFromString(itr->value().ToString())) { 112 if (!tracker->ParseFromString(itr->value().ToString())) {
114 util::Log(logging::LOG_WARNING, FROM_HERE, 113 util::Log(logging::LOG_WARNING, FROM_HERE,
115 "Failed to parse a Tracker"); 114 "Failed to parse a Tracker");
116 continue; 115 continue;
117 } 116 }
118 contents->file_trackers.push_back(tracker.release()); 117 contents->file_trackers.push_back(tracker.release());
119 continue; 118 continue;
120 } 119 }
121 } 120 }
122 } 121 }
123 122
124 void RemoveUnreachableItemsFromDB(DatabaseContents* contents, 123 void RemoveUnreachableItemsFromDB(DatabaseContents* contents,
125 int64 sync_root_tracker_id, 124 int64_t sync_root_tracker_id,
126 LevelDBWrapper* db) { 125 LevelDBWrapper* db) {
127 typedef std::map<int64, std::set<int64> > ChildTrackersByParent; 126 typedef std::map<int64_t, std::set<int64_t>> ChildTrackersByParent;
128 ChildTrackersByParent trackers_by_parent; 127 ChildTrackersByParent trackers_by_parent;
129 128
130 // Set up links from parent tracker to child trackers. 129 // Set up links from parent tracker to child trackers.
131 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { 130 for (size_t i = 0; i < contents->file_trackers.size(); ++i) {
132 const FileTracker& tracker = *contents->file_trackers[i]; 131 const FileTracker& tracker = *contents->file_trackers[i];
133 int64 parent_tracker_id = tracker.parent_tracker_id(); 132 int64_t parent_tracker_id = tracker.parent_tracker_id();
134 int64 tracker_id = tracker.tracker_id(); 133 int64_t tracker_id = tracker.tracker_id();
135 134
136 trackers_by_parent[parent_tracker_id].insert(tracker_id); 135 trackers_by_parent[parent_tracker_id].insert(tracker_id);
137 } 136 }
138 137
139 // Drop links from inactive trackers. 138 // Drop links from inactive trackers.
140 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { 139 for (size_t i = 0; i < contents->file_trackers.size(); ++i) {
141 const FileTracker& tracker = *contents->file_trackers[i]; 140 const FileTracker& tracker = *contents->file_trackers[i];
142 141
143 if (!tracker.active()) 142 if (!tracker.active())
144 trackers_by_parent.erase(tracker.tracker_id()); 143 trackers_by_parent.erase(tracker.tracker_id());
145 } 144 }
146 145
147 std::vector<int64> pending; 146 std::vector<int64_t> pending;
148 if (sync_root_tracker_id != kInvalidTrackerID) 147 if (sync_root_tracker_id != kInvalidTrackerID)
149 pending.push_back(sync_root_tracker_id); 148 pending.push_back(sync_root_tracker_id);
150 149
151 // Traverse tracker tree from sync-root. 150 // Traverse tracker tree from sync-root.
152 std::set<int64> visited_trackers; 151 std::set<int64_t> visited_trackers;
153 while (!pending.empty()) { 152 while (!pending.empty()) {
154 int64 tracker_id = pending.back(); 153 int64_t tracker_id = pending.back();
155 DCHECK_NE(kInvalidTrackerID, tracker_id); 154 DCHECK_NE(kInvalidTrackerID, tracker_id);
156 pending.pop_back(); 155 pending.pop_back();
157 156
158 if (!visited_trackers.insert(tracker_id).second) { 157 if (!visited_trackers.insert(tracker_id).second) {
159 NOTREACHED(); 158 NOTREACHED();
160 continue; 159 continue;
161 } 160 }
162 161
163 AppendContents( 162 AppendContents(
164 LookUpMap(trackers_by_parent, tracker_id, std::set<int64>()), 163 LookUpMap(trackers_by_parent, tracker_id, std::set<int64_t>()),
165 &pending); 164 &pending);
166 } 165 }
167 166
168 // Delete all unreachable trackers. 167 // Delete all unreachable trackers.
169 ScopedVector<FileTracker> reachable_trackers; 168 ScopedVector<FileTracker> reachable_trackers;
170 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { 169 for (size_t i = 0; i < contents->file_trackers.size(); ++i) {
171 FileTracker* tracker = contents->file_trackers[i]; 170 FileTracker* tracker = contents->file_trackers[i];
172 if (ContainsKey(visited_trackers, tracker->tracker_id())) { 171 if (ContainsKey(visited_trackers, tracker->tracker_id())) {
173 reachable_trackers.push_back(tracker); 172 reachable_trackers.push_back(tracker);
174 contents->file_trackers[i] = nullptr; 173 contents->file_trackers[i] = nullptr;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 bool MetadataDatabaseIndex::GetFileMetadata( 259 bool MetadataDatabaseIndex::GetFileMetadata(
261 const std::string& file_id, FileMetadata* metadata) const { 260 const std::string& file_id, FileMetadata* metadata) const {
262 FileMetadata* identified = metadata_by_id_.get(file_id); 261 FileMetadata* identified = metadata_by_id_.get(file_id);
263 if (!identified) 262 if (!identified)
264 return false; 263 return false;
265 if (metadata) 264 if (metadata)
266 metadata->CopyFrom(*identified); 265 metadata->CopyFrom(*identified);
267 return true; 266 return true;
268 } 267 }
269 268
270 bool MetadataDatabaseIndex::GetFileTracker( 269 bool MetadataDatabaseIndex::GetFileTracker(int64_t tracker_id,
271 int64 tracker_id, FileTracker* tracker) const { 270 FileTracker* tracker) const {
272 FileTracker* identified = tracker_by_id_.get(tracker_id); 271 FileTracker* identified = tracker_by_id_.get(tracker_id);
273 if (!identified) 272 if (!identified)
274 return false; 273 return false;
275 if (tracker) 274 if (tracker)
276 tracker->CopyFrom(*identified); 275 tracker->CopyFrom(*identified);
277 return true; 276 return true;
278 } 277 }
279 278
280 void MetadataDatabaseIndex::StoreFileMetadata( 279 void MetadataDatabaseIndex::StoreFileMetadata(
281 scoped_ptr<FileMetadata> metadata) { 280 scoped_ptr<FileMetadata> metadata) {
282 PutFileMetadataToDB(*metadata.get(), db_); 281 PutFileMetadataToDB(*metadata.get(), db_);
283 if (!metadata) { 282 if (!metadata) {
284 NOTREACHED(); 283 NOTREACHED();
285 return; 284 return;
286 } 285 }
287 286
288 std::string file_id = metadata->file_id(); 287 std::string file_id = metadata->file_id();
289 metadata_by_id_.set(file_id, metadata.Pass()); 288 metadata_by_id_.set(file_id, metadata.Pass());
290 } 289 }
291 290
292 void MetadataDatabaseIndex::StoreFileTracker( 291 void MetadataDatabaseIndex::StoreFileTracker(
293 scoped_ptr<FileTracker> tracker) { 292 scoped_ptr<FileTracker> tracker) {
294 PutFileTrackerToDB(*tracker.get(), db_); 293 PutFileTrackerToDB(*tracker.get(), db_);
295 if (!tracker) { 294 if (!tracker) {
296 NOTREACHED(); 295 NOTREACHED();
297 return; 296 return;
298 } 297 }
299 298
300 int64 tracker_id = tracker->tracker_id(); 299 int64_t tracker_id = tracker->tracker_id();
301 FileTracker* old_tracker = tracker_by_id_.get(tracker_id); 300 FileTracker* old_tracker = tracker_by_id_.get(tracker_id);
302 301
303 if (!old_tracker) { 302 if (!old_tracker) {
304 DVLOG(3) << "Adding new tracker: " << tracker->tracker_id() 303 DVLOG(3) << "Adding new tracker: " << tracker->tracker_id()
305 << " " << GetTrackerTitle(*tracker); 304 << " " << GetTrackerTitle(*tracker);
306 305
307 AddToAppIDIndex(*tracker); 306 AddToAppIDIndex(*tracker);
308 AddToPathIndexes(*tracker); 307 AddToPathIndexes(*tracker);
309 AddToFileIDIndexes(*tracker); 308 AddToFileIDIndexes(*tracker);
310 AddToDirtyTrackerIndexes(*tracker); 309 AddToDirtyTrackerIndexes(*tracker);
311 } else { 310 } else {
312 DVLOG(3) << "Updating tracker: " << tracker->tracker_id() 311 DVLOG(3) << "Updating tracker: " << tracker->tracker_id()
313 << " " << GetTrackerTitle(*tracker); 312 << " " << GetTrackerTitle(*tracker);
314 313
315 UpdateInAppIDIndex(*old_tracker, *tracker); 314 UpdateInAppIDIndex(*old_tracker, *tracker);
316 UpdateInPathIndexes(*old_tracker, *tracker); 315 UpdateInPathIndexes(*old_tracker, *tracker);
317 UpdateInFileIDIndexes(*old_tracker, *tracker); 316 UpdateInFileIDIndexes(*old_tracker, *tracker);
318 UpdateInDirtyTrackerIndexes(*old_tracker, *tracker); 317 UpdateInDirtyTrackerIndexes(*old_tracker, *tracker);
319 } 318 }
320 319
321 tracker_by_id_.set(tracker_id, tracker.Pass()); 320 tracker_by_id_.set(tracker_id, tracker.Pass());
322 } 321 }
323 322
324 void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id) { 323 void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id) {
325 PutFileMetadataDeletionToDB(file_id, db_); 324 PutFileMetadataDeletionToDB(file_id, db_);
326 metadata_by_id_.erase(file_id); 325 metadata_by_id_.erase(file_id);
327 } 326 }
328 327
329 void MetadataDatabaseIndex::RemoveFileTracker(int64 tracker_id) { 328 void MetadataDatabaseIndex::RemoveFileTracker(int64_t tracker_id) {
330 PutFileTrackerDeletionToDB(tracker_id, db_); 329 PutFileTrackerDeletionToDB(tracker_id, db_);
331 330
332 FileTracker* tracker = tracker_by_id_.get(tracker_id); 331 FileTracker* tracker = tracker_by_id_.get(tracker_id);
333 if (!tracker) { 332 if (!tracker) {
334 NOTREACHED(); 333 NOTREACHED();
335 return; 334 return;
336 } 335 }
337 336
338 DVLOG(3) << "Removing tracker: " 337 DVLOG(3) << "Removing tracker: "
339 << tracker->tracker_id() << " " << GetTrackerTitle(*tracker); 338 << tracker->tracker_id() << " " << GetTrackerTitle(*tracker);
340 339
341 RemoveFromAppIDIndex(*tracker); 340 RemoveFromAppIDIndex(*tracker);
342 RemoveFromPathIndexes(*tracker); 341 RemoveFromPathIndexes(*tracker);
343 RemoveFromFileIDIndexes(*tracker); 342 RemoveFromFileIDIndexes(*tracker);
344 RemoveFromDirtyTrackerIndexes(*tracker); 343 RemoveFromDirtyTrackerIndexes(*tracker);
345 344
346 tracker_by_id_.erase(tracker_id); 345 tracker_by_id_.erase(tracker_id);
347 } 346 }
348 347
349 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByFileID( 348 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByFileID(
350 const std::string& file_id) const { 349 const std::string& file_id) const {
351 return FindItem(trackers_by_file_id_, file_id); 350 return FindItem(trackers_by_file_id_, file_id);
352 } 351 }
353 352
354 int64 MetadataDatabaseIndex::GetAppRootTracker( 353 int64_t MetadataDatabaseIndex::GetAppRootTracker(
355 const std::string& app_id) const { 354 const std::string& app_id) const {
356 return FindItem(app_root_by_app_id_, app_id); 355 return FindItem(app_root_by_app_id_, app_id);
357 } 356 }
358 357
359 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByParentAndTitle( 358 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByParentAndTitle(
360 int64 parent_tracker_id, 359 int64_t parent_tracker_id,
361 const std::string& title) const { 360 const std::string& title) const {
362 TrackerIDsByParentAndTitle::const_iterator found = 361 TrackerIDsByParentAndTitle::const_iterator found =
363 trackers_by_parent_and_title_.find(parent_tracker_id); 362 trackers_by_parent_and_title_.find(parent_tracker_id);
364 if (found == trackers_by_parent_and_title_.end()) 363 if (found == trackers_by_parent_and_title_.end())
365 return TrackerIDSet(); 364 return TrackerIDSet();
366 return FindItem(found->second, title); 365 return FindItem(found->second, title);
367 } 366 }
368 367
369 std::vector<int64> MetadataDatabaseIndex::GetFileTrackerIDsByParent( 368 std::vector<int64_t> MetadataDatabaseIndex::GetFileTrackerIDsByParent(
370 int64 parent_tracker_id) const { 369 int64_t parent_tracker_id) const {
371 std::vector<int64> result; 370 std::vector<int64_t> result;
372 TrackerIDsByParentAndTitle::const_iterator found = 371 TrackerIDsByParentAndTitle::const_iterator found =
373 trackers_by_parent_and_title_.find(parent_tracker_id); 372 trackers_by_parent_and_title_.find(parent_tracker_id);
374 if (found == trackers_by_parent_and_title_.end()) 373 if (found == trackers_by_parent_and_title_.end())
375 return result; 374 return result;
376 375
377 for (TrackerIDsByTitle::const_iterator itr = found->second.begin(); 376 for (TrackerIDsByTitle::const_iterator itr = found->second.begin();
378 itr != found->second.end(); ++itr) { 377 itr != found->second.end(); ++itr) {
379 result.insert(result.end(), itr->second.begin(), itr->second.end()); 378 result.insert(result.end(), itr->second.begin(), itr->second.end());
380 } 379 }
381 380
382 return result; 381 return result;
383 } 382 }
384 383
385 std::string MetadataDatabaseIndex::PickMultiTrackerFileID() const { 384 std::string MetadataDatabaseIndex::PickMultiTrackerFileID() const {
386 if (multi_tracker_file_ids_.empty()) 385 if (multi_tracker_file_ids_.empty())
387 return std::string(); 386 return std::string();
388 return *multi_tracker_file_ids_.begin(); 387 return *multi_tracker_file_ids_.begin();
389 } 388 }
390 389
391 ParentIDAndTitle MetadataDatabaseIndex::PickMultiBackingFilePath() const { 390 ParentIDAndTitle MetadataDatabaseIndex::PickMultiBackingFilePath() const {
392 if (multi_backing_file_paths_.empty()) 391 if (multi_backing_file_paths_.empty())
393 return ParentIDAndTitle(kInvalidTrackerID, std::string()); 392 return ParentIDAndTitle(kInvalidTrackerID, std::string());
394 return *multi_backing_file_paths_.begin(); 393 return *multi_backing_file_paths_.begin();
395 } 394 }
396 395
397 int64 MetadataDatabaseIndex::PickDirtyTracker() const { 396 int64_t MetadataDatabaseIndex::PickDirtyTracker() const {
398 if (dirty_trackers_.empty()) 397 if (dirty_trackers_.empty())
399 return kInvalidTrackerID; 398 return kInvalidTrackerID;
400 return *dirty_trackers_.begin(); 399 return *dirty_trackers_.begin();
401 } 400 }
402 401
403 void MetadataDatabaseIndex::DemoteDirtyTracker(int64 tracker_id) { 402 void MetadataDatabaseIndex::DemoteDirtyTracker(int64_t tracker_id) {
404 if (dirty_trackers_.erase(tracker_id)) 403 if (dirty_trackers_.erase(tracker_id))
405 demoted_dirty_trackers_.insert(tracker_id); 404 demoted_dirty_trackers_.insert(tracker_id);
406 } 405 }
407 406
408 bool MetadataDatabaseIndex::HasDemotedDirtyTracker() const { 407 bool MetadataDatabaseIndex::HasDemotedDirtyTracker() const {
409 return !demoted_dirty_trackers_.empty(); 408 return !demoted_dirty_trackers_.empty();
410 } 409 }
411 410
412 bool MetadataDatabaseIndex::IsDemotedDirtyTracker(int64 tracker_id) const { 411 bool MetadataDatabaseIndex::IsDemotedDirtyTracker(int64_t tracker_id) const {
413 return demoted_dirty_trackers_.find(tracker_id) != 412 return demoted_dirty_trackers_.find(tracker_id) !=
414 demoted_dirty_trackers_.end(); 413 demoted_dirty_trackers_.end();
415 } 414 }
416 415
417 void MetadataDatabaseIndex::PromoteDemotedDirtyTracker(int64 tracker_id) { 416 void MetadataDatabaseIndex::PromoteDemotedDirtyTracker(int64_t tracker_id) {
418 if (demoted_dirty_trackers_.erase(tracker_id) == 1) 417 if (demoted_dirty_trackers_.erase(tracker_id) == 1)
419 dirty_trackers_.insert(tracker_id); 418 dirty_trackers_.insert(tracker_id);
420 } 419 }
421 420
422 bool MetadataDatabaseIndex::PromoteDemotedDirtyTrackers() { 421 bool MetadataDatabaseIndex::PromoteDemotedDirtyTrackers() {
423 bool promoted = !demoted_dirty_trackers_.empty(); 422 bool promoted = !demoted_dirty_trackers_.empty();
424 dirty_trackers_.insert(demoted_dirty_trackers_.begin(), 423 dirty_trackers_.insert(demoted_dirty_trackers_.begin(),
425 demoted_dirty_trackers_.end()); 424 demoted_dirty_trackers_.end());
426 demoted_dirty_trackers_.clear(); 425 demoted_dirty_trackers_.clear();
427 return promoted; 426 return promoted;
428 } 427 }
429 428
430 size_t MetadataDatabaseIndex::CountDirtyTracker() const { 429 size_t MetadataDatabaseIndex::CountDirtyTracker() const {
431 return dirty_trackers_.size(); 430 return dirty_trackers_.size();
432 } 431 }
433 432
434 size_t MetadataDatabaseIndex::CountFileMetadata() const { 433 size_t MetadataDatabaseIndex::CountFileMetadata() const {
435 return metadata_by_id_.size(); 434 return metadata_by_id_.size();
436 } 435 }
437 436
438 size_t MetadataDatabaseIndex::CountFileTracker() const { 437 size_t MetadataDatabaseIndex::CountFileTracker() const {
439 return tracker_by_id_.size(); 438 return tracker_by_id_.size();
440 } 439 }
441 440
442 void MetadataDatabaseIndex::SetSyncRootRevalidated() const { 441 void MetadataDatabaseIndex::SetSyncRootRevalidated() const {
443 service_metadata_->set_sync_root_revalidated(true); 442 service_metadata_->set_sync_root_revalidated(true);
444 PutServiceMetadataToDB(*service_metadata_, db_); 443 PutServiceMetadataToDB(*service_metadata_, db_);
445 } 444 }
446 445
447 void MetadataDatabaseIndex::SetSyncRootTrackerID( 446 void MetadataDatabaseIndex::SetSyncRootTrackerID(int64_t sync_root_id) const {
448 int64 sync_root_id) const {
449 service_metadata_->set_sync_root_tracker_id(sync_root_id); 447 service_metadata_->set_sync_root_tracker_id(sync_root_id);
450 PutServiceMetadataToDB(*service_metadata_, db_); 448 PutServiceMetadataToDB(*service_metadata_, db_);
451 } 449 }
452 450
453 void MetadataDatabaseIndex::SetLargestChangeID( 451 void MetadataDatabaseIndex::SetLargestChangeID(
454 int64 largest_change_id) const { 452 int64_t largest_change_id) const {
455 service_metadata_->set_largest_change_id(largest_change_id); 453 service_metadata_->set_largest_change_id(largest_change_id);
456 PutServiceMetadataToDB(*service_metadata_, db_); 454 PutServiceMetadataToDB(*service_metadata_, db_);
457 } 455 }
458 456
459 void MetadataDatabaseIndex::SetNextTrackerID( 457 void MetadataDatabaseIndex::SetNextTrackerID(int64_t next_tracker_id) const {
460 int64 next_tracker_id) const {
461 service_metadata_->set_next_tracker_id(next_tracker_id); 458 service_metadata_->set_next_tracker_id(next_tracker_id);
462 PutServiceMetadataToDB(*service_metadata_, db_); 459 PutServiceMetadataToDB(*service_metadata_, db_);
463 } 460 }
464 461
465 bool MetadataDatabaseIndex::IsSyncRootRevalidated() const { 462 bool MetadataDatabaseIndex::IsSyncRootRevalidated() const {
466 return service_metadata_->has_sync_root_revalidated() && 463 return service_metadata_->has_sync_root_revalidated() &&
467 service_metadata_->sync_root_revalidated(); 464 service_metadata_->sync_root_revalidated();
468 } 465 }
469 466
470 int64 MetadataDatabaseIndex::GetSyncRootTrackerID() const { 467 int64_t MetadataDatabaseIndex::GetSyncRootTrackerID() const {
471 if (!service_metadata_->has_sync_root_tracker_id()) 468 if (!service_metadata_->has_sync_root_tracker_id())
472 return kInvalidTrackerID; 469 return kInvalidTrackerID;
473 return service_metadata_->sync_root_tracker_id(); 470 return service_metadata_->sync_root_tracker_id();
474 } 471 }
475 472
476 int64 MetadataDatabaseIndex::GetLargestChangeID() const { 473 int64_t MetadataDatabaseIndex::GetLargestChangeID() const {
477 if (!service_metadata_->has_largest_change_id()) 474 if (!service_metadata_->has_largest_change_id())
478 return kInvalidTrackerID; 475 return kInvalidTrackerID;
479 return service_metadata_->largest_change_id(); 476 return service_metadata_->largest_change_id();
480 } 477 }
481 478
482 int64 MetadataDatabaseIndex::GetNextTrackerID() const { 479 int64_t MetadataDatabaseIndex::GetNextTrackerID() const {
483 if (!service_metadata_->has_next_tracker_id()) { 480 if (!service_metadata_->has_next_tracker_id()) {
484 NOTREACHED(); 481 NOTREACHED();
485 return kInvalidTrackerID; 482 return kInvalidTrackerID;
486 } 483 }
487 return service_metadata_->next_tracker_id(); 484 return service_metadata_->next_tracker_id();
488 } 485 }
489 486
490 std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { 487 std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const {
491 std::vector<std::string> result; 488 std::vector<std::string> result;
492 result.reserve(app_root_by_app_id_.size()); 489 result.reserve(app_root_by_app_id_.size());
493 for (TrackerIDByAppID::const_iterator itr = app_root_by_app_id_.begin(); 490 for (TrackerIDByAppID::const_iterator itr = app_root_by_app_id_.begin();
494 itr != app_root_by_app_id_.end(); ++itr) 491 itr != app_root_by_app_id_.end(); ++itr)
495 result.push_back(itr->first); 492 result.push_back(itr->first);
496 return result; 493 return result;
497 } 494 }
498 495
499 std::vector<int64> MetadataDatabaseIndex::GetAllTrackerIDs() const { 496 std::vector<int64_t> MetadataDatabaseIndex::GetAllTrackerIDs() const {
500 std::vector<int64> result; 497 std::vector<int64_t> result;
501 for (TrackerByID::const_iterator itr = tracker_by_id_.begin(); 498 for (TrackerByID::const_iterator itr = tracker_by_id_.begin();
502 itr != tracker_by_id_.end(); ++itr) { 499 itr != tracker_by_id_.end(); ++itr) {
503 result.push_back(itr->first); 500 result.push_back(itr->first);
504 } 501 }
505 return result; 502 return result;
506 } 503 }
507 504
508 std::vector<std::string> MetadataDatabaseIndex::GetAllMetadataIDs() const { 505 std::vector<std::string> MetadataDatabaseIndex::GetAllMetadataIDs() const {
509 std::vector<std::string> result; 506 std::vector<std::string> result;
510 for (MetadataByID::const_iterator itr = metadata_by_id_.begin(); 507 for (MetadataByID::const_iterator itr = metadata_by_id_.begin();
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 << " Remove from multi_tracker_file_ids_: " << tracker.file_id(); 605 << " Remove from multi_tracker_file_ids_: " << tracker.file_id();
609 multi_tracker_file_ids_.erase(tracker.file_id()); 606 multi_tracker_file_ids_.erase(tracker.file_id());
610 } 607 }
611 608
612 if (found->second.empty()) 609 if (found->second.empty())
613 trackers_by_file_id_.erase(found); 610 trackers_by_file_id_.erase(found);
614 } 611 }
615 612
616 void MetadataDatabaseIndex::AddToPathIndexes( 613 void MetadataDatabaseIndex::AddToPathIndexes(
617 const FileTracker& new_tracker) { 614 const FileTracker& new_tracker) {
618 int64 parent = new_tracker.parent_tracker_id(); 615 int64_t parent = new_tracker.parent_tracker_id();
619 std::string title = GetTrackerTitle(new_tracker); 616 std::string title = GetTrackerTitle(new_tracker);
620 617
621 DVLOG(3) << " Add to trackers_by_parent_and_title_: " 618 DVLOG(3) << " Add to trackers_by_parent_and_title_: "
622 << parent << " " << title; 619 << parent << " " << title;
623 620
624 trackers_by_parent_and_title_[parent][title].Insert(new_tracker); 621 trackers_by_parent_and_title_[parent][title].Insert(new_tracker);
625 622
626 if (trackers_by_parent_and_title_[parent][title].size() > 1 && 623 if (trackers_by_parent_and_title_[parent][title].size() > 1 &&
627 !title.empty()) { 624 !title.empty()) {
628 DVLOG_IF(3, !ContainsKey(multi_backing_file_paths_, 625 DVLOG_IF(3, !ContainsKey(multi_backing_file_paths_,
629 ParentIDAndTitle(parent, title))) 626 ParentIDAndTitle(parent, title)))
630 << " Add to multi_backing_file_paths_: " << parent << " " << title; 627 << " Add to multi_backing_file_paths_: " << parent << " " << title;
631 multi_backing_file_paths_.insert(ParentIDAndTitle(parent, title)); 628 multi_backing_file_paths_.insert(ParentIDAndTitle(parent, title));
632 } 629 }
633 } 630 }
634 631
635 void MetadataDatabaseIndex::UpdateInPathIndexes( 632 void MetadataDatabaseIndex::UpdateInPathIndexes(
636 const FileTracker& old_tracker, 633 const FileTracker& old_tracker,
637 const FileTracker& new_tracker) { 634 const FileTracker& new_tracker) {
638 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); 635 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id());
639 DCHECK_EQ(old_tracker.parent_tracker_id(), new_tracker.parent_tracker_id()); 636 DCHECK_EQ(old_tracker.parent_tracker_id(), new_tracker.parent_tracker_id());
640 DCHECK(GetTrackerTitle(old_tracker) == GetTrackerTitle(new_tracker) || 637 DCHECK(GetTrackerTitle(old_tracker) == GetTrackerTitle(new_tracker) ||
641 !old_tracker.has_synced_details()); 638 !old_tracker.has_synced_details());
642 639
643 int64 tracker_id = new_tracker.tracker_id(); 640 int64_t tracker_id = new_tracker.tracker_id();
644 int64 parent = new_tracker.parent_tracker_id(); 641 int64_t parent = new_tracker.parent_tracker_id();
645 std::string old_title = GetTrackerTitle(old_tracker); 642 std::string old_title = GetTrackerTitle(old_tracker);
646 std::string title = GetTrackerTitle(new_tracker); 643 std::string title = GetTrackerTitle(new_tracker);
647 644
648 TrackerIDsByTitle* trackers_by_title = &trackers_by_parent_and_title_[parent]; 645 TrackerIDsByTitle* trackers_by_title = &trackers_by_parent_and_title_[parent];
649 646
650 if (old_title != title) { 647 if (old_title != title) {
651 TrackerIDsByTitle::iterator found = trackers_by_title->find(old_title); 648 TrackerIDsByTitle::iterator found = trackers_by_title->find(old_title);
652 if (found != trackers_by_title->end()) { 649 if (found != trackers_by_title->end()) {
653 DVLOG(3) << " Remove from trackers_by_parent_and_title_: " 650 DVLOG(3) << " Remove from trackers_by_parent_and_title_: "
654 << parent << " " << old_title; 651 << parent << " " << old_title;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 } 683 }
687 684
688 if (old_tracker.active() && !new_tracker.active()) 685 if (old_tracker.active() && !new_tracker.active())
689 trackers_by_parent_and_title_[parent][title].Deactivate(tracker_id); 686 trackers_by_parent_and_title_[parent][title].Deactivate(tracker_id);
690 else if (!old_tracker.active() && new_tracker.active()) 687 else if (!old_tracker.active() && new_tracker.active())
691 trackers_by_parent_and_title_[parent][title].Activate(tracker_id); 688 trackers_by_parent_and_title_[parent][title].Activate(tracker_id);
692 } 689 }
693 690
694 void MetadataDatabaseIndex::RemoveFromPathIndexes( 691 void MetadataDatabaseIndex::RemoveFromPathIndexes(
695 const FileTracker& tracker) { 692 const FileTracker& tracker) {
696 int64 tracker_id = tracker.tracker_id(); 693 int64_t tracker_id = tracker.tracker_id();
697 int64 parent = tracker.parent_tracker_id(); 694 int64_t parent = tracker.parent_tracker_id();
698 std::string title = GetTrackerTitle(tracker); 695 std::string title = GetTrackerTitle(tracker);
699 696
700 DCHECK(ContainsKey(trackers_by_parent_and_title_, parent)); 697 DCHECK(ContainsKey(trackers_by_parent_and_title_, parent));
701 DCHECK(ContainsKey(trackers_by_parent_and_title_[parent], title)); 698 DCHECK(ContainsKey(trackers_by_parent_and_title_[parent], title));
702 699
703 DVLOG(3) << " Remove from trackers_by_parent_and_title_: " 700 DVLOG(3) << " Remove from trackers_by_parent_and_title_: "
704 << parent << " " << title; 701 << parent << " " << title;
705 702
706 trackers_by_parent_and_title_[parent][title].Erase(tracker_id); 703 trackers_by_parent_and_title_[parent][title].Erase(tracker_id);
707 704
(...skipping 22 matching lines...) Expand all
730 DVLOG(3) << " Add to dirty_trackers_: " << new_tracker.tracker_id(); 727 DVLOG(3) << " Add to dirty_trackers_: " << new_tracker.tracker_id();
731 dirty_trackers_.insert(new_tracker.tracker_id()); 728 dirty_trackers_.insert(new_tracker.tracker_id());
732 } 729 }
733 } 730 }
734 731
735 void MetadataDatabaseIndex::UpdateInDirtyTrackerIndexes( 732 void MetadataDatabaseIndex::UpdateInDirtyTrackerIndexes(
736 const FileTracker& old_tracker, 733 const FileTracker& old_tracker,
737 const FileTracker& new_tracker) { 734 const FileTracker& new_tracker) {
738 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); 735 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id());
739 736
740 int64 tracker_id = new_tracker.tracker_id(); 737 int64_t tracker_id = new_tracker.tracker_id();
741 if (old_tracker.dirty() && !new_tracker.dirty()) { 738 if (old_tracker.dirty() && !new_tracker.dirty()) {
742 DCHECK(ContainsKey(dirty_trackers_, tracker_id) || 739 DCHECK(ContainsKey(dirty_trackers_, tracker_id) ||
743 ContainsKey(demoted_dirty_trackers_, tracker_id)); 740 ContainsKey(demoted_dirty_trackers_, tracker_id));
744 741
745 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; 742 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id;
746 743
747 dirty_trackers_.erase(tracker_id); 744 dirty_trackers_.erase(tracker_id);
748 demoted_dirty_trackers_.erase(tracker_id); 745 demoted_dirty_trackers_.erase(tracker_id);
749 } else if (!old_tracker.dirty() && new_tracker.dirty()) { 746 } else if (!old_tracker.dirty() && new_tracker.dirty()) {
750 DCHECK(!ContainsKey(dirty_trackers_, tracker_id)); 747 DCHECK(!ContainsKey(dirty_trackers_, tracker_id));
751 DCHECK(!ContainsKey(demoted_dirty_trackers_, tracker_id)); 748 DCHECK(!ContainsKey(demoted_dirty_trackers_, tracker_id));
752 749
753 DVLOG(3) << " Add to dirty_trackers_: " << tracker_id; 750 DVLOG(3) << " Add to dirty_trackers_: " << tracker_id;
754 751
755 dirty_trackers_.insert(tracker_id); 752 dirty_trackers_.insert(tracker_id);
756 } 753 }
757 } 754 }
758 755
759 void MetadataDatabaseIndex::RemoveFromDirtyTrackerIndexes( 756 void MetadataDatabaseIndex::RemoveFromDirtyTrackerIndexes(
760 const FileTracker& tracker) { 757 const FileTracker& tracker) {
761 if (tracker.dirty()) { 758 if (tracker.dirty()) {
762 int64 tracker_id = tracker.tracker_id(); 759 int64_t tracker_id = tracker.tracker_id();
763 DCHECK(ContainsKey(dirty_trackers_, tracker_id) || 760 DCHECK(ContainsKey(dirty_trackers_, tracker_id) ||
764 ContainsKey(demoted_dirty_trackers_, tracker_id)); 761 ContainsKey(demoted_dirty_trackers_, tracker_id));
765 762
766 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; 763 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id;
767 dirty_trackers_.erase(tracker_id); 764 dirty_trackers_.erase(tracker_id);
768 765
769 demoted_dirty_trackers_.erase(tracker_id); 766 demoted_dirty_trackers_.erase(tracker_id);
770 } 767 }
771 } 768 }
772 769
773 } // namespace drive_backend 770 } // namespace drive_backend
774 } // namespace sync_file_system 771 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698