diff options
author | rlarocque@chromium.org <rlarocque@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-16 00:03:47 +0000 |
---|---|---|
committer | rlarocque@chromium.org <rlarocque@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-16 00:03:47 +0000 |
commit | 1ab2d7f5a751ad863e4e5eba7ecd7020559ff74a (patch) | |
tree | a80c59fe6bdd66aa1a576ca17d07d8a1a1040997 /sync/engine/commit.h | |
parent | 268d4089eb9ebc9cdd997a3998228fd848da8fc5 (diff) | |
download | chromium_src-1ab2d7f5a751ad863e4e5eba7ecd7020559ff74a.zip chromium_src-1ab2d7f5a751ad863e4e5eba7ecd7020559ff74a.tar.gz chromium_src-1ab2d7f5a751ad863e4e5eba7ecd7020559ff74a.tar.bz2 |
sync: Implement per-type commit interface
Move most commit logic into per-type instances of
SyncDirectoryCommitContributor and SyncDirectoryCommitContribution
classes. Make GetCommitIdsCommand and ProcessCommitResponseCommand
into container classes with only static methods. Remove
OrderedCommitSet.
The point of these changes is to make way for different kinds of entity
committers. The SyncDirectoryCommitContributor and
SyncDirectoryCommitContribution will eventually refactored into
implementations of more generic "commit contributor" and "commit
contribution" interfaces.
This commit leaves us with some structures that might look a bit odd to
someone unfamiliar with the history of this code. In particular, many
of the old SyncerCommands look out of place. We plan to refactor them
in future CLs. For now, it's more important to make sure this CL has an
easy to read diff.
BUG=278484
Review URL: https://codereview.chromium.org/25638003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@228810 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync/engine/commit.h')
-rw-r--r-- | sync/engine/commit.h | 73 |
1 files changed, 58 insertions, 15 deletions
diff --git a/sync/engine/commit.h b/sync/engine/commit.h index 168d950..4750971 100644 --- a/sync/engine/commit.h +++ b/sync/engine/commit.h @@ -5,33 +5,76 @@ #ifndef SYNC_ENGINE_COMMIT_H_ #define SYNC_ENGINE_COMMIT_H_ +#include <map> + +#include "base/stl_util.h" +#include "sync/base/sync_export.h" +#include "sync/engine/sync_directory_commit_contribution.h" +#include "sync/engine/sync_directory_commit_contributor.h" #include "sync/internal_api/public/base/model_type.h" +#include "sync/internal_api/public/engine/model_safe_worker.h" #include "sync/internal_api/public/util/syncer_error.h" +#include "sync/protocol/sync.pb.h" +#include "sync/util/extensions_activity.h" namespace syncer { namespace sessions { +class StatusController; class SyncSession; } class Syncer; -// This function will commit batches of unsynced items to the server until the -// number of unsynced and ready to commit items reaches zero or an error is -// encountered. A request to exit early will be treated as an error and will -// abort any blocking operations. -// -// The Syncer parameter is provided only for access to its ExitRequested() -// method. This is technically unnecessary since an early exit request should -// be detected as we attempt to contact the sync server. +// This class wraps the actions related to building and executing a single +// commit operation. // -// The SyncSession parameter contains pointers to various bits of state, -// including the syncable::Directory that contains all sync items and the -// ServerConnectionManager used to contact the server. -SyncerError BuildAndPostCommits( - ModelTypeSet request_types, - Syncer* syncer, - sessions::SyncSession* session); +// This class' most important responsibility is to manage the ContributionsMap. +// This class serves as a container for those objects. Although it would have +// been acceptable to let this class be a dumb container object, it turns out +// that there was no other convenient place to put the Init() and +// PostAndProcessCommitResponse() functions. So they ended up here. +class SYNC_EXPORT_PRIVATE Commit { + public: + Commit( + const std::map<ModelType, SyncDirectoryCommitContribution*>& + contributions, + const sync_pb::ClientToServerMessage& message, + ExtensionsActivity::Records extensions_activity_buffer); + + // This destructor will DCHECK if CleanUp() has not been called. + ~Commit(); + + static Commit* Init( + ModelTypeSet requested_types, + size_t max_entries, + const std::string& account_name, + const std::string& cache_guid, + CommitContributorMap* contributor_map, + ExtensionsActivity* extensions_activity); + + SyncerError PostAndProcessResponse( + sessions::SyncSession* session, + sessions::StatusController* status, + ExtensionsActivity* extensions_activity); + + // Cleans up state associated with this commit. Must be called before the + // destructor. + void CleanUp(); + + private: + typedef std::map<ModelType, SyncDirectoryCommitContribution*> ContributionMap; + + ContributionMap contributions_; + STLValueDeleter<ContributionMap> deleter_; + + sync_pb::ClientToServerMessage message_; + sync_pb::ClientToServerResponse response_; + ExtensionsActivity::Records extensions_activity_buffer_; + + // Debug only flag used to indicate if it's safe to destruct the object. + bool cleaned_up_; +}; } // namespace syncer |