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

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

Issue 15954013: [SyncFileSystem][Clean up] Delete all write operation of DriveMetadataDB. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 const char kDatabaseVersionKey[] = "VERSION"; 45 const char kDatabaseVersionKey[] = "VERSION";
46 const int64 kCurrentDatabaseVersion = 2; 46 const int64 kCurrentDatabaseVersion = 2;
47 const char kChangeStampKey[] = "CHANGE_STAMP"; 47 const char kChangeStampKey[] = "CHANGE_STAMP";
48 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; 48 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR";
49 const char kDriveMetadataKeyPrefix[] = "METADATA: "; 49 const char kDriveMetadataKeyPrefix[] = "METADATA: ";
50 const char kMetadataKeySeparator = ' '; 50 const char kMetadataKeySeparator = ' ';
51 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; 51 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: ";
52 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: "; 52 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: ";
53 const size_t kDriveMetadataKeyPrefixLength = arraysize(kDriveMetadataKeyPrefix); 53 const size_t kDriveMetadataKeyPrefixLength = arraysize(kDriveMetadataKeyPrefix);
54 54
55 enum OriginSyncType {
56 INCREMENTAL_SYNC_ORIGIN,
57 DISABLED_ORIGIN
58 };
59
55 std::string RemovePrefix(const std::string& str, const std::string& prefix) { 60 std::string RemovePrefix(const std::string& str, const std::string& prefix) {
56 if (StartsWithASCII(str, prefix, true)) 61 if (StartsWithASCII(str, prefix, true))
57 return str.substr(prefix.size()); 62 return str.substr(prefix.size());
58 return str; 63 return str;
59 } 64 }
60 65
61 std::string FileSystemURLToMetadataKey(const FileSystemURL& url) { 66 std::string FileSystemURLToMetadataKey(const FileSystemURL& url) {
62 return kDriveMetadataKeyPrefix + url.origin().spec() + 67 return kDriveMetadataKeyPrefix + url.origin().spec() +
63 kMetadataKeySeparator + url.path().AsUTF8Unsafe(); 68 kMetadataKeySeparator + url.path().AsUTF8Unsafe();
64 } 69 }
(...skipping 19 matching lines...) Expand all
84 reverse_map->insert(std::make_pair(resource_id, origin)); 89 reverse_map->insert(std::make_pair(resource_id, origin));
85 90
86 found->second = resource_id; 91 found->second = resource_id;
87 return true; 92 return true;
88 } 93 }
89 94
90 } // namespace 95 } // namespace
91 96
92 class DriveMetadataDB { 97 class DriveMetadataDB {
93 public: 98 public:
94 enum OriginSyncType {
95 INCREMENTAL_SYNC_ORIGIN,
96 DISABLED_ORIGIN
97 };
98
99 typedef DriveMetadataStore::MetadataMap MetadataMap; 99 typedef DriveMetadataStore::MetadataMap MetadataMap;
100 100
101 DriveMetadataDB(const base::FilePath& base_dir, 101 DriveMetadataDB(const base::FilePath& base_dir,
102 base::SequencedTaskRunner* task_runner); 102 base::SequencedTaskRunner* task_runner);
103 ~DriveMetadataDB(); 103 ~DriveMetadataDB();
104 104
105 SyncStatusCode Initialize(bool* created); 105 SyncStatusCode Initialize(bool* created);
106 SyncStatusCode ReadContents(DriveMetadataDBContents* contents); 106 SyncStatusCode ReadContents(DriveMetadataDBContents* contents);
107 107
108 SyncStatusCode MigrateDatabaseIfNeeded(); 108 SyncStatusCode MigrateDatabaseIfNeeded();
109 109
110 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp);
111 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id);
112 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); 110 SyncStatusCode GetSyncRootDirectory(std::string* resource_id);
113 SyncStatusCode SetOriginRootDirectory(const GURL& origin,
114 OriginSyncType sync_type,
115 const std::string& resource_id);
116 SyncStatusCode UpdateEntry(const FileSystemURL& url,
117 DriveMetadata metadata);
118 111
119 // TODO(calvinlo): consolidate these state transition functions for sync
120 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in
121 // just one map like "Map<SyncStatusEnum, ResourceIDMap>".
122 // http://crbug.com/211600
123 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin,
124 const std::string& resource_id);
125 SyncStatusCode EnableOrigin(const GURL& origin,
126 const std::string& resource_id);
127 SyncStatusCode DisableOrigin(const GURL& origin, 112 SyncStatusCode DisableOrigin(const GURL& origin,
128 const std::string& resource_id); 113 const std::string& resource_id);
129 SyncStatusCode RemoveOrigin(const GURL& origin); 114 SyncStatusCode RemoveOrigin(const GURL& origin);
130 115
131 SyncStatusCode GetOrigins(ResourceIdByOrigin* incremental_sync_origins, 116 SyncStatusCode GetOrigins(ResourceIdByOrigin* incremental_sync_origins,
132 ResourceIdByOrigin* disabled_origins); 117 ResourceIdByOrigin* disabled_origins);
133 118
134 SyncStatusCode WriteToDB(leveldb::WriteBatch* batch) { 119 SyncStatusCode WriteToDB(leveldb::WriteBatch* batch) {
135 return LevelDBStatusToSyncStatusCode(db_->Write( 120 return LevelDBStatusToSyncStatusCode(db_->Write(
136 leveldb::WriteOptions(), batch)); 121 leveldb::WriteOptions(), batch));
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 } 171 }
187 } 172 }
188 173
189 return db->ReadContents(contents); 174 return db->ReadContents(contents);
190 } 175 }
191 176
192 // Returns a key string for the given origin. 177 // Returns a key string for the given origin.
193 // For example, when |origin| is "http://www.example.com" and |sync_type| is 178 // For example, when |origin| is "http://www.example.com" and |sync_type| is
194 // BATCH_SYNC_ORIGIN, returns "BSYNC_ORIGIN: http://www.example.com". 179 // BATCH_SYNC_ORIGIN, returns "BSYNC_ORIGIN: http://www.example.com".
195 std::string CreateKeyForOriginRoot(const GURL& origin, 180 std::string CreateKeyForOriginRoot(const GURL& origin,
196 DriveMetadataDB::OriginSyncType sync_type) { 181 OriginSyncType sync_type) {
197 DCHECK(origin.is_valid()); 182 DCHECK(origin.is_valid());
198 switch (sync_type) { 183 switch (sync_type) {
199 case DriveMetadataDB::INCREMENTAL_SYNC_ORIGIN: 184 case INCREMENTAL_SYNC_ORIGIN:
200 return kDriveIncrementalSyncOriginKeyPrefix + origin.spec(); 185 return kDriveIncrementalSyncOriginKeyPrefix + origin.spec();
201 case DriveMetadataDB::DISABLED_ORIGIN: 186 case DISABLED_ORIGIN:
202 return kDriveDisabledOriginKeyPrefix + origin.spec(); 187 return kDriveDisabledOriginKeyPrefix + origin.spec();
203 } 188 }
204 NOTREACHED(); 189 NOTREACHED();
205 return std::string(); 190 return std::string();
206 } 191 }
207 192
208 void AddOriginsToVector(std::vector<GURL>* all_origins, 193 void AddOriginsToVector(std::vector<GURL>* all_origins,
209 const ResourceIdByOrigin& resource_map) { 194 const ResourceIdByOrigin& resource_map) {
210 for (ResourceIdByOrigin::const_iterator itr = resource_map.begin(); 195 for (ResourceIdByOrigin::const_iterator itr = resource_map.begin();
211 itr != resource_map.end(); 196 itr != resource_map.end();
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 leveldb::DB* DriveMetadataStore::GetDBInstanceForTesting() { 354 leveldb::DB* DriveMetadataStore::GetDBInstanceForTesting() {
370 return db_->db_.get(); 355 return db_->db_.get();
371 } 356 }
372 357
373 void DriveMetadataStore::SetLargestChangeStamp( 358 void DriveMetadataStore::SetLargestChangeStamp(
374 int64 largest_changestamp, 359 int64 largest_changestamp,
375 const SyncStatusCallback& callback) { 360 const SyncStatusCallback& callback) {
376 DCHECK(CalledOnValidThread()); 361 DCHECK(CalledOnValidThread());
377 DCHECK_EQ(SYNC_STATUS_OK, db_status_); 362 DCHECK_EQ(SYNC_STATUS_OK, db_status_);
378 largest_changestamp_ = largest_changestamp; 363 largest_changestamp_ = largest_changestamp;
379 base::PostTaskAndReplyWithResult( 364
380 file_task_runner_.get(), 365 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch);
381 FROM_HERE, 366 batch->Put(kChangeStampKey, base::Int64ToString(largest_changestamp));
382 base::Bind(&DriveMetadataDB::SetLargestChangestamp, 367 return WriteToDB(batch.Pass(), callback);
383 base::Unretained(db_.get()),
384 largest_changestamp),
385 base::Bind(&DriveMetadataStore::UpdateDBStatusAndInvokeCallback,
386 AsWeakPtr(),
387 callback));
388 } 368 }
389 369
390 int64 DriveMetadataStore::GetLargestChangeStamp() const { 370 int64 DriveMetadataStore::GetLargestChangeStamp() const {
391 DCHECK(CalledOnValidThread()); 371 DCHECK(CalledOnValidThread());
392 DCHECK_EQ(SYNC_STATUS_OK, db_status_); 372 DCHECK_EQ(SYNC_STATUS_OK, db_status_);
393 return largest_changestamp_; 373 return largest_changestamp_;
394 } 374 }
395 375
396 void DriveMetadataStore::UpdateEntry( 376 void DriveMetadataStore::UpdateEntry(
397 const FileSystemURL& url, 377 const FileSystemURL& url,
398 const DriveMetadata& metadata, 378 const DriveMetadata& metadata,
399 const SyncStatusCallback& callback) { 379 const SyncStatusCallback& callback) {
400 DCHECK(CalledOnValidThread()); 380 DCHECK(CalledOnValidThread());
401 DCHECK_EQ(SYNC_STATUS_OK, db_status_); 381 DCHECK_EQ(SYNC_STATUS_OK, db_status_);
402 DCHECK(!metadata.conflicted() || !metadata.to_be_fetched()); 382 DCHECK(!metadata.conflicted() || !metadata.to_be_fetched());
403 383
404 std::pair<PathToMetadata::iterator, bool> result = 384 std::pair<PathToMetadata::iterator, bool> result =
405 metadata_map_[url.origin()].insert(std::make_pair(url.path(), metadata)); 385 metadata_map_[url.origin()].insert(std::make_pair(url.path(), metadata));
406 if (!result.second) 386 if (!result.second)
407 result.first->second = metadata; 387 result.first->second = metadata;
408 388
409 base::PostTaskAndReplyWithResult( 389 std::string value;
410 file_task_runner_.get(), 390 if (!IsDriveAPIEnabled()) {
411 FROM_HERE, 391 DriveMetadata metadata_in_db(metadata);
412 base::Bind(&DriveMetadataDB::UpdateEntry, 392 metadata_in_db.set_resource_id(
413 base::Unretained(db_.get()), 393 drive::RemoveWapiIdPrefix(metadata.resource_id()));
414 url, 394 bool success = metadata_in_db.SerializeToString(&value);
415 metadata), 395 DCHECK(success);
416 base::Bind(&DriveMetadataStore::UpdateDBStatusAndInvokeCallback, 396 } else {
417 AsWeakPtr(), 397 bool success = metadata.SerializeToString(&value);
418 callback)); 398 DCHECK(success);
399 }
400
401 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch);
402 batch->Put(FileSystemURLToMetadataKey(url), value);
403 WriteToDB(batch.Pass(), callback);
419 } 404 }
420 405
421 void DriveMetadataStore::DeleteEntry( 406 void DriveMetadataStore::DeleteEntry(
422 const FileSystemURL& url, 407 const FileSystemURL& url,
423 const SyncStatusCallback& callback) { 408 const SyncStatusCallback& callback) {
424 DCHECK(CalledOnValidThread()); 409 DCHECK(CalledOnValidThread());
425 MetadataMap::iterator found = metadata_map_.find(url.origin()); 410 MetadataMap::iterator found = metadata_map_.find(url.origin());
426 if (found == metadata_map_.end()) { 411 if (found == metadata_map_.end()) {
427 base::MessageLoopProxy::current()->PostTask( 412 base::MessageLoopProxy::current()->PostTask(
428 FROM_HERE, 413 FROM_HERE,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 const GURL& origin, 448 const GURL& origin,
464 const std::string& resource_id) { 449 const std::string& resource_id) {
465 DCHECK(CalledOnValidThread()); 450 DCHECK(CalledOnValidThread());
466 DCHECK(!IsIncrementalSyncOrigin(origin)); 451 DCHECK(!IsIncrementalSyncOrigin(origin));
467 DCHECK(!IsOriginDisabled(origin)); 452 DCHECK(!IsOriginDisabled(origin));
468 DCHECK_EQ(SYNC_STATUS_OK, db_status_); 453 DCHECK_EQ(SYNC_STATUS_OK, db_status_);
469 454
470 incremental_sync_origins_.insert(std::make_pair(origin, resource_id)); 455 incremental_sync_origins_.insert(std::make_pair(origin, resource_id));
471 origin_by_resource_id_.insert(std::make_pair(resource_id, origin)); 456 origin_by_resource_id_.insert(std::make_pair(resource_id, origin));
472 457
473 // Store a pair of |origin| and |resource_id| in the DB. 458 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch);
474 base::PostTaskAndReplyWithResult( 459 batch->Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN));
475 file_task_runner_.get(), 460 batch->Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN),
476 FROM_HERE, 461 drive::RemoveWapiIdPrefix(resource_id));
477 base::Bind(&DriveMetadataDB::UpdateOriginAsIncrementalSync, 462 WriteToDB(batch.Pass(),
478 base::Unretained(db_.get()), 463 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
479 origin,
480 resource_id),
481 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
482 } 464 }
483 465
484 void DriveMetadataStore::SetSyncRootDirectory(const std::string& resource_id) { 466 void DriveMetadataStore::SetSyncRootDirectory(const std::string& resource_id) {
485 DCHECK(CalledOnValidThread()); 467 DCHECK(CalledOnValidThread());
486 468
487 sync_root_directory_resource_id_ = resource_id; 469 sync_root_directory_resource_id_ = resource_id;
488 470
489 // Set the resource ID for the sync root directory in the DB. 471 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch);
490 base::PostTaskAndReplyWithResult( 472 batch->Put(kSyncRootDirectoryKey, drive::RemoveWapiIdPrefix(resource_id));
491 file_task_runner_.get(), 473 return WriteToDB(batch.Pass(),
492 FROM_HERE, 474 base::Bind(&DriveMetadataStore::UpdateDBStatus,
493 base::Bind(&DriveMetadataDB::SetSyncRootDirectory, 475 AsWeakPtr()));
494 base::Unretained(db_.get()),
495 resource_id),
496 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
497 } 476 }
498 477
499 void DriveMetadataStore::SetOriginRootDirectory( 478 void DriveMetadataStore::SetOriginRootDirectory(
500 const GURL& origin, 479 const GURL& origin,
501 const std::string& resource_id) { 480 const std::string& resource_id) {
502 DCHECK(CalledOnValidThread()); 481 DCHECK(CalledOnValidThread());
503 DCHECK(IsKnownOrigin(origin)); 482 DCHECK(IsKnownOrigin(origin));
504 483
505 DriveMetadataDB::OriginSyncType sync_type; 484 OriginSyncType sync_type;
506 if (UpdateResourceIdMap( 485 if (UpdateResourceIdMap(
507 &incremental_sync_origins_, &origin_by_resource_id_, 486 &incremental_sync_origins_, &origin_by_resource_id_,
508 origin, resource_id)) { 487 origin, resource_id)) {
509 sync_type = DriveMetadataDB::INCREMENTAL_SYNC_ORIGIN; 488 sync_type = INCREMENTAL_SYNC_ORIGIN;
510 } else if (UpdateResourceIdMap(&disabled_origins_, &origin_by_resource_id_, 489 } else if (UpdateResourceIdMap(&disabled_origins_, &origin_by_resource_id_,
511 origin, resource_id)) { 490 origin, resource_id)) {
512 sync_type = DriveMetadataDB::DISABLED_ORIGIN; 491 sync_type = DISABLED_ORIGIN;
513 } else { 492 } else {
514 return; 493 return;
515 } 494 }
516 base::PostTaskAndReplyWithResult( 495
517 file_task_runner_.get(), 496 std::string key = CreateKeyForOriginRoot(origin, sync_type);
518 FROM_HERE, 497 DCHECK(!key.empty());
519 base::Bind(&DriveMetadataDB::SetOriginRootDirectory, 498
520 base::Unretained(db_.get()), 499 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch);
521 origin, 500 batch->Put(key, drive::RemoveWapiIdPrefix(resource_id));
522 sync_type, 501 WriteToDB(batch.Pass(),
523 resource_id), 502 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
524 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
525 } 503 }
526 504
527 bool DriveMetadataStore::IsKnownOrigin(const GURL& origin) const { 505 bool DriveMetadataStore::IsKnownOrigin(const GURL& origin) const {
528 DCHECK(CalledOnValidThread()); 506 DCHECK(CalledOnValidThread());
529 return IsIncrementalSyncOrigin(origin) || IsOriginDisabled(origin); 507 return IsIncrementalSyncOrigin(origin) || IsOriginDisabled(origin);
530 } 508 }
531 509
532 bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const { 510 bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const {
533 DCHECK(CalledOnValidThread()); 511 DCHECK(CalledOnValidThread());
534 return ContainsKey(incremental_sync_origins_, origin); 512 return ContainsKey(incremental_sync_origins_, origin);
(...skipping 16 matching lines...) Expand all
551 } 529 }
552 std::string resource_id = found->second; 530 std::string resource_id = found->second;
553 disabled_origins_.erase(found); 531 disabled_origins_.erase(found);
554 532
555 // |origin| goes back to DriveFileSyncService::pending_batch_sync_origins_ 533 // |origin| goes back to DriveFileSyncService::pending_batch_sync_origins_
556 // only and is not stored in drive_metadata_store. 534 // only and is not stored in drive_metadata_store.
557 found = incremental_sync_origins_.find(origin); 535 found = incremental_sync_origins_.find(origin);
558 if (found != incremental_sync_origins_.end()) 536 if (found != incremental_sync_origins_.end())
559 incremental_sync_origins_.erase(found); 537 incremental_sync_origins_.erase(found);
560 538
561 // Store a pair of |origin| and |resource_id| in the DB. 539 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch);
562 base::PostTaskAndReplyWithResult( 540 batch->Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN));
563 file_task_runner_.get(), 541 batch->Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN));
564 FROM_HERE, 542 WriteToDB(batch.Pass(), callback);
565 base::Bind(&DriveMetadataDB::EnableOrigin,
566 base::Unretained(db_.get()),
567 origin,
568 resource_id),
569 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback));
570 } 543 }
571 544
572 void DriveMetadataStore::DisableOrigin( 545 void DriveMetadataStore::DisableOrigin(
573 const GURL& origin, 546 const GURL& origin,
574 const SyncStatusCallback& callback) { 547 const SyncStatusCallback& callback) {
575 DCHECK(CalledOnValidThread()); 548 DCHECK(CalledOnValidThread());
576 549
577 std::string resource_id; 550 std::string resource_id;
578 std::map<GURL, std::string>::iterator found = 551 std::map<GURL, std::string>::iterator found =
579 incremental_sync_origins_.find(origin); 552 incremental_sync_origins_.find(origin);
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 case 0: 838 case 0:
866 drive::MigrateDatabaseFromV0ToV1(db_.get()); 839 drive::MigrateDatabaseFromV0ToV1(db_.get());
867 // fall-through 840 // fall-through
868 case 1: 841 case 1:
869 drive::MigrateDatabaseFromV1ToV2(db_.get()); 842 drive::MigrateDatabaseFromV1ToV2(db_.get());
870 return SYNC_STATUS_OK; 843 return SYNC_STATUS_OK;
871 } 844 }
872 return SYNC_DATABASE_ERROR_FAILED; 845 return SYNC_DATABASE_ERROR_FAILED;
873 } 846 }
874 847
875 SyncStatusCode DriveMetadataDB::SetLargestChangestamp(
876 int64 largest_changestamp) {
877 DCHECK(CalledOnValidThread());
878 DCHECK(db_.get());
879
880 leveldb::WriteBatch batch;
881 batch.Put(kChangeStampKey, base::Int64ToString(largest_changestamp));
882 return WriteToDB(&batch);
883 }
884
885 SyncStatusCode DriveMetadataDB::SetSyncRootDirectory(
886 const std::string& resource_id) {
887 DCHECK(CalledOnValidThread());
888 DCHECK(db_.get());
889
890 leveldb::WriteBatch batch;
891 batch.Put(kSyncRootDirectoryKey, drive::RemoveWapiIdPrefix(resource_id));
892 return WriteToDB(&batch);
893 }
894
895 SyncStatusCode DriveMetadataDB::SetOriginRootDirectory(
896 const GURL& origin,
897 OriginSyncType sync_type,
898 const std::string& resource_id) {
899 DCHECK(CalledOnValidThread());
900 DCHECK(db_.get());
901
902 std::string key = CreateKeyForOriginRoot(origin, sync_type);
903 if (key.empty())
904 return SYNC_DATABASE_ERROR_FAILED;
905
906 leveldb::WriteBatch batch;
907 batch.Put(key, drive::RemoveWapiIdPrefix(resource_id));
908 return WriteToDB(&batch);
909 }
910
911 SyncStatusCode DriveMetadataDB::GetSyncRootDirectory(std::string* resource_id) { 848 SyncStatusCode DriveMetadataDB::GetSyncRootDirectory(std::string* resource_id) {
912 DCHECK(CalledOnValidThread()); 849 DCHECK(CalledOnValidThread());
913 DCHECK(db_.get()); 850 DCHECK(db_.get());
914 851
915 leveldb::Status status = db_->Get( 852 leveldb::Status status = db_->Get(
916 leveldb::ReadOptions(), kSyncRootDirectoryKey, resource_id); 853 leveldb::ReadOptions(), kSyncRootDirectoryKey, resource_id);
917 854
918 if (!IsDriveAPIEnabled() && status.ok()) 855 if (!IsDriveAPIEnabled() && status.ok())
919 *resource_id = drive::AddWapiFolderPrefix(*resource_id); 856 *resource_id = drive::AddWapiFolderPrefix(*resource_id);
920 857
921 return LevelDBStatusToSyncStatusCode(status); 858 return LevelDBStatusToSyncStatusCode(status);
922 } 859 }
923 860
924 SyncStatusCode DriveMetadataDB::UpdateEntry(const FileSystemURL& url,
925 DriveMetadata metadata) {
926 DCHECK(CalledOnValidThread());
927 DCHECK(db_.get());
928
929 if (!IsDriveAPIEnabled()) {
930 metadata.set_resource_id(
931 drive::RemoveWapiIdPrefix(metadata.resource_id()));
932 }
933
934 std::string metadata_key = FileSystemURLToMetadataKey(url);
935 std::string value;
936 bool success = metadata.SerializeToString(&value);
937 DCHECK(success);
938
939 leveldb::WriteBatch batch;
940 batch.Put(metadata_key, value);
941 return WriteToDB(&batch);
942 }
943
944 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync(
945 const GURL& origin, const std::string& resource_id) {
946 DCHECK(CalledOnValidThread());
947 DCHECK(db_.get());
948
949 leveldb::WriteBatch batch;
950 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN));
951 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN),
952 drive::RemoveWapiIdPrefix(resource_id));
953 return WriteToDB(&batch);
954 }
955
956 SyncStatusCode DriveMetadataDB::EnableOrigin(
957 const GURL& origin, const std::string& resource_id) {
958 DCHECK(CalledOnValidThread());
959 DCHECK(db_.get());
960
961 // No DB entry as enabled origins go back to
962 // DriveFileSyncService::pending_batch_sync_origins only.
963 leveldb::WriteBatch batch;
964 batch.Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN));
965 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN));
966
967 return WriteToDB(&batch);
968 }
969
970 SyncStatusCode DriveMetadataDB::DisableOrigin( 861 SyncStatusCode DriveMetadataDB::DisableOrigin(
971 const GURL& origin_to_disable, const std::string& resource_id) { 862 const GURL& origin_to_disable, const std::string& resource_id) {
972 DCHECK(CalledOnValidThread()); 863 DCHECK(CalledOnValidThread());
973 DCHECK(db_.get()); 864 DCHECK(db_.get());
974 865
975 leveldb::WriteBatch batch; 866 leveldb::WriteBatch batch;
976 batch.Delete(CreateKeyForOriginRoot(origin_to_disable, 867 batch.Delete(CreateKeyForOriginRoot(origin_to_disable,
977 INCREMENTAL_SYNC_ORIGIN)); 868 INCREMENTAL_SYNC_ORIGIN));
978 batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN), 869 batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN),
979 drive::RemoveWapiIdPrefix(resource_id)); 870 drive::RemoveWapiIdPrefix(resource_id));
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 953
1063 bool result = disabled_origins->insert( 954 bool result = disabled_origins->insert(
1064 std::make_pair(origin, origin_resource_id)).second; 955 std::make_pair(origin, origin_resource_id)).second;
1065 DCHECK(result); 956 DCHECK(result);
1066 } 957 }
1067 958
1068 return SYNC_STATUS_OK; 959 return SYNC_STATUS_OK;
1069 } 960 }
1070 961
1071 } // namespace sync_file_system 962 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698