| Index: chrome/browser/sync_file_system/drive_metadata_store.cc
|
| diff --git a/chrome/browser/sync_file_system/drive_metadata_store.cc b/chrome/browser/sync_file_system/drive_metadata_store.cc
|
| index 3ba94e3a97106b9d47145d641bcbc92b8afab15f..6e5fe09f82a5f0257d5ae7045eb2e216931089d8 100644
|
| --- a/chrome/browser/sync_file_system/drive_metadata_store.cc
|
| +++ b/chrome/browser/sync_file_system/drive_metadata_store.cc
|
| @@ -111,7 +111,6 @@ bool UpdateResourceIdMap(ResourceIdByOrigin* map,
|
| class DriveMetadataDB {
|
| public:
|
| enum OriginSyncType {
|
| - BATCH_SYNC_ORIGIN,
|
| INCREMENTAL_SYNC_ORIGIN,
|
| DISABLED_ORIGIN
|
| };
|
| @@ -152,11 +151,12 @@ class DriveMetadataDB {
|
| const std::string& resource_id);
|
| SyncStatusCode RemoveOrigin(const GURL& origin);
|
|
|
| - SyncStatusCode GetOrigins(ResourceIdByOrigin* batch_sync_origins,
|
| - ResourceIdByOrigin* incremental_sync_origins,
|
| + SyncStatusCode GetOrigins(ResourceIdByOrigin* incremental_sync_origins,
|
| ResourceIdByOrigin* disabled_origins);
|
|
|
| private:
|
| + friend class DriveMetadataStore;
|
| +
|
| bool CalledOnValidThread() const {
|
| return task_runner_->RunsTasksOnCurrentThread();
|
| }
|
| @@ -173,7 +173,6 @@ struct DriveMetadataDBContents {
|
| int64 largest_changestamp;
|
| DriveMetadataStore::MetadataMap metadata_map;
|
| std::string sync_root_directory_resource_id;
|
| - ResourceIdByOrigin batch_sync_origins;
|
| ResourceIdByOrigin incremental_sync_origins;
|
| ResourceIdByOrigin disabled_origins;
|
| };
|
| @@ -187,7 +186,6 @@ SyncStatusCode InitializeDBOnFileThread(DriveMetadataDB* db,
|
|
|
| contents->largest_changestamp = 0;
|
| contents->metadata_map.clear();
|
| - contents->batch_sync_origins.clear();
|
| contents->incremental_sync_origins.clear();
|
| contents->disabled_origins.clear();
|
|
|
| @@ -216,8 +214,6 @@ std::string CreateKeyForOriginRoot(const GURL& origin,
|
| DriveMetadataDB::OriginSyncType sync_type) {
|
| DCHECK(origin.is_valid());
|
| switch (sync_type) {
|
| - case DriveMetadataDB::BATCH_SYNC_ORIGIN:
|
| - return kDriveBatchSyncOriginKeyPrefix + origin.spec();
|
| case DriveMetadataDB::INCREMENTAL_SYNC_ORIGIN:
|
| return kDriveIncrementalSyncOriginKeyPrefix + origin.spec();
|
| case DriveMetadataDB::DISABLED_ORIGIN:
|
| @@ -297,13 +293,11 @@ void DriveMetadataStore::DidInitialize(const InitializationCallback& callback,
|
| largest_changestamp_ = contents->largest_changestamp;
|
| metadata_map_.swap(contents->metadata_map);
|
| sync_root_directory_resource_id_ = contents->sync_root_directory_resource_id;
|
| - batch_sync_origins_.swap(contents->batch_sync_origins);
|
| incremental_sync_origins_.swap(contents->incremental_sync_origins);
|
| disabled_origins_.swap(contents->disabled_origins);
|
| // |largest_changestamp_| is set to 0 for a fresh empty database.
|
|
|
| origin_by_resource_id_.clear();
|
| - InsertReverseMap(batch_sync_origins_, &origin_by_resource_id_);
|
| InsertReverseMap(incremental_sync_origins_, &origin_by_resource_id_);
|
| InsertReverseMap(disabled_origins_, &origin_by_resource_id_);
|
|
|
| @@ -344,31 +338,26 @@ void DriveMetadataStore::DidRestoreSyncRootDirectory(
|
| void DriveMetadataStore::RestoreOrigins(
|
| const SyncStatusCallback& callback) {
|
| DCHECK(CalledOnValidThread());
|
| - ResourceIdByOrigin* batch_sync_origins = new ResourceIdByOrigin;
|
| ResourceIdByOrigin* incremental_sync_origins = new ResourceIdByOrigin;
|
| ResourceIdByOrigin* disabled_origins = new ResourceIdByOrigin;
|
| base::PostTaskAndReplyWithResult(
|
| file_task_runner_, FROM_HERE,
|
| base::Bind(&DriveMetadataDB::GetOrigins,
|
| base::Unretained(db_.get()),
|
| - batch_sync_origins,
|
| incremental_sync_origins,
|
| disabled_origins),
|
| base::Bind(&DriveMetadataStore::DidRestoreOrigins,
|
| AsWeakPtr(), callback,
|
| - base::Owned(batch_sync_origins),
|
| base::Owned(incremental_sync_origins),
|
| base::Owned(disabled_origins)));
|
| }
|
|
|
| void DriveMetadataStore::DidRestoreOrigins(
|
| const SyncStatusCallback& callback,
|
| - ResourceIdByOrigin* batch_sync_origins,
|
| ResourceIdByOrigin* incremental_sync_origins,
|
| ResourceIdByOrigin* disabled_origins,
|
| SyncStatusCode status) {
|
| DCHECK(CalledOnValidThread());
|
| - DCHECK(batch_sync_origins);
|
| DCHECK(incremental_sync_origins);
|
| DCHECK(disabled_origins);
|
|
|
| @@ -378,18 +367,20 @@ void DriveMetadataStore::DidRestoreOrigins(
|
| return;
|
| }
|
|
|
| - batch_sync_origins_.swap(*batch_sync_origins);
|
| incremental_sync_origins_.swap(*incremental_sync_origins);
|
| disabled_origins_.swap(*disabled_origins);
|
|
|
| origin_by_resource_id_.clear();
|
| - InsertReverseMap(batch_sync_origins_, &origin_by_resource_id_);
|
| InsertReverseMap(incremental_sync_origins_, &origin_by_resource_id_);
|
| InsertReverseMap(disabled_origins_, &origin_by_resource_id_);
|
|
|
| callback.Run(status);
|
| }
|
|
|
| +leveldb::DB* DriveMetadataStore::GetDBInstanceForTesting() {
|
| + return db_->db_.get();
|
| +}
|
| +
|
| void DriveMetadataStore::SetLargestChangeStamp(
|
| int64 largest_changestamp,
|
| const SyncStatusCallback& callback) {
|
| @@ -477,8 +468,20 @@ SyncStatusCode DriveMetadataStore::ReadEntry(const FileSystemURL& url,
|
| void DriveMetadataStore::AddIncrementalSyncOrigin(
|
| const GURL& origin,
|
| const std::string& resource_id) {
|
| - AddBatchSyncOrigin(origin, resource_id);
|
| - MoveBatchSyncOriginToIncremental(origin);
|
| + DCHECK(CalledOnValidThread());
|
| + DCHECK(!IsIncrementalSyncOrigin(origin));
|
| + DCHECK(!IsOriginDisabled(origin));
|
| + DCHECK_EQ(SYNC_STATUS_OK, db_status_);
|
| +
|
| + incremental_sync_origins_.insert(std::make_pair(origin, resource_id));
|
| + origin_by_resource_id_.insert(std::make_pair(resource_id, origin));
|
| +
|
| + // Store a pair of |origin| and |resource_id| in the DB.
|
| + base::PostTaskAndReplyWithResult(
|
| + file_task_runner_, FROM_HERE,
|
| + base::Bind(&DriveMetadataDB::UpdateOriginAsIncrementalSync,
|
| + base::Unretained(db_.get()), origin, resource_id),
|
| + base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
|
| }
|
|
|
| void DriveMetadataStore::SetSyncRootDirectory(const std::string& resource_id) {
|
| @@ -501,10 +504,7 @@ void DriveMetadataStore::SetOriginRootDirectory(
|
| DCHECK(IsKnownOrigin(origin));
|
|
|
| DriveMetadataDB::OriginSyncType sync_type;
|
| - if (UpdateResourceIdMap(&batch_sync_origins_, &origin_by_resource_id_,
|
| - origin, resource_id)) {
|
| - sync_type = DriveMetadataDB::BATCH_SYNC_ORIGIN;
|
| - } else if (UpdateResourceIdMap(
|
| + if (UpdateResourceIdMap(
|
| &incremental_sync_origins_, &origin_by_resource_id_,
|
| origin, resource_id)) {
|
| sync_type = DriveMetadataDB::INCREMENTAL_SYNC_ORIGIN;
|
| @@ -523,14 +523,7 @@ void DriveMetadataStore::SetOriginRootDirectory(
|
|
|
| bool DriveMetadataStore::IsKnownOrigin(const GURL& origin) const {
|
| DCHECK(CalledOnValidThread());
|
| - return IsBatchSyncOrigin(origin) ||
|
| - IsIncrementalSyncOrigin(origin) ||
|
| - IsOriginDisabled(origin);
|
| -}
|
| -
|
| -bool DriveMetadataStore::IsBatchSyncOrigin(const GURL& origin) const {
|
| - DCHECK(CalledOnValidThread());
|
| - return ContainsKey(batch_sync_origins_, origin);
|
| + return IsIncrementalSyncOrigin(origin) || IsOriginDisabled(origin);
|
| }
|
|
|
| bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const {
|
| @@ -577,13 +570,7 @@ void DriveMetadataStore::DisableOrigin(
|
|
|
| std::string resource_id;
|
| std::map<GURL, std::string>::iterator found =
|
| - batch_sync_origins_.find(origin);
|
| - if (found != batch_sync_origins_.end()) {
|
| - resource_id = found->second;
|
| - batch_sync_origins_.erase(found);
|
| - }
|
| -
|
| - found = incremental_sync_origins_.find(origin);
|
| + incremental_sync_origins_.find(origin);
|
| if (found != incremental_sync_origins_.end()) {
|
| resource_id = found->second;
|
| incremental_sync_origins_.erase(found);
|
| @@ -612,8 +599,7 @@ void DriveMetadataStore::RemoveOrigin(
|
| metadata_map_.erase(origin);
|
|
|
| std::string resource_id;
|
| - if (EraseIfExists(&batch_sync_origins_, origin, &resource_id) ||
|
| - EraseIfExists(&incremental_sync_origins_, origin, &resource_id) ||
|
| + if (EraseIfExists(&incremental_sync_origins_, origin, &resource_id) ||
|
| EraseIfExists(&disabled_origins_, origin, &resource_id)) {
|
| origin_by_resource_id_.erase(resource_id);
|
| }
|
| @@ -632,48 +618,6 @@ void DriveMetadataStore::DidUpdateOrigin(
|
| callback.Run(status);
|
| }
|
|
|
| -void DriveMetadataStore::AddBatchSyncOrigin(const GURL& origin,
|
| - const std::string& resource_id) {
|
| - DCHECK(CalledOnValidThread());
|
| - DCHECK(!IsIncrementalSyncOrigin(origin));
|
| - DCHECK(!IsOriginDisabled(origin));
|
| - DCHECK_EQ(SYNC_STATUS_OK, db_status_);
|
| -
|
| - if (IsBatchSyncOrigin(origin))
|
| - return;
|
| -
|
| - batch_sync_origins_.insert(std::make_pair(origin, resource_id));
|
| - origin_by_resource_id_.insert(std::make_pair(resource_id, origin));
|
| -
|
| - // Store a pair of |origin| and |resource_id| in the DB.
|
| - base::PostTaskAndReplyWithResult(
|
| - file_task_runner_, FROM_HERE,
|
| - base::Bind(&DriveMetadataDB::UpdateOriginAsBatchSync,
|
| - base::Unretained(db_.get()), origin, resource_id),
|
| - base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
|
| -}
|
| -
|
| -void DriveMetadataStore::MoveBatchSyncOriginToIncremental(const GURL& origin) {
|
| - DCHECK(CalledOnValidThread());
|
| - DCHECK(IsBatchSyncOrigin(origin));
|
| - DCHECK(!IsIncrementalSyncOrigin(origin));
|
| - DCHECK(!IsOriginDisabled(origin));
|
| - DCHECK_EQ(SYNC_STATUS_OK, db_status_);
|
| -
|
| - std::map<GURL, std::string>::iterator found =
|
| - batch_sync_origins_.find(origin);
|
| - incremental_sync_origins_.insert(std::make_pair(origin, found->second));
|
| -
|
| - // Store a pair of |origin| and |resource_id| in the DB.
|
| - base::PostTaskAndReplyWithResult(
|
| - file_task_runner_, FROM_HERE,
|
| - base::Bind(&DriveMetadataDB::UpdateOriginAsIncrementalSync,
|
| - base::Unretained(db_.get()), origin, found->second),
|
| - base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr()));
|
| -
|
| - batch_sync_origins_.erase(found);
|
| -}
|
| -
|
| void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) {
|
| DCHECK(CalledOnValidThread());
|
| if (db_status_ != SYNC_STATUS_OK &&
|
| @@ -754,10 +698,6 @@ std::string DriveMetadataStore::GetResourceIdForOrigin(
|
| if (found != incremental_sync_origins_.end())
|
| return found->second;
|
|
|
| - found = batch_sync_origins_.find(origin);
|
| - if (found != batch_sync_origins_.end())
|
| - return found->second;
|
| -
|
| found = disabled_origins_.find(origin);
|
| if (found != disabled_origins_.end())
|
| return found->second;
|
| @@ -769,10 +709,8 @@ void DriveMetadataStore::GetAllOrigins(std::vector<GURL>* origins) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(origins);
|
| origins->clear();
|
| - origins->reserve(batch_sync_origins_.size() +
|
| - incremental_sync_origins_.size() +
|
| + origins->reserve(incremental_sync_origins_.size() +
|
| disabled_origins_.size());
|
| - AddOriginsToVector(origins, batch_sync_origins_);
|
| AddOriginsToVector(origins, incremental_sync_origins_);
|
| AddOriginsToVector(origins, disabled_origins_);
|
| }
|
| @@ -833,7 +771,23 @@ SyncStatusCode DriveMetadataDB::Initialize(bool* created) {
|
| }
|
|
|
| db_.reset(db);
|
| - return SYNC_STATUS_OK;
|
| +
|
| +
|
| + // Deprecate legacy batch sync origin entries that are no longer needed.
|
| + leveldb::WriteBatch batch;
|
| + scoped_ptr<leveldb::Iterator> batch_origin_itr(
|
| + db_->NewIterator(leveldb::ReadOptions()));
|
| + for (batch_origin_itr->Seek(kDriveBatchSyncOriginKeyPrefix);
|
| + batch_origin_itr->Valid();
|
| + batch_origin_itr->Next()) {
|
| + std::string key = batch_origin_itr->key().ToString();
|
| + if (!StartsWithASCII(key, kDriveBatchSyncOriginKeyPrefix, true))
|
| + break;
|
| +
|
| + batch.Delete(key);
|
| + }
|
| + status = db_->Write(leveldb::WriteOptions(), &batch);
|
| + return LevelDBStatusToSyncStatusCode(status);
|
| }
|
|
|
| SyncStatusCode DriveMetadataDB::ReadContents(
|
| @@ -844,7 +798,6 @@ SyncStatusCode DriveMetadataDB::ReadContents(
|
|
|
| contents->largest_changestamp = 0;
|
| contents->metadata_map.clear();
|
| - contents->batch_sync_origins.clear();
|
| contents->incremental_sync_origins.clear();
|
|
|
| scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| @@ -869,8 +822,7 @@ SyncStatusCode DriveMetadataDB::ReadContents(
|
| }
|
| }
|
|
|
| - SyncStatusCode status = GetOrigins(&contents->batch_sync_origins,
|
| - &contents->incremental_sync_origins,
|
| + SyncStatusCode status = GetOrigins(&contents->incremental_sync_origins,
|
| &contents->disabled_origins);
|
| if (status != SYNC_STATUS_OK &&
|
| status != SYNC_DATABASE_ERROR_NOT_FOUND)
|
| @@ -1044,25 +996,12 @@ SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) {
|
| return LevelDBStatusToSyncStatusCode(status);
|
| }
|
|
|
| -SyncStatusCode DriveMetadataDB::UpdateOriginAsBatchSync(
|
| - const GURL& origin, const std::string& resource_id) {
|
| - DCHECK(CalledOnValidThread());
|
| - DCHECK(db_.get());
|
| -
|
| - leveldb::Status status = db_->Put(
|
| - leveldb::WriteOptions(),
|
| - CreateKeyForOriginRoot(origin, BATCH_SYNC_ORIGIN),
|
| - resource_id);
|
| - return LevelDBStatusToSyncStatusCode(status);
|
| -}
|
| -
|
| SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync(
|
| const GURL& origin, const std::string& resource_id) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(db_.get());
|
|
|
| leveldb::WriteBatch batch;
|
| - batch.Delete(CreateKeyForOriginRoot(origin, BATCH_SYNC_ORIGIN));
|
| batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN));
|
| batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN),
|
| resource_id);
|
| @@ -1076,10 +1015,11 @@ SyncStatusCode DriveMetadataDB::EnableOrigin(
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(db_.get());
|
|
|
| + // No DB entry as enabled origins go back to
|
| + // DriveFileSyncService.pending_batch_sync_origins only.
|
| leveldb::WriteBatch batch;
|
| batch.Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN));
|
| batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN));
|
| - batch.Put(CreateKeyForOriginRoot(origin, BATCH_SYNC_ORIGIN), resource_id);
|
| leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch);
|
|
|
| return LevelDBStatusToSyncStatusCode(status);
|
| @@ -1091,7 +1031,6 @@ SyncStatusCode DriveMetadataDB::DisableOrigin(
|
| DCHECK(db_.get());
|
|
|
| leveldb::WriteBatch batch;
|
| - batch.Delete(CreateKeyForOriginRoot(origin_to_disable, BATCH_SYNC_ORIGIN));
|
| batch.Delete(CreateKeyForOriginRoot(origin_to_disable,
|
| INCREMENTAL_SYNC_ORIGIN));
|
| batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN),
|
| @@ -1120,7 +1059,6 @@ SyncStatusCode DriveMetadataDB::RemoveOrigin(const GURL& origin_to_remove) {
|
| DCHECK(CalledOnValidThread());
|
|
|
| leveldb::WriteBatch batch;
|
| - batch.Delete(CreateKeyForOriginRoot(origin_to_remove, BATCH_SYNC_ORIGIN));
|
| batch.Delete(CreateKeyForOriginRoot(origin_to_remove,
|
| INCREMENTAL_SYNC_ORIGIN));
|
| batch.Delete(CreateKeyForOriginRoot(origin_to_remove, DISABLED_ORIGIN));
|
| @@ -1144,7 +1082,6 @@ SyncStatusCode DriveMetadataDB::RemoveOrigin(const GURL& origin_to_remove) {
|
| }
|
|
|
| SyncStatusCode DriveMetadataDB::GetOrigins(
|
| - ResourceIdByOrigin* batch_sync_origins,
|
| ResourceIdByOrigin* incremental_sync_origins,
|
| ResourceIdByOrigin* disabled_origins) {
|
| DCHECK(CalledOnValidThread());
|
| @@ -1152,21 +1089,6 @@ SyncStatusCode DriveMetadataDB::GetOrigins(
|
|
|
| scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
|
|
| - // Get batch sync origins from the DB.
|
| - for (itr->Seek(kDriveBatchSyncOriginKeyPrefix);
|
| - itr->Valid(); itr->Next()) {
|
| - std::string key = itr->key().ToString();
|
| - if (!StartsWithASCII(key, kDriveBatchSyncOriginKeyPrefix, true))
|
| - break;
|
| - GURL origin(std::string(
|
| - key.begin() + arraysize(kDriveBatchSyncOriginKeyPrefix) - 1,
|
| - key.end()));
|
| - DCHECK(origin.is_valid());
|
| - bool result = batch_sync_origins->insert(
|
| - std::make_pair(origin, itr->value().ToString())).second;
|
| - DCHECK(result);
|
| - }
|
| -
|
| // Get incremental sync origins from the DB.
|
| for (itr->Seek(kDriveIncrementalSyncOriginKeyPrefix);
|
| itr->Valid(); itr->Next()) {
|
|
|