| 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 "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" | 7 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" |
| 8 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" | 8 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" |
| 9 | 9 |
| 10 namespace sync_file_system { | 10 namespace sync_file_system { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 void MetadataDatabaseIndex::StoreFileTracker(scoped_ptr<FileTracker> tracker) { | 86 void MetadataDatabaseIndex::StoreFileTracker(scoped_ptr<FileTracker> tracker) { |
| 87 if (!tracker) { | 87 if (!tracker) { |
| 88 NOTREACHED(); | 88 NOTREACHED(); |
| 89 return; | 89 return; |
| 90 } | 90 } |
| 91 | 91 |
| 92 int64 tracker_id = tracker->tracker_id(); | 92 int64 tracker_id = tracker->tracker_id(); |
| 93 FileTracker* old_tracker = tracker_by_id_.get(tracker_id); | 93 FileTracker* old_tracker = tracker_by_id_.get(tracker_id); |
| 94 | 94 |
| 95 if (!old_tracker) { | 95 if (!old_tracker) { |
| 96 DVLOG(3) << "Adding new tracker: " << tracker->tracker_id() |
| 97 << " " << GetTrackerTitle(*tracker); |
| 98 |
| 96 AddToAppIDIndex(*tracker); | 99 AddToAppIDIndex(*tracker); |
| 97 AddToPathIndexes(*tracker); | 100 AddToPathIndexes(*tracker); |
| 98 AddToFileIDIndexes(*tracker); | 101 AddToFileIDIndexes(*tracker); |
| 99 AddToDirtyTrackerIndexes(*tracker); | 102 AddToDirtyTrackerIndexes(*tracker); |
| 100 } else { | 103 } else { |
| 104 DVLOG(3) << "Updating tracker: " << tracker->tracker_id() |
| 105 << " " << GetTrackerTitle(*tracker); |
| 106 |
| 101 UpdateInAppIDIndex(*old_tracker, *tracker); | 107 UpdateInAppIDIndex(*old_tracker, *tracker); |
| 102 UpdateInPathIndexes(*old_tracker, *tracker); | 108 UpdateInPathIndexes(*old_tracker, *tracker); |
| 103 UpdateInFileIDIndexes(*old_tracker, *tracker); | 109 UpdateInFileIDIndexes(*old_tracker, *tracker); |
| 104 UpdateInDirtyTrackerIndexes(*old_tracker, *tracker); | 110 UpdateInDirtyTrackerIndexes(*old_tracker, *tracker); |
| 105 } | 111 } |
| 106 | 112 |
| 107 tracker_by_id_.set(tracker_id, tracker.Pass()); | 113 tracker_by_id_.set(tracker_id, tracker.Pass()); |
| 108 } | 114 } |
| 109 | 115 |
| 110 void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id) { | 116 void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id) { |
| 111 metadata_by_id_.erase(file_id); | 117 metadata_by_id_.erase(file_id); |
| 112 } | 118 } |
| 113 | 119 |
| 114 void MetadataDatabaseIndex::RemoveFileTracker(int64 tracker_id) { | 120 void MetadataDatabaseIndex::RemoveFileTracker(int64 tracker_id) { |
| 115 FileTracker* tracker = tracker_by_id_.get(tracker_id); | 121 FileTracker* tracker = tracker_by_id_.get(tracker_id); |
| 116 if (!tracker) { | 122 if (!tracker) { |
| 117 NOTREACHED(); | 123 NOTREACHED(); |
| 118 return; | 124 return; |
| 119 } | 125 } |
| 120 | 126 |
| 127 DVLOG(3) << "Removing tracker: " |
| 128 << tracker->tracker_id() << " " << GetTrackerTitle(*tracker); |
| 129 |
| 121 RemoveFromAppIDIndex(*tracker); | 130 RemoveFromAppIDIndex(*tracker); |
| 122 RemoveFromPathIndexes(*tracker); | 131 RemoveFromPathIndexes(*tracker); |
| 123 RemoveFromFileIDIndexes(*tracker); | 132 RemoveFromFileIDIndexes(*tracker); |
| 124 RemoveFromDirtyTrackerIndexes(*tracker); | 133 RemoveFromDirtyTrackerIndexes(*tracker); |
| 125 | 134 |
| 126 tracker_by_id_.erase(tracker_id); | 135 tracker_by_id_.erase(tracker_id); |
| 127 } | 136 } |
| 128 | 137 |
| 129 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByFileID( | 138 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByFileID( |
| 130 const std::string& file_id) const { | 139 const std::string& file_id) const { |
| 131 return FindItem(trackers_by_file_id_, file_id); | 140 return FindItem(trackers_by_file_id_, file_id); |
| 132 } | 141 } |
| 133 | 142 |
| 134 int64 MetadataDatabaseIndex::GetAppRootTracker( | 143 int64 MetadataDatabaseIndex::GetAppRootTracker( |
| 135 const std::string& app_id) const { | 144 const std::string& app_id) const { |
| 136 return FindItem(app_root_by_app_id_, app_id); | 145 return FindItem(app_root_by_app_id_, app_id); |
| 137 } | 146 } |
| 138 | 147 |
| 139 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByParentAndTitle( | 148 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByParentAndTitle( |
| 140 int64 parent_tracker_id, | 149 int64 parent_tracker_id, |
| 141 const std::string& title) const { | 150 const std::string& title) const { |
| 142 TrackerIDsByParentAndTitle::const_iterator found = | 151 TrackerIDsByParentAndTitle::const_iterator found = |
| 143 trackers_by_parent_and_title_.find(parent_tracker_id); | 152 trackers_by_parent_and_title_.find(parent_tracker_id); |
| 144 if (found == trackers_by_parent_and_title_.end()) | 153 if (found == trackers_by_parent_and_title_.end()) |
| 145 return TrackerIDSet(); | 154 return TrackerIDSet(); |
| 146 return FindItem(found->second, title); | 155 return FindItem(found->second, title); |
| 147 } | 156 } |
| 148 | 157 |
| 158 std::vector<int64> MetadataDatabaseIndex::GetFileTrackerIDsByParent( |
| 159 int64 parent_tracker_id) const { |
| 160 std::vector<int64> result; |
| 161 TrackerIDsByParentAndTitle::const_iterator found = |
| 162 trackers_by_parent_and_title_.find(parent_tracker_id); |
| 163 if (found == trackers_by_parent_and_title_.end()) |
| 164 return result; |
| 165 |
| 166 for (TrackerIDsByTitle::const_iterator itr = found->second.begin(); |
| 167 itr != found->second.end(); ++itr) { |
| 168 result.insert(result.end(), itr->second.begin(), itr->second.end()); |
| 169 } |
| 170 |
| 171 return result; |
| 172 } |
| 173 |
| 149 std::string MetadataDatabaseIndex::PickMultiTrackerFileID() const { | 174 std::string MetadataDatabaseIndex::PickMultiTrackerFileID() const { |
| 150 if (multi_tracker_file_ids_.empty()) | 175 if (multi_tracker_file_ids_.empty()) |
| 151 return std::string(); | 176 return std::string(); |
| 152 return *multi_tracker_file_ids_.begin(); | 177 return *multi_tracker_file_ids_.begin(); |
| 153 } | 178 } |
| 154 | 179 |
| 155 ParentIDAndTitle MetadataDatabaseIndex::PickMultiBackingFilePath() const { | 180 ParentIDAndTitle MetadataDatabaseIndex::PickMultiBackingFilePath() const { |
| 156 if (multi_backing_file_paths_.empty()) | 181 if (multi_backing_file_paths_.empty()) |
| 157 return ParentIDAndTitle(kInvalidTrackerID, std::string()); | 182 return ParentIDAndTitle(kInvalidTrackerID, std::string()); |
| 158 return *multi_backing_file_paths_.begin(); | 183 return *multi_backing_file_paths_.begin(); |
| 159 } | 184 } |
| 160 | 185 |
| 161 int64 MetadataDatabaseIndex::PickDirtyTracker() const { | 186 int64 MetadataDatabaseIndex::PickDirtyTracker() const { |
| 162 if (dirty_trackers_.empty()) | 187 if (dirty_trackers_.empty()) |
| 163 return kInvalidTrackerID; | 188 return kInvalidTrackerID; |
| 164 return *dirty_trackers_.begin(); | 189 return *dirty_trackers_.begin(); |
| 165 } | 190 } |
| 166 | 191 |
| 167 void MetadataDatabaseIndex::DemoteDirtyTracker(int64 tracker_id) { | 192 void MetadataDatabaseIndex::DemoteDirtyTracker(int64 tracker_id) { |
| 168 if (dirty_trackers_.erase(tracker_id)) | 193 if (dirty_trackers_.erase(tracker_id)) |
| 169 demoted_dirty_trackers_.insert(tracker_id); | 194 demoted_dirty_trackers_.insert(tracker_id); |
| 170 } | 195 } |
| 171 | 196 |
| 197 bool MetadataDatabaseIndex::HasDemotedDirtyTracker() const { |
| 198 return !demoted_dirty_trackers_.empty(); |
| 199 } |
| 200 |
| 172 void MetadataDatabaseIndex::PromoteDemotedDirtyTrackers() { | 201 void MetadataDatabaseIndex::PromoteDemotedDirtyTrackers() { |
| 173 dirty_trackers_.insert(demoted_dirty_trackers_.begin(), | 202 dirty_trackers_.insert(demoted_dirty_trackers_.begin(), |
| 174 demoted_dirty_trackers_.end()); | 203 demoted_dirty_trackers_.end()); |
| 175 demoted_dirty_trackers_.clear(); | 204 demoted_dirty_trackers_.clear(); |
| 176 } | 205 } |
| 177 | 206 |
| 207 std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { |
| 208 std::vector<std::string> result; |
| 209 result.reserve(app_root_by_app_id_.size()); |
| 210 for (TrackerIDByAppID::const_iterator itr = app_root_by_app_id_.begin(); |
| 211 itr != app_root_by_app_id_.end(); ++itr) |
| 212 result.push_back(itr->first); |
| 213 return result; |
| 214 } |
| 215 |
| 178 void MetadataDatabaseIndex::AddToAppIDIndex( | 216 void MetadataDatabaseIndex::AddToAppIDIndex( |
| 179 const FileTracker& new_tracker) { | 217 const FileTracker& new_tracker) { |
| 180 if (!IsAppRoot(new_tracker)) | 218 if (!IsAppRoot(new_tracker)) |
| 181 return; | 219 return; |
| 182 | 220 |
| 221 DVLOG(3) << " Add to app_root_by_app_id_: " << new_tracker.app_id(); |
| 222 |
| 183 DCHECK(new_tracker.active()); | 223 DCHECK(new_tracker.active()); |
| 184 DCHECK(!ContainsKey(app_root_by_app_id_, new_tracker.app_id())); | 224 DCHECK(!ContainsKey(app_root_by_app_id_, new_tracker.app_id())); |
| 185 app_root_by_app_id_[new_tracker.app_id()] = new_tracker.tracker_id(); | 225 app_root_by_app_id_[new_tracker.app_id()] = new_tracker.tracker_id(); |
| 186 } | 226 } |
| 187 | 227 |
| 188 void MetadataDatabaseIndex::UpdateInAppIDIndex( | 228 void MetadataDatabaseIndex::UpdateInAppIDIndex( |
| 189 const FileTracker& old_tracker, | 229 const FileTracker& old_tracker, |
| 190 const FileTracker& new_tracker) { | 230 const FileTracker& new_tracker) { |
| 191 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); | 231 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); |
| 192 | 232 |
| 193 if (IsAppRoot(old_tracker) && !IsAppRoot(new_tracker)) { | 233 if (IsAppRoot(old_tracker) && !IsAppRoot(new_tracker)) { |
| 194 DCHECK(old_tracker.active()); | 234 DCHECK(old_tracker.active()); |
| 195 DCHECK(!new_tracker.active()); | 235 DCHECK(!new_tracker.active()); |
| 196 DCHECK(ContainsKey(app_root_by_app_id_, old_tracker.app_id())); | 236 DCHECK(ContainsKey(app_root_by_app_id_, old_tracker.app_id())); |
| 237 |
| 238 DVLOG(3) << " Remove from app_root_by_app_id_: " << old_tracker.app_id(); |
| 239 |
| 197 app_root_by_app_id_.erase(old_tracker.app_id()); | 240 app_root_by_app_id_.erase(old_tracker.app_id()); |
| 198 } else if (!IsAppRoot(old_tracker) && IsAppRoot(new_tracker)) { | 241 } else if (!IsAppRoot(old_tracker) && IsAppRoot(new_tracker)) { |
| 199 DCHECK(!old_tracker.active()); | 242 DCHECK(!old_tracker.active()); |
| 200 DCHECK(new_tracker.active()); | 243 DCHECK(new_tracker.active()); |
| 201 DCHECK(!ContainsKey(app_root_by_app_id_, new_tracker.app_id())); | 244 DCHECK(!ContainsKey(app_root_by_app_id_, new_tracker.app_id())); |
| 245 |
| 246 DVLOG(3) << " Add to app_root_by_app_id_: " << new_tracker.app_id(); |
| 247 |
| 202 app_root_by_app_id_[new_tracker.app_id()] = new_tracker.tracker_id(); | 248 app_root_by_app_id_[new_tracker.app_id()] = new_tracker.tracker_id(); |
| 203 } | 249 } |
| 204 } | 250 } |
| 205 | 251 |
| 206 void MetadataDatabaseIndex::RemoveFromAppIDIndex( | 252 void MetadataDatabaseIndex::RemoveFromAppIDIndex( |
| 207 const FileTracker& tracker) { | 253 const FileTracker& tracker) { |
| 208 if (IsAppRoot(tracker)) { | 254 if (IsAppRoot(tracker)) { |
| 209 DCHECK(tracker.active()); | 255 DCHECK(tracker.active()); |
| 210 DCHECK(ContainsKey(app_root_by_app_id_, tracker.app_id())); | 256 DCHECK(ContainsKey(app_root_by_app_id_, tracker.app_id())); |
| 257 |
| 258 DVLOG(3) << " Remove from app_root_by_app_id_: " << tracker.app_id(); |
| 259 |
| 211 app_root_by_app_id_.erase(tracker.app_id()); | 260 app_root_by_app_id_.erase(tracker.app_id()); |
| 212 } | 261 } |
| 213 } | 262 } |
| 214 | 263 |
| 215 void MetadataDatabaseIndex::AddToFileIDIndexes( | 264 void MetadataDatabaseIndex::AddToFileIDIndexes( |
| 216 const FileTracker& new_tracker) { | 265 const FileTracker& new_tracker) { |
| 266 DVLOG(3) << " Add to trackers_by_file_id_: " << new_tracker.file_id(); |
| 267 |
| 217 trackers_by_file_id_[new_tracker.file_id()].Insert(new_tracker); | 268 trackers_by_file_id_[new_tracker.file_id()].Insert(new_tracker); |
| 218 | 269 |
| 219 if (trackers_by_file_id_[new_tracker.file_id()].size() > 1) | 270 if (trackers_by_file_id_[new_tracker.file_id()].size() > 1) { |
| 271 DVLOG_IF(3, !ContainsKey(multi_tracker_file_ids_, new_tracker.file_id())) |
| 272 << " Add to multi_tracker_file_ids_: " << new_tracker.file_id(); |
| 220 multi_tracker_file_ids_.insert(new_tracker.file_id()); | 273 multi_tracker_file_ids_.insert(new_tracker.file_id()); |
| 274 } |
| 221 } | 275 } |
| 222 | 276 |
| 223 void MetadataDatabaseIndex::UpdateInFileIDIndexes( | 277 void MetadataDatabaseIndex::UpdateInFileIDIndexes( |
| 224 const FileTracker& old_tracker, | 278 const FileTracker& old_tracker, |
| 225 const FileTracker& new_tracker) { | 279 const FileTracker& new_tracker) { |
| 226 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); | 280 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); |
| 227 DCHECK_EQ(old_tracker.file_id(), new_tracker.file_id()); | 281 DCHECK_EQ(old_tracker.file_id(), new_tracker.file_id()); |
| 228 | 282 |
| 229 std::string file_id = new_tracker.file_id(); | 283 std::string file_id = new_tracker.file_id(); |
| 230 DCHECK(ContainsKey(trackers_by_file_id_, file_id)); | 284 DCHECK(ContainsKey(trackers_by_file_id_, file_id)); |
| 231 | 285 |
| 232 if (old_tracker.active() && !new_tracker.active()) | 286 if (old_tracker.active() && !new_tracker.active()) |
| 233 trackers_by_file_id_[file_id].Deactivate(new_tracker.tracker_id()); | 287 trackers_by_file_id_[file_id].Deactivate(new_tracker.tracker_id()); |
| 234 else if (!old_tracker.active() && new_tracker.active()) | 288 else if (!old_tracker.active() && new_tracker.active()) |
| 235 trackers_by_file_id_[file_id].Activate(new_tracker.tracker_id()); | 289 trackers_by_file_id_[file_id].Activate(new_tracker.tracker_id()); |
| 236 } | 290 } |
| 237 | 291 |
| 238 void MetadataDatabaseIndex::RemoveFromFileIDIndexes( | 292 void MetadataDatabaseIndex::RemoveFromFileIDIndexes( |
| 239 const FileTracker& tracker) { | 293 const FileTracker& tracker) { |
| 240 DCHECK(ContainsKey(trackers_by_file_id_, tracker.file_id())); | 294 TrackerIDsByFileID::iterator found = |
| 241 trackers_by_file_id_.erase(tracker.file_id()); | 295 trackers_by_file_id_.find(tracker.file_id()); |
| 296 if (found == trackers_by_file_id_.end()) { |
| 297 NOTREACHED(); |
| 298 return; |
| 299 } |
| 242 | 300 |
| 243 if (trackers_by_file_id_[tracker.file_id()].size() <= 1) | 301 DVLOG(3) << " Remove from trackers_by_file_id_: " |
| 302 << tracker.tracker_id(); |
| 303 found->second.Erase(tracker.tracker_id()); |
| 304 |
| 305 if (trackers_by_file_id_[tracker.file_id()].size() <= 1) { |
| 306 DVLOG_IF(3, ContainsKey(multi_tracker_file_ids_, tracker.file_id())) |
| 307 << " Remove from multi_tracker_file_ids_: " << tracker.file_id(); |
| 244 multi_tracker_file_ids_.erase(tracker.file_id()); | 308 multi_tracker_file_ids_.erase(tracker.file_id()); |
| 309 } |
| 310 |
| 311 if (found->second.empty()) |
| 312 trackers_by_file_id_.erase(found); |
| 245 } | 313 } |
| 246 | 314 |
| 247 void MetadataDatabaseIndex::AddToPathIndexes( | 315 void MetadataDatabaseIndex::AddToPathIndexes( |
| 248 const FileTracker& new_tracker) { | 316 const FileTracker& new_tracker) { |
| 249 int64 parent = new_tracker.parent_tracker_id(); | 317 int64 parent = new_tracker.parent_tracker_id(); |
| 250 std::string title = GetTrackerTitle(new_tracker); | 318 std::string title = GetTrackerTitle(new_tracker); |
| 319 |
| 320 DVLOG(3) << " Add to trackers_by_parent_and_title_: " |
| 321 << parent << " " << title; |
| 322 |
| 251 trackers_by_parent_and_title_[parent][title].Insert(new_tracker); | 323 trackers_by_parent_and_title_[parent][title].Insert(new_tracker); |
| 252 | 324 |
| 253 if (trackers_by_parent_and_title_[parent][title].size() > 1) | 325 if (trackers_by_parent_and_title_[parent][title].size() > 1) { |
| 326 DVLOG_IF(3, !ContainsKey(multi_backing_file_paths_, |
| 327 ParentIDAndTitle(parent, title))) |
| 328 << " Add to multi_backing_file_paths_: " << parent << " " << title; |
| 254 multi_backing_file_paths_.insert(ParentIDAndTitle(parent, title)); | 329 multi_backing_file_paths_.insert(ParentIDAndTitle(parent, title)); |
| 330 } |
| 255 } | 331 } |
| 256 | 332 |
| 257 void MetadataDatabaseIndex::UpdateInPathIndexes( | 333 void MetadataDatabaseIndex::UpdateInPathIndexes( |
| 258 const FileTracker& old_tracker, | 334 const FileTracker& old_tracker, |
| 259 const FileTracker& new_tracker) { | 335 const FileTracker& new_tracker) { |
| 260 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); | 336 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); |
| 261 DCHECK_EQ(old_tracker.parent_tracker_id(), new_tracker.parent_tracker_id()); | 337 DCHECK_EQ(old_tracker.parent_tracker_id(), new_tracker.parent_tracker_id()); |
| 262 DCHECK_EQ(GetTrackerTitle(old_tracker), GetTrackerTitle(new_tracker)); | 338 DCHECK(GetTrackerTitle(old_tracker) == GetTrackerTitle(new_tracker) || |
| 339 !old_tracker.has_synced_details()); |
| 263 | 340 |
| 264 int64 tracker_id = new_tracker.tracker_id(); | 341 int64 tracker_id = new_tracker.tracker_id(); |
| 265 int64 parent = new_tracker.parent_tracker_id(); | 342 int64 parent = new_tracker.parent_tracker_id(); |
| 343 std::string old_title = GetTrackerTitle(old_tracker); |
| 266 std::string title = GetTrackerTitle(new_tracker); | 344 std::string title = GetTrackerTitle(new_tracker); |
| 267 | 345 |
| 346 TrackerIDsByTitle* trackers_by_title = &trackers_by_parent_and_title_[parent]; |
| 347 |
| 348 if (old_title != title) { |
| 349 TrackerIDsByTitle::iterator found = trackers_by_title->find(old_title); |
| 350 if (found != trackers_by_title->end()) { |
| 351 DVLOG(3) << " Remove from trackers_by_parent_and_title_: " |
| 352 << parent << " " << old_title; |
| 353 |
| 354 found->second.Erase(tracker_id); |
| 355 if (found->second.empty()) |
| 356 trackers_by_title->erase(found); |
| 357 } else { |
| 358 NOTREACHED(); |
| 359 } |
| 360 |
| 361 DVLOG(3) << " Add to trackers_by_parent_and_title_: " |
| 362 << parent << " " << title; |
| 363 |
| 364 (*trackers_by_title)[title].Insert(new_tracker); |
| 365 |
| 366 if (trackers_by_parent_and_title_[parent][old_title].size() <= 1) { |
| 367 DVLOG_IF(3, ContainsKey(multi_backing_file_paths_, |
| 368 ParentIDAndTitle(parent, title))) |
| 369 << " Remove from multi_backing_file_paths_: " |
| 370 << parent << " " << title; |
| 371 multi_backing_file_paths_.erase(ParentIDAndTitle(parent, title)); |
| 372 } |
| 373 |
| 374 if (trackers_by_parent_and_title_[parent][title].size() > 1) { |
| 375 DVLOG_IF(3, !ContainsKey(multi_backing_file_paths_, |
| 376 ParentIDAndTitle(parent, title))) |
| 377 << " Add to multi_backing_file_paths_: " << parent << " " << title; |
| 378 multi_backing_file_paths_.insert(ParentIDAndTitle(parent, title)); |
| 379 } |
| 380 |
| 381 return; |
| 382 } |
| 383 |
| 268 if (old_tracker.active() && !new_tracker.active()) | 384 if (old_tracker.active() && !new_tracker.active()) |
| 269 trackers_by_parent_and_title_[parent][title].Deactivate(tracker_id); | 385 trackers_by_parent_and_title_[parent][title].Deactivate(tracker_id); |
| 270 else if (!old_tracker.active() && new_tracker.active()) | 386 else if (!old_tracker.active() && new_tracker.active()) |
| 271 trackers_by_parent_and_title_[parent][title].Activate(tracker_id); | 387 trackers_by_parent_and_title_[parent][title].Activate(tracker_id); |
| 272 } | 388 } |
| 273 | 389 |
| 274 void MetadataDatabaseIndex::RemoveFromPathIndexes( | 390 void MetadataDatabaseIndex::RemoveFromPathIndexes( |
| 275 const FileTracker& tracker) { | 391 const FileTracker& tracker) { |
| 276 int64 tracker_id = tracker.tracker_id(); | 392 int64 tracker_id = tracker.tracker_id(); |
| 277 int64 parent = tracker.parent_tracker_id(); | 393 int64 parent = tracker.parent_tracker_id(); |
| 278 std::string title = GetTrackerTitle(tracker); | 394 std::string title = GetTrackerTitle(tracker); |
| 279 | 395 |
| 280 DCHECK(ContainsKey(trackers_by_parent_and_title_, parent)); | 396 DCHECK(ContainsKey(trackers_by_parent_and_title_, parent)); |
| 281 DCHECK(ContainsKey(trackers_by_parent_and_title_[parent], title)); | 397 DCHECK(ContainsKey(trackers_by_parent_and_title_[parent], title)); |
| 398 |
| 399 DVLOG(3) << " Remove from trackers_by_parent_and_title_: " |
| 400 << parent << " " << title; |
| 401 |
| 282 trackers_by_parent_and_title_[parent][title].Erase(tracker_id); | 402 trackers_by_parent_and_title_[parent][title].Erase(tracker_id); |
| 283 | 403 |
| 284 if (trackers_by_parent_and_title_[parent][title].size() <= 1) | 404 if (trackers_by_parent_and_title_[parent][title].size() <= 1) { |
| 405 DVLOG_IF(3, ContainsKey(multi_backing_file_paths_, |
| 406 ParentIDAndTitle(parent, title))) |
| 407 << " Remove from multi_backing_file_paths_: " |
| 408 << parent << " " << title; |
| 285 multi_backing_file_paths_.erase(ParentIDAndTitle(parent, title)); | 409 multi_backing_file_paths_.erase(ParentIDAndTitle(parent, title)); |
| 410 } |
| 286 | 411 |
| 287 if (trackers_by_parent_and_title_[parent][title].empty()) { | 412 if (trackers_by_parent_and_title_[parent][title].empty()) { |
| 288 trackers_by_parent_and_title_[parent].erase(title); | 413 trackers_by_parent_and_title_[parent].erase(title); |
| 289 if (trackers_by_parent_and_title_[parent].empty()) | 414 if (trackers_by_parent_and_title_[parent].empty()) |
| 290 trackers_by_parent_and_title_.erase(parent); | 415 trackers_by_parent_and_title_.erase(parent); |
| 291 } | 416 } |
| 292 } | 417 } |
| 293 | 418 |
| 294 void MetadataDatabaseIndex::AddToDirtyTrackerIndexes( | 419 void MetadataDatabaseIndex::AddToDirtyTrackerIndexes( |
| 295 const FileTracker& new_tracker) { | 420 const FileTracker& new_tracker) { |
| 296 DCHECK(!ContainsKey(dirty_trackers_, new_tracker.tracker_id())); | 421 DCHECK(!ContainsKey(dirty_trackers_, new_tracker.tracker_id())); |
| 297 DCHECK(!ContainsKey(demoted_dirty_trackers_, new_tracker.tracker_id())); | 422 DCHECK(!ContainsKey(demoted_dirty_trackers_, new_tracker.tracker_id())); |
| 298 | 423 |
| 299 if (new_tracker.dirty()) | 424 if (new_tracker.dirty()) { |
| 425 DVLOG(3) << " Add to dirty_trackers_: " << new_tracker.tracker_id(); |
| 300 dirty_trackers_.insert(new_tracker.tracker_id()); | 426 dirty_trackers_.insert(new_tracker.tracker_id()); |
| 427 } |
| 301 } | 428 } |
| 302 | 429 |
| 303 void MetadataDatabaseIndex::UpdateInDirtyTrackerIndexes( | 430 void MetadataDatabaseIndex::UpdateInDirtyTrackerIndexes( |
| 304 const FileTracker& old_tracker, | 431 const FileTracker& old_tracker, |
| 305 const FileTracker& new_tracker) { | 432 const FileTracker& new_tracker) { |
| 306 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); | 433 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); |
| 307 | 434 |
| 308 int64 tracker_id = new_tracker.tracker_id(); | 435 int64 tracker_id = new_tracker.tracker_id(); |
| 309 if (old_tracker.dirty() && !new_tracker.dirty()) { | 436 if (old_tracker.dirty() && !new_tracker.dirty()) { |
| 310 DCHECK(ContainsKey(dirty_trackers_, tracker_id) || | 437 DCHECK(ContainsKey(dirty_trackers_, tracker_id) || |
| 311 ContainsKey(demoted_dirty_trackers_, tracker_id)); | 438 ContainsKey(demoted_dirty_trackers_, tracker_id)); |
| 439 |
| 440 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; |
| 441 |
| 312 dirty_trackers_.erase(tracker_id); | 442 dirty_trackers_.erase(tracker_id); |
| 313 demoted_dirty_trackers_.erase(tracker_id); | 443 demoted_dirty_trackers_.erase(tracker_id); |
| 314 } else if (!old_tracker.dirty() && new_tracker.dirty()) { | 444 } else if (!old_tracker.dirty() && new_tracker.dirty()) { |
| 315 DCHECK(!ContainsKey(dirty_trackers_, tracker_id)); | 445 DCHECK(!ContainsKey(dirty_trackers_, tracker_id)); |
| 316 DCHECK(!ContainsKey(demoted_dirty_trackers_, tracker_id)); | 446 DCHECK(!ContainsKey(demoted_dirty_trackers_, tracker_id)); |
| 447 |
| 448 DVLOG(3) << " Add to dirty_trackers_: " << tracker_id; |
| 449 |
| 317 dirty_trackers_.insert(tracker_id); | 450 dirty_trackers_.insert(tracker_id); |
| 318 } | 451 } |
| 319 } | 452 } |
| 320 | 453 |
| 321 void MetadataDatabaseIndex::RemoveFromDirtyTrackerIndexes( | 454 void MetadataDatabaseIndex::RemoveFromDirtyTrackerIndexes( |
| 322 const FileTracker& tracker) { | 455 const FileTracker& tracker) { |
| 323 if (tracker.dirty()) { | 456 if (tracker.dirty()) { |
| 324 int64 tracker_id = tracker.tracker_id(); | 457 int64 tracker_id = tracker.tracker_id(); |
| 325 DCHECK(ContainsKey(dirty_trackers_, tracker_id) || | 458 DCHECK(ContainsKey(dirty_trackers_, tracker_id) || |
| 326 ContainsKey(demoted_dirty_trackers_, tracker_id)); | 459 ContainsKey(demoted_dirty_trackers_, tracker_id)); |
| 460 |
| 461 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; |
| 327 dirty_trackers_.erase(tracker_id); | 462 dirty_trackers_.erase(tracker_id); |
| 463 |
| 328 demoted_dirty_trackers_.erase(tracker_id); | 464 demoted_dirty_trackers_.erase(tracker_id); |
| 329 } | 465 } |
| 330 } | 466 } |
| 331 | 467 |
| 332 } // namespace drive_backend | 468 } // namespace drive_backend |
| 333 } // namespace sync_file_system | 469 } // namespace sync_file_system |
| OLD | NEW |