OLD | NEW |
---|---|
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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
118 typedef DriveMetadataStore::MetadataMap MetadataMap; | 120 typedef DriveMetadataStore::MetadataMap MetadataMap; |
119 | 121 |
120 DriveMetadataDB(const base::FilePath& base_dir, | 122 DriveMetadataDB(const base::FilePath& base_dir, |
121 base::SequencedTaskRunner* task_runner); | 123 base::SequencedTaskRunner* task_runner); |
122 ~DriveMetadataDB(); | 124 ~DriveMetadataDB(); |
123 | 125 |
124 SyncStatusCode Initialize(bool* created); | 126 SyncStatusCode Initialize(bool* created); |
125 SyncStatusCode ReadContents(DriveMetadataDBContents* contents); | 127 SyncStatusCode ReadContents(DriveMetadataDBContents* contents); |
126 | 128 |
127 SyncStatusCode MigrateDatabaseIfNeeded(); | 129 SyncStatusCode MigrateDatabaseIfNeeded(); |
128 SyncStatusCode MigrateFromVersion0Database(); | 130 SyncStatusCode MigrateFromVersion0To1Database(); |
129 | 131 |
130 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); | 132 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); |
131 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); | 133 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); |
132 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); | 134 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); |
133 SyncStatusCode SetOriginRootDirectory(const GURL& origin, | 135 SyncStatusCode SetOriginRootDirectory(const GURL& origin, |
134 OriginSyncType sync_type, | 136 OriginSyncType sync_type, |
135 const std::string& resource_id); | 137 const std::string& resource_id); |
136 SyncStatusCode UpdateEntry(const FileSystemURL& url, | 138 SyncStatusCode UpdateEntry(const FileSystemURL& url, |
137 const DriveMetadata& metadata); | 139 DriveMetadata metadata); |
138 SyncStatusCode DeleteEntry(const FileSystemURL& url); | 140 SyncStatusCode DeleteEntry(const FileSystemURL& url); |
139 | 141 |
140 // TODO(calvinlo): consolidate these state transition functions for sync | 142 // TODO(calvinlo): consolidate these state transition functions for sync |
141 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in | 143 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in |
142 // just one map like "Map<SyncStatusEnum, ResourceIDMap>". | 144 // just one map like "Map<SyncStatusEnum, ResourceIDMap>". |
143 // http://crbug.com/211600 | 145 // http://crbug.com/211600 |
144 SyncStatusCode UpdateOriginAsBatchSync(const GURL& origin, | 146 SyncStatusCode UpdateOriginAsBatchSync(const GURL& origin, |
145 const std::string& resource_id); | 147 const std::string& resource_id); |
146 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin, | 148 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin, |
147 const std::string& resource_id); | 149 const std::string& resource_id); |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
436 | 438 |
437 if (found->second.erase(url.path()) == 1) { | 439 if (found->second.erase(url.path()) == 1) { |
438 base::PostTaskAndReplyWithResult( | 440 base::PostTaskAndReplyWithResult( |
439 file_task_runner_, FROM_HERE, | 441 file_task_runner_, FROM_HERE, |
440 base::Bind(&DriveMetadataDB::DeleteEntry, | 442 base::Bind(&DriveMetadataDB::DeleteEntry, |
441 base::Unretained(db_.get()), url), | 443 base::Unretained(db_.get()), url), |
442 base::Bind(&DriveMetadataStore::UpdateDBStatusAndInvokeCallback, | 444 base::Bind(&DriveMetadataStore::UpdateDBStatusAndInvokeCallback, |
443 AsWeakPtr(), callback)); | 445 AsWeakPtr(), callback)); |
444 return; | 446 return; |
445 } | 447 } |
448 | |
446 base::MessageLoopProxy::current()->PostTask( | 449 base::MessageLoopProxy::current()->PostTask( |
447 FROM_HERE, | 450 FROM_HERE, |
448 base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND)); | 451 base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND)); |
449 } | 452 } |
450 | 453 |
451 SyncStatusCode DriveMetadataStore::ReadEntry(const FileSystemURL& url, | 454 SyncStatusCode DriveMetadataStore::ReadEntry(const FileSystemURL& url, |
452 DriveMetadata* metadata) const { | 455 DriveMetadata* metadata) const { |
453 DCHECK(CalledOnValidThread()); | 456 DCHECK(CalledOnValidThread()); |
454 DCHECK(metadata); | 457 DCHECK(metadata); |
455 | 458 |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
809 DCHECK(success); | 812 DCHECK(success); |
810 } else if (StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) { | 813 } else if (StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) { |
811 GURL origin; | 814 GURL origin; |
812 base::FilePath path; | 815 base::FilePath path; |
813 MetadataKeyToOriginAndPath(key, &origin, &path); | 816 MetadataKeyToOriginAndPath(key, &origin, &path); |
814 | 817 |
815 DriveMetadata metadata; | 818 DriveMetadata metadata; |
816 bool success = metadata.ParseFromString(itr->value().ToString()); | 819 bool success = metadata.ParseFromString(itr->value().ToString()); |
817 DCHECK(success); | 820 DCHECK(success); |
818 | 821 |
822 if (!IsDriveAPIEnabled()) { | |
823 metadata.set_resource_id( | |
824 drive::AddWapiIdPrefix(metadata.resource_id(), metadata.type())); | |
825 } | |
826 | |
819 success = contents->metadata_map[origin].insert( | 827 success = contents->metadata_map[origin].insert( |
820 std::make_pair(path, metadata)).second; | 828 std::make_pair(path, metadata)).second; |
821 DCHECK(success); | 829 DCHECK(success); |
822 } | 830 } |
823 } | 831 } |
824 | 832 |
825 SyncStatusCode status = GetOrigins(&contents->incremental_sync_origins, | 833 SyncStatusCode status = GetOrigins(&contents->incremental_sync_origins, |
826 &contents->disabled_origins); | 834 &contents->disabled_origins); |
827 if (status != SYNC_STATUS_OK && | 835 if (status != SYNC_STATUS_OK && |
828 status != SYNC_DATABASE_ERROR_NOT_FOUND) | 836 status != SYNC_DATABASE_ERROR_NOT_FOUND) |
(...skipping 16 matching lines...) Expand all Loading... | |
845 bool success = base::StringToInt64(itr->value().ToString(), | 853 bool success = base::StringToInt64(itr->value().ToString(), |
846 &database_version); | 854 &database_version); |
847 if (!success) | 855 if (!success) |
848 return SYNC_DATABASE_ERROR_FAILED; | 856 return SYNC_DATABASE_ERROR_FAILED; |
849 if (database_version > kCurrentDatabaseVersion) | 857 if (database_version > kCurrentDatabaseVersion) |
850 return SYNC_DATABASE_ERROR_FAILED; | 858 return SYNC_DATABASE_ERROR_FAILED; |
851 if (database_version == kCurrentDatabaseVersion) | 859 if (database_version == kCurrentDatabaseVersion) |
852 return SYNC_STATUS_OK; | 860 return SYNC_STATUS_OK; |
853 } | 861 } |
854 | 862 |
855 if (database_version == 0) { | 863 switch (database_version) { |
856 MigrateFromVersion0Database(); | 864 case 0: |
857 return SYNC_STATUS_OK; | 865 MigrateFromVersion0To1Database(); |
866 // fall-through | |
867 case 1: | |
868 drive::MigrateDatabaseFromV1ToV2(db_.get()); | |
869 return SYNC_STATUS_OK; | |
858 } | 870 } |
859 return SYNC_DATABASE_ERROR_FAILED; | 871 return SYNC_DATABASE_ERROR_FAILED; |
860 } | 872 } |
861 | 873 |
862 SyncStatusCode DriveMetadataDB::MigrateFromVersion0Database() { | 874 SyncStatusCode DriveMetadataDB::MigrateFromVersion0To1Database() { |
863 // Version 0 database format: | 875 // Version 0 database format: |
864 // key: "CHANGE_STAMP" | 876 // key: "CHANGE_STAMP" |
865 // value: <Largest Changestamp> | 877 // value: <Largest Changestamp> |
866 // | 878 // |
867 // key: "SYNC_ROOT_DIR" | 879 // key: "SYNC_ROOT_DIR" |
868 // value: <Resource ID of the sync root directory> | 880 // value: <Resource ID of the sync root directory> |
869 // | 881 // |
870 // key: "METADATA: " + | 882 // key: "METADATA: " + |
871 // <FileSystemURL serialized by SerializeSyncableFileSystemURL> | 883 // <FileSystemURL serialized by SerializeSyncableFileSystemURL> |
872 // value: <Serialized DriveMetadata> | 884 // value: <Serialized DriveMetadata> |
(...skipping 20 matching lines...) Expand all Loading... | |
893 // key: "BSYNC_ORIGIN: " + <URL string of a batch sync origin> | 905 // key: "BSYNC_ORIGIN: " + <URL string of a batch sync origin> |
894 // value: <Resource ID of the drive directory for the origin> | 906 // value: <Resource ID of the drive directory for the origin> |
895 // | 907 // |
896 // key: "ISYNC_ORIGIN: " + <URL string of a incremental sync origin> | 908 // key: "ISYNC_ORIGIN: " + <URL string of a incremental sync origin> |
897 // value: <Resource ID of the drive directory for the origin> | 909 // value: <Resource ID of the drive directory for the origin> |
898 // | 910 // |
899 // key: "DISABLED_ORIGIN: " + <URL string of a disabled origin> | 911 // key: "DISABLED_ORIGIN: " + <URL string of a disabled origin> |
900 // value: <Resource ID of the drive directory for the origin> | 912 // value: <Resource ID of the drive directory for the origin> |
901 | 913 |
902 leveldb::WriteBatch write_batch; | 914 leveldb::WriteBatch write_batch; |
903 write_batch.Put(kDatabaseVersionKey, | 915 write_batch.Put(kDatabaseVersionKey, "1"); |
904 base::Int64ToString(kCurrentDatabaseVersion)); | |
905 | 916 |
906 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); | 917 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
907 for (itr->Seek(kDriveMetadataKeyPrefix); itr->Valid(); itr->Next()) { | 918 for (itr->Seek(kDriveMetadataKeyPrefix); itr->Valid(); itr->Next()) { |
908 std::string key = itr->key().ToString(); | 919 std::string key = itr->key().ToString(); |
909 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) | 920 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) |
910 break; | 921 break; |
911 std::string serialized_url( | 922 std::string serialized_url( |
912 key.begin() + kDriveMetadataKeyPrefixLength - 1, key.end()); | 923 key.begin() + kDriveMetadataKeyPrefixLength - 1, key.end()); |
913 | 924 |
914 GURL origin; | 925 GURL origin; |
(...skipping 20 matching lines...) Expand all Loading... | |
935 leveldb::WriteOptions(), | 946 leveldb::WriteOptions(), |
936 kChangeStampKey, base::Int64ToString(largest_changestamp)); | 947 kChangeStampKey, base::Int64ToString(largest_changestamp)); |
937 return LevelDBStatusToSyncStatusCode(status); | 948 return LevelDBStatusToSyncStatusCode(status); |
938 } | 949 } |
939 | 950 |
940 SyncStatusCode DriveMetadataDB::SetSyncRootDirectory( | 951 SyncStatusCode DriveMetadataDB::SetSyncRootDirectory( |
941 const std::string& resource_id) { | 952 const std::string& resource_id) { |
942 DCHECK(CalledOnValidThread()); | 953 DCHECK(CalledOnValidThread()); |
943 DCHECK(db_.get()); | 954 DCHECK(db_.get()); |
944 | 955 |
945 leveldb::Status status = db_->Put( | 956 leveldb::Status status = db_->Put(leveldb::WriteOptions(), |
946 leveldb::WriteOptions(), kSyncRootDirectoryKey, resource_id); | 957 kSyncRootDirectoryKey, |
958 drive::RemoveWapiIdPrefix(resource_id)); | |
947 return LevelDBStatusToSyncStatusCode(status); | 959 return LevelDBStatusToSyncStatusCode(status); |
948 } | 960 } |
949 | 961 |
950 SyncStatusCode DriveMetadataDB::SetOriginRootDirectory( | 962 SyncStatusCode DriveMetadataDB::SetOriginRootDirectory( |
951 const GURL& origin, | 963 const GURL& origin, |
952 OriginSyncType sync_type, | 964 OriginSyncType sync_type, |
953 const std::string& resource_id) { | 965 const std::string& resource_id) { |
954 DCHECK(CalledOnValidThread()); | 966 DCHECK(CalledOnValidThread()); |
955 DCHECK(db_.get()); | 967 DCHECK(db_.get()); |
956 | 968 |
957 std::string key = CreateKeyForOriginRoot(origin, sync_type); | 969 std::string key = CreateKeyForOriginRoot(origin, sync_type); |
958 if (key.empty()) | 970 if (key.empty()) |
959 return SYNC_DATABASE_ERROR_FAILED; | 971 return SYNC_DATABASE_ERROR_FAILED; |
960 | 972 |
961 leveldb::Status status = db_->Put(leveldb::WriteOptions(), key, resource_id); | 973 leveldb::Status status = db_->Put( |
974 leveldb::WriteOptions(), key, drive::RemoveWapiIdPrefix(resource_id)); | |
962 return LevelDBStatusToSyncStatusCode(status); | 975 return LevelDBStatusToSyncStatusCode(status); |
963 } | 976 } |
964 | 977 |
965 SyncStatusCode DriveMetadataDB::GetSyncRootDirectory(std::string* resource_id) { | 978 SyncStatusCode DriveMetadataDB::GetSyncRootDirectory(std::string* resource_id) { |
966 DCHECK(CalledOnValidThread()); | 979 DCHECK(CalledOnValidThread()); |
967 DCHECK(db_.get()); | 980 DCHECK(db_.get()); |
968 | 981 |
969 leveldb::Status status = db_->Get( | 982 leveldb::Status status = db_->Get( |
970 leveldb::ReadOptions(), kSyncRootDirectoryKey, resource_id); | 983 leveldb::ReadOptions(), kSyncRootDirectoryKey, resource_id); |
984 | |
985 if (!IsDriveAPIEnabled() && status.ok()) | |
986 *resource_id = drive::AddWapiFolderPrefix(*resource_id); | |
987 | |
971 return LevelDBStatusToSyncStatusCode(status); | 988 return LevelDBStatusToSyncStatusCode(status); |
972 } | 989 } |
973 | 990 |
974 SyncStatusCode DriveMetadataDB::UpdateEntry(const FileSystemURL& url, | 991 SyncStatusCode DriveMetadataDB::UpdateEntry(const FileSystemURL& url, |
975 const DriveMetadata& metadata) { | 992 DriveMetadata metadata) { |
976 DCHECK(CalledOnValidThread()); | 993 DCHECK(CalledOnValidThread()); |
977 DCHECK(db_.get()); | 994 DCHECK(db_.get()); |
978 | 995 |
996 if (!IsDriveAPIEnabled()) { | |
997 metadata.set_resource_id( | |
kinuko
2013/05/28 15:09:20
nit: indent
nhiroki
2013/05/29 04:10:18
Done.
| |
998 drive::RemoveWapiIdPrefix(metadata.resource_id())); | |
999 } | |
1000 | |
979 std::string metadata_key = FileSystemURLToMetadataKey(url); | 1001 std::string metadata_key = FileSystemURLToMetadataKey(url); |
980 std::string value; | 1002 std::string value; |
981 bool success = metadata.SerializeToString(&value); | 1003 bool success = metadata.SerializeToString(&value); |
982 DCHECK(success); | 1004 DCHECK(success); |
983 leveldb::Status status = db_->Put( | 1005 leveldb::Status status = db_->Put( |
984 leveldb::WriteOptions(), metadata_key, value); | 1006 leveldb::WriteOptions(), metadata_key, value); |
985 | 1007 |
986 return LevelDBStatusToSyncStatusCode(status); | 1008 return LevelDBStatusToSyncStatusCode(status); |
987 } | 1009 } |
988 | 1010 |
989 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { | 1011 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { |
990 DCHECK(CalledOnValidThread()); | 1012 DCHECK(CalledOnValidThread()); |
991 DCHECK(db_.get()); | 1013 DCHECK(db_.get()); |
992 | 1014 |
993 std::string metadata_key = FileSystemURLToMetadataKey(url); | 1015 std::string metadata_key = FileSystemURLToMetadataKey(url); |
994 leveldb::Status status = db_->Delete( | 1016 leveldb::Status status = db_->Delete( |
995 leveldb::WriteOptions(), metadata_key); | 1017 leveldb::WriteOptions(), metadata_key); |
996 return LevelDBStatusToSyncStatusCode(status); | 1018 return LevelDBStatusToSyncStatusCode(status); |
997 } | 1019 } |
998 | 1020 |
999 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync( | 1021 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync( |
1000 const GURL& origin, const std::string& resource_id) { | 1022 const GURL& origin, const std::string& resource_id) { |
1001 DCHECK(CalledOnValidThread()); | 1023 DCHECK(CalledOnValidThread()); |
1002 DCHECK(db_.get()); | 1024 DCHECK(db_.get()); |
1003 | 1025 |
1004 leveldb::WriteBatch batch; | 1026 leveldb::WriteBatch batch; |
1005 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); | 1027 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); |
1006 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN), | 1028 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN), |
1007 resource_id); | 1029 drive::RemoveWapiIdPrefix(resource_id)); |
1008 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); | 1030 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
1009 | 1031 |
1010 return LevelDBStatusToSyncStatusCode(status); | 1032 return LevelDBStatusToSyncStatusCode(status); |
1011 } | 1033 } |
1012 | 1034 |
1013 SyncStatusCode DriveMetadataDB::EnableOrigin( | 1035 SyncStatusCode DriveMetadataDB::EnableOrigin( |
1014 const GURL& origin, const std::string& resource_id) { | 1036 const GURL& origin, const std::string& resource_id) { |
1015 DCHECK(CalledOnValidThread()); | 1037 DCHECK(CalledOnValidThread()); |
1016 DCHECK(db_.get()); | 1038 DCHECK(db_.get()); |
1017 | 1039 |
1018 // No DB entry as enabled origins go back to | 1040 // No DB entry as enabled origins go back to |
1019 // DriveFileSyncService.pending_batch_sync_origins only. | 1041 // DriveFileSyncService.pending_batch_sync_origins only. |
1020 leveldb::WriteBatch batch; | 1042 leveldb::WriteBatch batch; |
1021 batch.Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN)); | 1043 batch.Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN)); |
1022 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); | 1044 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); |
1023 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); | 1045 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
1024 | 1046 |
1025 return LevelDBStatusToSyncStatusCode(status); | 1047 return LevelDBStatusToSyncStatusCode(status); |
1026 } | 1048 } |
1027 | 1049 |
1028 SyncStatusCode DriveMetadataDB::DisableOrigin( | 1050 SyncStatusCode DriveMetadataDB::DisableOrigin( |
1029 const GURL& origin_to_disable, const std::string& resource_id) { | 1051 const GURL& origin_to_disable, const std::string& resource_id) { |
1030 DCHECK(CalledOnValidThread()); | 1052 DCHECK(CalledOnValidThread()); |
1031 DCHECK(db_.get()); | 1053 DCHECK(db_.get()); |
1032 | 1054 |
1033 leveldb::WriteBatch batch; | 1055 leveldb::WriteBatch batch; |
1034 batch.Delete(CreateKeyForOriginRoot(origin_to_disable, | 1056 batch.Delete(CreateKeyForOriginRoot(origin_to_disable, |
1035 INCREMENTAL_SYNC_ORIGIN)); | 1057 INCREMENTAL_SYNC_ORIGIN)); |
1036 batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN), | 1058 batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN), |
1037 resource_id); | 1059 drive::RemoveWapiIdPrefix(resource_id)); |
1038 | 1060 |
1039 // Remove entries specified by |origin_to_disable|. | 1061 // Remove entries specified by |origin_to_disable|. |
1040 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); | 1062 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
1041 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_disable.spec(); | 1063 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_disable.spec(); |
1042 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { | 1064 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { |
1043 std::string key = itr->key().ToString(); | 1065 std::string key = itr->key().ToString(); |
1044 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) | 1066 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) |
1045 break; | 1067 break; |
1046 GURL origin; | 1068 GURL origin; |
1047 base::FilePath path; | 1069 base::FilePath path; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1092 // Get incremental sync origins from the DB. | 1114 // Get incremental sync origins from the DB. |
1093 for (itr->Seek(kDriveIncrementalSyncOriginKeyPrefix); | 1115 for (itr->Seek(kDriveIncrementalSyncOriginKeyPrefix); |
1094 itr->Valid(); itr->Next()) { | 1116 itr->Valid(); itr->Next()) { |
1095 std::string key = itr->key().ToString(); | 1117 std::string key = itr->key().ToString(); |
1096 if (!StartsWithASCII(key, kDriveIncrementalSyncOriginKeyPrefix, true)) | 1118 if (!StartsWithASCII(key, kDriveIncrementalSyncOriginKeyPrefix, true)) |
1097 break; | 1119 break; |
1098 GURL origin(std::string( | 1120 GURL origin(std::string( |
1099 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1, | 1121 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1, |
1100 key.end())); | 1122 key.end())); |
1101 DCHECK(origin.is_valid()); | 1123 DCHECK(origin.is_valid()); |
1124 | |
1125 std::string origin_resource_id = IsDriveAPIEnabled() | |
1126 ? itr->value().ToString() | |
1127 : drive::AddWapiFolderPrefix(itr->value().ToString()); | |
1128 | |
1102 bool result = incremental_sync_origins->insert( | 1129 bool result = incremental_sync_origins->insert( |
1103 std::make_pair(origin, itr->value().ToString())).second; | 1130 std::make_pair(origin, origin_resource_id)).second; |
1104 DCHECK(result); | 1131 DCHECK(result); |
1105 } | 1132 } |
1106 | 1133 |
1107 // Get disabled origins from the DB. | 1134 // Get disabled origins from the DB. |
1108 for (itr->Seek(kDriveDisabledOriginKeyPrefix); | 1135 for (itr->Seek(kDriveDisabledOriginKeyPrefix); |
1109 itr->Valid(); itr->Next()) { | 1136 itr->Valid(); itr->Next()) { |
1110 std::string key = itr->key().ToString(); | 1137 std::string key = itr->key().ToString(); |
1111 if (!StartsWithASCII(key, kDriveDisabledOriginKeyPrefix, true)) | 1138 if (!StartsWithASCII(key, kDriveDisabledOriginKeyPrefix, true)) |
1112 break; | 1139 break; |
1113 GURL origin(std::string( | 1140 GURL origin(std::string( |
1114 key.begin() + arraysize(kDriveDisabledOriginKeyPrefix) - 1, | 1141 key.begin() + arraysize(kDriveDisabledOriginKeyPrefix) - 1, |
1115 key.end())); | 1142 key.end())); |
1116 DCHECK(origin.is_valid()); | 1143 DCHECK(origin.is_valid()); |
1144 | |
1145 std::string origin_resource_id = IsDriveAPIEnabled() | |
1146 ? itr->value().ToString() | |
1147 : drive::AddWapiFolderPrefix(itr->value().ToString()); | |
1148 | |
1117 bool result = disabled_origins->insert( | 1149 bool result = disabled_origins->insert( |
1118 std::make_pair(origin, itr->value().ToString())).second; | 1150 std::make_pair(origin, origin_resource_id)).second; |
1119 DCHECK(result); | 1151 DCHECK(result); |
1120 } | 1152 } |
1121 | 1153 |
1122 return SYNC_STATUS_OK; | 1154 return SYNC_STATUS_OK; |
1123 } | 1155 } |
1124 | 1156 |
1125 } // namespace sync_file_system | 1157 } // namespace sync_file_system |
OLD | NEW |