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

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

Issue 15808002: SyncFS: Convert WAPI ResourceID to DriveAPI FileID (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fix 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"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "base/location.h" 13 #include "base/location.h"
14 #include "base/message_loop/message_loop_proxy.h" 14 #include "base/message_loop/message_loop_proxy.h"
15 #include "base/sequenced_task_runner.h" 15 #include "base/sequenced_task_runner.h"
16 #include "base/stl_util.h" 16 #include "base/stl_util.h"
17 #include "base/string_util.h" 17 #include "base/string_util.h"
18 #include "base/strings/string_number_conversions.h" 18 #include "base/strings/string_number_conversions.h"
19 #include "base/task_runner_util.h" 19 #include "base/task_runner_util.h"
20 #include "chrome/browser/sync_file_system/drive/metadata_db_migration_util.h"
20 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" 21 #include "chrome/browser/sync_file_system/drive_file_sync_service.h"
22 #include "chrome/browser/sync_file_system/drive_file_sync_util.h"
21 #include "chrome/browser/sync_file_system/logger.h" 23 #include "chrome/browser/sync_file_system/logger.h"
22 #include "chrome/browser/sync_file_system/sync_file_system.pb.h" 24 #include "chrome/browser/sync_file_system/sync_file_system.pb.h"
23 #include "googleurl/src/gurl.h" 25 #include "googleurl/src/gurl.h"
24 #include "third_party/leveldatabase/src/include/leveldb/db.h" 26 #include "third_party/leveldatabase/src/include/leveldb/db.h"
25 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" 27 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
26 #include "webkit/browser/fileapi/file_system_url.h" 28 #include "webkit/browser/fileapi/file_system_url.h"
27 #include "webkit/common/fileapi/file_system_util.h" 29 #include "webkit/common/fileapi/file_system_util.h"
28 #include "webkit/fileapi/syncable/syncable_file_system_util.h" 30 #include "webkit/fileapi/syncable/syncable_file_system_util.h"
29 31
30 using fileapi::FileSystemURL; 32 using fileapi::FileSystemURL;
31 33
32 namespace sync_file_system { 34 namespace sync_file_system {
33 35
34 typedef DriveMetadataStore::ResourceIdByOrigin ResourceIdByOrigin; 36 typedef DriveMetadataStore::ResourceIdByOrigin ResourceIdByOrigin;
35 typedef DriveMetadataStore::OriginByResourceId OriginByResourceId; 37 typedef DriveMetadataStore::OriginByResourceId OriginByResourceId;
36 38
37 const base::FilePath::CharType DriveMetadataStore::kDatabaseName[] = 39 const base::FilePath::CharType DriveMetadataStore::kDatabaseName[] =
38 FILE_PATH_LITERAL("DriveMetadata"); 40 FILE_PATH_LITERAL("DriveMetadata");
39 41
40 namespace { 42 namespace {
41 43
42 const char* const kServiceName = DriveFileSyncService::kServiceName; 44 const char* const kServiceName = DriveFileSyncService::kServiceName;
43 const char kDatabaseVersionKey[] = "VERSION"; 45 const char kDatabaseVersionKey[] = "VERSION";
44 const int64 kCurrentDatabaseVersion = 1; 46 const int64 kCurrentDatabaseVersion = 2;
45 const char kChangeStampKey[] = "CHANGE_STAMP"; 47 const char kChangeStampKey[] = "CHANGE_STAMP";
46 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; 48 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR";
47 const char kDriveMetadataKeyPrefix[] = "METADATA: "; 49 const char kDriveMetadataKeyPrefix[] = "METADATA: ";
48 const char kMetadataKeySeparator = ' '; 50 const char kMetadataKeySeparator = ' ';
49 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; 51 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: ";
50 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; 52 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: ";
51 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: "; 53 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: ";
52 const size_t kDriveMetadataKeyPrefixLength = arraysize(kDriveMetadataKeyPrefix); 54 const size_t kDriveMetadataKeyPrefixLength = arraysize(kDriveMetadataKeyPrefix);
53 55
54 const base::FilePath::CharType kV0FormatPathPrefix[] = 56 const base::FilePath::CharType kV0FormatPathPrefix[] =
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 ResourceIdByOrigin::iterator found = map->find(origin); 101 ResourceIdByOrigin::iterator found = map->find(origin);
100 if (found == map->end()) 102 if (found == map->end())
101 return false; 103 return false;
102 reverse_map->erase(found->second); 104 reverse_map->erase(found->second);
103 reverse_map->insert(std::make_pair(resource_id, origin)); 105 reverse_map->insert(std::make_pair(resource_id, origin));
104 106
105 found->second = resource_id; 107 found->second = resource_id;
106 return true; 108 return true;
107 } 109 }
108 110
111 std::string RemovePrefix(const std::string& str, const std::string& prefix) {
112 if (StartsWithASCII(str, prefix, true))
113 return std::string(str.begin() + prefix.size(), str.end());
tzik 2013/05/29 04:30:24 str.substr(prefix.size())?
nhiroki 2013/05/29 06:31:03 Done.
114 return str;
115 }
116
109 } // namespace 117 } // namespace
110 118
111 class DriveMetadataDB { 119 class DriveMetadataDB {
112 public: 120 public:
113 enum OriginSyncType { 121 enum OriginSyncType {
114 INCREMENTAL_SYNC_ORIGIN, 122 INCREMENTAL_SYNC_ORIGIN,
115 DISABLED_ORIGIN 123 DISABLED_ORIGIN
116 }; 124 };
117 125
118 typedef DriveMetadataStore::MetadataMap MetadataMap; 126 typedef DriveMetadataStore::MetadataMap MetadataMap;
119 127
120 DriveMetadataDB(const base::FilePath& base_dir, 128 DriveMetadataDB(const base::FilePath& base_dir,
121 base::SequencedTaskRunner* task_runner); 129 base::SequencedTaskRunner* task_runner);
122 ~DriveMetadataDB(); 130 ~DriveMetadataDB();
123 131
124 SyncStatusCode Initialize(bool* created); 132 SyncStatusCode Initialize(bool* created);
125 SyncStatusCode ReadContents(DriveMetadataDBContents* contents); 133 SyncStatusCode ReadContents(DriveMetadataDBContents* contents);
126 134
127 SyncStatusCode MigrateDatabaseIfNeeded(); 135 SyncStatusCode MigrateDatabaseIfNeeded();
128 SyncStatusCode MigrateFromVersion0Database(); 136 SyncStatusCode MigrateFromVersion0To1Database();
129 137
130 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); 138 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp);
131 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); 139 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id);
132 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); 140 SyncStatusCode GetSyncRootDirectory(std::string* resource_id);
133 SyncStatusCode SetOriginRootDirectory(const GURL& origin, 141 SyncStatusCode SetOriginRootDirectory(const GURL& origin,
134 OriginSyncType sync_type, 142 OriginSyncType sync_type,
135 const std::string& resource_id); 143 const std::string& resource_id);
136 SyncStatusCode UpdateEntry(const FileSystemURL& url, 144 SyncStatusCode UpdateEntry(const FileSystemURL& url,
137 const DriveMetadata& metadata); 145 DriveMetadata metadata);
138 SyncStatusCode DeleteEntry(const FileSystemURL& url); 146 SyncStatusCode DeleteEntry(const FileSystemURL& url);
139 147
140 // TODO(calvinlo): consolidate these state transition functions for sync 148 // TODO(calvinlo): consolidate these state transition functions for sync
141 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in 149 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in
142 // just one map like "Map<SyncStatusEnum, ResourceIDMap>". 150 // just one map like "Map<SyncStatusEnum, ResourceIDMap>".
143 // http://crbug.com/211600 151 // http://crbug.com/211600
144 SyncStatusCode UpdateOriginAsBatchSync(const GURL& origin, 152 SyncStatusCode UpdateOriginAsBatchSync(const GURL& origin,
145 const std::string& resource_id); 153 const std::string& resource_id);
146 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin, 154 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin,
147 const std::string& resource_id); 155 const std::string& resource_id);
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 444
437 if (found->second.erase(url.path()) == 1) { 445 if (found->second.erase(url.path()) == 1) {
438 base::PostTaskAndReplyWithResult( 446 base::PostTaskAndReplyWithResult(
439 file_task_runner_, FROM_HERE, 447 file_task_runner_, FROM_HERE,
440 base::Bind(&DriveMetadataDB::DeleteEntry, 448 base::Bind(&DriveMetadataDB::DeleteEntry,
441 base::Unretained(db_.get()), url), 449 base::Unretained(db_.get()), url),
442 base::Bind(&DriveMetadataStore::UpdateDBStatusAndInvokeCallback, 450 base::Bind(&DriveMetadataStore::UpdateDBStatusAndInvokeCallback,
443 AsWeakPtr(), callback)); 451 AsWeakPtr(), callback));
444 return; 452 return;
445 } 453 }
454
446 base::MessageLoopProxy::current()->PostTask( 455 base::MessageLoopProxy::current()->PostTask(
447 FROM_HERE, 456 FROM_HERE,
448 base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND)); 457 base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
449 } 458 }
450 459
451 SyncStatusCode DriveMetadataStore::ReadEntry(const FileSystemURL& url, 460 SyncStatusCode DriveMetadataStore::ReadEntry(const FileSystemURL& url,
452 DriveMetadata* metadata) const { 461 DriveMetadata* metadata) const {
453 DCHECK(CalledOnValidThread()); 462 DCHECK(CalledOnValidThread());
454 DCHECK(metadata); 463 DCHECK(metadata);
455 464
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 DCHECK(success); 818 DCHECK(success);
810 } else if (StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) { 819 } else if (StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) {
811 GURL origin; 820 GURL origin;
812 base::FilePath path; 821 base::FilePath path;
813 MetadataKeyToOriginAndPath(key, &origin, &path); 822 MetadataKeyToOriginAndPath(key, &origin, &path);
814 823
815 DriveMetadata metadata; 824 DriveMetadata metadata;
816 bool success = metadata.ParseFromString(itr->value().ToString()); 825 bool success = metadata.ParseFromString(itr->value().ToString());
817 DCHECK(success); 826 DCHECK(success);
818 827
828 if (!IsDriveAPIEnabled()) {
829 metadata.set_resource_id(
830 drive::AddWapiIdPrefix(metadata.resource_id(), metadata.type()));
831 }
832
819 success = contents->metadata_map[origin].insert( 833 success = contents->metadata_map[origin].insert(
820 std::make_pair(path, metadata)).second; 834 std::make_pair(path, metadata)).second;
821 DCHECK(success); 835 DCHECK(success);
822 } 836 }
823 } 837 }
824 838
825 SyncStatusCode status = GetOrigins(&contents->incremental_sync_origins, 839 SyncStatusCode status = GetOrigins(&contents->incremental_sync_origins,
826 &contents->disabled_origins); 840 &contents->disabled_origins);
827 if (status != SYNC_STATUS_OK && 841 if (status != SYNC_STATUS_OK &&
828 status != SYNC_DATABASE_ERROR_NOT_FOUND) 842 status != SYNC_DATABASE_ERROR_NOT_FOUND)
(...skipping 16 matching lines...) Expand all
845 bool success = base::StringToInt64(itr->value().ToString(), 859 bool success = base::StringToInt64(itr->value().ToString(),
846 &database_version); 860 &database_version);
847 if (!success) 861 if (!success)
848 return SYNC_DATABASE_ERROR_FAILED; 862 return SYNC_DATABASE_ERROR_FAILED;
849 if (database_version > kCurrentDatabaseVersion) 863 if (database_version > kCurrentDatabaseVersion)
850 return SYNC_DATABASE_ERROR_FAILED; 864 return SYNC_DATABASE_ERROR_FAILED;
851 if (database_version == kCurrentDatabaseVersion) 865 if (database_version == kCurrentDatabaseVersion)
852 return SYNC_STATUS_OK; 866 return SYNC_STATUS_OK;
853 } 867 }
854 868
855 if (database_version == 0) { 869 switch (database_version) {
856 MigrateFromVersion0Database(); 870 case 0:
857 return SYNC_STATUS_OK; 871 MigrateFromVersion0To1Database();
872 // fall-through
873 case 1:
874 drive::MigrateDatabaseFromV1ToV2(db_.get());
875 return SYNC_STATUS_OK;
858 } 876 }
859 return SYNC_DATABASE_ERROR_FAILED; 877 return SYNC_DATABASE_ERROR_FAILED;
860 } 878 }
861 879
862 SyncStatusCode DriveMetadataDB::MigrateFromVersion0Database() { 880 SyncStatusCode DriveMetadataDB::MigrateFromVersion0To1Database() {
863 // Version 0 database format: 881 // Version 0 database format:
864 // key: "CHANGE_STAMP" 882 // key: "CHANGE_STAMP"
865 // value: <Largest Changestamp> 883 // value: <Largest Changestamp>
866 // 884 //
867 // key: "SYNC_ROOT_DIR" 885 // key: "SYNC_ROOT_DIR"
868 // value: <Resource ID of the sync root directory> 886 // value: <Resource ID of the sync root directory>
869 // 887 //
870 // key: "METADATA: " + 888 // key: "METADATA: " +
871 // <FileSystemURL serialized by SerializeSyncableFileSystemURL> 889 // <FileSystemURL serialized by SerializeSyncableFileSystemURL>
872 // value: <Serialized DriveMetadata> 890 // value: <Serialized DriveMetadata>
(...skipping 20 matching lines...) Expand all
893 // key: "BSYNC_ORIGIN: " + <URL string of a batch sync origin> 911 // key: "BSYNC_ORIGIN: " + <URL string of a batch sync origin>
894 // value: <Resource ID of the drive directory for the origin> 912 // value: <Resource ID of the drive directory for the origin>
895 // 913 //
896 // key: "ISYNC_ORIGIN: " + <URL string of a incremental sync origin> 914 // key: "ISYNC_ORIGIN: " + <URL string of a incremental sync origin>
897 // value: <Resource ID of the drive directory for the origin> 915 // value: <Resource ID of the drive directory for the origin>
898 // 916 //
899 // key: "DISABLED_ORIGIN: " + <URL string of a disabled origin> 917 // key: "DISABLED_ORIGIN: " + <URL string of a disabled origin>
900 // value: <Resource ID of the drive directory for the origin> 918 // value: <Resource ID of the drive directory for the origin>
901 919
902 leveldb::WriteBatch write_batch; 920 leveldb::WriteBatch write_batch;
903 write_batch.Put(kDatabaseVersionKey, 921 write_batch.Put(kDatabaseVersionKey, "1");
904 base::Int64ToString(kCurrentDatabaseVersion));
905 922
906 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); 923 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
907 for (itr->Seek(kDriveMetadataKeyPrefix); itr->Valid(); itr->Next()) { 924 for (itr->Seek(kDriveMetadataKeyPrefix); itr->Valid(); itr->Next()) {
908 std::string key = itr->key().ToString(); 925 std::string key = itr->key().ToString();
909 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) 926 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true))
910 break; 927 break;
911 std::string serialized_url( 928 std::string serialized_url(
912 key.begin() + kDriveMetadataKeyPrefixLength - 1, key.end()); 929 key.begin() + kDriveMetadataKeyPrefixLength - 1, key.end());
913 930
914 GURL origin; 931 GURL origin;
(...skipping 20 matching lines...) Expand all
935 leveldb::WriteOptions(), 952 leveldb::WriteOptions(),
936 kChangeStampKey, base::Int64ToString(largest_changestamp)); 953 kChangeStampKey, base::Int64ToString(largest_changestamp));
937 return LevelDBStatusToSyncStatusCode(status); 954 return LevelDBStatusToSyncStatusCode(status);
938 } 955 }
939 956
940 SyncStatusCode DriveMetadataDB::SetSyncRootDirectory( 957 SyncStatusCode DriveMetadataDB::SetSyncRootDirectory(
941 const std::string& resource_id) { 958 const std::string& resource_id) {
942 DCHECK(CalledOnValidThread()); 959 DCHECK(CalledOnValidThread());
943 DCHECK(db_.get()); 960 DCHECK(db_.get());
944 961
945 leveldb::Status status = db_->Put( 962 leveldb::Status status = db_->Put(leveldb::WriteOptions(),
946 leveldb::WriteOptions(), kSyncRootDirectoryKey, resource_id); 963 kSyncRootDirectoryKey,
964 drive::RemoveWapiIdPrefix(resource_id));
947 return LevelDBStatusToSyncStatusCode(status); 965 return LevelDBStatusToSyncStatusCode(status);
948 } 966 }
949 967
950 SyncStatusCode DriveMetadataDB::SetOriginRootDirectory( 968 SyncStatusCode DriveMetadataDB::SetOriginRootDirectory(
951 const GURL& origin, 969 const GURL& origin,
952 OriginSyncType sync_type, 970 OriginSyncType sync_type,
953 const std::string& resource_id) { 971 const std::string& resource_id) {
954 DCHECK(CalledOnValidThread()); 972 DCHECK(CalledOnValidThread());
955 DCHECK(db_.get()); 973 DCHECK(db_.get());
956 974
957 std::string key = CreateKeyForOriginRoot(origin, sync_type); 975 std::string key = CreateKeyForOriginRoot(origin, sync_type);
958 if (key.empty()) 976 if (key.empty())
959 return SYNC_DATABASE_ERROR_FAILED; 977 return SYNC_DATABASE_ERROR_FAILED;
960 978
961 leveldb::Status status = db_->Put(leveldb::WriteOptions(), key, resource_id); 979 leveldb::Status status = db_->Put(
980 leveldb::WriteOptions(), key, drive::RemoveWapiIdPrefix(resource_id));
962 return LevelDBStatusToSyncStatusCode(status); 981 return LevelDBStatusToSyncStatusCode(status);
963 } 982 }
964 983
965 SyncStatusCode DriveMetadataDB::GetSyncRootDirectory(std::string* resource_id) { 984 SyncStatusCode DriveMetadataDB::GetSyncRootDirectory(std::string* resource_id) {
966 DCHECK(CalledOnValidThread()); 985 DCHECK(CalledOnValidThread());
967 DCHECK(db_.get()); 986 DCHECK(db_.get());
968 987
969 leveldb::Status status = db_->Get( 988 leveldb::Status status = db_->Get(
970 leveldb::ReadOptions(), kSyncRootDirectoryKey, resource_id); 989 leveldb::ReadOptions(), kSyncRootDirectoryKey, resource_id);
990
991 if (!IsDriveAPIEnabled() && status.ok())
992 *resource_id = drive::AddWapiFolderPrefix(*resource_id);
993
971 return LevelDBStatusToSyncStatusCode(status); 994 return LevelDBStatusToSyncStatusCode(status);
972 } 995 }
973 996
974 SyncStatusCode DriveMetadataDB::UpdateEntry(const FileSystemURL& url, 997 SyncStatusCode DriveMetadataDB::UpdateEntry(const FileSystemURL& url,
975 const DriveMetadata& metadata) { 998 DriveMetadata metadata) {
976 DCHECK(CalledOnValidThread()); 999 DCHECK(CalledOnValidThread());
977 DCHECK(db_.get()); 1000 DCHECK(db_.get());
978 1001
1002 if (!IsDriveAPIEnabled()) {
1003 metadata.set_resource_id(
1004 drive::RemoveWapiIdPrefix(metadata.resource_id()));
1005 }
1006
979 std::string metadata_key = FileSystemURLToMetadataKey(url); 1007 std::string metadata_key = FileSystemURLToMetadataKey(url);
980 std::string value; 1008 std::string value;
981 bool success = metadata.SerializeToString(&value); 1009 bool success = metadata.SerializeToString(&value);
982 DCHECK(success); 1010 DCHECK(success);
983 leveldb::Status status = db_->Put( 1011 leveldb::Status status = db_->Put(
984 leveldb::WriteOptions(), metadata_key, value); 1012 leveldb::WriteOptions(), metadata_key, value);
985 1013
986 return LevelDBStatusToSyncStatusCode(status); 1014 return LevelDBStatusToSyncStatusCode(status);
987 } 1015 }
988 1016
989 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { 1017 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) {
990 DCHECK(CalledOnValidThread()); 1018 DCHECK(CalledOnValidThread());
991 DCHECK(db_.get()); 1019 DCHECK(db_.get());
992 1020
993 std::string metadata_key = FileSystemURLToMetadataKey(url); 1021 std::string metadata_key = FileSystemURLToMetadataKey(url);
994 leveldb::Status status = db_->Delete( 1022 leveldb::Status status = db_->Delete(
995 leveldb::WriteOptions(), metadata_key); 1023 leveldb::WriteOptions(), metadata_key);
996 return LevelDBStatusToSyncStatusCode(status); 1024 return LevelDBStatusToSyncStatusCode(status);
997 } 1025 }
998 1026
999 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync( 1027 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync(
1000 const GURL& origin, const std::string& resource_id) { 1028 const GURL& origin, const std::string& resource_id) {
1001 DCHECK(CalledOnValidThread()); 1029 DCHECK(CalledOnValidThread());
1002 DCHECK(db_.get()); 1030 DCHECK(db_.get());
1003 1031
1004 leveldb::WriteBatch batch; 1032 leveldb::WriteBatch batch;
1005 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); 1033 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN));
1006 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN), 1034 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN),
1007 resource_id); 1035 drive::RemoveWapiIdPrefix(resource_id));
1008 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); 1036 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch);
1009 1037
1010 return LevelDBStatusToSyncStatusCode(status); 1038 return LevelDBStatusToSyncStatusCode(status);
1011 } 1039 }
1012 1040
1013 SyncStatusCode DriveMetadataDB::EnableOrigin( 1041 SyncStatusCode DriveMetadataDB::EnableOrigin(
1014 const GURL& origin, const std::string& resource_id) { 1042 const GURL& origin, const std::string& resource_id) {
1015 DCHECK(CalledOnValidThread()); 1043 DCHECK(CalledOnValidThread());
1016 DCHECK(db_.get()); 1044 DCHECK(db_.get());
1017 1045
1018 // No DB entry as enabled origins go back to 1046 // No DB entry as enabled origins go back to
1019 // DriveFileSyncService.pending_batch_sync_origins only. 1047 // DriveFileSyncService.pending_batch_sync_origins only.
1020 leveldb::WriteBatch batch; 1048 leveldb::WriteBatch batch;
1021 batch.Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN)); 1049 batch.Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN));
1022 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); 1050 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN));
1023 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); 1051 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch);
1024 1052
1025 return LevelDBStatusToSyncStatusCode(status); 1053 return LevelDBStatusToSyncStatusCode(status);
1026 } 1054 }
1027 1055
1028 SyncStatusCode DriveMetadataDB::DisableOrigin( 1056 SyncStatusCode DriveMetadataDB::DisableOrigin(
1029 const GURL& origin_to_disable, const std::string& resource_id) { 1057 const GURL& origin_to_disable, const std::string& resource_id) {
1030 DCHECK(CalledOnValidThread()); 1058 DCHECK(CalledOnValidThread());
1031 DCHECK(db_.get()); 1059 DCHECK(db_.get());
1032 1060
1033 leveldb::WriteBatch batch; 1061 leveldb::WriteBatch batch;
1034 batch.Delete(CreateKeyForOriginRoot(origin_to_disable, 1062 batch.Delete(CreateKeyForOriginRoot(origin_to_disable,
1035 INCREMENTAL_SYNC_ORIGIN)); 1063 INCREMENTAL_SYNC_ORIGIN));
1036 batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN), 1064 batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN),
1037 resource_id); 1065 drive::RemoveWapiIdPrefix(resource_id));
1038 1066
1039 // Remove entries specified by |origin_to_disable|. 1067 // Remove entries specified by |origin_to_disable|.
1040 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); 1068 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
1041 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_disable.spec(); 1069 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_disable.spec();
1042 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { 1070 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) {
1043 std::string key = itr->key().ToString(); 1071 std::string key = itr->key().ToString();
1044 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) 1072 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true))
1045 break; 1073 break;
1046 GURL origin; 1074 GURL origin;
1047 base::FilePath path; 1075 base::FilePath path;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1088 DCHECK(db_.get()); 1116 DCHECK(db_.get());
1089 1117
1090 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); 1118 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
1091 1119
1092 // Get incremental sync origins from the DB. 1120 // Get incremental sync origins from the DB.
1093 for (itr->Seek(kDriveIncrementalSyncOriginKeyPrefix); 1121 for (itr->Seek(kDriveIncrementalSyncOriginKeyPrefix);
1094 itr->Valid(); itr->Next()) { 1122 itr->Valid(); itr->Next()) {
1095 std::string key = itr->key().ToString(); 1123 std::string key = itr->key().ToString();
1096 if (!StartsWithASCII(key, kDriveIncrementalSyncOriginKeyPrefix, true)) 1124 if (!StartsWithASCII(key, kDriveIncrementalSyncOriginKeyPrefix, true))
1097 break; 1125 break;
1098 GURL origin(std::string( 1126 GURL origin(RemovePrefix(key, kDriveIncrementalSyncOriginKeyPrefix));
1099 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1,
1100 key.end()));
1101 DCHECK(origin.is_valid()); 1127 DCHECK(origin.is_valid());
1128
1129 std::string origin_resource_id = IsDriveAPIEnabled()
1130 ? itr->value().ToString()
1131 : drive::AddWapiFolderPrefix(itr->value().ToString());
1132
1102 bool result = incremental_sync_origins->insert( 1133 bool result = incremental_sync_origins->insert(
1103 std::make_pair(origin, itr->value().ToString())).second; 1134 std::make_pair(origin, origin_resource_id)).second;
1104 DCHECK(result); 1135 DCHECK(result);
1105 } 1136 }
1106 1137
1107 // Get disabled origins from the DB. 1138 // Get disabled origins from the DB.
1108 for (itr->Seek(kDriveDisabledOriginKeyPrefix); 1139 for (itr->Seek(kDriveDisabledOriginKeyPrefix);
1109 itr->Valid(); itr->Next()) { 1140 itr->Valid(); itr->Next()) {
1110 std::string key = itr->key().ToString(); 1141 std::string key = itr->key().ToString();
1111 if (!StartsWithASCII(key, kDriveDisabledOriginKeyPrefix, true)) 1142 if (!StartsWithASCII(key, kDriveDisabledOriginKeyPrefix, true))
1112 break; 1143 break;
1113 GURL origin(std::string( 1144 GURL origin(RemovePrefix(key, kDriveDisabledOriginKeyPrefix));
1114 key.begin() + arraysize(kDriveDisabledOriginKeyPrefix) - 1,
1115 key.end()));
1116 DCHECK(origin.is_valid()); 1145 DCHECK(origin.is_valid());
1146
1147 std::string origin_resource_id = IsDriveAPIEnabled()
1148 ? itr->value().ToString()
1149 : drive::AddWapiFolderPrefix(itr->value().ToString());
1150
1117 bool result = disabled_origins->insert( 1151 bool result = disabled_origins->insert(
1118 std::make_pair(origin, itr->value().ToString())).second; 1152 std::make_pair(origin, origin_resource_id)).second;
1119 DCHECK(result); 1153 DCHECK(result);
1120 } 1154 }
1121 1155
1122 return SYNC_STATUS_OK; 1156 return SYNC_STATUS_OK;
1123 } 1157 }
1124 1158
1125 } // namespace sync_file_system 1159 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698