Index: chrome/browser/sync/engine/sync_cycle_state.h |
=================================================================== |
--- chrome/browser/sync/engine/sync_cycle_state.h (revision 0) |
+++ chrome/browser/sync/engine/sync_cycle_state.h (revision 0) |
@@ -0,0 +1,253 @@ |
+// Copyright (c) 2006-2009 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. |
+ |
+// |
+// The sync process consists of a sequence of sync cycles, each of which |
+// (hopefully) moves the client into closer synchronization with the server. |
+// This class holds state that is pertinent to a single sync cycle. |
+// |
+// THIS CLASS PROVIDES NO SYNCHRONIZATION GUARANTEES. |
+ |
+#ifndef CHROME_BROWSER_SYNC_ENGINE_SYNC_CYCLE_STATE_H_ |
+#define CHROME_BROWSER_SYNC_ENGINE_SYNC_CYCLE_STATE_H_ |
+ |
+#include <utility> |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "chrome/browser/sync/engine/syncer_types.h" |
+#include "chrome/browser/sync/engine/syncproto.h" |
+#include "chrome/browser/sync/util/event_sys.h" |
+#include "chrome/browser/sync/util/pthread_helpers.h" |
+ |
+namespace syncable { |
+class WriteTransaction; |
+class Id; |
+} // namespace syncable |
+ |
+namespace browser_sync { |
+ |
+typedef std::pair<VerifyResult, sync_pb::SyncEntity> VerifiedUpdate; |
+typedef std::pair<UpdateAttemptResponse, syncable::Id> AppliedUpdate; |
+ |
+// This is the type declaration for the eventsys channel that the syncer |
+// uses to send events to other system components. |
+struct SyncerEvent; |
+ |
+// SyncCycleState holds the entire state of a single sync cycle; |
+// GetUpdates, Commit, and Conflict Resolution. After said cycle, the |
+// State may contain items that were unable to be processed because of |
+// errors. |
+class SyncCycleState { |
+ public: |
+ SyncCycleState() |
+ : write_transaction_(NULL), |
+ conflict_sets_built_(false), |
+ conflicts_resolved_(false), |
+ items_committed_(false), |
+ over_quota_(false), |
+ dirty_(true), |
+ timestamp_dirty_(false) {} |
+ |
+ void set_update_response(const ClientToServerResponse& update_response) { |
+ update_response_.CopyFrom(update_response); |
+ } |
+ |
+ const ClientToServerResponse& update_response() const { |
+ return update_response_; |
+ } |
+ |
+ void set_commit_response(const ClientToServerResponse& commit_response) { |
+ commit_response_.CopyFrom(commit_response); |
+ } |
+ |
+ const ClientToServerResponse& commit_response() const { |
+ return commit_response_; |
+ } |
+ |
+ void AddVerifyResult(const VerifyResult& verify_result, |
+ const sync_pb::SyncEntity& entity) { |
+ verified_updates_.push_back(std::make_pair(verify_result, entity)); |
+ } |
+ |
+ bool HasVerifiedUpdates() const { |
+ return !verified_updates_.empty(); |
+ } |
+ |
+ // Log a successful or failing update attempt. |
+ void AddAppliedUpdate(const UpdateAttemptResponse& response, |
+ const syncable::Id& id) { |
+ applied_updates_.push_back(std::make_pair(response, id)); |
+ } |
+ |
+ bool HasAppliedUpdates() const { |
+ return !applied_updates_.empty(); |
+ } |
+ |
+ std::vector<AppliedUpdate>::iterator AppliedUpdatesBegin() { |
+ return applied_updates_.begin(); |
+ } |
+ |
+ std::vector<VerifiedUpdate>::iterator VerifiedUpdatesBegin() { |
+ return verified_updates_.begin(); |
+ } |
+ |
+ std::vector<AppliedUpdate>::iterator AppliedUpdatesEnd() { |
+ return applied_updates_.end(); |
+ } |
+ |
+ std::vector<VerifiedUpdate>::iterator VerifiedUpdatesEnd() { |
+ return verified_updates_.end(); |
+ } |
+ |
+ // Returns the number of update application attempts. This includes |
+ // both failures and successes. |
+ int AppliedUpdatesSize() const { |
+ return applied_updates_.size(); |
+ } |
+ |
+ // Count the number of successful update applications that have happend |
+ // this cycle. Note that if an item is successfully applied twice, |
+ // it will be double counted here. |
+ int SuccessfullyAppliedUpdateCount() const { |
+ int count = 0; |
+ for (std::vector<AppliedUpdate>::const_iterator it = |
+ applied_updates_.begin(); |
+ it != applied_updates_.end(); |
+ ++it) { |
+ if (it->first == SUCCESS) |
+ count++; |
+ } |
+ return count; |
+ } |
+ |
+ int VerifiedUpdatesSize() const { |
+ return verified_updates_.size(); |
+ } |
+ |
+ const std::vector<int64>& unsynced_handles() const { |
+ return unsynced_handles_; |
+ } |
+ |
+ void set_unsynced_handles(const std::vector<int64>& unsynced_handles) { |
+ UpdateDirty(unsynced_handles != unsynced_handles_); |
+ unsynced_handles_ = unsynced_handles; |
+ } |
+ |
+ int64 unsynced_count() const { return unsynced_handles_.size(); } |
+ |
+ const std::vector<syncable::Id>& commit_ids() const { return commit_ids_; } |
+ |
+ void set_commit_ids(const std::vector<syncable::Id>& commit_ids) { |
+ commit_ids_ = commit_ids; |
+ } |
+ |
+ bool commit_ids_empty() const { return commit_ids_.empty(); } |
+ |
+ // The write transaction must be deleted by the caller of this function. |
+ void set_write_transaction(syncable::WriteTransaction* write_transaction) { |
+ DCHECK(!write_transaction_) << "Forgot to clear the write transaction."; |
+ write_transaction_ = write_transaction; |
+ } |
+ |
+ syncable::WriteTransaction* write_transaction() const { |
+ return write_transaction_; |
+ } |
+ |
+ bool has_open_write_transaction() { return write_transaction_ != NULL; } |
+ |
+ // sets the write transaction to null, but doesn't free the memory. |
+ void ClearWriteTransaction() { write_transaction_ = NULL; } |
+ |
+ ClientToServerMessage* commit_message() { return &commit_message_; } |
+ |
+ void set_commit_message(ClientToServerMessage message) { |
+ commit_message_ = message; |
+ } |
+ |
+ void set_conflict_sets_built(bool b) { |
+ conflict_sets_built_ = b; |
+ } |
+ |
+ bool conflict_sets_built() const { |
+ return conflict_sets_built_; |
+ } |
+ |
+ void set_conflicts_resolved(bool b) { |
+ conflicts_resolved_ = b; |
+ } |
+ |
+ bool conflicts_resolved() const { |
+ return conflicts_resolved_; |
+ } |
+ |
+ void set_over_quota(bool b) { |
+ UpdateDirty(b != over_quota_); |
+ over_quota_ = b; |
+ } |
+ |
+ bool over_quota() const { |
+ return over_quota_; |
+ } |
+ |
+ void set_items_committed(bool b) { items_committed_ = b; } |
+ |
+ void set_item_committed() { items_committed_ |= true; } |
+ |
+ bool items_committed() const { return items_committed_; } |
+ |
+ |
+ // Returns true if this object has been modified since last SetClean() call |
+ bool IsDirty() const { return dirty_; } |
+ |
+ // Call to tell this status object that its new state has been seen |
+ void SetClean() { dirty_ = false; } |
+ |
+ // Indicate that we've made a change to directory timestamp. |
+ void set_timestamp_dirty() { |
+ timestamp_dirty_ = true; |
+ } |
+ |
+ bool is_timestamp_dirty() const { |
+ return timestamp_dirty_; |
+ } |
+ |
+ |
idana
2009/09/10 05:44:37
Extra blank line.
|
+ private: |
+ void UpdateDirty(bool new_info) { dirty_ |= new_info; } |
+ |
+ // download updates supplies: |
+ ClientToServerResponse update_response_; |
+ ClientToServerResponse commit_response_; |
+ ClientToServerMessage commit_message_; |
+ |
+ syncable::WriteTransaction* write_transaction_; |
+ std::vector<int64> unsynced_handles_; |
+ std::vector<syncable::Id> commit_ids_; |
+ |
+ // At a certain point during the sync process we'll want to build the |
+ // conflict sets. This variable tracks whether or not that has happened. |
+ bool conflict_sets_built_; |
+ bool conflicts_resolved_; |
+ bool items_committed_; |
+ bool over_quota_; |
+ |
+ // If we've set the timestamp to a new value during this cycle. |
+ bool timestamp_dirty_; |
+ |
+ bool dirty_; |
+ |
+ // some container for updates that failed verification |
+ std::vector<VerifiedUpdate> verified_updates_; |
+ |
+ // Stores the result of the various ApplyUpdate attempts we've made. |
+ // May contain duplicate entries. |
+ std::vector<AppliedUpdate> applied_updates_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SyncCycleState); |
+}; |
+ |
+} // namespace browser_sync |
+ |
+#endif // CHROME_BROWSER_SYNC_ENGINE_SYNC_CYCLE_STATE_H_ |
Property changes on: chrome\browser\sync\engine\sync_cycle_state.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |