Chromium Code Reviews| 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: " << tracker->tracker_id(); | |
|
nhiroki
2014/03/05 04:13:38
nit: can you print tracker's title?
tzik
2014/03/05 05:18:40
Done.
| |
| 128 | |
| 121 RemoveFromAppIDIndex(*tracker); | 129 RemoveFromAppIDIndex(*tracker); |
| 122 RemoveFromPathIndexes(*tracker); | 130 RemoveFromPathIndexes(*tracker); |
| 123 RemoveFromFileIDIndexes(*tracker); | 131 RemoveFromFileIDIndexes(*tracker); |
| 124 RemoveFromDirtyTrackerIndexes(*tracker); | 132 RemoveFromDirtyTrackerIndexes(*tracker); |
| 125 | 133 |
| 126 tracker_by_id_.erase(tracker_id); | 134 tracker_by_id_.erase(tracker_id); |
| 127 } | 135 } |
| 128 | 136 |
| 129 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByFileID( | 137 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByFileID( |
| 130 const std::string& file_id) const { | 138 const std::string& file_id) const { |
| 131 return FindItem(trackers_by_file_id_, file_id); | 139 return FindItem(trackers_by_file_id_, file_id); |
| 132 } | 140 } |
| 133 | 141 |
| 134 int64 MetadataDatabaseIndex::GetAppRootTracker( | 142 int64 MetadataDatabaseIndex::GetAppRootTracker( |
| 135 const std::string& app_id) const { | 143 const std::string& app_id) const { |
| 136 return FindItem(app_root_by_app_id_, app_id); | 144 return FindItem(app_root_by_app_id_, app_id); |
| 137 } | 145 } |
| 138 | 146 |
| 139 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByParentAndTitle( | 147 TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByParentAndTitle( |
| 140 int64 parent_tracker_id, | 148 int64 parent_tracker_id, |
| 141 const std::string& title) const { | 149 const std::string& title) const { |
| 142 TrackerIDsByParentAndTitle::const_iterator found = | 150 TrackerIDsByParentAndTitle::const_iterator found = |
| 143 trackers_by_parent_and_title_.find(parent_tracker_id); | 151 trackers_by_parent_and_title_.find(parent_tracker_id); |
| 144 if (found == trackers_by_parent_and_title_.end()) | 152 if (found == trackers_by_parent_and_title_.end()) |
| 145 return TrackerIDSet(); | 153 return TrackerIDSet(); |
| 146 return FindItem(found->second, title); | 154 return FindItem(found->second, title); |
| 147 } | 155 } |
| 148 | 156 |
| 157 std::vector<int64> MetadataDatabaseIndex::GetFileTrackerIDsByParent( | |
| 158 int64 parent_tracker_id) const { | |
| 159 std::vector<int64> result; | |
| 160 TrackerIDsByParentAndTitle::const_iterator found = | |
| 161 trackers_by_parent_and_title_.find(parent_tracker_id); | |
| 162 if (found == trackers_by_parent_and_title_.end()) | |
| 163 return result; | |
| 164 | |
| 165 for (TrackerIDsByTitle::const_iterator itr = found->second.begin(); | |
| 166 itr != found->second.end(); ++itr) { | |
| 167 result.insert(result.end(), itr->second.begin(), itr->second.end()); | |
| 168 } | |
| 169 | |
| 170 return result; | |
| 171 } | |
| 172 | |
| 149 std::string MetadataDatabaseIndex::PickMultiTrackerFileID() const { | 173 std::string MetadataDatabaseIndex::PickMultiTrackerFileID() const { |
| 150 if (multi_tracker_file_ids_.empty()) | 174 if (multi_tracker_file_ids_.empty()) |
| 151 return std::string(); | 175 return std::string(); |
| 152 return *multi_tracker_file_ids_.begin(); | 176 return *multi_tracker_file_ids_.begin(); |
| 153 } | 177 } |
| 154 | 178 |
| 155 ParentIDAndTitle MetadataDatabaseIndex::PickMultiBackingFilePath() const { | 179 ParentIDAndTitle MetadataDatabaseIndex::PickMultiBackingFilePath() const { |
| 156 if (multi_backing_file_paths_.empty()) | 180 if (multi_backing_file_paths_.empty()) |
| 157 return ParentIDAndTitle(kInvalidTrackerID, std::string()); | 181 return ParentIDAndTitle(kInvalidTrackerID, std::string()); |
| 158 return *multi_backing_file_paths_.begin(); | 182 return *multi_backing_file_paths_.begin(); |
| 159 } | 183 } |
| 160 | 184 |
| 161 int64 MetadataDatabaseIndex::PickDirtyTracker() const { | 185 int64 MetadataDatabaseIndex::PickDirtyTracker() const { |
| 162 if (dirty_trackers_.empty()) | 186 if (dirty_trackers_.empty()) |
| 163 return kInvalidTrackerID; | 187 return kInvalidTrackerID; |
| 164 return *dirty_trackers_.begin(); | 188 return *dirty_trackers_.begin(); |
| 165 } | 189 } |
| 166 | 190 |
| 167 void MetadataDatabaseIndex::DemoteDirtyTracker(int64 tracker_id) { | 191 void MetadataDatabaseIndex::DemoteDirtyTracker(int64 tracker_id) { |
| 168 if (dirty_trackers_.erase(tracker_id)) | 192 if (dirty_trackers_.erase(tracker_id)) |
| 169 demoted_dirty_trackers_.insert(tracker_id); | 193 demoted_dirty_trackers_.insert(tracker_id); |
| 170 } | 194 } |
| 171 | 195 |
| 196 bool MetadataDatabaseIndex::HasDemotedDirtyTracker() const { | |
| 197 return !demoted_dirty_trackers_.empty(); | |
| 198 } | |
| 199 | |
| 172 void MetadataDatabaseIndex::PromoteDemotedDirtyTrackers() { | 200 void MetadataDatabaseIndex::PromoteDemotedDirtyTrackers() { |
| 173 dirty_trackers_.insert(demoted_dirty_trackers_.begin(), | 201 dirty_trackers_.insert(demoted_dirty_trackers_.begin(), |
| 174 demoted_dirty_trackers_.end()); | 202 demoted_dirty_trackers_.end()); |
| 175 demoted_dirty_trackers_.clear(); | 203 demoted_dirty_trackers_.clear(); |
| 176 } | 204 } |
| 177 | 205 |
| 206 std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { | |
| 207 std::vector<std::string> result; | |
| 208 result.reserve(app_root_by_app_id_.size()); | |
| 209 for (TrackerIDByAppID::const_iterator itr = app_root_by_app_id_.begin(); | |
| 210 itr != app_root_by_app_id_.end(); ++itr) | |
| 211 result.push_back(itr->first); | |
| 212 return result; | |
| 213 } | |
| 214 | |
| 178 void MetadataDatabaseIndex::AddToAppIDIndex( | 215 void MetadataDatabaseIndex::AddToAppIDIndex( |
| 179 const FileTracker& new_tracker) { | 216 const FileTracker& new_tracker) { |
| 180 if (!IsAppRoot(new_tracker)) | 217 if (!IsAppRoot(new_tracker)) |
| 181 return; | 218 return; |
| 182 | 219 |
| 220 DVLOG(3) << " Add to app_root_by_app_id_: " << new_tracker.app_id(); | |
|
nhiroki
2014/03/05 04:13:38
just curious: why do you prepend whitespaces? for
tzik
2014/03/05 05:18:40
Yes, it's just for making the log readable.
| |
| 221 | |
| 183 DCHECK(new_tracker.active()); | 222 DCHECK(new_tracker.active()); |
| 184 DCHECK(!ContainsKey(app_root_by_app_id_, new_tracker.app_id())); | 223 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(); | 224 app_root_by_app_id_[new_tracker.app_id()] = new_tracker.tracker_id(); |
| 186 } | 225 } |
| 187 | 226 |
| 188 void MetadataDatabaseIndex::UpdateInAppIDIndex( | 227 void MetadataDatabaseIndex::UpdateInAppIDIndex( |
| 189 const FileTracker& old_tracker, | 228 const FileTracker& old_tracker, |
| 190 const FileTracker& new_tracker) { | 229 const FileTracker& new_tracker) { |
| 191 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); | 230 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); |
| 192 | 231 |
| 193 if (IsAppRoot(old_tracker) && !IsAppRoot(new_tracker)) { | 232 if (IsAppRoot(old_tracker) && !IsAppRoot(new_tracker)) { |
| 194 DCHECK(old_tracker.active()); | 233 DCHECK(old_tracker.active()); |
| 195 DCHECK(!new_tracker.active()); | 234 DCHECK(!new_tracker.active()); |
| 196 DCHECK(ContainsKey(app_root_by_app_id_, old_tracker.app_id())); | 235 DCHECK(ContainsKey(app_root_by_app_id_, old_tracker.app_id())); |
| 236 | |
| 237 DVLOG(3) << " Remove from app_root_by_app_id_: " << old_tracker.app_id(); | |
| 238 | |
| 197 app_root_by_app_id_.erase(old_tracker.app_id()); | 239 app_root_by_app_id_.erase(old_tracker.app_id()); |
| 198 } else if (!IsAppRoot(old_tracker) && IsAppRoot(new_tracker)) { | 240 } else if (!IsAppRoot(old_tracker) && IsAppRoot(new_tracker)) { |
| 199 DCHECK(!old_tracker.active()); | 241 DCHECK(!old_tracker.active()); |
| 200 DCHECK(new_tracker.active()); | 242 DCHECK(new_tracker.active()); |
| 201 DCHECK(!ContainsKey(app_root_by_app_id_, new_tracker.app_id())); | 243 DCHECK(!ContainsKey(app_root_by_app_id_, new_tracker.app_id())); |
| 244 | |
| 245 DVLOG(3) << " Add to app_root_by_app_id_: " << new_tracker.app_id(); | |
| 246 | |
| 202 app_root_by_app_id_[new_tracker.app_id()] = new_tracker.tracker_id(); | 247 app_root_by_app_id_[new_tracker.app_id()] = new_tracker.tracker_id(); |
| 203 } | 248 } |
| 204 } | 249 } |
| 205 | 250 |
| 206 void MetadataDatabaseIndex::RemoveFromAppIDIndex( | 251 void MetadataDatabaseIndex::RemoveFromAppIDIndex( |
| 207 const FileTracker& tracker) { | 252 const FileTracker& tracker) { |
| 208 if (IsAppRoot(tracker)) { | 253 if (IsAppRoot(tracker)) { |
| 209 DCHECK(tracker.active()); | 254 DCHECK(tracker.active()); |
| 210 DCHECK(ContainsKey(app_root_by_app_id_, tracker.app_id())); | 255 DCHECK(ContainsKey(app_root_by_app_id_, tracker.app_id())); |
| 256 | |
| 257 DVLOG(3) << " Remove from app_root_by_app_id_: " << tracker.app_id(); | |
| 258 | |
| 211 app_root_by_app_id_.erase(tracker.app_id()); | 259 app_root_by_app_id_.erase(tracker.app_id()); |
| 212 } | 260 } |
| 213 } | 261 } |
| 214 | 262 |
| 215 void MetadataDatabaseIndex::AddToFileIDIndexes( | 263 void MetadataDatabaseIndex::AddToFileIDIndexes( |
| 216 const FileTracker& new_tracker) { | 264 const FileTracker& new_tracker) { |
| 265 DVLOG(3) << " Add to trackers_by_file_id_: " << new_tracker.file_id(); | |
| 266 | |
| 217 trackers_by_file_id_[new_tracker.file_id()].Insert(new_tracker); | 267 trackers_by_file_id_[new_tracker.file_id()].Insert(new_tracker); |
| 218 | 268 |
| 219 if (trackers_by_file_id_[new_tracker.file_id()].size() > 1) | 269 if (trackers_by_file_id_[new_tracker.file_id()].size() > 1) { |
| 270 DVLOG_IF(3, !ContainsKey(multi_tracker_file_ids_, new_tracker.file_id())) | |
| 271 << " Add to multi_tracker_file_ids_: " << new_tracker.file_id(); | |
| 220 multi_tracker_file_ids_.insert(new_tracker.file_id()); | 272 multi_tracker_file_ids_.insert(new_tracker.file_id()); |
| 273 } | |
| 221 } | 274 } |
| 222 | 275 |
| 223 void MetadataDatabaseIndex::UpdateInFileIDIndexes( | 276 void MetadataDatabaseIndex::UpdateInFileIDIndexes( |
| 224 const FileTracker& old_tracker, | 277 const FileTracker& old_tracker, |
| 225 const FileTracker& new_tracker) { | 278 const FileTracker& new_tracker) { |
| 226 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); | 279 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); |
| 227 DCHECK_EQ(old_tracker.file_id(), new_tracker.file_id()); | 280 DCHECK_EQ(old_tracker.file_id(), new_tracker.file_id()); |
| 228 | 281 |
| 229 std::string file_id = new_tracker.file_id(); | 282 std::string file_id = new_tracker.file_id(); |
| 230 DCHECK(ContainsKey(trackers_by_file_id_, file_id)); | 283 DCHECK(ContainsKey(trackers_by_file_id_, file_id)); |
| 231 | 284 |
| 232 if (old_tracker.active() && !new_tracker.active()) | 285 if (old_tracker.active() && !new_tracker.active()) |
| 233 trackers_by_file_id_[file_id].Deactivate(new_tracker.tracker_id()); | 286 trackers_by_file_id_[file_id].Deactivate(new_tracker.tracker_id()); |
| 234 else if (!old_tracker.active() && new_tracker.active()) | 287 else if (!old_tracker.active() && new_tracker.active()) |
| 235 trackers_by_file_id_[file_id].Activate(new_tracker.tracker_id()); | 288 trackers_by_file_id_[file_id].Activate(new_tracker.tracker_id()); |
| 236 } | 289 } |
| 237 | 290 |
| 238 void MetadataDatabaseIndex::RemoveFromFileIDIndexes( | 291 void MetadataDatabaseIndex::RemoveFromFileIDIndexes( |
| 239 const FileTracker& tracker) { | 292 const FileTracker& tracker) { |
| 240 DCHECK(ContainsKey(trackers_by_file_id_, tracker.file_id())); | 293 TrackerIDsByFileID::iterator found = |
| 241 trackers_by_file_id_.erase(tracker.file_id()); | 294 trackers_by_file_id_.find(tracker.file_id()); |
| 295 if (found == trackers_by_file_id_.end()) { | |
| 296 NOTREACHED(); | |
| 297 return; | |
| 298 } | |
| 242 | 299 |
| 243 if (trackers_by_file_id_[tracker.file_id()].size() <= 1) | 300 DVLOG(3) << " Remove from trackers_by_file_id_: " |
| 301 << tracker.tracker_id(); | |
| 302 found->second.Erase(tracker.tracker_id()); | |
| 303 | |
| 304 if (trackers_by_file_id_[tracker.file_id()].size() <= 1) { | |
| 305 DVLOG_IF(3, ContainsKey(multi_tracker_file_ids_, tracker.file_id())) | |
| 306 << " Remove from multi_tracker_file_ids_: " << tracker.file_id(); | |
| 244 multi_tracker_file_ids_.erase(tracker.file_id()); | 307 multi_tracker_file_ids_.erase(tracker.file_id()); |
| 308 } | |
| 309 | |
| 310 if (found->second.empty()) | |
| 311 trackers_by_file_id_.erase(found); | |
| 245 } | 312 } |
| 246 | 313 |
| 247 void MetadataDatabaseIndex::AddToPathIndexes( | 314 void MetadataDatabaseIndex::AddToPathIndexes( |
| 248 const FileTracker& new_tracker) { | 315 const FileTracker& new_tracker) { |
| 249 int64 parent = new_tracker.parent_tracker_id(); | 316 int64 parent = new_tracker.parent_tracker_id(); |
| 250 std::string title = GetTrackerTitle(new_tracker); | 317 std::string title = GetTrackerTitle(new_tracker); |
| 318 | |
| 319 DVLOG(3) << " Add to trackers_by_parent_and_title_: " | |
| 320 << parent << " " << title; | |
| 321 | |
| 251 trackers_by_parent_and_title_[parent][title].Insert(new_tracker); | 322 trackers_by_parent_and_title_[parent][title].Insert(new_tracker); |
| 252 | 323 |
| 253 if (trackers_by_parent_and_title_[parent][title].size() > 1) | 324 if (trackers_by_parent_and_title_[parent][title].size() > 1) { |
| 325 DVLOG_IF(3, !ContainsKey(multi_backing_file_paths_, | |
| 326 ParentIDAndTitle(parent, title))) | |
| 327 << " Add to multi_backing_file_paths_: " << parent << " " << title; | |
| 254 multi_backing_file_paths_.insert(ParentIDAndTitle(parent, title)); | 328 multi_backing_file_paths_.insert(ParentIDAndTitle(parent, title)); |
| 329 } | |
| 255 } | 330 } |
| 256 | 331 |
| 257 void MetadataDatabaseIndex::UpdateInPathIndexes( | 332 void MetadataDatabaseIndex::UpdateInPathIndexes( |
| 258 const FileTracker& old_tracker, | 333 const FileTracker& old_tracker, |
| 259 const FileTracker& new_tracker) { | 334 const FileTracker& new_tracker) { |
| 260 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); | 335 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); |
| 261 DCHECK_EQ(old_tracker.parent_tracker_id(), new_tracker.parent_tracker_id()); | 336 DCHECK_EQ(old_tracker.parent_tracker_id(), new_tracker.parent_tracker_id()); |
| 262 DCHECK_EQ(GetTrackerTitle(old_tracker), GetTrackerTitle(new_tracker)); | 337 DCHECK(GetTrackerTitle(old_tracker) == GetTrackerTitle(new_tracker) || |
| 338 !old_tracker.has_synced_details()); | |
| 263 | 339 |
| 264 int64 tracker_id = new_tracker.tracker_id(); | 340 int64 tracker_id = new_tracker.tracker_id(); |
| 265 int64 parent = new_tracker.parent_tracker_id(); | 341 int64 parent = new_tracker.parent_tracker_id(); |
| 342 std::string old_title = GetTrackerTitle(old_tracker); | |
| 266 std::string title = GetTrackerTitle(new_tracker); | 343 std::string title = GetTrackerTitle(new_tracker); |
| 267 | 344 |
| 345 TrackerIDsByTitle* trackers_by_title = &trackers_by_parent_and_title_[parent]; | |
| 346 | |
| 347 if (old_title != title) { | |
| 348 TrackerIDsByTitle::iterator found = trackers_by_title->find(old_title); | |
| 349 if (found != trackers_by_title->end()) { | |
| 350 DVLOG(3) << " Remove from trackers_by_parent_and_title_: " | |
| 351 << parent << " " << old_title; | |
| 352 | |
| 353 found->second.Erase(tracker_id); | |
| 354 if (found->second.empty()) | |
| 355 trackers_by_title->erase(found); | |
| 356 } else { | |
| 357 NOTREACHED(); | |
| 358 } | |
| 359 | |
| 360 DVLOG(3) << " Add to trackers_by_parent_and_title_: " | |
| 361 << parent << " " << title; | |
| 362 | |
| 363 (*trackers_by_title)[title].Insert(new_tracker); | |
| 364 | |
| 365 if (trackers_by_parent_and_title_[parent][old_title].size() <= 1) { | |
| 366 DVLOG_IF(3, ContainsKey(multi_backing_file_paths_, | |
| 367 ParentIDAndTitle(parent, title))) | |
| 368 << " Remove from multi_backing_file_paths_: " | |
| 369 << parent << " " << title; | |
| 370 multi_backing_file_paths_.erase(ParentIDAndTitle(parent, title)); | |
| 371 } | |
| 372 | |
| 373 if (trackers_by_parent_and_title_[parent][title].size() > 1) { | |
| 374 DVLOG_IF(3, !ContainsKey(multi_backing_file_paths_, | |
| 375 ParentIDAndTitle(parent, title))) | |
| 376 << " Add to multi_backing_file_paths_: " << parent << " " << title; | |
| 377 multi_backing_file_paths_.insert(ParentIDAndTitle(parent, title)); | |
| 378 } | |
| 379 | |
| 380 return; | |
| 381 } | |
| 382 | |
| 268 if (old_tracker.active() && !new_tracker.active()) | 383 if (old_tracker.active() && !new_tracker.active()) |
| 269 trackers_by_parent_and_title_[parent][title].Deactivate(tracker_id); | 384 trackers_by_parent_and_title_[parent][title].Deactivate(tracker_id); |
| 270 else if (!old_tracker.active() && new_tracker.active()) | 385 else if (!old_tracker.active() && new_tracker.active()) |
| 271 trackers_by_parent_and_title_[parent][title].Activate(tracker_id); | 386 trackers_by_parent_and_title_[parent][title].Activate(tracker_id); |
| 272 } | 387 } |
| 273 | 388 |
| 274 void MetadataDatabaseIndex::RemoveFromPathIndexes( | 389 void MetadataDatabaseIndex::RemoveFromPathIndexes( |
| 275 const FileTracker& tracker) { | 390 const FileTracker& tracker) { |
| 276 int64 tracker_id = tracker.tracker_id(); | 391 int64 tracker_id = tracker.tracker_id(); |
| 277 int64 parent = tracker.parent_tracker_id(); | 392 int64 parent = tracker.parent_tracker_id(); |
| 278 std::string title = GetTrackerTitle(tracker); | 393 std::string title = GetTrackerTitle(tracker); |
| 279 | 394 |
| 280 DCHECK(ContainsKey(trackers_by_parent_and_title_, parent)); | 395 DCHECK(ContainsKey(trackers_by_parent_and_title_, parent)); |
| 281 DCHECK(ContainsKey(trackers_by_parent_and_title_[parent], title)); | 396 DCHECK(ContainsKey(trackers_by_parent_and_title_[parent], title)); |
| 397 | |
| 398 DVLOG(3) << " Remove from trackers_by_parent_and_title_: " | |
| 399 << parent << " " << title; | |
| 400 | |
| 282 trackers_by_parent_and_title_[parent][title].Erase(tracker_id); | 401 trackers_by_parent_and_title_[parent][title].Erase(tracker_id); |
| 283 | 402 |
| 284 if (trackers_by_parent_and_title_[parent][title].size() <= 1) | 403 if (trackers_by_parent_and_title_[parent][title].size() <= 1) { |
| 404 DVLOG_IF(3, ContainsKey(multi_backing_file_paths_, | |
| 405 ParentIDAndTitle(parent, title))) | |
| 406 << " Remove From multi_backing_file_paths_: " | |
|
nhiroki
2014/03/05 04:13:38
nit: s/From/from
tzik
2014/03/05 05:18:40
Done.
| |
| 407 << parent << " " << title; | |
| 285 multi_backing_file_paths_.erase(ParentIDAndTitle(parent, title)); | 408 multi_backing_file_paths_.erase(ParentIDAndTitle(parent, title)); |
| 409 } | |
| 286 | 410 |
| 287 if (trackers_by_parent_and_title_[parent][title].empty()) { | 411 if (trackers_by_parent_and_title_[parent][title].empty()) { |
| 288 trackers_by_parent_and_title_[parent].erase(title); | 412 trackers_by_parent_and_title_[parent].erase(title); |
| 289 if (trackers_by_parent_and_title_[parent].empty()) | 413 if (trackers_by_parent_and_title_[parent].empty()) |
| 290 trackers_by_parent_and_title_.erase(parent); | 414 trackers_by_parent_and_title_.erase(parent); |
| 291 } | 415 } |
| 292 } | 416 } |
| 293 | 417 |
| 294 void MetadataDatabaseIndex::AddToDirtyTrackerIndexes( | 418 void MetadataDatabaseIndex::AddToDirtyTrackerIndexes( |
| 295 const FileTracker& new_tracker) { | 419 const FileTracker& new_tracker) { |
| 296 DCHECK(!ContainsKey(dirty_trackers_, new_tracker.tracker_id())); | 420 DCHECK(!ContainsKey(dirty_trackers_, new_tracker.tracker_id())); |
| 297 DCHECK(!ContainsKey(demoted_dirty_trackers_, new_tracker.tracker_id())); | 421 DCHECK(!ContainsKey(demoted_dirty_trackers_, new_tracker.tracker_id())); |
| 298 | 422 |
| 299 if (new_tracker.dirty()) | 423 if (new_tracker.dirty()) { |
| 424 DVLOG(3) << " Add to dirty_trackers_: " << new_tracker.tracker_id(); | |
| 300 dirty_trackers_.insert(new_tracker.tracker_id()); | 425 dirty_trackers_.insert(new_tracker.tracker_id()); |
| 426 } | |
| 301 } | 427 } |
| 302 | 428 |
| 303 void MetadataDatabaseIndex::UpdateInDirtyTrackerIndexes( | 429 void MetadataDatabaseIndex::UpdateInDirtyTrackerIndexes( |
| 304 const FileTracker& old_tracker, | 430 const FileTracker& old_tracker, |
| 305 const FileTracker& new_tracker) { | 431 const FileTracker& new_tracker) { |
| 306 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); | 432 DCHECK_EQ(old_tracker.tracker_id(), new_tracker.tracker_id()); |
| 307 | 433 |
| 308 int64 tracker_id = new_tracker.tracker_id(); | 434 int64 tracker_id = new_tracker.tracker_id(); |
| 309 if (old_tracker.dirty() && !new_tracker.dirty()) { | 435 if (old_tracker.dirty() && !new_tracker.dirty()) { |
| 310 DCHECK(ContainsKey(dirty_trackers_, tracker_id) || | 436 DCHECK(ContainsKey(dirty_trackers_, tracker_id) || |
| 311 ContainsKey(demoted_dirty_trackers_, tracker_id)); | 437 ContainsKey(demoted_dirty_trackers_, tracker_id)); |
| 438 | |
| 439 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; | |
| 440 | |
| 312 dirty_trackers_.erase(tracker_id); | 441 dirty_trackers_.erase(tracker_id); |
| 313 demoted_dirty_trackers_.erase(tracker_id); | 442 demoted_dirty_trackers_.erase(tracker_id); |
| 314 } else if (!old_tracker.dirty() && new_tracker.dirty()) { | 443 } else if (!old_tracker.dirty() && new_tracker.dirty()) { |
| 315 DCHECK(!ContainsKey(dirty_trackers_, tracker_id)); | 444 DCHECK(!ContainsKey(dirty_trackers_, tracker_id)); |
| 316 DCHECK(!ContainsKey(demoted_dirty_trackers_, tracker_id)); | 445 DCHECK(!ContainsKey(demoted_dirty_trackers_, tracker_id)); |
| 446 | |
| 447 DVLOG(3) << " Add to dirty_trackers_: " << tracker_id; | |
| 448 | |
| 317 dirty_trackers_.insert(tracker_id); | 449 dirty_trackers_.insert(tracker_id); |
| 450 demoted_dirty_trackers_.erase(tracker_id); | |
|
nhiroki
2014/03/05 04:13:38
You've already checked that |demoted_dirty_tracker
tzik
2014/03/05 05:18:40
Ah, that's true. Removed.
| |
| 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 |