diff options
author | zea <zea@chromium.org> | 2016-02-24 12:41:48 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-24 20:42:45 +0000 |
commit | 32a7684cf7c1173c11ab012591c8cca2d31df52a (patch) | |
tree | 7901fd9480b2114ddbb8fed5e48ef61ddaf9bd4f /sync | |
parent | a03e8479b8c2e203d7306817d2f1330132000d8f (diff) | |
download | chromium_src-32a7684cf7c1173c11ab012591c8cca2d31df52a.zip chromium_src-32a7684cf7c1173c11ab012591c8cca2d31df52a.tar.gz chromium_src-32a7684cf7c1173c11ab012591c8cca2d31df52a.tar.bz2 |
[Sync] Remove backup/rollback logic from Sync
BUG=586596
Review URL: https://codereview.chromium.org/1703173002
Cr-Commit-Position: refs/heads/master@{#377370}
Diffstat (limited to 'sync')
32 files changed, 11 insertions, 1755 deletions
diff --git a/sync/BUILD.gn b/sync/BUILD.gn index dfa0fae..f28fee8 100644 --- a/sync/BUILD.gn +++ b/sync/BUILD.gn @@ -297,8 +297,6 @@ source_set("sync_core") { "internal_api/read_node.cc", "internal_api/read_transaction.cc", "internal_api/shared_model_type_processor.cc", - "internal_api/sync_backup_manager.cc", - "internal_api/sync_backup_manager.h", "internal_api/sync_context.cc", "internal_api/sync_context_proxy.cc", "internal_api/sync_context_proxy_impl.cc", @@ -309,10 +307,6 @@ source_set("sync_core") { "internal_api/sync_manager_factory.cc", "internal_api/sync_manager_impl.cc", "internal_api/sync_manager_impl.h", - "internal_api/sync_rollback_manager.cc", - "internal_api/sync_rollback_manager.h", - "internal_api/sync_rollback_manager_base.cc", - "internal_api/sync_rollback_manager_base.h", "internal_api/syncapi_internal.cc", "internal_api/syncapi_internal.h", "internal_api/syncapi_server_connection_manager.cc", @@ -348,8 +342,6 @@ source_set("sync_core") { "sessions/sync_session.h", "sessions/sync_session_context.cc", "sessions/sync_session_context.h", - "syncable/deferred_on_disk_directory_backing_store.cc", - "syncable/deferred_on_disk_directory_backing_store.h", "syncable/dir_open_result.h", "syncable/directory.cc", "syncable/directory.h", @@ -666,12 +658,9 @@ test("sync_unit_tests") { "internal_api/public/util/proto_value_ptr_unittest.cc", "internal_api/public/util/weak_handle_unittest.cc", "internal_api/shared_model_type_processor_unittest.cc", - "internal_api/sync_backup_manager_unittest.cc", "internal_api/sync_context_proxy_impl_unittest.cc", "internal_api/sync_encryption_handler_impl_unittest.cc", "internal_api/sync_manager_impl_unittest.cc", - "internal_api/sync_rollback_manager_base_unittest.cc", - "internal_api/sync_rollback_manager_unittest.cc", "internal_api/syncapi_server_connection_manager_unittest.cc", "js/js_event_details_unittest.cc", "js/sync_js_controller_unittest.cc", @@ -680,7 +669,6 @@ test("sync_unit_tests") { "sessions/model_type_registry_unittest.cc", "sessions/nudge_tracker_unittest.cc", "sessions/status_controller_unittest.cc", - "syncable/deferred_on_disk_directory_backing_store_unittest.cc", "syncable/directory_backing_store_unittest.cc", "syncable/directory_unittest.cc", "syncable/directory_unittest.h", diff --git a/sync/engine/sync_scheduler_impl.cc b/sync/engine/sync_scheduler_impl.cc index f126473..cc5e4a7 100644 --- a/sync/engine/sync_scheduler_impl.cc +++ b/sync/engine/sync_scheduler_impl.cc @@ -58,7 +58,6 @@ bool ShouldRequestEarlyExit(const SyncProtocolError& error) { case CLIENT_DATA_OBSOLETE: case CLEAR_PENDING: case DISABLED_BY_ADMIN: - case USER_ROLLBACK: // If we send terminate sync early then |sync_cycle_ended| notification // would not be sent. If there were no actions then |ACTIONABLE_ERROR| // notification wouldnt be sent either. Then the UI layer would be left diff --git a/sync/engine/syncer_proto_util.cc b/sync/engine/syncer_proto_util.cc index 306137b..66c4013 100644 --- a/sync/engine/syncer_proto_util.cc +++ b/sync/engine/syncer_proto_util.cc @@ -124,8 +124,6 @@ SyncProtocolErrorType PBErrorTypeToSyncProtocolErrorType( return MIGRATION_DONE; case sync_pb::SyncEnums::DISABLED_BY_ADMIN: return DISABLED_BY_ADMIN; - case sync_pb::SyncEnums::USER_ROLLBACK: - return USER_ROLLBACK; case sync_pb::SyncEnums::PARTIAL_FAILURE: return PARTIAL_FAILURE; case sync_pb::SyncEnums::CLIENT_DATA_OBSOLETE: @@ -193,8 +191,6 @@ SyncProtocolError ErrorCodeToSyncProtocolError( error.action = RESET_LOCAL_SYNC_DATA; } else if (error_type == sync_pb::SyncEnums::DISABLED_BY_ADMIN) { error.action = STOP_SYNC_FOR_DISABLED_ACCOUNT; - } else if (error_type == sync_pb::SyncEnums::USER_ROLLBACK) { - error.action = DISABLE_SYNC_AND_ROLLBACK; } // There is no other action we can compute for legacy server. return error; } @@ -498,8 +494,6 @@ SyncerError SyncerProtoUtil::PostClientToServerMessage( return SERVER_RETURN_NOT_MY_BIRTHDAY; case DISABLED_BY_ADMIN: return SERVER_RETURN_DISABLED_BY_ADMIN; - case USER_ROLLBACK: - return SERVER_RETURN_USER_ROLLBACK; case PARTIAL_FAILURE: // This only happens when partial throttling during GetUpdates. if (!sync_protocol_error.error_data_types.Empty()) { diff --git a/sync/internal_api/internal_components_factory_impl.cc b/sync/internal_api/internal_components_factory_impl.cc index 4f2f32e..65fcfaf 100644 --- a/sync/internal_api/internal_components_factory_impl.cc +++ b/sync/internal_api/internal_components_factory_impl.cc @@ -11,7 +11,6 @@ #include "sync/engine/syncer.h" #include "sync/engine/sync_scheduler_impl.h" #include "sync/sessions/sync_session_context.h" -#include "sync/syncable/deferred_on_disk_directory_backing_store.h" #include "sync/syncable/on_disk_directory_backing_store.h" using base::TimeDelta; @@ -68,10 +67,6 @@ InternalComponentsFactoryImpl::BuildDirectoryBackingStore( if (storage == STORAGE_ON_DISK) { return scoped_ptr<syncable::DirectoryBackingStore>( new syncable::OnDiskDirectoryBackingStore(dir_name, backing_filepath)); - } else if (storage == STORAGE_ON_DISK_DEFERRED) { - return scoped_ptr<syncable::DirectoryBackingStore>( - new syncable::DeferredOnDiskDirectoryBackingStore(dir_name, - backing_filepath)); } else { NOTREACHED(); return scoped_ptr<syncable::DirectoryBackingStore>(); diff --git a/sync/internal_api/public/configure_reason.h b/sync/internal_api/public/configure_reason.h index 8fbbc4e..4d015b9 100644 --- a/sync/internal_api/public/configure_reason.h +++ b/sync/internal_api/public/configure_reason.h @@ -33,9 +33,6 @@ enum ConfigureReason { // cryptographer errors/resolutions. CONFIGURE_REASON_CRYPTO, - // Configure data types for backup/rollback. - CONFIGURE_REASON_BACKUP_ROLLBACK, - // The client is configuring because of a programmatic type enable/disable, // such as when an error is encountered/resolved. CONFIGURE_REASON_PROGRAMMATIC, diff --git a/sync/internal_api/public/internal_components_factory.h b/sync/internal_api/public/internal_components_factory.h index f077af0..fee9bec 100644 --- a/sync/internal_api/public/internal_components_factory.h +++ b/sync/internal_api/public/internal_components_factory.h @@ -80,9 +80,6 @@ class SYNC_EXPORT InternalComponentsFactory { // Use this if you want BuildDirectoryBackingStore to create/use a real // on disk store. STORAGE_ON_DISK, - // Use this to defer creating on-disk database until - // DirectoryBackingStore::SaveChanges() is called. - STORAGE_ON_DISK_DEFERRED, // Use this to test the case where a directory fails to load. STORAGE_INVALID }; diff --git a/sync/internal_api/public/shutdown_reason.h b/sync/internal_api/public/shutdown_reason.h index f913eec..604dc0e 100644 --- a/sync/internal_api/public/shutdown_reason.h +++ b/sync/internal_api/public/shutdown_reason.h @@ -14,8 +14,6 @@ enum ShutdownReason { STOP_SYNC, // Sync is asked to stop, e.g. due to scarce resource. DISABLE_SYNC, // Sync is disabled, e.g. user sign out, dashboard clear. BROWSER_SHUTDOWN, // Browser is closed. - SWITCH_MODE_SYNC, // Engine is shut down and a new engine will start in - // sync mode. }; } // namespace syncer diff --git a/sync/internal_api/public/sync_manager_factory.h b/sync/internal_api/public/sync_manager_factory.h index ef6ee6b..feb9e8b 100644 --- a/sync/internal_api/public/sync_manager_factory.h +++ b/sync/internal_api/public/sync_manager_factory.h @@ -15,22 +15,15 @@ namespace syncer { class SyncManager; -// Helper class to allow dependency injection of the SyncManager. +// Helper class to allow dependency injection of the SyncManager in tests. class SYNC_EXPORT SyncManagerFactory { public: - enum MANAGER_TYPE { - NORMAL, // Normal sync manager - BACKUP, // Backup sync manager - ROLLBACK, // Rollback sync manager - }; - - explicit SyncManagerFactory(MANAGER_TYPE type); + SyncManagerFactory(); virtual ~SyncManagerFactory(); virtual scoped_ptr<SyncManager> CreateSyncManager(const std::string& name); private: - MANAGER_TYPE type_; DISALLOW_COPY_AND_ASSIGN(SyncManagerFactory); }; diff --git a/sync/internal_api/sync_backup_manager.cc b/sync/internal_api/sync_backup_manager.cc deleted file mode 100644 index 9151e52..0000000 --- a/sync/internal_api/sync_backup_manager.cc +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "sync/internal_api/sync_backup_manager.h" - -#include <stdint.h> - -#include <vector> - -#include "sync/internal_api/public/read_node.h" -#include "sync/internal_api/public/write_transaction.h" -#include "sync/syncable/directory.h" -#include "sync/syncable/mutable_entry.h" -#include "url/gurl.h" - -namespace syncer { - -SyncBackupManager::SyncBackupManager() - : in_normalization_(false) { -} - -SyncBackupManager::~SyncBackupManager() { -} - -void SyncBackupManager::Init(InitArgs* args) { - if (SyncRollbackManagerBase::InitInternal( - args->database_location, - args->internal_components_factory.get(), - InternalComponentsFactory::STORAGE_ON_DISK_DEFERRED, - args->unrecoverable_error_handler, - args->report_unrecoverable_error_function)) { - GetUserShare()->directory->CollectMetaHandleCounts( - &status_.num_entries_by_type, &status_.num_to_delete_entries_by_type); - - HideSyncPreference(PRIORITY_PREFERENCES); - HideSyncPreference(PREFERENCES); - } -} - -void SyncBackupManager::SaveChanges() { - if (initialized()) - NormalizeEntries(); -} - -SyncStatus SyncBackupManager::GetDetailedStatus() const { - return status_; -} - -ModelTypeSet SyncBackupManager::HandleTransactionEndingChangeEvent( - const syncable::ImmutableWriteTransactionInfo& write_transaction_info, - syncable::BaseTransaction* trans) { - ModelTypeSet types; - if (in_normalization_) { - // Skip if in our own WriteTransaction from NormalizeEntries(). - in_normalization_ = false; - return types; - } - - for (syncable::EntryKernelMutationMap::const_iterator it = - write_transaction_info.Get().mutations.Get().begin(); - it != write_transaction_info.Get().mutations.Get().end(); ++it) { - int64_t id = it->first; - if (unsynced_.find(id) == unsynced_.end()) { - unsynced_.insert(id); - - const syncable::EntryKernel& e = it->second.mutated; - ModelType type = e.GetModelType(); - types.Put(type); - if (!e.ref(syncable::ID).ServerKnows()) - status_.num_entries_by_type[type]++; - if (e.ref(syncable::IS_DEL)) - status_.num_to_delete_entries_by_type[type]++; - } - } - return types; -} - -void SyncBackupManager::NormalizeEntries() { - WriteTransaction trans(FROM_HERE, GetUserShare()); - in_normalization_ = true; - for (std::set<int64_t>::const_iterator it = unsynced_.begin(); - it != unsynced_.end(); ++it) { - syncable::MutableEntry entry(trans.GetWrappedWriteTrans(), - syncable::GET_BY_HANDLE, *it); - CHECK(entry.good()); - - if (!entry.GetId().ServerKnows()) - entry.PutId(syncable::Id::CreateFromServerId(entry.GetId().value())); - if (!entry.GetParentId().IsNull() && !entry.GetParentId().ServerKnows()) { - entry.PutParentIdPropertyOnly(syncable::Id::CreateFromServerId( - entry.GetParentId().value())); - } - entry.PutBaseVersion(1); - entry.PutIsUnsynced(false); - } - unsynced_.clear(); -} - -void SyncBackupManager::HideSyncPreference(ModelType type) { - WriteTransaction trans(FROM_HERE, GetUserShare()); - ReadNode pref_root(&trans); - if (BaseNode::INIT_OK != pref_root.InitTypeRoot(type)) - return; - - std::vector<int64_t> pref_ids; - pref_root.GetChildIds(&pref_ids); - for (uint32_t i = 0; i < pref_ids.size(); ++i) { - syncable::MutableEntry entry(trans.GetWrappedWriteTrans(), - syncable::GET_BY_HANDLE, pref_ids[i]); - if (entry.good()) { - // HACKY: Set IS_DEL to true to remove entry from parent-children - // index so that it's not returned when syncable service asks - // for sync data. Syncable service then creates entry for local - // model. Then the existing entry is undeleted and set to local value - // because it has the same unique client tag. - entry.PutIsDel(true); - entry.PutIsUnsynced(false); - - // Don't persist on disk so that if backup is aborted before receiving - // local preference values, values in sync DB are saved. - GetUserShare()->directory->UnmarkDirtyEntry( - trans.GetWrappedWriteTrans(), &entry); - } - } -} - -void SyncBackupManager::ShutdownOnSyncThread(ShutdownReason reason) { - if (reason == SWITCH_MODE_SYNC) { - NormalizeEntries(); - GetUserShare()->directory->SaveChanges(); - } - - SyncRollbackManagerBase::ShutdownOnSyncThread(reason); -} - -void SyncBackupManager::RegisterDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) {} - -void SyncBackupManager::UnregisterDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) {} - -bool SyncBackupManager::HasDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) { return false; } - -void SyncBackupManager::RequestEmitDebugInfo() {} - -void SyncBackupManager::ClearServerData( - const ClearServerDataCallback& callback) {} - -} // namespace syncer diff --git a/sync/internal_api/sync_backup_manager.h b/sync/internal_api/sync_backup_manager.h deleted file mode 100644 index e7e50fa..0000000 --- a/sync/internal_api/sync_backup_manager.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef SYNC_INTERNAL_API_SYNC_BACKUP_MANAGER_H_ -#define SYNC_INTERNAL_API_SYNC_BACKUP_MANAGER_H_ - -#include <stdint.h> - -#include <set> - -#include "base/macros.h" -#include "sync/internal_api/sync_rollback_manager_base.h" -#include "url/gurl.h" - -namespace syncer { - -// SyncBackupManager runs before user signs in to sync to back up user's data -// before sync starts. The data that's backed up can be used to restore user's -// settings to pre-sync state. -class SYNC_EXPORT SyncBackupManager : public SyncRollbackManagerBase { - public: - SyncBackupManager(); - ~SyncBackupManager() override; - - // SyncManager implementation. - void Init(InitArgs* args) override; - void SaveChanges() override; - SyncStatus GetDetailedStatus() const override; - void ShutdownOnSyncThread(ShutdownReason reason) override; - - // DirectoryChangeDelegate implementation. - ModelTypeSet HandleTransactionEndingChangeEvent( - const syncable::ImmutableWriteTransactionInfo& write_transaction_info, - syncable::BaseTransaction* trans) override; - - void RegisterDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) override; - void UnregisterDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) override; - bool HasDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) override; - void RequestEmitDebugInfo() override; - void ClearServerData(const ClearServerDataCallback& callback) override; - - private: - // Replaces local IDs with server IDs and clear unsynced bit of modified - // entries. - void NormalizeEntries(); - - // Manipulate preference nodes so that they'll be overwritten by local - // preference values during model association, i.e. local wins instead of - // server wins. This is for preventing backup from changing preferences in - // case backup DB has hijacked preferences. - void HideSyncPreference(ModelType pref_type); - - // Handles of unsynced entries caused by local model changes. - std::set<int64_t> unsynced_; - - // True if NormalizeEntries() is being called. - bool in_normalization_; - - SyncStatus status_; - - DISALLOW_COPY_AND_ASSIGN(SyncBackupManager); -}; - -} // namespace syncer - -#endif // SYNC_INTERNAL_API_SYNC_BACKUP_MANAGER_H_ diff --git a/sync/internal_api/sync_backup_manager_unittest.cc b/sync/internal_api/sync_backup_manager_unittest.cc deleted file mode 100644 index 919356d..0000000 --- a/sync/internal_api/sync_backup_manager_unittest.cc +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "sync/internal_api/sync_backup_manager.h" - -#include <string> - -#include "base/files/scoped_temp_dir.h" -#include "base/run_loop.h" -#include "sync/internal_api/public/read_node.h" -#include "sync/internal_api/public/read_transaction.h" -#include "sync/internal_api/public/sessions/sync_session_snapshot.h" -#include "sync/internal_api/public/test/test_internal_components_factory.h" -#include "sync/internal_api/public/write_node.h" -#include "sync/internal_api/public/write_transaction.h" -#include "sync/syncable/entry.h" -#include "sync/test/test_directory_backing_store.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" - -using ::testing::_; -using ::testing::Invoke; -using ::testing::WithArgs; - -namespace syncer { - -namespace { - -void OnConfigDone(bool success) { - EXPECT_TRUE(success); -} - -class SyncBackupManagerTest : public syncer::SyncManager::Observer, - public testing::Test { - public: - MOCK_METHOD1(OnSyncCycleCompleted, - void(const sessions::SyncSessionSnapshot&)); - MOCK_METHOD1(OnConnectionStatusChange, void(ConnectionStatus)); - MOCK_METHOD1(OnActionableError, void(const SyncProtocolError&)); - MOCK_METHOD1(OnMigrationRequested, void(ModelTypeSet)); - MOCK_METHOD1(OnProtocolEvent, void(const ProtocolEvent&)); - MOCK_METHOD4(OnInitializationComplete, - void(const WeakHandle<JsBackend>&, - const WeakHandle<DataTypeDebugInfoListener>&, - bool, ModelTypeSet)); - - protected: - void SetUp() override { - CHECK(temp_dir_.CreateUniqueTempDir()); - } - - void InitManager(SyncManager* manager, - InternalComponentsFactory::StorageOption storage_option) { - manager_ = manager; - EXPECT_CALL(*this, OnInitializationComplete(_, _, _, _)) - .WillOnce(WithArgs<2>(Invoke(this, - &SyncBackupManagerTest::HandleInit))); - - manager->AddObserver(this); - - base::RunLoop run_loop; - - SyncManager::InitArgs args; - args.database_location = temp_dir_.path(); - args.event_handler = MakeWeakHandle(base::WeakPtr<JsEventHandler>()); - args.service_url = GURL("https://example.com/"); - args.post_factory = scoped_ptr<HttpPostProviderFactory>(); - args.internal_components_factory.reset(new TestInternalComponentsFactory( - InternalComponentsFactory::Switches(), storage_option, - &storage_used_)); - manager->Init(&args); - EXPECT_EQ(InternalComponentsFactory::STORAGE_ON_DISK_DEFERRED, - storage_used_); - loop_.PostTask(FROM_HERE, run_loop.QuitClosure()); - run_loop.Run(); - } - - void CreateEntry(UserShare* user_share, ModelType type, - const std::string& client_tag) { - WriteTransaction trans(FROM_HERE, user_share); - - WriteNode node(&trans); - EXPECT_EQ(WriteNode::INIT_SUCCESS, - node.InitUniqueByCreation(type, client_tag)); - } - - void ConfigureSyncer() { - manager_->ConfigureSyncer(CONFIGURE_REASON_NEW_CLIENT, - ModelTypeSet(SEARCH_ENGINES), - ModelTypeSet(), ModelTypeSet(), ModelTypeSet(), - ModelSafeRoutingInfo(), - base::Bind(&OnConfigDone, true), - base::Bind(&OnConfigDone, false)); - } - - void HandleInit(bool success) { - if (success) { - loop_.PostTask(FROM_HERE, - base::Bind(&SyncBackupManagerTest::ConfigureSyncer, - base::Unretained(this))); - } else { - manager_->ShutdownOnSyncThread(STOP_SYNC); - } - } - - base::ScopedTempDir temp_dir_; - base::MessageLoop loop_; // Needed for WeakHandle - SyncManager* manager_; - InternalComponentsFactory::StorageOption storage_used_; -}; - -TEST_F(SyncBackupManagerTest, NormalizeEntry) { - scoped_ptr<SyncBackupManager> manager(new SyncBackupManager); - InitManager(manager.get(), InternalComponentsFactory::STORAGE_IN_MEMORY); - - CreateEntry(manager->GetUserShare(), SEARCH_ENGINES, "test"); - - { - // New entry is local and unsynced at first. - ReadTransaction trans(FROM_HERE, manager->GetUserShare()); - ReadNode pref(&trans); - EXPECT_EQ(BaseNode::INIT_OK, - pref.InitByClientTagLookup(SEARCH_ENGINES, "test")); - EXPECT_FALSE(pref.GetEntry()->GetId().ServerKnows()); - EXPECT_TRUE(pref.GetEntry()->GetIsUnsynced()); - } - - manager->SaveChanges(); - - { - // New entry has server ID and unsynced bit is cleared after saving. - ReadTransaction trans(FROM_HERE, manager->GetUserShare()); - ReadNode pref(&trans); - EXPECT_EQ(BaseNode::INIT_OK, - pref.InitByClientTagLookup(SEARCH_ENGINES, "test")); - EXPECT_TRUE(pref.GetEntry()->GetId().ServerKnows()); - EXPECT_FALSE(pref.GetEntry()->GetIsUnsynced()); - } -} - -TEST_F(SyncBackupManagerTest, PersistWithSwitchToSyncShutdown) { - scoped_ptr<SyncBackupManager> manager(new SyncBackupManager); - InitManager(manager.get(), - InternalComponentsFactory::STORAGE_ON_DISK_DEFERRED); - - CreateEntry(manager->GetUserShare(), SEARCH_ENGINES, "test"); - manager->SaveChanges(); - manager->ShutdownOnSyncThread(SWITCH_MODE_SYNC); - - // Reopen db to verify entry is persisted. - manager.reset(new SyncBackupManager); - InitManager(manager.get(), InternalComponentsFactory::STORAGE_ON_DISK); - { - ReadTransaction trans(FROM_HERE, manager->GetUserShare()); - ReadNode pref(&trans); - EXPECT_EQ(BaseNode::INIT_OK, - pref.InitByClientTagLookup(SEARCH_ENGINES, "test")); - EXPECT_TRUE(pref.GetEntry()->GetId().ServerKnows()); - EXPECT_FALSE(pref.GetEntry()->GetIsUnsynced()); - } -} - -TEST_F(SyncBackupManagerTest, DontPersistWithOtherShutdown) { - scoped_ptr<SyncBackupManager> manager(new SyncBackupManager); - InitManager(manager.get(), - InternalComponentsFactory::STORAGE_ON_DISK_DEFERRED); - - CreateEntry(manager->GetUserShare(), SEARCH_ENGINES, "test"); - manager->SaveChanges(); - manager->ShutdownOnSyncThread(STOP_SYNC); - EXPECT_FALSE(base::PathExists( - temp_dir_.path().Append(syncable::Directory::kSyncDatabaseFilename))); -} - -TEST_F(SyncBackupManagerTest, FailToInitialize) { - // Test graceful shutdown on initialization failure. - scoped_ptr<SyncBackupManager> manager(new SyncBackupManager); - InitManager(manager.get(), InternalComponentsFactory::STORAGE_INVALID); -} - -} // anonymous namespace - -} // namespace syncer diff --git a/sync/internal_api/sync_manager_factory.cc b/sync/internal_api/sync_manager_factory.cc index 288b5da..48ff69d 100644 --- a/sync/internal_api/sync_manager_factory.cc +++ b/sync/internal_api/sync_manager_factory.cc @@ -4,32 +4,18 @@ #include "sync/internal_api/public/sync_manager_factory.h" -#include "sync/internal_api/sync_backup_manager.h" #include "sync/internal_api/sync_manager_impl.h" -#include "sync/internal_api/sync_rollback_manager.h" namespace syncer { -SyncManagerFactory::SyncManagerFactory(SyncManagerFactory::MANAGER_TYPE type) - : type_(type) { -} +SyncManagerFactory::SyncManagerFactory() {} SyncManagerFactory::~SyncManagerFactory() { } scoped_ptr<SyncManager> SyncManagerFactory::CreateSyncManager( const std::string& name) { - switch (type_) { - case NORMAL: - return scoped_ptr<SyncManager>(new SyncManagerImpl(name)); - case BACKUP: - return scoped_ptr<SyncManager>(new SyncBackupManager()); - case ROLLBACK: - return scoped_ptr<SyncManager>(new SyncRollbackManager()); - default: - NOTREACHED(); - return scoped_ptr<SyncManager>(new SyncManagerImpl(name)); - } + return scoped_ptr<SyncManager>(new SyncManagerImpl(name)); } } // namespace syncer diff --git a/sync/internal_api/sync_rollback_manager.cc b/sync/internal_api/sync_rollback_manager.cc deleted file mode 100644 index e2a5c84..0000000 --- a/sync/internal_api/sync_rollback_manager.cc +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "sync/internal_api/sync_rollback_manager.h" - -#include <stddef.h> -#include <stdint.h> - -#include "sync/internal_api/public/base/model_type.h" -#include "sync/internal_api/public/read_node.h" -#include "sync/internal_api/public/read_transaction.h" -#include "sync/internal_api/public/util/syncer_error.h" -#include "sync/internal_api/public/write_transaction.h" -#include "sync/syncable/directory.h" -#include "sync/syncable/mutable_entry.h" -#include "url/gurl.h" - -namespace syncer { - -SyncRollbackManager::SyncRollbackManager() - : change_delegate_(NULL) { -} - -SyncRollbackManager::~SyncRollbackManager() { -} - -void SyncRollbackManager::Init(InitArgs* args) { - if (SyncRollbackManagerBase::InitInternal( - args->database_location, - args->internal_components_factory.get(), - InternalComponentsFactory::STORAGE_ON_DISK, - args->unrecoverable_error_handler, - args->report_unrecoverable_error_function)) { - change_delegate_ = args->change_delegate; - - for (size_t i = 0; i < args->workers.size(); ++i) { - ModelSafeGroup group = args->workers[i]->GetModelSafeGroup(); - CHECK(workers_.find(group) == workers_.end()); - workers_[group] = args->workers[i]; - } - - rollback_ready_types_ = GetUserShare()->directory->InitialSyncEndedTypes(); - rollback_ready_types_.RetainAll(BackupTypes()); - } -} - -void SyncRollbackManager::StartSyncingNormally( - const ModelSafeRoutingInfo& routing_info, - base::Time last_poll_time) { - if (rollback_ready_types_.Empty()) { - NotifyRollbackDone(); - return; - } - - std::map<ModelType, syncable::Directory::Metahandles> to_delete; - { - WriteTransaction trans(FROM_HERE, GetUserShare()); - syncable::Directory::Metahandles unsynced; - GetUserShare()->directory->GetUnsyncedMetaHandles(trans.GetWrappedTrans(), - &unsynced); - for (size_t i = 0; i < unsynced.size(); ++i) { - syncable::MutableEntry e(trans.GetWrappedWriteTrans(), - syncable::GET_BY_HANDLE, unsynced[i]); - if (!e.good() || e.GetIsDel() || e.GetId().ServerKnows()) - continue; - - // TODO(haitaol): roll back entries that are backed up but whose content - // is merged with local model during association. - - ModelType type = GetModelTypeFromSpecifics(e.GetSpecifics()); - if (!rollback_ready_types_.Has(type)) - continue; - - to_delete[type].push_back(unsynced[i]); - } - } - - for (std::map<ModelType, syncable::Directory::Metahandles>::iterator it = - to_delete.begin(); it != to_delete.end(); ++it) { - ModelSafeGroup group = routing_info.find(it->first)->second; - CHECK(workers_.find(group) != workers_.end()); - workers_[group]->DoWorkAndWaitUntilDone( - base::Bind(&SyncRollbackManager::DeleteOnWorkerThread, - base::Unretained(this), - it->first, it->second)); - } - - NotifyRollbackDone(); -} - -SyncerError SyncRollbackManager::DeleteOnWorkerThread( - ModelType type, - std::vector<int64_t> handles) { - CHECK(change_delegate_); - - { - ChangeRecordList deletes; - WriteTransaction trans(FROM_HERE, GetUserShare()); - for (size_t i = 0; i < handles.size(); ++i) { - syncable::MutableEntry e(trans.GetWrappedWriteTrans(), - syncable::GET_BY_HANDLE, handles[i]); - if (!e.good() || e.GetIsDel()) - continue; - - ChangeRecord del; - del.action = ChangeRecord::ACTION_DELETE; - del.id = handles[i]; - del.specifics = e.GetSpecifics(); - deletes.push_back(del); - } - - change_delegate_->OnChangesApplied(type, 1, &trans, - MakeImmutable(&deletes)); - } - - change_delegate_->OnChangesComplete(type); - return SYNCER_OK; -} - -void SyncRollbackManager::NotifyRollbackDone() { - SyncProtocolError error; - error.action = ROLLBACK_DONE; - FOR_EACH_OBSERVER(SyncManager::Observer, *GetObservers(), - OnActionableError(error)); -} - -} // namespace syncer diff --git a/sync/internal_api/sync_rollback_manager.h b/sync/internal_api/sync_rollback_manager.h deleted file mode 100644 index d41086a..0000000 --- a/sync/internal_api/sync_rollback_manager.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_H_ -#define SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_H_ - -#include <stdint.h> - -#include <map> -#include <string> -#include <vector> - -#include "base/macros.h" -#include "sync/internal_api/sync_rollback_manager_base.h" - -class GURL; - -namespace syncer { - -// SyncRollbackManager restores user's data to pre-sync state using backup -// DB created by SyncBackupManager. -class SYNC_EXPORT SyncRollbackManager : public SyncRollbackManagerBase { - public: - SyncRollbackManager(); - ~SyncRollbackManager() override; - - // SyncManager implementation. - void Init(InitArgs* args) override; - void StartSyncingNormally(const ModelSafeRoutingInfo& routing_info, - base::Time last_poll_time) override; - - private: - // Deletes specified entries in local model. - SyncerError DeleteOnWorkerThread(ModelType type, - std::vector<int64_t> handles); - - void NotifyRollbackDone(); - - std::map<ModelSafeGroup, scoped_refptr<ModelSafeWorker> > workers_; - - SyncManager::ChangeDelegate* change_delegate_; - - // Types that can be rolled back. - ModelTypeSet rollback_ready_types_; - - DISALLOW_COPY_AND_ASSIGN(SyncRollbackManager); -}; - -} // namespace syncer - -#endif // SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_H_ diff --git a/sync/internal_api/sync_rollback_manager_base.cc b/sync/internal_api/sync_rollback_manager_base.cc deleted file mode 100644 index d62f354..0000000 --- a/sync/internal_api/sync_rollback_manager_base.cc +++ /dev/null @@ -1,329 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "sync/internal_api/sync_rollback_manager_base.h" - -#include <stdint.h> - -#include "sync/internal_api/public/base/model_type.h" -#include "sync/internal_api/public/read_node.h" -#include "sync/internal_api/public/read_transaction.h" -#include "sync/internal_api/public/write_transaction.h" -#include "sync/syncable/directory_backing_store.h" -#include "sync/syncable/mutable_entry.h" - -namespace { - -// Permanent bookmark folders as defined in bookmark_model_associator.cc. -// No mobile bookmarks because they only exists with sync enabled. -const char kBookmarkBarTag[] = "bookmark_bar"; -const char kOtherBookmarksTag[] = "other_bookmarks"; - -class DummyEntryptionHandler : public syncer::SyncEncryptionHandler { - void AddObserver(Observer* observer) override {} - void RemoveObserver(Observer* observer) override {} - void Init() override {} - void SetEncryptionPassphrase(const std::string& passphrase, - bool is_explicit) override {} - void SetDecryptionPassphrase(const std::string& passphrase) override {} - void EnableEncryptEverything() override {} - bool IsEncryptEverythingEnabled() const override { return false; } - syncer::PassphraseType GetPassphraseType() const override { - return syncer::KEYSTORE_PASSPHRASE; - } -}; - -} // anonymous namespace - -namespace syncer { - -SyncRollbackManagerBase::SyncRollbackManagerBase() - : dummy_handler_(new DummyEntryptionHandler), - initialized_(false), - weak_ptr_factory_(this) { -} - -SyncRollbackManagerBase::~SyncRollbackManagerBase() { -} - -bool SyncRollbackManagerBase::InitInternal( - const base::FilePath& database_location, - InternalComponentsFactory* internal_components_factory, - InternalComponentsFactory::StorageOption storage, - const WeakHandle<UnrecoverableErrorHandler>& unrecoverable_error_handler, - const base::Closure& report_unrecoverable_error_function) { - unrecoverable_error_handler_ = unrecoverable_error_handler; - report_unrecoverable_error_function_ = report_unrecoverable_error_function; - - if (!InitBackupDB(database_location, internal_components_factory, storage)) { - NotifyInitializationFailure(); - return false; - } - - initialized_ = true; - NotifyInitializationSuccess(); - return true; -} - -ModelTypeSet SyncRollbackManagerBase::InitialSyncEndedTypes() { - return share_.directory->InitialSyncEndedTypes(); -} - -ModelTypeSet SyncRollbackManagerBase::GetTypesWithEmptyProgressMarkerToken( - ModelTypeSet types) { - ModelTypeSet inited_types = share_.directory->InitialSyncEndedTypes(); - types.RemoveAll(inited_types); - return types; -} - -bool SyncRollbackManagerBase::PurgePartiallySyncedTypes() { - NOTREACHED(); - return true; -} - -void SyncRollbackManagerBase::UpdateCredentials( - const SyncCredentials& credentials) { -} - -void SyncRollbackManagerBase::StartSyncingNormally( - const ModelSafeRoutingInfo& routing_info, - base::Time last_poll_time) {} - -void SyncRollbackManagerBase::ConfigureSyncer( - ConfigureReason reason, - ModelTypeSet to_download, - ModelTypeSet to_purge, - ModelTypeSet to_journal, - ModelTypeSet to_unapply, - const ModelSafeRoutingInfo& new_routing_info, - const base::Closure& ready_task, - const base::Closure& retry_task) { - for (ModelTypeSet::Iterator type = to_download.First(); - type.Good(); type.Inc()) { - if (InitTypeRootNode(type.Get())) { - if (type.Get() == BOOKMARKS) { - InitBookmarkFolder(kBookmarkBarTag); - InitBookmarkFolder(kOtherBookmarksTag); - } - } - } - - ready_task.Run(); -} - -void SyncRollbackManagerBase::SetInvalidatorEnabled(bool invalidator_enabled) { -} - -void SyncRollbackManagerBase::OnIncomingInvalidation( - syncer::ModelType type, - scoped_ptr<InvalidationInterface> invalidation) { - NOTREACHED(); -} - -void SyncRollbackManagerBase::AddObserver(SyncManager::Observer* observer) { - observers_.AddObserver(observer); -} - -void SyncRollbackManagerBase::RemoveObserver(SyncManager::Observer* observer) { - observers_.RemoveObserver(observer); -} - -SyncStatus SyncRollbackManagerBase::GetDetailedStatus() const { - return SyncStatus(); -} - -void SyncRollbackManagerBase::SaveChanges() { -} - -void SyncRollbackManagerBase::ShutdownOnSyncThread(ShutdownReason reason) { - if (initialized_) { - share_.directory.reset(); - initialized_ = false; - } -} - -UserShare* SyncRollbackManagerBase::GetUserShare() { - return &share_; -} - -const std::string SyncRollbackManagerBase::cache_guid() { - return share_.directory->cache_guid(); -} - -bool SyncRollbackManagerBase::ReceivedExperiment(Experiments* experiments) { - return false; -} - -bool SyncRollbackManagerBase::HasUnsyncedItems() { - ReadTransaction trans(FROM_HERE, &share_); - syncable::Directory::Metahandles unsynced; - share_.directory->GetUnsyncedMetaHandles(trans.GetWrappedTrans(), &unsynced); - return !unsynced.empty(); -} - -SyncEncryptionHandler* SyncRollbackManagerBase::GetEncryptionHandler() { - return dummy_handler_.get(); -} - -void SyncRollbackManagerBase::RefreshTypes(ModelTypeSet types) { -} - -void SyncRollbackManagerBase::HandleTransactionCompleteChangeEvent( - ModelTypeSet models_with_changes) { -} - -ModelTypeSet SyncRollbackManagerBase::HandleTransactionEndingChangeEvent( - const syncable::ImmutableWriteTransactionInfo& write_transaction_info, - syncable::BaseTransaction* trans) { - return ModelTypeSet(); -} - -void SyncRollbackManagerBase::HandleCalculateChangesChangeEventFromSyncApi( - const syncable::ImmutableWriteTransactionInfo& write_transaction_info, - syncable::BaseTransaction* trans, - std::vector<int64_t>* entries_changed) {} - -void SyncRollbackManagerBase::HandleCalculateChangesChangeEventFromSyncer( - const syncable::ImmutableWriteTransactionInfo& write_transaction_info, - syncable::BaseTransaction* trans, - std::vector<int64_t>* entries_changed) {} - -void SyncRollbackManagerBase::OnTransactionWrite( - const syncable::ImmutableWriteTransactionInfo& write_transaction_info, - ModelTypeSet models_with_changes) { -} - -void SyncRollbackManagerBase::NotifyInitializationSuccess() { - FOR_EACH_OBSERVER( - SyncManager::Observer, observers_, - OnInitializationComplete( - MakeWeakHandle(base::WeakPtr<JsBackend>()), - MakeWeakHandle(base::WeakPtr<DataTypeDebugInfoListener>()), - true, InitialSyncEndedTypes())); -} - -void SyncRollbackManagerBase::NotifyInitializationFailure() { - FOR_EACH_OBSERVER( - SyncManager::Observer, observers_, - OnInitializationComplete( - MakeWeakHandle(base::WeakPtr<JsBackend>()), - MakeWeakHandle(base::WeakPtr<DataTypeDebugInfoListener>()), - false, ModelTypeSet())); -} - -syncer_v2::SyncContextProxy* SyncRollbackManagerBase::GetSyncContextProxy() { - return NULL; -} - -ScopedVector<syncer::ProtocolEvent> -SyncRollbackManagerBase::GetBufferedProtocolEvents() { - return ScopedVector<syncer::ProtocolEvent>(); -} - -scoped_ptr<base::ListValue> SyncRollbackManagerBase::GetAllNodesForType( - syncer::ModelType type) { - ReadTransaction trans(FROM_HERE, GetUserShare()); - scoped_ptr<base::ListValue> nodes( - trans.GetDirectory()->GetNodeDetailsForType(trans.GetWrappedTrans(), - type)); - return nodes; -} - -bool SyncRollbackManagerBase::InitBackupDB( - const base::FilePath& sync_folder, - InternalComponentsFactory* internal_components_factory, - InternalComponentsFactory::StorageOption storage) { - base::FilePath backup_db_path = sync_folder.Append( - syncable::Directory::kSyncDatabaseFilename); - scoped_ptr<syncable::DirectoryBackingStore> backing_store = - internal_components_factory->BuildDirectoryBackingStore(storage, "backup", - backup_db_path); - - DCHECK(backing_store.get()); - share_.directory.reset( - new syncable::Directory( - backing_store.release(), - unrecoverable_error_handler_, - report_unrecoverable_error_function_, - NULL, - NULL)); - return syncable::OPENED == - share_.directory->Open( - "backup", this, - MakeWeakHandle(weak_ptr_factory_.GetWeakPtr())); -} - -bool SyncRollbackManagerBase::InitTypeRootNode(ModelType type) { - WriteTransaction trans(FROM_HERE, &share_); - ReadNode root(&trans); - if (BaseNode::INIT_OK == root.InitTypeRoot(type)) - return true; - - syncable::MutableEntry entry(trans.GetWrappedWriteTrans(), - syncable::CREATE_NEW_UPDATE_ITEM, - syncable::Id::CreateFromServerId( - ModelTypeToString(type))); - if (!entry.good()) - return false; - - entry.PutParentId(syncable::Id::GetRoot()); - entry.PutBaseVersion(1); - entry.PutUniqueServerTag(ModelTypeToRootTag(type)); - entry.PutNonUniqueName(ModelTypeToString(type)); - entry.PutIsDel(false); - entry.PutIsDir(true); - - sync_pb::EntitySpecifics specifics; - AddDefaultFieldValue(type, &specifics); - entry.PutSpecifics(specifics); - - return true; -} - -void SyncRollbackManagerBase::InitBookmarkFolder(const std::string& folder) { - WriteTransaction trans(FROM_HERE, &share_); - syncable::Entry bookmark_root(trans.GetWrappedTrans(), - syncable::GET_TYPE_ROOT, - BOOKMARKS); - if (!bookmark_root.good()) - return; - - syncable::MutableEntry entry(trans.GetWrappedWriteTrans(), - syncable::CREATE_NEW_UPDATE_ITEM, - syncable::Id::CreateFromServerId(folder)); - if (!entry.good()) - return; - - entry.PutParentId(bookmark_root.GetId()); - entry.PutBaseVersion(1); - entry.PutUniqueServerTag(folder); - entry.PutNonUniqueName(folder); - entry.PutIsDel(false); - entry.PutIsDir(true); - - sync_pb::EntitySpecifics specifics; - AddDefaultFieldValue(BOOKMARKS, &specifics); - entry.PutSpecifics(specifics); -} - -base::ObserverList<SyncManager::Observer>* -SyncRollbackManagerBase::GetObservers() { - return &observers_; -} - -void SyncRollbackManagerBase::RegisterDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) {} - -void SyncRollbackManagerBase::UnregisterDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) {} - -bool SyncRollbackManagerBase::HasDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) { return false; } - -void SyncRollbackManagerBase::RequestEmitDebugInfo() {} - -void SyncRollbackManagerBase::ClearServerData( - const ClearServerDataCallback& callback) {} - -} // namespace syncer diff --git a/sync/internal_api/sync_rollback_manager_base.h b/sync/internal_api/sync_rollback_manager_base.h deleted file mode 100644 index ad3ad62..0000000 --- a/sync/internal_api/sync_rollback_manager_base.h +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_BASE_H_ -#define SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_BASE_H_ - -#include <stdint.h> - -#include <string> -#include <vector> - -#include "base/macros.h" -#include "sync/base/sync_export.h" -#include "sync/internal_api/public/http_post_provider_factory.h" -#include "sync/internal_api/public/internal_components_factory.h" -#include "sync/internal_api/public/sync_manager.h" -#include "sync/internal_api/public/user_share.h" -#include "sync/syncable/directory_change_delegate.h" -#include "sync/syncable/transaction_observer.h" - -namespace syncer { - -class WriteTransaction; - -// Base class of sync managers used for backup and rollback. Two major -// functions are: -// * Init(): load backup DB into sync directory. -// * ConfigureSyncer(): initialize permanent sync nodes (root, bookmark -// permanent folders) for configured type as needed. -// -// Most of other functions are no ops. -class SYNC_EXPORT SyncRollbackManagerBase - : public SyncManager, - public syncable::DirectoryChangeDelegate, - public syncable::TransactionObserver { - public: - SyncRollbackManagerBase(); - ~SyncRollbackManagerBase() override; - - // SyncManager implementation. - ModelTypeSet InitialSyncEndedTypes() override; - ModelTypeSet GetTypesWithEmptyProgressMarkerToken( - ModelTypeSet types) override; - bool PurgePartiallySyncedTypes() override; - void UpdateCredentials(const SyncCredentials& credentials) override; - void StartSyncingNormally(const ModelSafeRoutingInfo& routing_info, - base::Time last_poll_time) override; - void ConfigureSyncer(ConfigureReason reason, - ModelTypeSet to_download, - ModelTypeSet to_purge, - ModelTypeSet to_journal, - ModelTypeSet to_unapply, - const ModelSafeRoutingInfo& new_routing_info, - const base::Closure& ready_task, - const base::Closure& retry_task) override; - void SetInvalidatorEnabled(bool invalidator_enabled) override; - void OnIncomingInvalidation( - syncer::ModelType type, - scoped_ptr<InvalidationInterface> invalidation) override; - void AddObserver(SyncManager::Observer* observer) override; - void RemoveObserver(SyncManager::Observer* observer) override; - SyncStatus GetDetailedStatus() const override; - void SaveChanges() override; - void ShutdownOnSyncThread(ShutdownReason reason) override; - UserShare* GetUserShare() override; - const std::string cache_guid() override; - bool ReceivedExperiment(Experiments* experiments) override; - bool HasUnsyncedItems() override; - SyncEncryptionHandler* GetEncryptionHandler() override; - void RefreshTypes(ModelTypeSet types) override; - syncer_v2::SyncContextProxy* GetSyncContextProxy() override; - ScopedVector<ProtocolEvent> GetBufferedProtocolEvents() override; - scoped_ptr<base::ListValue> GetAllNodesForType( - syncer::ModelType type) override; - void ClearServerData(const ClearServerDataCallback& callback) override; - - // DirectoryChangeDelegate implementation. - void HandleTransactionCompleteChangeEvent( - ModelTypeSet models_with_changes) override; - ModelTypeSet HandleTransactionEndingChangeEvent( - const syncable::ImmutableWriteTransactionInfo& write_transaction_info, - syncable::BaseTransaction* trans) override; - void HandleCalculateChangesChangeEventFromSyncApi( - const syncable::ImmutableWriteTransactionInfo& write_transaction_info, - syncable::BaseTransaction* trans, - std::vector<int64_t>* entries_changed) override; - void HandleCalculateChangesChangeEventFromSyncer( - const syncable::ImmutableWriteTransactionInfo& write_transaction_info, - syncable::BaseTransaction* trans, - std::vector<int64_t>* entries_changed) override; - - // syncable::TransactionObserver implementation. - void OnTransactionWrite( - const syncable::ImmutableWriteTransactionInfo& write_transaction_info, - ModelTypeSet models_with_changes) override; - - protected: - base::ObserverList<SyncManager::Observer>* GetObservers(); - - // Initialize sync backup DB. - bool InitInternal( - const base::FilePath& database_location, - InternalComponentsFactory* internal_components_factory, - InternalComponentsFactory::StorageOption storage, - const WeakHandle<UnrecoverableErrorHandler>& unrecoverable_error_handler, - const base::Closure& report_unrecoverable_error_function); - - void RegisterDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) override; - void UnregisterDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) override; - bool HasDirectoryTypeDebugInfoObserver( - syncer::TypeDebugInfoObserver* observer) override; - void RequestEmitDebugInfo() override; - - bool initialized() const { - return initialized_; - } - - private: - void NotifyInitializationSuccess(); - void NotifyInitializationFailure(); - - bool InitBackupDB(const base::FilePath& sync_folder, - InternalComponentsFactory* internal_components_factory, - InternalComponentsFactory::StorageOption storage); - - bool InitTypeRootNode(ModelType type); - void InitBookmarkFolder(const std::string& folder); - - UserShare share_; - base::ObserverList<SyncManager::Observer> observers_; - - WeakHandle<UnrecoverableErrorHandler> unrecoverable_error_handler_; - base::Closure report_unrecoverable_error_function_; - - scoped_ptr<SyncEncryptionHandler> dummy_handler_; - - bool initialized_; - - base::WeakPtrFactory<SyncRollbackManagerBase> weak_ptr_factory_; - - DISALLOW_COPY_AND_ASSIGN(SyncRollbackManagerBase); -}; - -} // namespace syncer - -#endif // SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_BASE_H_ diff --git a/sync/internal_api/sync_rollback_manager_base_unittest.cc b/sync/internal_api/sync_rollback_manager_base_unittest.cc deleted file mode 100644 index bb5ec93..0000000 --- a/sync/internal_api/sync_rollback_manager_base_unittest.cc +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "sync/internal_api/sync_rollback_manager_base.h" - -#include "base/bind.h" -#include "sync/internal_api/public/read_node.h" -#include "sync/internal_api/public/read_transaction.h" -#include "sync/internal_api/public/test/test_internal_components_factory.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" - -namespace syncer { - -namespace { - -void OnConfigDone(bool success) { - EXPECT_TRUE(success); -} - -class SyncTestRollbackManager : public SyncRollbackManagerBase { - public: - void Init(InitArgs* args) override { - SyncRollbackManagerBase::InitInternal( - args->database_location, - args->internal_components_factory.get(), - InternalComponentsFactory::STORAGE_IN_MEMORY, - args->unrecoverable_error_handler, - args->report_unrecoverable_error_function); - } -}; - -class SyncRollbackManagerBaseTest : public testing::Test { - protected: - void SetUp() override { - SyncManager::InitArgs args; - args.database_location = base::FilePath(base::FilePath::kCurrentDirectory); - args.service_url = GURL("https://example.com/"); - args.internal_components_factory.reset(new TestInternalComponentsFactory( - InternalComponentsFactory::Switches(), - InternalComponentsFactory::STORAGE_IN_MEMORY, - &storage_used_)); - manager_.Init(&args); - EXPECT_EQ(InternalComponentsFactory::STORAGE_IN_MEMORY, storage_used_); - } - - SyncTestRollbackManager manager_; - base::MessageLoop loop_; // Needed for WeakHandle - InternalComponentsFactory::StorageOption storage_used_; -}; - -TEST_F(SyncRollbackManagerBaseTest, InitTypeOnConfiguration) { - EXPECT_TRUE(manager_.InitialSyncEndedTypes().Empty()); - - manager_.ConfigureSyncer( - CONFIGURE_REASON_NEW_CLIENT, - ModelTypeSet(PREFERENCES, BOOKMARKS), - ModelTypeSet(), ModelTypeSet(), ModelTypeSet(), ModelSafeRoutingInfo(), - base::Bind(&OnConfigDone, true), - base::Bind(&OnConfigDone, false)); - - ReadTransaction trans(FROM_HERE, manager_.GetUserShare()); - ReadNode pref_root(&trans); - EXPECT_EQ(BaseNode::INIT_OK, - pref_root.InitTypeRoot(PREFERENCES)); - - ReadNode bookmark_root(&trans); - EXPECT_EQ(BaseNode::INIT_OK, - bookmark_root.InitTypeRoot(BOOKMARKS)); - ReadNode bookmark_bar(&trans); - EXPECT_EQ(BaseNode::INIT_OK, - bookmark_bar.InitByTagLookupForBookmarks("bookmark_bar")); - ReadNode bookmark_mobile(&trans); - EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, - bookmark_mobile.InitByTagLookupForBookmarks("synced_bookmarks")); - ReadNode bookmark_other(&trans); - EXPECT_EQ(BaseNode::INIT_OK, - bookmark_other.InitByTagLookupForBookmarks("other_bookmarks")); -} - -} // anonymous namespace - -} // namespace syncer diff --git a/sync/internal_api/sync_rollback_manager_unittest.cc b/sync/internal_api/sync_rollback_manager_unittest.cc deleted file mode 100644 index 400cebc..0000000 --- a/sync/internal_api/sync_rollback_manager_unittest.cc +++ /dev/null @@ -1,269 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "sync/internal_api/sync_rollback_manager.h" - -#include <stddef.h> -#include <stdint.h> - -#include <set> - -#include "base/files/scoped_temp_dir.h" -#include "base/run_loop.h" -#include "sync/internal_api/public/read_node.h" -#include "sync/internal_api/public/read_transaction.h" -#include "sync/internal_api/public/sessions/sync_session_snapshot.h" -#include "sync/internal_api/public/test/test_internal_components_factory.h" -#include "sync/internal_api/public/write_node.h" -#include "sync/internal_api/public/write_transaction.h" -#include "sync/internal_api/sync_backup_manager.h" -#include "sync/syncable/entry.h" -#include "sync/test/engine/fake_model_worker.h" -#include "sync/test/test_directory_backing_store.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" - -using ::testing::_; -using ::testing::DoDefault; -using ::testing::Invoke; -using ::testing::Truly; -using ::testing::WithArgs; - -namespace syncer { - -namespace { - -class TestChangeDelegate : public SyncManager::ChangeDelegate { - public: - TestChangeDelegate() { - ON_CALL(*this, OnChangesApplied(_, _, _, _)) - .WillByDefault( - WithArgs<3>(Invoke(this, - &TestChangeDelegate::VerifyDeletes))); - } - - void add_expected_delete(int64_t v) { expected_deletes_.insert(v); } - - MOCK_METHOD4(OnChangesApplied, - void(ModelType model_type, - int64_t model_version, - const BaseTransaction* trans, - const ImmutableChangeRecordList& changes)); - MOCK_METHOD1(OnChangesComplete, void(ModelType model_type)); - - private: - void VerifyDeletes(const ImmutableChangeRecordList& changes) { - std::set<int64_t> deleted; - for (size_t i = 0; i < changes.Get().size(); ++i) { - const ChangeRecord& change = (changes.Get())[i]; - EXPECT_EQ(ChangeRecord::ACTION_DELETE, change.action); - EXPECT_TRUE(deleted.find(change.id) == deleted.end()); - deleted.insert(change.id); - } - EXPECT_TRUE(expected_deletes_ == deleted); - } - - std::set<int64_t> expected_deletes_; -}; - -class SyncRollbackManagerTest : public testing::Test, - public SyncManager::Observer { - protected: - void SetUp() override { - CHECK(temp_dir_.CreateUniqueTempDir()); - - worker_ = new FakeModelWorker(GROUP_UI); - } - - MOCK_METHOD1(OnSyncCycleCompleted, - void(const sessions::SyncSessionSnapshot&)); - MOCK_METHOD1(OnConnectionStatusChange, void(ConnectionStatus)); - MOCK_METHOD4(OnInitializationComplete, - void(const WeakHandle<JsBackend>&, - const WeakHandle<DataTypeDebugInfoListener>&, - bool, ModelTypeSet)); - MOCK_METHOD1(OnActionableError, void(const SyncProtocolError&)); - MOCK_METHOD1(OnMigrationRequested, void(ModelTypeSet)); - MOCK_METHOD1(OnProtocolEvent, void(const ProtocolEvent&)); - - void OnConfigDone(bool success) { - EXPECT_TRUE(success); - } - - int64_t CreateEntry(UserShare* user_share, - ModelType type, - const std::string& client_tag) { - WriteTransaction trans(FROM_HERE, user_share); - WriteNode node(&trans); - EXPECT_EQ(WriteNode::INIT_SUCCESS, - node.InitUniqueByCreation(type, client_tag)); - return node.GetId(); - } - - void InitManager(SyncManager* manager, ModelTypeSet types, - TestChangeDelegate* delegate, - InternalComponentsFactory::StorageOption storage_option) { - manager_ = manager; - types_ = types; - - EXPECT_CALL(*this, OnInitializationComplete(_, _, _, _)) - .WillOnce(WithArgs<2>(Invoke(this, - &SyncRollbackManagerTest::HandleInit))); - - manager->AddObserver(this); - - base::RunLoop run_loop; - SyncManager::InitArgs args; - args.database_location = temp_dir_.path(); - args.service_url = GURL("https://example.com/"); - args.workers.push_back(worker_); - args.change_delegate = delegate; - - InternalComponentsFactory::StorageOption storage_used; - args.internal_components_factory.reset(new TestInternalComponentsFactory( - InternalComponentsFactory::Switches(), storage_option, &storage_used)); - manager->Init(&args); - EXPECT_EQ(storage_option, storage_used); - loop_.PostTask(FROM_HERE, run_loop.QuitClosure()); - run_loop.Run(); - } - - // Create and persist an entry by unique tag in DB. - void PrepopulateDb(ModelType type, const std::string& client_tag) { - SyncBackupManager backup_manager; - TestChangeDelegate delegate; - InitManager(&backup_manager, ModelTypeSet(type), &delegate, - InternalComponentsFactory::STORAGE_ON_DISK_DEFERRED); - CreateEntry(backup_manager.GetUserShare(), type, client_tag); - backup_manager.ShutdownOnSyncThread(SWITCH_MODE_SYNC); - } - - // Verify entry with |client_tag| exists in sync directory. - bool VerifyEntry(UserShare* user_share, ModelType type, - const std::string& client_tag) { - ReadTransaction trans(FROM_HERE, user_share); - ReadNode node(&trans); - return BaseNode::INIT_OK == node.InitByClientTagLookup(type, client_tag); - } - - private: - void ConfigureSyncer() { - manager_->ConfigureSyncer( - CONFIGURE_REASON_NEW_CLIENT, - types_, - ModelTypeSet(), ModelTypeSet(), ModelTypeSet(), - ModelSafeRoutingInfo(), - base::Bind(&SyncRollbackManagerTest::OnConfigDone, - base::Unretained(this), true), - base::Bind(&SyncRollbackManagerTest::OnConfigDone, - base::Unretained(this), false)); - } - - void HandleInit(bool success) { - if (success) { - loop_.PostTask(FROM_HERE, - base::Bind(&SyncRollbackManagerTest::ConfigureSyncer, - base::Unretained(this))); - } else { - manager_->ShutdownOnSyncThread(STOP_SYNC); - } - } - - base::ScopedTempDir temp_dir_; - scoped_refptr<ModelSafeWorker> worker_; - base::MessageLoop loop_; // Needed for WeakHandle - SyncManager* manager_; - ModelTypeSet types_; -}; - -bool IsRollbackDoneAction(SyncProtocolError e) { - return e.action == syncer::ROLLBACK_DONE; -} - -TEST_F(SyncRollbackManagerTest, RollbackBasic) { - PrepopulateDb(PREFERENCES, "pref1"); - - TestChangeDelegate delegate; - SyncRollbackManager rollback_manager; - InitManager(&rollback_manager, ModelTypeSet(PREFERENCES), &delegate, - InternalComponentsFactory::STORAGE_ON_DISK); - - // Simulate a new entry added during type initialization. - int64_t new_pref_id = - CreateEntry(rollback_manager.GetUserShare(), PREFERENCES, "pref2"); - - delegate.add_expected_delete(new_pref_id); - EXPECT_CALL(delegate, OnChangesApplied(_, _, _, _)) - .Times(1) - .WillOnce(DoDefault()); - EXPECT_CALL(delegate, OnChangesComplete(_)).Times(1); - EXPECT_CALL(*this, OnActionableError(Truly(IsRollbackDoneAction))).Times(1); - - ModelSafeRoutingInfo routing_info; - routing_info[PREFERENCES] = GROUP_UI; - rollback_manager.StartSyncingNormally(routing_info, base::Time()); -} - -TEST_F(SyncRollbackManagerTest, NoRollbackOfTypesNotBackedUp) { - PrepopulateDb(PREFERENCES, "pref1"); - - TestChangeDelegate delegate; - SyncRollbackManager rollback_manager; - InitManager(&rollback_manager, ModelTypeSet(PREFERENCES, APPS), &delegate, - InternalComponentsFactory::STORAGE_ON_DISK); - - // Simulate new entry added during type initialization. - int64_t new_pref_id = - CreateEntry(rollback_manager.GetUserShare(), PREFERENCES, "pref2"); - CreateEntry(rollback_manager.GetUserShare(), APPS, "app1"); - - delegate.add_expected_delete(new_pref_id); - EXPECT_CALL(delegate, OnChangesApplied(_, _, _, _)) - .Times(1) - .WillOnce(DoDefault()); - EXPECT_CALL(delegate, OnChangesComplete(_)).Times(1); - - ModelSafeRoutingInfo routing_info; - routing_info[PREFERENCES] = GROUP_UI; - rollback_manager.StartSyncingNormally(routing_info, base::Time()); - - // APP entry is still valid. - EXPECT_TRUE(VerifyEntry(rollback_manager.GetUserShare(), APPS, "app1")); -} - -TEST_F(SyncRollbackManagerTest, BackupDbNotChangedOnAbort) { - PrepopulateDb(PREFERENCES, "pref1"); - - TestChangeDelegate delegate; - scoped_ptr<SyncRollbackManager> rollback_manager( - new SyncRollbackManager); - InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate, - InternalComponentsFactory::STORAGE_ON_DISK); - - // Simulate a new entry added during type initialization. - CreateEntry(rollback_manager->GetUserShare(), PREFERENCES, "pref2"); - - // Manager was shut down before sync starts. - rollback_manager->ShutdownOnSyncThread(STOP_SYNC); - - // Verify new entry was not persisted. - rollback_manager.reset(new SyncRollbackManager); - InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate, - InternalComponentsFactory::STORAGE_ON_DISK); - EXPECT_FALSE(VerifyEntry(rollback_manager->GetUserShare(), PREFERENCES, - "pref2")); -} - -TEST_F(SyncRollbackManagerTest, OnInitializationFailure) { - // Test graceful shutdown on initialization failure. - scoped_ptr<SyncRollbackManager> rollback_manager( - new SyncRollbackManager); - InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), NULL, - InternalComponentsFactory::STORAGE_ON_DISK); -} - -} // anonymous namespace - -} // namespace syncer diff --git a/sync/internal_api/test/sync_manager_factory_for_profile_sync_test.cc b/sync/internal_api/test/sync_manager_factory_for_profile_sync_test.cc index ff72bcd..4c0689d 100644 --- a/sync/internal_api/test/sync_manager_factory_for_profile_sync_test.cc +++ b/sync/internal_api/test/sync_manager_factory_for_profile_sync_test.cc @@ -10,7 +10,7 @@ namespace syncer { SyncManagerFactoryForProfileSyncTest::SyncManagerFactoryForProfileSyncTest( base::Closure init_callback) - : SyncManagerFactory(SyncManagerFactory::NORMAL), + : SyncManagerFactory(), init_callback_(init_callback) { } @@ -20,9 +20,7 @@ scoped_ptr<syncer::SyncManager> SyncManagerFactoryForProfileSyncTest::CreateSyncManager( const std::string& name) { return scoped_ptr<syncer::SyncManager>( - new SyncManagerForProfileSyncTest( - name, - init_callback_)); + new SyncManagerForProfileSyncTest(name, init_callback_)); } } // namespace syncer diff --git a/sync/internal_api/test/test_internal_components_factory.cc b/sync/internal_api/test/test_internal_components_factory.cc index 1e26b4e..d6a72fa 100644 --- a/sync/internal_api/test/test_internal_components_factory.cc +++ b/sync/internal_api/test/test_internal_components_factory.cc @@ -5,7 +5,6 @@ #include "sync/internal_api/public/test/test_internal_components_factory.h" #include "sync/sessions/sync_session_context.h" -#include "sync/syncable/deferred_on_disk_directory_backing_store.h" #include "sync/syncable/in_memory_directory_backing_store.h" #include "sync/syncable/on_disk_directory_backing_store.h" #include "sync/syncable/invalid_directory_backing_store.h" @@ -69,10 +68,6 @@ TestInternalComponentsFactory::BuildDirectoryBackingStore( return scoped_ptr<syncable::DirectoryBackingStore>( new syncable::OnDiskDirectoryBackingStore(dir_name, backing_filepath)); - case STORAGE_ON_DISK_DEFERRED: - return scoped_ptr<syncable::DirectoryBackingStore>( - new syncable::DeferredOnDiskDirectoryBackingStore(dir_name, - backing_filepath)); case STORAGE_INVALID: return scoped_ptr<syncable::DirectoryBackingStore>( new syncable::InvalidDirectoryBackingStore()); diff --git a/sync/protocol/device_info_specifics.proto b/sync/protocol/device_info_specifics.proto index 99af88b..0103aa6 100644 --- a/sync/protocol/device_info_specifics.proto +++ b/sync/protocol/device_info_specifics.proto @@ -37,7 +37,8 @@ message DeviceInfoSpecifics { // Last time when pre-sync data on the device was saved. The device can be // restored to state back to this time. In millisecond since UNIX epoch. - optional int64 backup_timestamp = 6; + // DEPRECATED in M50. + optional int64 deprecated_backup_timestamp = 6 [deprecated=true]; // Device_id that is stable until user signs out. This device_id is used for // annotating login scoped refresh token. diff --git a/sync/protocol/proto_enum_conversions.cc b/sync/protocol/proto_enum_conversions.cc index 0c6cf73..84a5b03 100644 --- a/sync/protocol/proto_enum_conversions.cc +++ b/sync/protocol/proto_enum_conversions.cc @@ -164,7 +164,7 @@ const char* GetErrorTypeString(sync_pb::SyncEnums::ErrorType error_type) { ENUM_CASE(sync_pb::SyncEnums, TRANSIENT_ERROR); ENUM_CASE(sync_pb::SyncEnums, MIGRATION_DONE); ENUM_CASE(sync_pb::SyncEnums, DISABLED_BY_ADMIN); - ENUM_CASE(sync_pb::SyncEnums, USER_ROLLBACK); + ENUM_CASE(sync_pb::SyncEnums, DEPRECATED_USER_ROLLBACK); ENUM_CASE(sync_pb::SyncEnums, PARTIAL_FAILURE); ENUM_CASE(sync_pb::SyncEnums, CLIENT_DATA_OBSOLETE); ENUM_CASE(sync_pb::SyncEnums, UNKNOWN); diff --git a/sync/protocol/proto_value_conversions.cc b/sync/protocol/proto_value_conversions.cc index 4fee4ee..327723c 100644 --- a/sync/protocol/proto_value_conversions.cc +++ b/sync/protocol/proto_value_conversions.cc @@ -80,10 +80,6 @@ scoped_ptr<base::ListValue> MakeRepeatedValue(const F& fields, return list; } -base::string16 TimestampToString(int64_t tm) { - return base::TimeFormatShortDateAndTime(syncer::ProtoTimeToTime(tm)); -} - } // namespace // Helper macros to reduce the amount of boilerplate. @@ -412,7 +408,6 @@ scoped_ptr<base::DictionaryValue> DeviceInfoSpecificsToValue( SET_ENUM(device_type, GetDeviceTypeString); SET_STR(sync_user_agent); SET_STR(chrome_version); - SET_TIME_STR(backup_timestamp); SET_STR(signin_scoped_device_id); return value; } diff --git a/sync/protocol/sync_enums.proto b/sync/protocol/sync_enums.proto index bdfb45e..0e18575 100644 --- a/sync/protocol/sync_enums.proto +++ b/sync/protocol/sync_enums.proto @@ -96,7 +96,7 @@ message SyncEnums { // a server. DISABLED_BY_ADMIN = 10; // An administrator disabled sync for this // domain. - USER_ROLLBACK = 11; // Client told to stop syncing and roll back. + DEPRECATED_USER_ROLLBACK = 11; // Deprecated in M50. PARTIAL_FAILURE = 12; // Return when client want to update several // data types, but some of them failed(e.g. // throttled). diff --git a/sync/protocol/sync_protocol_error.cc b/sync/protocol/sync_protocol_error.cc index 992f6ac..c82d32e 100644 --- a/sync/protocol/sync_protocol_error.cc +++ b/sync/protocol/sync_protocol_error.cc @@ -22,7 +22,6 @@ const char* GetSyncErrorTypeString(SyncProtocolErrorType type) { ENUM_CASE(MIGRATION_DONE); ENUM_CASE(INVALID_CREDENTIAL); ENUM_CASE(DISABLED_BY_ADMIN); - ENUM_CASE(USER_ROLLBACK); ENUM_CASE(PARTIAL_FAILURE); ENUM_CASE(CLIENT_DATA_OBSOLETE); ENUM_CASE(UNKNOWN_ERROR); @@ -39,8 +38,6 @@ const char* GetClientActionString(ClientAction action) { ENUM_CASE(STOP_AND_RESTART_SYNC); ENUM_CASE(DISABLE_SYNC_ON_CLIENT); ENUM_CASE(STOP_SYNC_FOR_DISABLED_ACCOUNT); - ENUM_CASE(DISABLE_SYNC_AND_ROLLBACK); - ENUM_CASE(ROLLBACK_DONE); ENUM_CASE(RESET_LOCAL_SYNC_DATA); ENUM_CASE(UNKNOWN_ACTION); } diff --git a/sync/protocol/sync_protocol_error.h b/sync/protocol/sync_protocol_error.h index 38c5f18..7ba8d6c 100644 --- a/sync/protocol/sync_protocol_error.h +++ b/sync/protocol/sync_protocol_error.h @@ -38,9 +38,6 @@ enum SyncProtocolErrorType { // An administrator disabled sync for this domain. DISABLED_BY_ADMIN, - // Client told to stop syncing this device and roll back local data. - USER_ROLLBACK, - // Some of servers are busy. Try later with busy servers. PARTIAL_FAILURE, @@ -72,13 +69,6 @@ enum ClientAction { // settings page that account is disabled. STOP_SYNC_FOR_DISABLED_ACCOUNT, - // Disable sync and roll back local model to pre-sync state. - DISABLE_SYNC_AND_ROLLBACK, - - // Generated by SyncRollbackManager to notify ProfileSyncService that - // rollback is finished. - ROLLBACK_DONE, - // Generated in response to CLIENT_DATA_OBSOLETE error. ProfileSyncService // should stop sync engine, delete directory and restart sync engine. RESET_LOCAL_SYNC_DATA, diff --git a/sync/sync.gyp b/sync/sync.gyp index 9981376..f5303cb 100644 --- a/sync/sync.gyp +++ b/sync/sync.gyp @@ -350,8 +350,6 @@ 'internal_api/read_node.cc', 'internal_api/read_transaction.cc', 'internal_api/shared_model_type_processor.cc', - 'internal_api/sync_backup_manager.cc', - 'internal_api/sync_backup_manager.h', 'internal_api/sync_context.cc', 'internal_api/sync_context_proxy.cc', 'internal_api/sync_context_proxy_impl.cc', @@ -362,10 +360,6 @@ 'internal_api/sync_manager_factory.cc', 'internal_api/sync_manager_impl.cc', 'internal_api/sync_manager_impl.h', - 'internal_api/sync_rollback_manager.cc', - 'internal_api/sync_rollback_manager.h', - 'internal_api/sync_rollback_manager_base.cc', - 'internal_api/sync_rollback_manager_base.h', 'internal_api/syncapi_internal.cc', 'internal_api/syncapi_internal.h', 'internal_api/syncapi_server_connection_manager.cc', @@ -401,8 +395,6 @@ 'sessions/sync_session.h', 'sessions/sync_session_context.cc', 'sessions/sync_session_context.h', - 'syncable/deferred_on_disk_directory_backing_store.cc', - 'syncable/deferred_on_disk_directory_backing_store.h', 'syncable/dir_open_result.h', 'syncable/directory.cc', 'syncable/directory.h', diff --git a/sync/sync_tests.gypi b/sync/sync_tests.gypi index 122641e..bacf837 100644 --- a/sync/sync_tests.gypi +++ b/sync/sync_tests.gypi @@ -321,12 +321,9 @@ 'internal_api/public/util/proto_value_ptr_unittest.cc', 'internal_api/public/util/weak_handle_unittest.cc', 'internal_api/shared_model_type_processor_unittest.cc', - 'internal_api/sync_backup_manager_unittest.cc', 'internal_api/sync_context_proxy_impl_unittest.cc', 'internal_api/sync_encryption_handler_impl_unittest.cc', 'internal_api/sync_manager_impl_unittest.cc', - 'internal_api/sync_rollback_manager_base_unittest.cc', - 'internal_api/sync_rollback_manager_unittest.cc', 'internal_api/syncapi_server_connection_manager_unittest.cc', 'js/js_event_details_unittest.cc', 'js/sync_js_controller_unittest.cc', @@ -335,7 +332,6 @@ 'sessions/model_type_registry_unittest.cc', 'sessions/nudge_tracker_unittest.cc', 'sessions/status_controller_unittest.cc', - 'syncable/deferred_on_disk_directory_backing_store_unittest.cc', 'syncable/directory_backing_store_unittest.cc', 'syncable/directory_unittest.cc', 'syncable/directory_unittest.h', diff --git a/sync/syncable/deferred_on_disk_directory_backing_store.cc b/sync/syncable/deferred_on_disk_directory_backing_store.cc deleted file mode 100644 index 5e960d2..0000000 --- a/sync/syncable/deferred_on_disk_directory_backing_store.cc +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "sync/syncable/deferred_on_disk_directory_backing_store.h" - -#include "base/logging.h" -#include "base/metrics/histogram.h" -#include "base/stl_util.h" -#include "sync/syncable/syncable-inl.h" - -namespace syncer { -namespace syncable { - -DeferredOnDiskDirectoryBackingStore::DeferredOnDiskDirectoryBackingStore( - const std::string& dir_name, - const base::FilePath& backing_file_path) - : OnDiskDirectoryBackingStore(dir_name, backing_file_path), - created_on_disk_(false) { -} - -DeferredOnDiskDirectoryBackingStore::~DeferredOnDiskDirectoryBackingStore() {} - -bool DeferredOnDiskDirectoryBackingStore::SaveChanges( - const Directory::SaveChangesSnapshot& snapshot) { - DCHECK(CalledOnValidThread()); - - // Back out early if there is nothing to save. - if (!snapshot.HasUnsavedMetahandleChanges()) { - return true; - } - if (!created_on_disk_ && !CreateOnDisk()) - return false; - return OnDiskDirectoryBackingStore::SaveChanges(snapshot); -} - -bool DeferredOnDiskDirectoryBackingStore::CreateOnDisk() { - DCHECK(CalledOnValidThread()); - DCHECK(!created_on_disk_); - ResetAndCreateConnection(); - if (!base::DeleteFile(backing_file_path(), false)) - return false; - if (!Open(backing_file_path()) || !InitializeTables()) - return false; - created_on_disk_ = true; - return true; -} - -DirOpenResult DeferredOnDiskDirectoryBackingStore::Load( - Directory::MetahandlesMap* handles_map, - JournalIndex* delete_journals, - MetahandleSet* metahandles_to_purge, - Directory::KernelLoadInfo* kernel_load_info) { - DCHECK(CalledOnValidThread()); - // Open an in-memory database at first to create initial sync data needed by - // Directory. - CHECK(!IsOpen()); - if (!OpenInMemory()) - return FAILED_OPEN_DATABASE; - - if (!InitializeTables()) - return FAILED_OPEN_DATABASE; - if (!LoadEntries(handles_map, metahandles_to_purge)) - return FAILED_DATABASE_CORRUPT; - if (!LoadInfo(kernel_load_info)) - return FAILED_DATABASE_CORRUPT; - - return OPENED; -} - -} // namespace syncable -} // namespace syncer diff --git a/sync/syncable/deferred_on_disk_directory_backing_store.h b/sync/syncable/deferred_on_disk_directory_backing_store.h deleted file mode 100644 index 0531737..0000000 --- a/sync/syncable/deferred_on_disk_directory_backing_store.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef SYNC_SYNCABLE_DEFERRED_ON_DISK_DIRECTORY_BACKING_STORE_H_ -#define SYNC_SYNCABLE_DEFERRED_ON_DISK_DIRECTORY_BACKING_STORE_H_ - -#include <string> - -#include "base/files/file_path.h" -#include "base/macros.h" -#include "sync/base/sync_export.h" -#include "sync/syncable/on_disk_directory_backing_store.h" - -namespace syncer { -namespace syncable { - -// Store used for backing up user's data before first sync. It creates an -// in-memory store first and switch to on-disk store if SaveChanges() is -// called, which only happens when SyncBackupManager is shut down and a -// syncing backend is to be created. Thus we guarantee that user data is not -// persisted until user is actually going to sync. -class SYNC_EXPORT DeferredOnDiskDirectoryBackingStore - : public OnDiskDirectoryBackingStore { - public: - DeferredOnDiskDirectoryBackingStore(const std::string& dir_name, - const base::FilePath& backing_file_path); - ~DeferredOnDiskDirectoryBackingStore() override; - DirOpenResult Load(Directory::MetahandlesMap* handles_map, - JournalIndex* delete_journals, - MetahandleSet* metahandles_to_purge, - Directory::KernelLoadInfo* kernel_load_info) override; - bool SaveChanges(const Directory::SaveChangesSnapshot& snapshot) override; - - private: - // Create an on-disk directory backing store. Returns true on success, false - // on error. - bool CreateOnDisk(); - - // Whether an on-disk directory backing store has been created. - bool created_on_disk_; - - DISALLOW_COPY_AND_ASSIGN(DeferredOnDiskDirectoryBackingStore); -}; - -} // namespace syncable -} // namespace syncer - -#endif // SYNC_SYNCABLE_DEFERRED_ON_DISK_DIRECTORY_BACKING_STORE_H_ diff --git a/sync/syncable/deferred_on_disk_directory_backing_store_unittest.cc b/sync/syncable/deferred_on_disk_directory_backing_store_unittest.cc deleted file mode 100644 index a62060a..0000000 --- a/sync/syncable/deferred_on_disk_directory_backing_store_unittest.cc +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/files/scoped_temp_dir.h" -#include "base/message_loop/message_loop.h" -#include "base/stl_util.h" -#include "sync/syncable/deferred_on_disk_directory_backing_store.h" -#include "sync/syncable/directory.h" -#include "sync/syncable/entry_kernel.h" -#include "sync/syncable/on_disk_directory_backing_store.h" -#include "sync/syncable/syncable_delete_journal.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace syncer { -namespace syncable { -namespace { - -static const base::FilePath::CharType kSyncDataFolderName[] = - FILE_PATH_LITERAL("Sync Data"); - -class DeferredOnDiskDirectoryBackingStoreTest : public testing::Test { - protected: - void SetUp() override { - CHECK(temp_dir_.CreateUniqueTempDir()); - db_path_ = temp_dir_.path().Append(kSyncDataFolderName); - } - - void TearDown() override { STLDeleteValues(&handles_map_); } - - base::MessageLoop message_loop_; - base::ScopedTempDir temp_dir_; - base::FilePath db_path_; - Directory::MetahandlesMap handles_map_; - JournalIndex delete_journals_; - MetahandleSet metahandles_to_purge_; - Directory::KernelLoadInfo kernel_load_info_; -}; - -// Test initialization of root entry when calling Load(). -TEST_F(DeferredOnDiskDirectoryBackingStoreTest, Load) { - DeferredOnDiskDirectoryBackingStore store("test", db_path_); - EXPECT_EQ(OPENED, store.Load(&handles_map_, &delete_journals_, - &metahandles_to_purge_, &kernel_load_info_)); - EXPECT_TRUE(delete_journals_.empty()); - EXPECT_TRUE(metahandles_to_purge_.empty()); - ASSERT_EQ(1u, handles_map_.size()); // root node - ASSERT_TRUE(handles_map_.count(1)); - EntryKernel* root = handles_map_[1]; - EXPECT_TRUE(root->ref(ID).IsRoot()); - EXPECT_EQ(1, root->ref(META_HANDLE)); - EXPECT_TRUE(root->ref(IS_DIR)); -} - -// Test on-disk DB is not created if SaveChanges() is not called. -TEST_F(DeferredOnDiskDirectoryBackingStoreTest, - DontPersistIfSavingChangesNotCalled) { - { - // Open and close. - DeferredOnDiskDirectoryBackingStore store("test", db_path_); - EXPECT_EQ(OPENED, store.Load(&handles_map_, &delete_journals_, - &metahandles_to_purge_, &kernel_load_info_)); - } - - EXPECT_FALSE(base::PathExists(db_path_)); -} - -// Test on-disk DB is not created when there are no changes. -TEST_F(DeferredOnDiskDirectoryBackingStoreTest, - DontPersistWhenSavingNoChanges) { - { - // Open and close. - DeferredOnDiskDirectoryBackingStore store("test", db_path_); - EXPECT_EQ(OPENED, store.Load(&handles_map_, &delete_journals_, - &metahandles_to_purge_, &kernel_load_info_)); - - Directory::SaveChangesSnapshot snapshot; - store.SaveChanges(snapshot); - } - - EXPECT_FALSE(base::PathExists(db_path_)); -} - -// Test changes are persisted to disk when SaveChanges() is called. -TEST_F(DeferredOnDiskDirectoryBackingStoreTest, PersistWhenSavingValidChanges) { - { - // Open and close. - DeferredOnDiskDirectoryBackingStore store("test", db_path_); - EXPECT_EQ(OPENED, store.Load(&handles_map_, &delete_journals_, - &metahandles_to_purge_, &kernel_load_info_)); - - Directory::SaveChangesSnapshot snapshot; - EntryKernel* entry = new EntryKernel(); - entry->put(ID, Id::CreateFromClientString("test_entry")); - entry->put(META_HANDLE, 2); - entry->mark_dirty(NULL); - snapshot.dirty_metas.insert(entry); - store.SaveChanges(snapshot); - } - - STLDeleteValues(&handles_map_); - - ASSERT_TRUE(base::PathExists(db_path_)); - OnDiskDirectoryBackingStore read_store("test", db_path_); - EXPECT_EQ(OPENED, - read_store.Load(&handles_map_, &delete_journals_, - &metahandles_to_purge_, &kernel_load_info_)); - ASSERT_EQ(2u, handles_map_.size()); - ASSERT_TRUE(handles_map_.count(1)); // root node - ASSERT_TRUE(handles_map_.count(2)); - EntryKernel* entry = handles_map_[2]; - EXPECT_EQ(Id::CreateFromClientString("test_entry"), entry->ref(ID)); -} - -} // namespace -} // namespace syncable -} // namespace syncer diff --git a/sync/tools/sync_client.cc b/sync/tools/sync_client.cc index deba666..36c7561 100644 --- a/sync/tools/sync_client.cc +++ b/sync/tools/sync_client.cc @@ -396,7 +396,7 @@ int SyncClientMain(int argc, char* argv[]) { workers.push_back(passive_model_safe_worker); // Set up sync manager. - SyncManagerFactory sync_manager_factory(SyncManagerFactory::NORMAL); + SyncManagerFactory sync_manager_factory; scoped_ptr<SyncManager> sync_manager = sync_manager_factory.CreateSyncManager("sync_client manager"); LoggingJsEventHandler js_event_handler; |