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

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

Issue 428063002: [SyncFS] Replace leveldb classes with LevelDBWrapper (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase on cl/437943002 Created 6 years, 4 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 | Annotate | Revision Log
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 "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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698