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

Side by Side Diff: chrome/browser/sync_file_system/drive_metadata_store.cc

Issue 15410005: Deprecate DriveMetadataStore.batch_sync_origins (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Windows test fix Created 7 years, 7 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_metadata_store.h" 5 #include "chrome/browser/sync_file_system/drive_metadata_store.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 103
104 found->second = resource_id; 104 found->second = resource_id;
105 return true; 105 return true;
106 } 106 }
107 107
108 } // namespace 108 } // namespace
109 109
110 class DriveMetadataDB { 110 class DriveMetadataDB {
111 public: 111 public:
112 enum OriginSyncType { 112 enum OriginSyncType {
113 BATCH_SYNC_ORIGIN,
114 INCREMENTAL_SYNC_ORIGIN, 113 INCREMENTAL_SYNC_ORIGIN,
115 DISABLED_ORIGIN 114 DISABLED_ORIGIN
116 }; 115 };
117 116
118 typedef DriveMetadataStore::MetadataMap MetadataMap; 117 typedef DriveMetadataStore::MetadataMap MetadataMap;
119 118
120 DriveMetadataDB(const base::FilePath& base_dir, 119 DriveMetadataDB(const base::FilePath& base_dir,
121 base::SequencedTaskRunner* task_runner); 120 base::SequencedTaskRunner* task_runner);
122 ~DriveMetadataDB(); 121 ~DriveMetadataDB();
123 122
(...skipping 20 matching lines...) Expand all
144 SyncStatusCode UpdateOriginAsBatchSync(const GURL& origin, 143 SyncStatusCode UpdateOriginAsBatchSync(const GURL& origin,
145 const std::string& resource_id); 144 const std::string& resource_id);
146 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin, 145 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin,
147 const std::string& resource_id); 146 const std::string& resource_id);
148 SyncStatusCode EnableOrigin(const GURL& origin, 147 SyncStatusCode EnableOrigin(const GURL& origin,
149 const std::string& resource_id); 148 const std::string& resource_id);
150 SyncStatusCode DisableOrigin(const GURL& origin, 149 SyncStatusCode DisableOrigin(const GURL& origin,
151 const std::string& resource_id); 150 const std::string& resource_id);
152 SyncStatusCode RemoveOrigin(const GURL& origin); 151 SyncStatusCode RemoveOrigin(const GURL& origin);
153 152
154 SyncStatusCode GetOrigins(ResourceIdByOrigin* batch_sync_origins, 153 SyncStatusCode GetOrigins(ResourceIdByOrigin* incremental_sync_origins,
155 ResourceIdByOrigin* incremental_sync_origins,
156 ResourceIdByOrigin* disabled_origins); 154 ResourceIdByOrigin* disabled_origins);
157 155
158 private: 156 private:
157 friend class DriveMetadataStore;
158
159 bool CalledOnValidThread() const { 159 bool CalledOnValidThread() const {
160 return task_runner_->RunsTasksOnCurrentThread(); 160 return task_runner_->RunsTasksOnCurrentThread();
161 } 161 }
162 162
163 scoped_refptr<base::SequencedTaskRunner> task_runner_; 163 scoped_refptr<base::SequencedTaskRunner> task_runner_;
164 164
165 std::string db_path_; 165 std::string db_path_;
166 scoped_ptr<leveldb::DB> db_; 166 scoped_ptr<leveldb::DB> db_;
167 167
168 DISALLOW_COPY_AND_ASSIGN(DriveMetadataDB); 168 DISALLOW_COPY_AND_ASSIGN(DriveMetadataDB);
169 }; 169 };
170 170
171 struct DriveMetadataDBContents { 171 struct DriveMetadataDBContents {
172 int64 largest_changestamp; 172 int64 largest_changestamp;
173 DriveMetadataStore::MetadataMap metadata_map; 173 DriveMetadataStore::MetadataMap metadata_map;
174 std::string sync_root_directory_resource_id; 174 std::string sync_root_directory_resource_id;
175 ResourceIdByOrigin batch_sync_origins;
176 ResourceIdByOrigin incremental_sync_origins; 175 ResourceIdByOrigin incremental_sync_origins;
177 ResourceIdByOrigin disabled_origins; 176 ResourceIdByOrigin disabled_origins;
178 }; 177 };
179 178
180 namespace { 179 namespace {
181 180
182 SyncStatusCode InitializeDBOnFileThread(DriveMetadataDB* db, 181 SyncStatusCode InitializeDBOnFileThread(DriveMetadataDB* db,
183 DriveMetadataDBContents* contents) { 182 DriveMetadataDBContents* contents) {
184 DCHECK(db); 183 DCHECK(db);
185 DCHECK(contents); 184 DCHECK(contents);
186 185
187 contents->largest_changestamp = 0; 186 contents->largest_changestamp = 0;
188 contents->metadata_map.clear(); 187 contents->metadata_map.clear();
189 contents->batch_sync_origins.clear();
190 contents->incremental_sync_origins.clear(); 188 contents->incremental_sync_origins.clear();
191 contents->disabled_origins.clear(); 189 contents->disabled_origins.clear();
192 190
193 bool created = false; 191 bool created = false;
194 SyncStatusCode status = db->Initialize(&created); 192 SyncStatusCode status = db->Initialize(&created);
195 if (status != SYNC_STATUS_OK) 193 if (status != SYNC_STATUS_OK)
196 return status; 194 return status;
197 195
198 if (!created) { 196 if (!created) {
199 status = db->MigrateDatabaseIfNeeded(); 197 status = db->MigrateDatabaseIfNeeded();
200 if (status != SYNC_STATUS_OK) { 198 if (status != SYNC_STATUS_OK) {
201 LOG(WARNING) << "Failed to migrate DriveMetadataStore to latest version."; 199 LOG(WARNING) << "Failed to migrate DriveMetadataStore to latest version.";
202 return status; 200 return status;
203 } 201 }
204 } 202 }
205 203
206 return db->ReadContents(contents); 204 return db->ReadContents(contents);
207 } 205 }
208 206
209 // Returns a key string for the given origin. 207 // Returns a key string for the given origin.
210 // For example, when |origin| is "http://www.example.com" and |sync_type| is 208 // For example, when |origin| is "http://www.example.com" and |sync_type| is
211 // BATCH_SYNC_ORIGIN, returns "BSYNC_ORIGIN: http://www.example.com". 209 // BATCH_SYNC_ORIGIN, returns "BSYNC_ORIGIN: http://www.example.com".
212 std::string CreateKeyForOriginRoot(const GURL& origin, 210 std::string CreateKeyForOriginRoot(const GURL& origin,
213 DriveMetadataDB::OriginSyncType sync_type) { 211 DriveMetadataDB::OriginSyncType sync_type) {
214 DCHECK(origin.is_valid()); 212 DCHECK(origin.is_valid());
215 switch (sync_type) { 213 switch (sync_type) {
216 case DriveMetadataDB::BATCH_SYNC_ORIGIN:
217 return kDriveBatchSyncOriginKeyPrefix + origin.spec();
218 case DriveMetadataDB::INCREMENTAL_SYNC_ORIGIN: 214 case DriveMetadataDB::INCREMENTAL_SYNC_ORIGIN:
219 return kDriveIncrementalSyncOriginKeyPrefix + origin.spec(); 215 return kDriveIncrementalSyncOriginKeyPrefix + origin.spec();
220 case DriveMetadataDB::DISABLED_ORIGIN: 216 case DriveMetadataDB::DISABLED_ORIGIN:
221 return kDriveDisabledOriginKeyPrefix + origin.spec(); 217 return kDriveDisabledOriginKeyPrefix + origin.spec();
222 } 218 }
223 NOTREACHED(); 219 NOTREACHED();
224 return std::string(); 220 return std::string();
225 } 221 }
226 222
227 void AddOriginsToVector(std::vector<GURL>* all_origins, 223 void AddOriginsToVector(std::vector<GURL>* all_origins,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 283
288 db_status_ = status; 284 db_status_ = status;
289 if (status != SYNC_STATUS_OK) { 285 if (status != SYNC_STATUS_OK) {
290 callback.Run(status, false); 286 callback.Run(status, false);
291 return; 287 return;
292 } 288 }
293 289
294 largest_changestamp_ = contents->largest_changestamp; 290 largest_changestamp_ = contents->largest_changestamp;
295 metadata_map_.swap(contents->metadata_map); 291 metadata_map_.swap(contents->metadata_map);
296 sync_root_directory_resource_id_ = contents->sync_root_directory_resource_id; 292 sync_root_directory_resource_id_ = contents->sync_root_directory_resource_id;
297 batch_sync_origins_.swap(contents->batch_sync_origins);
298 incremental_sync_origins_.swap(contents->incremental_sync_origins); 293 incremental_sync_origins_.swap(contents->incremental_sync_origins);
299 disabled_origins_.swap(contents->disabled_origins); 294 disabled_origins_.swap(contents->disabled_origins);
300 // |largest_changestamp_| is set to 0 for a fresh empty database. 295 // |largest_changestamp_| is set to 0 for a fresh empty database.
301 296
302 origin_by_resource_id_.clear(); 297 origin_by_resource_id_.clear();
303 InsertReverseMap(batch_sync_origins_, &origin_by_resource_id_);
304 InsertReverseMap(incremental_sync_origins_, &origin_by_resource_id_); 298 InsertReverseMap(incremental_sync_origins_, &origin_by_resource_id_);
305 InsertReverseMap(disabled_origins_, &origin_by_resource_id_); 299 InsertReverseMap(disabled_origins_, &origin_by_resource_id_);
306 300
307 callback.Run(status, largest_changestamp_ <= 0); 301 callback.Run(status, largest_changestamp_ <= 0);
308 } 302 }
309 303
310 void DriveMetadataStore::RestoreSyncRootDirectory( 304 void DriveMetadataStore::RestoreSyncRootDirectory(
311 const SyncStatusCallback& callback) { 305 const SyncStatusCallback& callback) {
312 DCHECK(CalledOnValidThread()); 306 DCHECK(CalledOnValidThread());
313 std::string* sync_root_directory_resource_id = new std::string; 307 std::string* sync_root_directory_resource_id = new std::string;
(...skipping 20 matching lines...) Expand all
334 return; 328 return;
335 } 329 }
336 330
337 sync_root_directory_resource_id_.swap(*sync_root_directory_resource_id); 331 sync_root_directory_resource_id_.swap(*sync_root_directory_resource_id);
338 callback.Run(status); 332 callback.Run(status);
339 } 333 }
340 334
341 void DriveMetadataStore::RestoreOrigins( 335 void DriveMetadataStore::RestoreOrigins(
342 const SyncStatusCallback& callback) { 336 const SyncStatusCallback& callback) {
343 DCHECK(CalledOnValidThread()); 337 DCHECK(CalledOnValidThread());
344 ResourceIdByOrigin* batch_sync_origins = new ResourceIdByOrigin;
345 ResourceIdByOrigin* incremental_sync_origins = new ResourceIdByOrigin; 338 ResourceIdByOrigin* incremental_sync_origins = new ResourceIdByOrigin;
346 ResourceIdByOrigin* disabled_origins = new ResourceIdByOrigin; 339 ResourceIdByOrigin* disabled_origins = new ResourceIdByOrigin;
347 base::PostTaskAndReplyWithResult( 340 base::PostTaskAndReplyWithResult(
348 file_task_runner_, FROM_HERE, 341 file_task_runner_, FROM_HERE,
349 base::Bind(&DriveMetadataDB::GetOrigins, 342 base::Bind(&DriveMetadataDB::GetOrigins,
350 base::Unretained(db_.get()), 343 base::Unretained(db_.get()),
351 batch_sync_origins,
352 incremental_sync_origins, 344 incremental_sync_origins,
353 disabled_origins), 345 disabled_origins),
354 base::Bind(&DriveMetadataStore::DidRestoreOrigins, 346 base::Bind(&DriveMetadataStore::DidRestoreOrigins,
355 AsWeakPtr(), callback, 347 AsWeakPtr(), callback,
356 base::Owned(batch_sync_origins),
357 base::Owned(incremental_sync_origins), 348 base::Owned(incremental_sync_origins),
358 base::Owned(disabled_origins))); 349 base::Owned(disabled_origins)));
359 } 350 }
360 351
361 void DriveMetadataStore::DidRestoreOrigins( 352 void DriveMetadataStore::DidRestoreOrigins(
362 const SyncStatusCallback& callback, 353 const SyncStatusCallback& callback,
363 ResourceIdByOrigin* batch_sync_origins,
364 ResourceIdByOrigin* incremental_sync_origins, 354 ResourceIdByOrigin* incremental_sync_origins,
365 ResourceIdByOrigin* disabled_origins, 355 ResourceIdByOrigin* disabled_origins,
366 SyncStatusCode status) { 356 SyncStatusCode status) {
367 DCHECK(CalledOnValidThread()); 357 DCHECK(CalledOnValidThread());
368 DCHECK(batch_sync_origins);
369 DCHECK(incremental_sync_origins); 358 DCHECK(incremental_sync_origins);
370 DCHECK(disabled_origins); 359 DCHECK(disabled_origins);
371 360
372 db_status_ = status; 361 db_status_ = status;
373 if (status != SYNC_STATUS_OK) { 362 if (status != SYNC_STATUS_OK) {
374 callback.Run(status); 363 callback.Run(status);
375 return; 364 return;
376 } 365 }
377 366
378 batch_sync_origins_.swap(*batch_sync_origins);
379 incremental_sync_origins_.swap(*incremental_sync_origins); 367 incremental_sync_origins_.swap(*incremental_sync_origins);
380 disabled_origins_.swap(*disabled_origins); 368 disabled_origins_.swap(*disabled_origins);
381 369
382 origin_by_resource_id_.clear(); 370 origin_by_resource_id_.clear();
383 InsertReverseMap(batch_sync_origins_, &origin_by_resource_id_);
384 InsertReverseMap(incremental_sync_origins_, &origin_by_resource_id_); 371 InsertReverseMap(incremental_sync_origins_, &origin_by_resource_id_);
385 InsertReverseMap(disabled_origins_, &origin_by_resource_id_); 372 InsertReverseMap(disabled_origins_, &origin_by_resource_id_);
386 373
387 callback.Run(status); 374 callback.Run(status);
388 } 375 }
389 376
377 leveldb::DB* DriveMetadataStore::level_db() {
378 return db_.get()->db_.get();
tzik 2013/05/27 09:23:54 former get() can be omitted?
calvinlo 2013/05/27 09:47:47 Done.
379 }
380
390 void DriveMetadataStore::SetLargestChangeStamp( 381 void DriveMetadataStore::SetLargestChangeStamp(
391 int64 largest_changestamp, 382 int64 largest_changestamp,
392 const SyncStatusCallback& callback) { 383 const SyncStatusCallback& callback) {
393 DCHECK(CalledOnValidThread()); 384 DCHECK(CalledOnValidThread());
394 DCHECK_EQ(SYNC_STATUS_OK, db_status_); 385 DCHECK_EQ(SYNC_STATUS_OK, db_status_);
395 largest_changestamp_ = largest_changestamp; 386 largest_changestamp_ = largest_changestamp;
396 base::PostTaskAndReplyWithResult( 387 base::PostTaskAndReplyWithResult(
397 file_task_runner_, FROM_HERE, 388 file_task_runner_, FROM_HERE,
398 base::Bind(&DriveMetadataDB::SetLargestChangestamp, 389 base::Bind(&DriveMetadataDB::SetLargestChangestamp,
399 base::Unretained(db_.get()), largest_changestamp), 390 base::Unretained(db_.get()), largest_changestamp),
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 if (found == found_origin->second.end()) 458 if (found == found_origin->second.end())
468 return SYNC_DATABASE_ERROR_NOT_FOUND; 459 return SYNC_DATABASE_ERROR_NOT_FOUND;
469 460
470 *metadata = found->second; 461 *metadata = found->second;
471 return SYNC_STATUS_OK; 462 return SYNC_STATUS_OK;
472 } 463 }
473 464
474 void DriveMetadataStore::AddIncrementalSyncOrigin( 465 void DriveMetadataStore::AddIncrementalSyncOrigin(
475 const GURL& origin, 466 const GURL& origin,
476 const std::string& resource_id) { 467 const std::string& resource_id) {
477 AddBatchSyncOrigin(origin, resource_id); 468 DCHECK(CalledOnValidThread());
478 MoveBatchSyncOriginToIncremental(origin); 469 DCHECK(!IsIncrementalSyncOrigin(origin));
470 DCHECK(!IsOriginDisabled(origin));
471 DCHECK_EQ(SYNC_STATUS_OK, db_status_);
472
473 incremental_sync_origins_.insert(std::make_pair(origin, resource_id));
474 origin_by_resource_id_.insert(std::make_pair(resource_id, origin));
475
476 // Store a pair of |origin| and |resource_id| in the DB.
477 base::PostTaskAndReplyWithResult(
478 file_task_runner_, FROM_HERE,
479 base::Bind(&DriveMetadataDB::UpdateOriginAsIncrementalSync,
480 base::Unretained(db_.get()), origin, resource_id),
481 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
479 } 482 }
480 483
481 void DriveMetadataStore::SetSyncRootDirectory(const std::string& resource_id) { 484 void DriveMetadataStore::SetSyncRootDirectory(const std::string& resource_id) {
482 DCHECK(CalledOnValidThread()); 485 DCHECK(CalledOnValidThread());
483 486
484 sync_root_directory_resource_id_ = resource_id; 487 sync_root_directory_resource_id_ = resource_id;
485 488
486 // Set the resource ID for the sync root directory in the DB. 489 // Set the resource ID for the sync root directory in the DB.
487 base::PostTaskAndReplyWithResult( 490 base::PostTaskAndReplyWithResult(
488 file_task_runner_, FROM_HERE, 491 file_task_runner_, FROM_HERE,
489 base::Bind(&DriveMetadataDB::SetSyncRootDirectory, 492 base::Bind(&DriveMetadataDB::SetSyncRootDirectory,
490 base::Unretained(db_.get()), resource_id), 493 base::Unretained(db_.get()), resource_id),
491 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); 494 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
492 } 495 }
493 496
494 void DriveMetadataStore::SetOriginRootDirectory( 497 void DriveMetadataStore::SetOriginRootDirectory(
495 const GURL& origin, 498 const GURL& origin,
496 const std::string& resource_id) { 499 const std::string& resource_id) {
497 DCHECK(CalledOnValidThread()); 500 DCHECK(CalledOnValidThread());
498 DCHECK(IsKnownOrigin(origin)); 501 DCHECK(IsKnownOrigin(origin));
499 502
500 DriveMetadataDB::OriginSyncType sync_type; 503 DriveMetadataDB::OriginSyncType sync_type;
501 if (UpdateResourceIdMap(&batch_sync_origins_, &origin_by_resource_id_, 504 if (UpdateResourceIdMap(
502 origin, resource_id)) {
503 sync_type = DriveMetadataDB::BATCH_SYNC_ORIGIN;
504 } else if (UpdateResourceIdMap(
505 &incremental_sync_origins_, &origin_by_resource_id_, 505 &incremental_sync_origins_, &origin_by_resource_id_,
506 origin, resource_id)) { 506 origin, resource_id)) {
507 sync_type = DriveMetadataDB::INCREMENTAL_SYNC_ORIGIN; 507 sync_type = DriveMetadataDB::INCREMENTAL_SYNC_ORIGIN;
508 } else if (UpdateResourceIdMap(&disabled_origins_, &origin_by_resource_id_, 508 } else if (UpdateResourceIdMap(&disabled_origins_, &origin_by_resource_id_,
509 origin, resource_id)) { 509 origin, resource_id)) {
510 sync_type = DriveMetadataDB::DISABLED_ORIGIN; 510 sync_type = DriveMetadataDB::DISABLED_ORIGIN;
511 } else { 511 } else {
512 return; 512 return;
513 } 513 }
514 base::PostTaskAndReplyWithResult( 514 base::PostTaskAndReplyWithResult(
515 file_task_runner_, FROM_HERE, 515 file_task_runner_, FROM_HERE,
516 base::Bind(&DriveMetadataDB::SetOriginRootDirectory, 516 base::Bind(&DriveMetadataDB::SetOriginRootDirectory,
517 base::Unretained(db_.get()), origin, sync_type, resource_id), 517 base::Unretained(db_.get()), origin, sync_type, resource_id),
518 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); 518 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
519 } 519 }
520 520
521 bool DriveMetadataStore::IsKnownOrigin(const GURL& origin) const { 521 bool DriveMetadataStore::IsKnownOrigin(const GURL& origin) const {
522 DCHECK(CalledOnValidThread()); 522 DCHECK(CalledOnValidThread());
523 return IsBatchSyncOrigin(origin) || 523 return IsIncrementalSyncOrigin(origin) || IsOriginDisabled(origin);
524 IsIncrementalSyncOrigin(origin) ||
525 IsOriginDisabled(origin);
526 }
527
528 bool DriveMetadataStore::IsBatchSyncOrigin(const GURL& origin) const {
529 DCHECK(CalledOnValidThread());
530 return ContainsKey(batch_sync_origins_, origin);
531 } 524 }
532 525
533 bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const { 526 bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const {
534 DCHECK(CalledOnValidThread()); 527 DCHECK(CalledOnValidThread());
535 return ContainsKey(incremental_sync_origins_, origin); 528 return ContainsKey(incremental_sync_origins_, origin);
536 } 529 }
537 530
538 bool DriveMetadataStore::IsOriginDisabled(const GURL& origin) const { 531 bool DriveMetadataStore::IsOriginDisabled(const GURL& origin) const {
539 DCHECK(CalledOnValidThread()); 532 DCHECK(CalledOnValidThread());
540 return ContainsKey(disabled_origins_, origin); 533 return ContainsKey(disabled_origins_, origin);
(...skipping 26 matching lines...) Expand all
567 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); 560 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback));
568 } 561 }
569 562
570 void DriveMetadataStore::DisableOrigin( 563 void DriveMetadataStore::DisableOrigin(
571 const GURL& origin, 564 const GURL& origin,
572 const SyncStatusCallback& callback) { 565 const SyncStatusCallback& callback) {
573 DCHECK(CalledOnValidThread()); 566 DCHECK(CalledOnValidThread());
574 567
575 std::string resource_id; 568 std::string resource_id;
576 std::map<GURL, std::string>::iterator found = 569 std::map<GURL, std::string>::iterator found =
577 batch_sync_origins_.find(origin); 570 incremental_sync_origins_.find(origin);
578 if (found != batch_sync_origins_.end()) {
579 resource_id = found->second;
580 batch_sync_origins_.erase(found);
581 }
582
583 found = incremental_sync_origins_.find(origin);
584 if (found != incremental_sync_origins_.end()) { 571 if (found != incremental_sync_origins_.end()) {
585 resource_id = found->second; 572 resource_id = found->second;
586 incremental_sync_origins_.erase(found); 573 incremental_sync_origins_.erase(found);
587 } 574 }
588 575
589 if (resource_id.empty()) { 576 if (resource_id.empty()) {
590 // |origin| has not been registered yet. 577 // |origin| has not been registered yet.
591 return; 578 return;
592 } 579 }
593 580
594 disabled_origins_.insert(std::make_pair(origin, resource_id)); 581 disabled_origins_.insert(std::make_pair(origin, resource_id));
595 582
596 // Store a pair of |origin| and |resource_id| in the DB. 583 // Store a pair of |origin| and |resource_id| in the DB.
597 base::PostTaskAndReplyWithResult( 584 base::PostTaskAndReplyWithResult(
598 file_task_runner_, FROM_HERE, 585 file_task_runner_, FROM_HERE,
599 base::Bind(&DriveMetadataDB::DisableOrigin, 586 base::Bind(&DriveMetadataDB::DisableOrigin,
600 base::Unretained(db_.get()), origin, resource_id), 587 base::Unretained(db_.get()), origin, resource_id),
601 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); 588 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback));
602 } 589 }
603 590
604 void DriveMetadataStore::RemoveOrigin( 591 void DriveMetadataStore::RemoveOrigin(
605 const GURL& origin, 592 const GURL& origin,
606 const SyncStatusCallback& callback) { 593 const SyncStatusCallback& callback) {
607 DCHECK(CalledOnValidThread()); 594 DCHECK(CalledOnValidThread());
608 595
609 metadata_map_.erase(origin); 596 metadata_map_.erase(origin);
610 597
611 std::string resource_id; 598 std::string resource_id;
612 if (EraseIfExists(&batch_sync_origins_, origin, &resource_id) || 599 if (EraseIfExists(&incremental_sync_origins_, origin, &resource_id) ||
613 EraseIfExists(&incremental_sync_origins_, origin, &resource_id) ||
614 EraseIfExists(&disabled_origins_, origin, &resource_id)) { 600 EraseIfExists(&disabled_origins_, origin, &resource_id)) {
615 origin_by_resource_id_.erase(resource_id); 601 origin_by_resource_id_.erase(resource_id);
616 } 602 }
617 603
618 base::PostTaskAndReplyWithResult( 604 base::PostTaskAndReplyWithResult(
619 file_task_runner_, FROM_HERE, 605 file_task_runner_, FROM_HERE,
620 base::Bind(&DriveMetadataDB::RemoveOrigin, 606 base::Bind(&DriveMetadataDB::RemoveOrigin,
621 base::Unretained(db_.get()), origin), 607 base::Unretained(db_.get()), origin),
622 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); 608 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback));
623 } 609 }
624 610
625 void DriveMetadataStore::DidUpdateOrigin( 611 void DriveMetadataStore::DidUpdateOrigin(
626 const SyncStatusCallback& callback, 612 const SyncStatusCallback& callback,
627 SyncStatusCode status) { 613 SyncStatusCode status) {
628 UpdateDBStatus(status); 614 UpdateDBStatus(status);
629 callback.Run(status); 615 callback.Run(status);
630 } 616 }
631 617
632 void DriveMetadataStore::AddBatchSyncOrigin(const GURL& origin,
633 const std::string& resource_id) {
634 DCHECK(CalledOnValidThread());
635 DCHECK(!IsIncrementalSyncOrigin(origin));
636 DCHECK(!IsOriginDisabled(origin));
637 DCHECK_EQ(SYNC_STATUS_OK, db_status_);
638
639 if (IsBatchSyncOrigin(origin))
640 return;
641
642 batch_sync_origins_.insert(std::make_pair(origin, resource_id));
643 origin_by_resource_id_.insert(std::make_pair(resource_id, origin));
644
645 // Store a pair of |origin| and |resource_id| in the DB.
646 base::PostTaskAndReplyWithResult(
647 file_task_runner_, FROM_HERE,
648 base::Bind(&DriveMetadataDB::UpdateOriginAsBatchSync,
649 base::Unretained(db_.get()), origin, resource_id),
650 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
651 }
652
653 void DriveMetadataStore::MoveBatchSyncOriginToIncremental(const GURL& origin) {
654 DCHECK(CalledOnValidThread());
655 DCHECK(IsBatchSyncOrigin(origin));
656 DCHECK(!IsIncrementalSyncOrigin(origin));
657 DCHECK(!IsOriginDisabled(origin));
658 DCHECK_EQ(SYNC_STATUS_OK, db_status_);
659
660 std::map<GURL, std::string>::iterator found =
661 batch_sync_origins_.find(origin);
662 incremental_sync_origins_.insert(std::make_pair(origin, found->second));
663
664 // Store a pair of |origin| and |resource_id| in the DB.
665 base::PostTaskAndReplyWithResult(
666 file_task_runner_, FROM_HERE,
667 base::Bind(&DriveMetadataDB::UpdateOriginAsIncrementalSync,
668 base::Unretained(db_.get()), origin, found->second),
669 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
670
671 batch_sync_origins_.erase(found);
672 }
673
674 void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) { 618 void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) {
675 DCHECK(CalledOnValidThread()); 619 DCHECK(CalledOnValidThread());
676 if (db_status_ != SYNC_STATUS_OK && 620 if (db_status_ != SYNC_STATUS_OK &&
677 db_status_ != SYNC_DATABASE_ERROR_NOT_FOUND) { 621 db_status_ != SYNC_DATABASE_ERROR_NOT_FOUND) {
678 // TODO(tzik): Handle database corruption. http://crbug.com/153709 622 // TODO(tzik): Handle database corruption. http://crbug.com/153709
679 db_status_ = status; 623 db_status_ = status;
680 LOG(WARNING) << "DriveMetadataStore turned to wrong state: " << status; 624 LOG(WARNING) << "DriveMetadataStore turned to wrong state: " << status;
681 return; 625 return;
682 } 626 }
683 db_status_ = SYNC_STATUS_OK; 627 db_status_ = SYNC_STATUS_OK;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 // initialized) just return empty string, as the origin directories 685 // initialized) just return empty string, as the origin directories
742 // in the root directory must have become invalid now too. 686 // in the root directory must have become invalid now too.
743 if (sync_root_directory().empty()) 687 if (sync_root_directory().empty())
744 return std::string(); 688 return std::string();
745 689
746 ResourceIdByOrigin::const_iterator found = 690 ResourceIdByOrigin::const_iterator found =
747 incremental_sync_origins_.find(origin); 691 incremental_sync_origins_.find(origin);
748 if (found != incremental_sync_origins_.end()) 692 if (found != incremental_sync_origins_.end())
749 return found->second; 693 return found->second;
750 694
751 found = batch_sync_origins_.find(origin);
752 if (found != batch_sync_origins_.end())
753 return found->second;
754
755 found = disabled_origins_.find(origin); 695 found = disabled_origins_.find(origin);
756 if (found != disabled_origins_.end()) 696 if (found != disabled_origins_.end())
757 return found->second; 697 return found->second;
758 698
759 return std::string(); 699 return std::string();
760 } 700 }
761 701
762 void DriveMetadataStore::GetAllOrigins(std::vector<GURL>* origins) { 702 void DriveMetadataStore::GetAllOrigins(std::vector<GURL>* origins) {
763 DCHECK(CalledOnValidThread()); 703 DCHECK(CalledOnValidThread());
764 DCHECK(origins); 704 DCHECK(origins);
765 origins->clear(); 705 origins->clear();
766 origins->reserve(batch_sync_origins_.size() + 706 origins->reserve(incremental_sync_origins_.size() +
767 incremental_sync_origins_.size() +
768 disabled_origins_.size()); 707 disabled_origins_.size());
769 AddOriginsToVector(origins, batch_sync_origins_);
770 AddOriginsToVector(origins, incremental_sync_origins_); 708 AddOriginsToVector(origins, incremental_sync_origins_);
771 AddOriginsToVector(origins, disabled_origins_); 709 AddOriginsToVector(origins, disabled_origins_);
772 } 710 }
773 711
774 bool DriveMetadataStore::GetOriginByOriginRootDirectoryId( 712 bool DriveMetadataStore::GetOriginByOriginRootDirectoryId(
775 const std::string& resource_id, 713 const std::string& resource_id,
776 GURL* origin) { 714 GURL* origin) {
777 DCHECK(CalledOnValidThread()); 715 DCHECK(CalledOnValidThread());
778 DCHECK(origin); 716 DCHECK(origin);
779 717
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 status = db->Put(leveldb::WriteOptions(), 758 status = db->Put(leveldb::WriteOptions(),
821 kDatabaseVersionKey, 759 kDatabaseVersionKey,
822 base::Int64ToString(kCurrentDatabaseVersion)); 760 base::Int64ToString(kCurrentDatabaseVersion));
823 if (!status.ok()) { 761 if (!status.ok()) {
824 delete db; 762 delete db;
825 return LevelDBStatusToSyncStatusCode(status); 763 return LevelDBStatusToSyncStatusCode(status);
826 } 764 }
827 } 765 }
828 766
829 db_.reset(db); 767 db_.reset(db);
830 return SYNC_STATUS_OK; 768
769
770 // Remove legacy batch sync origin entries that are no longer needed.
771 leveldb::WriteBatch batch;
772 scoped_ptr<leveldb::Iterator> batch_origin_itr(
773 db_->NewIterator(leveldb::ReadOptions()));
774 for (batch_origin_itr->SeekToFirst();
tzik 2013/05/27 09:23:54 Seek(kDriveBatchSyncOriginKeyPrefix)?
calvinlo 2013/05/27 09:47:47 Done.
775 batch_origin_itr->Valid();
776 batch_origin_itr->Next()) {
777 std::string key = batch_origin_itr->key().ToString();
778 if (key.find(kDriveBatchSyncOriginKeyPrefix) == std::string::npos)
tzik 2013/05/27 09:23:54 !StartsWithASCII?
779 continue;
tzik 2013/05/27 09:23:54 s/continue/break/? The contents are sorted by the
calvinlo 2013/05/27 09:47:47 Done.
780
781 batch.Delete(key);
782 }
783 status = db_->Write(leveldb::WriteOptions(), &batch);
784 return LevelDBStatusToSyncStatusCode(status);
831 } 785 }
832 786
833 SyncStatusCode DriveMetadataDB::ReadContents( 787 SyncStatusCode DriveMetadataDB::ReadContents(
834 DriveMetadataDBContents* contents) { 788 DriveMetadataDBContents* contents) {
835 DCHECK(CalledOnValidThread()); 789 DCHECK(CalledOnValidThread());
836 DCHECK(db_.get()); 790 DCHECK(db_.get());
837 DCHECK(contents); 791 DCHECK(contents);
838 792
839 contents->largest_changestamp = 0; 793 contents->largest_changestamp = 0;
840 contents->metadata_map.clear(); 794 contents->metadata_map.clear();
841 contents->batch_sync_origins.clear();
842 contents->incremental_sync_origins.clear(); 795 contents->incremental_sync_origins.clear();
843 796
844 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); 797 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
845 for (itr->SeekToFirst(); itr->Valid(); itr->Next()) { 798 for (itr->SeekToFirst(); itr->Valid(); itr->Next()) {
846 std::string key = itr->key().ToString(); 799 std::string key = itr->key().ToString();
847 if (key == kChangeStampKey) { 800 if (key == kChangeStampKey) {
848 bool success = base::StringToInt64(itr->value().ToString(), 801 bool success = base::StringToInt64(itr->value().ToString(),
849 &contents->largest_changestamp); 802 &contents->largest_changestamp);
850 DCHECK(success); 803 DCHECK(success);
851 } else if (StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) { 804 } else if (StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) {
852 GURL origin; 805 GURL origin;
853 base::FilePath path; 806 base::FilePath path;
854 MetadataKeyToOriginAndPath(key, &origin, &path); 807 MetadataKeyToOriginAndPath(key, &origin, &path);
855 808
856 DriveMetadata metadata; 809 DriveMetadata metadata;
857 bool success = metadata.ParseFromString(itr->value().ToString()); 810 bool success = metadata.ParseFromString(itr->value().ToString());
858 DCHECK(success); 811 DCHECK(success);
859 812
860 success = contents->metadata_map[origin].insert( 813 success = contents->metadata_map[origin].insert(
861 std::make_pair(path, metadata)).second; 814 std::make_pair(path, metadata)).second;
862 DCHECK(success); 815 DCHECK(success);
863 } 816 }
864 } 817 }
865 818
866 SyncStatusCode status = GetOrigins(&contents->batch_sync_origins, 819 SyncStatusCode status = GetOrigins(&contents->incremental_sync_origins,
867 &contents->incremental_sync_origins,
868 &contents->disabled_origins); 820 &contents->disabled_origins);
869 if (status != SYNC_STATUS_OK && 821 if (status != SYNC_STATUS_OK &&
870 status != SYNC_DATABASE_ERROR_NOT_FOUND) 822 status != SYNC_DATABASE_ERROR_NOT_FOUND)
871 return status; 823 return status;
872 824
873 status = GetSyncRootDirectory(&contents->sync_root_directory_resource_id); 825 status = GetSyncRootDirectory(&contents->sync_root_directory_resource_id);
874 if (status != SYNC_STATUS_OK && 826 if (status != SYNC_STATUS_OK &&
875 status != SYNC_DATABASE_ERROR_NOT_FOUND) 827 status != SYNC_DATABASE_ERROR_NOT_FOUND)
876 return status; 828 return status;
877 829
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1031 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { 983 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) {
1032 DCHECK(CalledOnValidThread()); 984 DCHECK(CalledOnValidThread());
1033 DCHECK(db_.get()); 985 DCHECK(db_.get());
1034 986
1035 std::string metadata_key = FileSystemURLToMetadataKey(url); 987 std::string metadata_key = FileSystemURLToMetadataKey(url);
1036 leveldb::Status status = db_->Delete( 988 leveldb::Status status = db_->Delete(
1037 leveldb::WriteOptions(), metadata_key); 989 leveldb::WriteOptions(), metadata_key);
1038 return LevelDBStatusToSyncStatusCode(status); 990 return LevelDBStatusToSyncStatusCode(status);
1039 } 991 }
1040 992
1041 SyncStatusCode DriveMetadataDB::UpdateOriginAsBatchSync(
1042 const GURL& origin, const std::string& resource_id) {
1043 DCHECK(CalledOnValidThread());
1044 DCHECK(db_.get());
1045
1046 leveldb::Status status = db_->Put(
1047 leveldb::WriteOptions(),
1048 CreateKeyForOriginRoot(origin, BATCH_SYNC_ORIGIN),
1049 resource_id);
1050 return LevelDBStatusToSyncStatusCode(status);
1051 }
1052
1053 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync( 993 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync(
1054 const GURL& origin, const std::string& resource_id) { 994 const GURL& origin, const std::string& resource_id) {
1055 DCHECK(CalledOnValidThread()); 995 DCHECK(CalledOnValidThread());
1056 DCHECK(db_.get()); 996 DCHECK(db_.get());
1057 997
1058 leveldb::WriteBatch batch; 998 leveldb::WriteBatch batch;
1059 batch.Delete(CreateKeyForOriginRoot(origin, BATCH_SYNC_ORIGIN));
1060 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); 999 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN));
1061 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN), 1000 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN),
1062 resource_id); 1001 resource_id);
1063 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); 1002 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch);
1064 1003
1065 return LevelDBStatusToSyncStatusCode(status); 1004 return LevelDBStatusToSyncStatusCode(status);
1066 } 1005 }
1067 1006
1068 SyncStatusCode DriveMetadataDB::EnableOrigin( 1007 SyncStatusCode DriveMetadataDB::EnableOrigin(
1069 const GURL& origin, const std::string& resource_id) { 1008 const GURL& origin, const std::string& resource_id) {
1070 DCHECK(CalledOnValidThread()); 1009 DCHECK(CalledOnValidThread());
1071 DCHECK(db_.get()); 1010 DCHECK(db_.get());
1072 1011
1012 // No DB entry as enabled origins go back to
1013 // DriveFileSyncService.pending_batch_sync_origins only.
1073 leveldb::WriteBatch batch; 1014 leveldb::WriteBatch batch;
1074 batch.Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN)); 1015 batch.Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN));
1075 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); 1016 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN));
1076 batch.Put(CreateKeyForOriginRoot(origin, BATCH_SYNC_ORIGIN), resource_id);
1077 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); 1017 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch);
1078 1018
1079 return LevelDBStatusToSyncStatusCode(status); 1019 return LevelDBStatusToSyncStatusCode(status);
1080 } 1020 }
1081 1021
1082 SyncStatusCode DriveMetadataDB::DisableOrigin( 1022 SyncStatusCode DriveMetadataDB::DisableOrigin(
1083 const GURL& origin_to_disable, const std::string& resource_id) { 1023 const GURL& origin_to_disable, const std::string& resource_id) {
1084 DCHECK(CalledOnValidThread()); 1024 DCHECK(CalledOnValidThread());
1085 DCHECK(db_.get()); 1025 DCHECK(db_.get());
1086 1026
1087 leveldb::WriteBatch batch; 1027 leveldb::WriteBatch batch;
1088 batch.Delete(CreateKeyForOriginRoot(origin_to_disable, BATCH_SYNC_ORIGIN));
1089 batch.Delete(CreateKeyForOriginRoot(origin_to_disable, 1028 batch.Delete(CreateKeyForOriginRoot(origin_to_disable,
1090 INCREMENTAL_SYNC_ORIGIN)); 1029 INCREMENTAL_SYNC_ORIGIN));
1091 batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN), 1030 batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN),
1092 resource_id); 1031 resource_id);
1093 1032
1094 // Remove entries specified by |origin_to_disable|. 1033 // Remove entries specified by |origin_to_disable|.
1095 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); 1034 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
1096 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_disable.spec(); 1035 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_disable.spec();
1097 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { 1036 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) {
1098 std::string key = itr->key().ToString(); 1037 std::string key = itr->key().ToString();
1099 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) 1038 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true))
1100 break; 1039 break;
1101 GURL origin; 1040 GURL origin;
1102 base::FilePath path; 1041 base::FilePath path;
1103 MetadataKeyToOriginAndPath(key, &origin, &path); 1042 MetadataKeyToOriginAndPath(key, &origin, &path);
1104 if (origin != origin_to_disable) 1043 if (origin != origin_to_disable)
1105 break; 1044 break;
1106 batch.Delete(key); 1045 batch.Delete(key);
1107 } 1046 }
1108 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); 1047 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch);
1109 1048
1110 return LevelDBStatusToSyncStatusCode(status); 1049 return LevelDBStatusToSyncStatusCode(status);
1111 } 1050 }
1112 1051
1113 SyncStatusCode DriveMetadataDB::RemoveOrigin(const GURL& origin_to_remove) { 1052 SyncStatusCode DriveMetadataDB::RemoveOrigin(const GURL& origin_to_remove) {
1114 DCHECK(CalledOnValidThread()); 1053 DCHECK(CalledOnValidThread());
1115 1054
1116 leveldb::WriteBatch batch; 1055 leveldb::WriteBatch batch;
1117 batch.Delete(CreateKeyForOriginRoot(origin_to_remove, BATCH_SYNC_ORIGIN));
1118 batch.Delete(CreateKeyForOriginRoot(origin_to_remove, 1056 batch.Delete(CreateKeyForOriginRoot(origin_to_remove,
1119 INCREMENTAL_SYNC_ORIGIN)); 1057 INCREMENTAL_SYNC_ORIGIN));
1120 batch.Delete(CreateKeyForOriginRoot(origin_to_remove, DISABLED_ORIGIN)); 1058 batch.Delete(CreateKeyForOriginRoot(origin_to_remove, DISABLED_ORIGIN));
1121 1059
1122 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); 1060 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
1123 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_remove.spec(); 1061 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_remove.spec();
1124 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { 1062 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) {
1125 std::string key = itr->key().ToString(); 1063 std::string key = itr->key().ToString();
1126 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) 1064 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true))
1127 break; 1065 break;
1128 GURL origin; 1066 GURL origin;
1129 base::FilePath path; 1067 base::FilePath path;
1130 MetadataKeyToOriginAndPath(key, &origin, &path); 1068 MetadataKeyToOriginAndPath(key, &origin, &path);
1131 if (origin != origin_to_remove) 1069 if (origin != origin_to_remove)
1132 break; 1070 break;
1133 batch.Delete(key); 1071 batch.Delete(key);
1134 } 1072 }
1135 1073
1136 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); 1074 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch);
1137 return LevelDBStatusToSyncStatusCode(status); 1075 return LevelDBStatusToSyncStatusCode(status);
1138 } 1076 }
1139 1077
1140 SyncStatusCode DriveMetadataDB::GetOrigins( 1078 SyncStatusCode DriveMetadataDB::GetOrigins(
1141 ResourceIdByOrigin* batch_sync_origins,
1142 ResourceIdByOrigin* incremental_sync_origins, 1079 ResourceIdByOrigin* incremental_sync_origins,
1143 ResourceIdByOrigin* disabled_origins) { 1080 ResourceIdByOrigin* disabled_origins) {
1144 DCHECK(CalledOnValidThread()); 1081 DCHECK(CalledOnValidThread());
1145 DCHECK(db_.get()); 1082 DCHECK(db_.get());
1146 1083
1147 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); 1084 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
1148 1085
1149 // Get batch sync origins from the DB.
1150 for (itr->Seek(kDriveBatchSyncOriginKeyPrefix);
1151 itr->Valid(); itr->Next()) {
1152 std::string key = itr->key().ToString();
1153 if (!StartsWithASCII(key, kDriveBatchSyncOriginKeyPrefix, true))
1154 break;
1155 GURL origin(std::string(
1156 key.begin() + arraysize(kDriveBatchSyncOriginKeyPrefix) - 1,
1157 key.end()));
1158 DCHECK(origin.is_valid());
1159 bool result = batch_sync_origins->insert(
1160 std::make_pair(origin, itr->value().ToString())).second;
1161 DCHECK(result);
1162 }
1163
1164 // Get incremental sync origins from the DB. 1086 // Get incremental sync origins from the DB.
1165 for (itr->Seek(kDriveIncrementalSyncOriginKeyPrefix); 1087 for (itr->Seek(kDriveIncrementalSyncOriginKeyPrefix);
1166 itr->Valid(); itr->Next()) { 1088 itr->Valid(); itr->Next()) {
1167 std::string key = itr->key().ToString(); 1089 std::string key = itr->key().ToString();
1168 if (!StartsWithASCII(key, kDriveIncrementalSyncOriginKeyPrefix, true)) 1090 if (!StartsWithASCII(key, kDriveIncrementalSyncOriginKeyPrefix, true))
1169 break; 1091 break;
1170 GURL origin(std::string( 1092 GURL origin(std::string(
1171 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1, 1093 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1,
1172 key.end())); 1094 key.end()));
1173 DCHECK(origin.is_valid()); 1095 DCHECK(origin.is_valid());
(...skipping 14 matching lines...) Expand all
1188 DCHECK(origin.is_valid()); 1110 DCHECK(origin.is_valid());
1189 bool result = disabled_origins->insert( 1111 bool result = disabled_origins->insert(
1190 std::make_pair(origin, itr->value().ToString())).second; 1112 std::make_pair(origin, itr->value().ToString())).second;
1191 DCHECK(result); 1113 DCHECK(result);
1192 } 1114 }
1193 1115
1194 return SYNC_STATUS_OK; 1116 return SYNC_STATUS_OK;
1195 } 1117 }
1196 1118
1197 } // namespace sync_file_system 1119 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698