Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: sync/notifier/invalidation_state_tracker.h

Issue 11415049: Implement features needed for local ack handling in InvalidationStateTracker. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ...... Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sync/notifier/fake_invalidation_state_tracker.cc ('k') | sync/notifier/invalidation_state_tracker.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/notifier/invalidation_state_tracker.h
diff --git a/sync/notifier/invalidation_state_tracker.h b/sync/notifier/invalidation_state_tracker.h
index 259ac83fb36ee41b8fd59a1db940655369e41ca3..2f268956bad3c480a18b1b03dcad8587f6e25b92 100644
--- a/sync/notifier/invalidation_state_tracker.h
+++ b/sync/notifier/invalidation_state_tracker.h
@@ -2,22 +2,40 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
-// An InvalidationVersionTracker is an interface that handles getting
-// and setting (persisting) max invalidation versions.
+// An InvalidationStateTracker is an interface that handles persisting state
+// needed for invalidations. Currently, it is responsible for managing the
+// following information:
+// - Max version seen from the invalidation server to help dedupe invalidations.
+// - Bootstrap data for the invalidation client.
+// - Payloads and locally generated ack handles, to support local acking.
#ifndef SYNC_NOTIFIER_INVALIDATION_STATE_TRACKER_H_
#define SYNC_NOTIFIER_INVALIDATION_STATE_TRACKER_H_
#include <map>
+#include <string>
#include "base/basictypes.h"
+#include "base/callback_forward.h"
+#include "base/memory/ref_counted.h"
#include "google/cacheinvalidation/include/types.h"
+#include "sync/internal_api/public/base/invalidation.h"
#include "sync/notifier/invalidation_util.h"
+namespace base {
+class TaskRunner;
+} // namespace base
+
namespace syncer {
struct InvalidationState {
+ InvalidationState();
+ ~InvalidationState();
+
int64 version;
+ std::string payload;
+ AckHandle expected;
+ AckHandle current;
};
// TODO(dcheng): Remove this in favor of adding an Equals() method.
@@ -25,6 +43,8 @@ bool operator==(const InvalidationState& lhs, const InvalidationState& rhs);
typedef std::map<invalidation::ObjectId, InvalidationState, ObjectIdLessThan>
InvalidationStateMap;
+typedef std::map<invalidation::ObjectId, AckHandle, ObjectIdLessThan>
+ AckHandleMap;
class InvalidationStateTracker {
public:
@@ -34,8 +54,9 @@ class InvalidationStateTracker {
// |max_version| should be strictly greater than any existing max
// version for |model_type|.
- virtual void SetMaxVersion(const invalidation::ObjectId& id,
- int64 max_version) = 0;
+ virtual void SetMaxVersionAndPayload(const invalidation::ObjectId& id,
+ int64 max_version,
+ const std::string& payload) = 0;
// Removes all state tracked for |ids|.
virtual void Forget(const ObjectIdSet& ids) = 0;
@@ -46,6 +67,21 @@ class InvalidationStateTracker {
virtual void SetBootstrapData(const std::string& data) = 0;
virtual std::string GetBootstrapData() const = 0;
+ // Used for generating our own local ack handles. Generates a new ack handle
+ // for each object id in |ids|. The result is returned via |callback| posted
+ // to |task_runner|.
+ virtual void GenerateAckHandles(
+ const ObjectIdSet& ids,
+ const scoped_refptr<base::TaskRunner>& task_runner,
+ base::Callback<void(const AckHandleMap&)> callback) = 0;
+
+ // Records an acknowledgement for |id|. Note that no attempt at ordering is
+ // made. Acknowledge() only records the last ack_handle it received, even if
+ // the last ack_handle it received was generated before the value currently
+ // recorded.
+ virtual void Acknowledge(const invalidation::ObjectId& id,
+ const AckHandle& ack_handle) = 0;
+
protected:
virtual ~InvalidationStateTracker() {}
};
« no previous file with comments | « sync/notifier/fake_invalidation_state_tracker.cc ('k') | sync/notifier/invalidation_state_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698