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 "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "base/threading/thread_restrictions.h" | 10 #include "base/threading/thread_restrictions.h" |
11 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" | 11 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" |
12 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" | 12 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" |
| 13 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h" |
13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 14 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
14 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" | 15 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" |
15 #include "chrome/browser/sync_file_system/logger.h" | 16 #include "chrome/browser/sync_file_system/logger.h" |
16 #include "third_party/leveldatabase/src/include/leveldb/db.h" | 17 #include "third_party/leveldatabase/src/include/leveldb/db.h" |
17 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" | 18 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" |
18 | 19 |
19 // LevelDB database schema | 20 // LevelDB database schema |
20 // ======================= | 21 // ======================= |
21 // | 22 // |
22 // NOTE | 23 // NOTE |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 template <typename Container> | 70 template <typename Container> |
70 typename Container::mapped_type FindItem( | 71 typename Container::mapped_type FindItem( |
71 const Container& container, | 72 const Container& container, |
72 const typename Container::key_type& key) { | 73 const typename Container::key_type& key) { |
73 typename Container::const_iterator found = container.find(key); | 74 typename Container::const_iterator found = container.find(key); |
74 if (found == container.end()) | 75 if (found == container.end()) |
75 return typename Container::mapped_type(); | 76 return typename Container::mapped_type(); |
76 return found->second; | 77 return found->second; |
77 } | 78 } |
78 | 79 |
79 void ReadDatabaseContents(leveldb::DB* db, | 80 void ReadDatabaseContents(LevelDBWrapper* db, DatabaseContents* contents) { |
80 DatabaseContents* contents) { | |
81 DCHECK(db); | 81 DCHECK(db); |
82 DCHECK(contents); | 82 DCHECK(contents); |
83 | 83 |
84 scoped_ptr<leveldb::Iterator> itr(db->NewIterator(leveldb::ReadOptions())); | 84 scoped_ptr<LevelDBWrapper::Iterator> itr(db->NewIterator()); |
85 for (itr->SeekToFirst(); itr->Valid(); itr->Next()) { | 85 for (itr->SeekToFirst(); itr->Valid(); itr->Next()) { |
86 std::string key = itr->key().ToString(); | 86 std::string key = itr->key().ToString(); |
87 std::string value = itr->value().ToString(); | 87 std::string value = itr->value().ToString(); |
88 | 88 |
89 std::string file_id; | 89 std::string file_id; |
90 if (RemovePrefix(key, kFileMetadataKeyPrefix, &file_id)) { | 90 if (RemovePrefix(key, kFileMetadataKeyPrefix, &file_id)) { |
91 scoped_ptr<FileMetadata> metadata(new FileMetadata); | 91 scoped_ptr<FileMetadata> metadata(new FileMetadata); |
92 if (!metadata->ParseFromString(itr->value().ToString())) { | 92 if (!metadata->ParseFromString(itr->value().ToString())) { |
93 util::Log(logging::LOG_WARNING, FROM_HERE, | 93 util::Log(logging::LOG_WARNING, FROM_HERE, |
94 "Failed to parse a FileMetadata"); | 94 "Failed to parse a FileMetadata"); |
(...skipping 20 matching lines...) Expand all Loading... |
115 continue; | 115 continue; |
116 } | 116 } |
117 contents->file_trackers.push_back(tracker.release()); | 117 contents->file_trackers.push_back(tracker.release()); |
118 continue; | 118 continue; |
119 } | 119 } |
120 } | 120 } |
121 } | 121 } |
122 | 122 |
123 void RemoveUnreachableItems(DatabaseContents* contents, | 123 void RemoveUnreachableItems(DatabaseContents* contents, |
124 int64 sync_root_tracker_id, | 124 int64 sync_root_tracker_id, |
125 leveldb::WriteBatch* batch) { | 125 LevelDBWrapper* db) { |
126 typedef std::map<int64, std::set<int64> > ChildTrackersByParent; | 126 typedef std::map<int64, std::set<int64> > ChildTrackersByParent; |
127 ChildTrackersByParent trackers_by_parent; | 127 ChildTrackersByParent trackers_by_parent; |
128 | 128 |
129 // Set up links from parent tracker to child trackers. | 129 // Set up links from parent tracker to child trackers. |
130 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { | 130 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { |
131 const FileTracker& tracker = *contents->file_trackers[i]; | 131 const FileTracker& tracker = *contents->file_trackers[i]; |
132 int64 parent_tracker_id = tracker.parent_tracker_id(); | 132 int64 parent_tracker_id = tracker.parent_tracker_id(); |
133 int64 tracker_id = tracker.tracker_id(); | 133 int64 tracker_id = tracker.tracker_id(); |
134 | 134 |
135 trackers_by_parent[parent_tracker_id].insert(tracker_id); | 135 trackers_by_parent[parent_tracker_id].insert(tracker_id); |
(...skipping 29 matching lines...) Expand all Loading... |
165 } | 165 } |
166 | 166 |
167 // Delete all unreachable trackers. | 167 // Delete all unreachable trackers. |
168 ScopedVector<FileTracker> reachable_trackers; | 168 ScopedVector<FileTracker> reachable_trackers; |
169 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { | 169 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { |
170 FileTracker* tracker = contents->file_trackers[i]; | 170 FileTracker* tracker = contents->file_trackers[i]; |
171 if (ContainsKey(visited_trackers, tracker->tracker_id())) { | 171 if (ContainsKey(visited_trackers, tracker->tracker_id())) { |
172 reachable_trackers.push_back(tracker); | 172 reachable_trackers.push_back(tracker); |
173 contents->file_trackers[i] = NULL; | 173 contents->file_trackers[i] = NULL; |
174 } else { | 174 } else { |
175 PutFileTrackerDeletionToBatch(tracker->tracker_id(), batch); | 175 PutFileTrackerDeletionToDB(tracker->tracker_id(), db); |
176 } | 176 } |
177 } | 177 } |
178 contents->file_trackers = reachable_trackers.Pass(); | 178 contents->file_trackers = reachable_trackers.Pass(); |
179 | 179 |
180 // List all |file_id| referred by a tracker. | 180 // List all |file_id| referred by a tracker. |
181 base::hash_set<std::string> referred_file_ids; | 181 base::hash_set<std::string> referred_file_ids; |
182 for (size_t i = 0; i < contents->file_trackers.size(); ++i) | 182 for (size_t i = 0; i < contents->file_trackers.size(); ++i) |
183 referred_file_ids.insert(contents->file_trackers[i]->file_id()); | 183 referred_file_ids.insert(contents->file_trackers[i]->file_id()); |
184 | 184 |
185 // Delete all unreferred metadata. | 185 // Delete all unreferred metadata. |
186 ScopedVector<FileMetadata> referred_file_metadata; | 186 ScopedVector<FileMetadata> referred_file_metadata; |
187 for (size_t i = 0; i < contents->file_metadata.size(); ++i) { | 187 for (size_t i = 0; i < contents->file_metadata.size(); ++i) { |
188 FileMetadata* metadata = contents->file_metadata[i]; | 188 FileMetadata* metadata = contents->file_metadata[i]; |
189 if (ContainsKey(referred_file_ids, metadata->file_id())) { | 189 if (ContainsKey(referred_file_ids, metadata->file_id())) { |
190 referred_file_metadata.push_back(metadata); | 190 referred_file_metadata.push_back(metadata); |
191 contents->file_metadata[i] = NULL; | 191 contents->file_metadata[i] = NULL; |
192 } else { | 192 } else { |
193 PutFileMetadataDeletionToBatch(metadata->file_id(), batch); | 193 PutFileMetadataDeletionToDB(metadata->file_id(), db); |
194 } | 194 } |
195 } | 195 } |
196 contents->file_metadata = referred_file_metadata.Pass(); | 196 contents->file_metadata = referred_file_metadata.Pass(); |
197 } | 197 } |
198 | 198 |
199 } // namespace | 199 } // namespace |
200 | 200 |
201 // static | 201 // static |
202 scoped_ptr<MetadataDatabaseIndex> | 202 scoped_ptr<MetadataDatabaseIndex> |
203 MetadataDatabaseIndex::Create(leveldb::DB* db, leveldb::WriteBatch* batch) { | 203 MetadataDatabaseIndex::Create(LevelDBWrapper* db) { |
204 DCHECK(db); | 204 DCHECK(db); |
205 DCHECK(batch); | |
206 | 205 |
207 scoped_ptr<ServiceMetadata> service_metadata = InitializeServiceMetadata(db); | 206 scoped_ptr<ServiceMetadata> service_metadata = InitializeServiceMetadata(db); |
208 DatabaseContents contents; | 207 DatabaseContents contents; |
209 | 208 |
210 PutVersionToBatch(kCurrentDatabaseVersion, batch); | 209 PutVersionToDB(kCurrentDatabaseVersion, db); |
211 ReadDatabaseContents(db, &contents); | 210 ReadDatabaseContents(db, &contents); |
212 RemoveUnreachableItems(&contents, | 211 RemoveUnreachableItems(&contents, |
213 service_metadata->sync_root_tracker_id(), | 212 service_metadata->sync_root_tracker_id(), |
214 batch); | 213 db); |
215 | 214 |
216 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex); | 215 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(db)); |
217 index->Initialize(service_metadata.Pass(), &contents); | 216 index->Initialize(service_metadata.Pass(), &contents); |
218 return index.Pass(); | 217 return index.Pass(); |
219 } | 218 } |
220 | 219 |
221 // static | 220 // static |
222 scoped_ptr<MetadataDatabaseIndex> | 221 scoped_ptr<MetadataDatabaseIndex> |
223 MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents) { | 222 MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents) { |
224 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex); | 223 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(NULL)); |
225 index->Initialize(make_scoped_ptr(new ServiceMetadata), contents); | 224 index->Initialize(make_scoped_ptr(new ServiceMetadata), contents); |
226 return index.Pass(); | 225 return index.Pass(); |
227 } | 226 } |
228 | 227 |
229 void MetadataDatabaseIndex::Initialize( | 228 void MetadataDatabaseIndex::Initialize( |
230 scoped_ptr<ServiceMetadata> service_metadata, | 229 scoped_ptr<ServiceMetadata> service_metadata, |
231 DatabaseContents* contents) { | 230 DatabaseContents* contents) { |
232 service_metadata_ = service_metadata.Pass(); | 231 service_metadata_ = service_metadata.Pass(); |
233 | 232 |
234 for (size_t i = 0; i < contents->file_metadata.size(); ++i) | 233 for (size_t i = 0; i < contents->file_metadata.size(); ++i) |
235 StoreFileMetadata(make_scoped_ptr(contents->file_metadata[i]), NULL); | 234 StoreFileMetadata(make_scoped_ptr(contents->file_metadata[i])); |
236 contents->file_metadata.weak_clear(); | 235 contents->file_metadata.weak_clear(); |
237 | 236 |
238 for (size_t i = 0; i < contents->file_trackers.size(); ++i) | 237 for (size_t i = 0; i < contents->file_trackers.size(); ++i) |
239 StoreFileTracker(make_scoped_ptr(contents->file_trackers[i]), NULL); | 238 StoreFileTracker(make_scoped_ptr(contents->file_trackers[i])); |
240 contents->file_trackers.weak_clear(); | 239 contents->file_trackers.weak_clear(); |
241 | 240 |
242 UMA_HISTOGRAM_COUNTS("SyncFileSystem.MetadataNumber", metadata_by_id_.size()); | 241 UMA_HISTOGRAM_COUNTS("SyncFileSystem.MetadataNumber", metadata_by_id_.size()); |
243 UMA_HISTOGRAM_COUNTS("SyncFileSystem.TrackerNumber", tracker_by_id_.size()); | 242 UMA_HISTOGRAM_COUNTS("SyncFileSystem.TrackerNumber", tracker_by_id_.size()); |
244 UMA_HISTOGRAM_COUNTS_100("SyncFileSystem.RegisteredAppNumber", | 243 UMA_HISTOGRAM_COUNTS_100("SyncFileSystem.RegisteredAppNumber", |
245 app_root_by_app_id_.size()); | 244 app_root_by_app_id_.size()); |
246 } | 245 } |
247 | 246 |
248 MetadataDatabaseIndex::MetadataDatabaseIndex() {} | 247 MetadataDatabaseIndex::MetadataDatabaseIndex(LevelDBWrapper* db) : db_(db) {} |
249 MetadataDatabaseIndex::~MetadataDatabaseIndex() {} | 248 MetadataDatabaseIndex::~MetadataDatabaseIndex() {} |
250 | 249 |
251 bool MetadataDatabaseIndex::GetFileMetadata( | 250 bool MetadataDatabaseIndex::GetFileMetadata( |
252 const std::string& file_id, FileMetadata* metadata) const { | 251 const std::string& file_id, FileMetadata* metadata) const { |
253 FileMetadata* identified = metadata_by_id_.get(file_id); | 252 FileMetadata* identified = metadata_by_id_.get(file_id); |
254 if (!identified) | 253 if (!identified) |
255 return false; | 254 return false; |
256 if (metadata) | 255 if (metadata) |
257 metadata->CopyFrom(*identified); | 256 metadata->CopyFrom(*identified); |
258 return true; | 257 return true; |
259 } | 258 } |
260 | 259 |
261 bool MetadataDatabaseIndex::GetFileTracker( | 260 bool MetadataDatabaseIndex::GetFileTracker( |
262 int64 tracker_id, FileTracker* tracker) const { | 261 int64 tracker_id, FileTracker* tracker) const { |
263 FileTracker* identified = tracker_by_id_.get(tracker_id); | 262 FileTracker* identified = tracker_by_id_.get(tracker_id); |
264 if (!identified) | 263 if (!identified) |
265 return false; | 264 return false; |
266 if (tracker) | 265 if (tracker) |
267 tracker->CopyFrom(*identified); | 266 tracker->CopyFrom(*identified); |
268 return true; | 267 return true; |
269 } | 268 } |
270 | 269 |
271 void MetadataDatabaseIndex::StoreFileMetadata( | 270 void MetadataDatabaseIndex::StoreFileMetadata( |
272 scoped_ptr<FileMetadata> metadata, leveldb::WriteBatch* batch) { | 271 scoped_ptr<FileMetadata> metadata) { |
273 PutFileMetadataToBatch(*metadata.get(), batch); | 272 PutFileMetadataToDB(*metadata.get(), db_); |
274 if (!metadata) { | 273 if (!metadata) { |
275 NOTREACHED(); | 274 NOTREACHED(); |
276 return; | 275 return; |
277 } | 276 } |
278 | 277 |
279 std::string file_id = metadata->file_id(); | 278 std::string file_id = metadata->file_id(); |
280 metadata_by_id_.set(file_id, metadata.Pass()); | 279 metadata_by_id_.set(file_id, metadata.Pass()); |
281 } | 280 } |
282 | 281 |
283 void MetadataDatabaseIndex::StoreFileTracker(scoped_ptr<FileTracker> tracker, | 282 void MetadataDatabaseIndex::StoreFileTracker( |
284 leveldb::WriteBatch* batch) { | 283 scoped_ptr<FileTracker> tracker) { |
285 PutFileTrackerToBatch(*tracker.get(), batch); | 284 PutFileTrackerToDB(*tracker.get(), db_); |
286 if (!tracker) { | 285 if (!tracker) { |
287 NOTREACHED(); | 286 NOTREACHED(); |
288 return; | 287 return; |
289 } | 288 } |
290 | 289 |
291 int64 tracker_id = tracker->tracker_id(); | 290 int64 tracker_id = tracker->tracker_id(); |
292 FileTracker* old_tracker = tracker_by_id_.get(tracker_id); | 291 FileTracker* old_tracker = tracker_by_id_.get(tracker_id); |
293 | 292 |
294 if (!old_tracker) { | 293 if (!old_tracker) { |
295 DVLOG(3) << "Adding new tracker: " << tracker->tracker_id() | 294 DVLOG(3) << "Adding new tracker: " << tracker->tracker_id() |
296 << " " << GetTrackerTitle(*tracker); | 295 << " " << GetTrackerTitle(*tracker); |
297 | 296 |
298 AddToAppIDIndex(*tracker); | 297 AddToAppIDIndex(*tracker); |
299 AddToPathIndexes(*tracker); | 298 AddToPathIndexes(*tracker); |
300 AddToFileIDIndexes(*tracker); | 299 AddToFileIDIndexes(*tracker); |
301 AddToDirtyTrackerIndexes(*tracker); | 300 AddToDirtyTrackerIndexes(*tracker); |
302 } else { | 301 } else { |
303 DVLOG(3) << "Updating tracker: " << tracker->tracker_id() | 302 DVLOG(3) << "Updating tracker: " << tracker->tracker_id() |
304 << " " << GetTrackerTitle(*tracker); | 303 << " " << GetTrackerTitle(*tracker); |
305 | 304 |
306 UpdateInAppIDIndex(*old_tracker, *tracker); | 305 UpdateInAppIDIndex(*old_tracker, *tracker); |
307 UpdateInPathIndexes(*old_tracker, *tracker); | 306 UpdateInPathIndexes(*old_tracker, *tracker); |
308 UpdateInFileIDIndexes(*old_tracker, *tracker); | 307 UpdateInFileIDIndexes(*old_tracker, *tracker); |
309 UpdateInDirtyTrackerIndexes(*old_tracker, *tracker); | 308 UpdateInDirtyTrackerIndexes(*old_tracker, *tracker); |
310 } | 309 } |
311 | 310 |
312 tracker_by_id_.set(tracker_id, tracker.Pass()); | 311 tracker_by_id_.set(tracker_id, tracker.Pass()); |
313 } | 312 } |
314 | 313 |
315 void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id, | 314 void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id) { |
316 leveldb::WriteBatch* batch) { | 315 PutFileMetadataDeletionToDB(file_id, db_); |
317 PutFileMetadataDeletionToBatch(file_id, batch); | |
318 metadata_by_id_.erase(file_id); | 316 metadata_by_id_.erase(file_id); |
319 } | 317 } |
320 | 318 |
321 void MetadataDatabaseIndex::RemoveFileTracker(int64 tracker_id, | 319 void MetadataDatabaseIndex::RemoveFileTracker(int64 tracker_id) { |
322 leveldb::WriteBatch* batch) { | 320 PutFileTrackerDeletionToDB(tracker_id, db_); |
323 PutFileTrackerDeletionToBatch(tracker_id, batch); | |
324 | 321 |
325 FileTracker* tracker = tracker_by_id_.get(tracker_id); | 322 FileTracker* tracker = tracker_by_id_.get(tracker_id); |
326 if (!tracker) { | 323 if (!tracker) { |
327 NOTREACHED(); | 324 NOTREACHED(); |
328 return; | 325 return; |
329 } | 326 } |
330 | 327 |
331 DVLOG(3) << "Removing tracker: " | 328 DVLOG(3) << "Removing tracker: " |
332 << tracker->tracker_id() << " " << GetTrackerTitle(*tracker); | 329 << tracker->tracker_id() << " " << GetTrackerTitle(*tracker); |
333 | 330 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 return ParentIDAndTitle(kInvalidTrackerID, std::string()); | 383 return ParentIDAndTitle(kInvalidTrackerID, std::string()); |
387 return *multi_backing_file_paths_.begin(); | 384 return *multi_backing_file_paths_.begin(); |
388 } | 385 } |
389 | 386 |
390 int64 MetadataDatabaseIndex::PickDirtyTracker() const { | 387 int64 MetadataDatabaseIndex::PickDirtyTracker() const { |
391 if (dirty_trackers_.empty()) | 388 if (dirty_trackers_.empty()) |
392 return kInvalidTrackerID; | 389 return kInvalidTrackerID; |
393 return *dirty_trackers_.begin(); | 390 return *dirty_trackers_.begin(); |
394 } | 391 } |
395 | 392 |
396 void MetadataDatabaseIndex::DemoteDirtyTracker( | 393 void MetadataDatabaseIndex::DemoteDirtyTracker(int64 tracker_id) { |
397 int64 tracker_id, leveldb::WriteBatch* /* unused_batch */) { | |
398 if (dirty_trackers_.erase(tracker_id)) | 394 if (dirty_trackers_.erase(tracker_id)) |
399 demoted_dirty_trackers_.insert(tracker_id); | 395 demoted_dirty_trackers_.insert(tracker_id); |
400 } | 396 } |
401 | 397 |
402 bool MetadataDatabaseIndex::HasDemotedDirtyTracker() const { | 398 bool MetadataDatabaseIndex::HasDemotedDirtyTracker() const { |
403 return !demoted_dirty_trackers_.empty(); | 399 return !demoted_dirty_trackers_.empty(); |
404 } | 400 } |
405 | 401 |
406 void MetadataDatabaseIndex::PromoteDemotedDirtyTrackers( | 402 void MetadataDatabaseIndex::PromoteDemotedDirtyTrackers() { |
407 leveldb::WriteBatch* /* unused_batch */) { | |
408 dirty_trackers_.insert(demoted_dirty_trackers_.begin(), | 403 dirty_trackers_.insert(demoted_dirty_trackers_.begin(), |
409 demoted_dirty_trackers_.end()); | 404 demoted_dirty_trackers_.end()); |
410 demoted_dirty_trackers_.clear(); | 405 demoted_dirty_trackers_.clear(); |
411 } | 406 } |
412 | 407 |
413 size_t MetadataDatabaseIndex::CountDirtyTracker() const { | 408 size_t MetadataDatabaseIndex::CountDirtyTracker() const { |
414 return dirty_trackers_.size() + demoted_dirty_trackers_.size(); | 409 return dirty_trackers_.size() + demoted_dirty_trackers_.size(); |
415 } | 410 } |
416 | 411 |
417 size_t MetadataDatabaseIndex::CountFileMetadata() const { | 412 size_t MetadataDatabaseIndex::CountFileMetadata() const { |
418 return metadata_by_id_.size(); | 413 return metadata_by_id_.size(); |
419 } | 414 } |
420 | 415 |
421 size_t MetadataDatabaseIndex::CountFileTracker() const { | 416 size_t MetadataDatabaseIndex::CountFileTracker() const { |
422 return tracker_by_id_.size(); | 417 return tracker_by_id_.size(); |
423 } | 418 } |
424 | 419 |
425 void MetadataDatabaseIndex::SetSyncRootTrackerID( | 420 void MetadataDatabaseIndex::SetSyncRootTrackerID( |
426 int64 sync_root_id, leveldb::WriteBatch* batch) const { | 421 int64 sync_root_id) const { |
427 service_metadata_->set_sync_root_tracker_id(sync_root_id); | 422 service_metadata_->set_sync_root_tracker_id(sync_root_id); |
428 PutServiceMetadataToBatch(*service_metadata_, batch); | 423 PutServiceMetadataToDB(*service_metadata_, db_); |
429 } | 424 } |
430 | 425 |
431 void MetadataDatabaseIndex::SetLargestChangeID( | 426 void MetadataDatabaseIndex::SetLargestChangeID( |
432 int64 largest_change_id, leveldb::WriteBatch* batch) const { | 427 int64 largest_change_id) const { |
433 service_metadata_->set_largest_change_id(largest_change_id); | 428 service_metadata_->set_largest_change_id(largest_change_id); |
434 PutServiceMetadataToBatch(*service_metadata_, batch); | 429 PutServiceMetadataToDB(*service_metadata_, db_); |
435 } | 430 } |
436 | 431 |
437 void MetadataDatabaseIndex::SetNextTrackerID( | 432 void MetadataDatabaseIndex::SetNextTrackerID( |
438 int64 next_tracker_id, leveldb::WriteBatch* batch) const { | 433 int64 next_tracker_id) const { |
439 service_metadata_->set_next_tracker_id(next_tracker_id); | 434 service_metadata_->set_next_tracker_id(next_tracker_id); |
440 PutServiceMetadataToBatch(*service_metadata_, batch); | 435 PutServiceMetadataToDB(*service_metadata_, db_); |
441 } | 436 } |
442 | 437 |
443 int64 MetadataDatabaseIndex::GetSyncRootTrackerID() const { | 438 int64 MetadataDatabaseIndex::GetSyncRootTrackerID() const { |
444 if (!service_metadata_->has_sync_root_tracker_id()) | 439 if (!service_metadata_->has_sync_root_tracker_id()) |
445 return kInvalidTrackerID; | 440 return kInvalidTrackerID; |
446 return service_metadata_->sync_root_tracker_id(); | 441 return service_metadata_->sync_root_tracker_id(); |
447 } | 442 } |
448 | 443 |
449 int64 MetadataDatabaseIndex::GetLargestChangeID() const { | 444 int64 MetadataDatabaseIndex::GetLargestChangeID() const { |
450 if (!service_metadata_->has_largest_change_id()) | 445 if (!service_metadata_->has_largest_change_id()) |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
738 | 733 |
739 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; | 734 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; |
740 dirty_trackers_.erase(tracker_id); | 735 dirty_trackers_.erase(tracker_id); |
741 | 736 |
742 demoted_dirty_trackers_.erase(tracker_id); | 737 demoted_dirty_trackers_.erase(tracker_id); |
743 } | 738 } |
744 } | 739 } |
745 | 740 |
746 } // namespace drive_backend | 741 } // namespace drive_backend |
747 } // namespace sync_file_system | 742 } // namespace sync_file_system |
OLD | NEW |