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

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

Powered by Google App Engine
This is Rietveld 408576698