summaryrefslogtreecommitdiffstats
path: root/sync
diff options
context:
space:
mode:
authorakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-22 03:31:56 +0000
committerakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-22 03:31:56 +0000
commitefa23183c87db1c45af7ab89e861a7e043b28f77 (patch)
treee2644d5f2afc05e2dad65fe75612ef34a67bde57 /sync
parent6197eb93e1607eb4e2c68ebe50e677ae7316946b (diff)
downloadchromium_src-efa23183c87db1c45af7ab89e861a7e043b28f77.zip
chromium_src-efa23183c87db1c45af7ab89e861a7e043b28f77.tar.gz
chromium_src-efa23183c87db1c45af7ab89e861a7e043b28f77.tar.bz2
[Sync] Add ordinal_in_parent to SyncEntity/CommitResponse protobuf
This will replace position_in_parent, which has only 64 bytes of resolution. Add detailed comments explaining how ordinal_in_parent should be set. BUG=112201 TEST= Review URL: http://codereview.chromium.org/9369005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128159 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync')
-rw-r--r--sync/protocol/sync.proto51
1 files changed, 45 insertions, 6 deletions
diff --git a/sync/protocol/sync.proto b/sync/protocol/sync.proto
index d1aea72..6191000 100644
--- a/sync/protocol/sync.proto
+++ b/sync/protocol/sync.proto
@@ -215,6 +215,24 @@ message SyncEntity {
// |insert_after_item_id|. Clients should set both values so that they
// result in a consistent ordering regardless of which choice the server
// makes.
+ //
+ // This is deprecated: clients should set |ordinal_in_parent|
+ // instead. But until the production servers fully support
+ // |ordinal_in_parent|, clients should set all three position fields
+ // (|position_in_parent|, |insert_after_item_id|, and
+ // |ordinal_in_parent| in commits) and continue to respect any
+ // |position_in_parent| values returned by CommitResponses.
+ //
+ // Similarly, when |ordinal_in_parent| is absent in a GetUpdates and
+ // |position_in_parent| is present, clients should continue to honor
+ // the |position_in_parent| value (after transforming it as
+ // described below).
+ //
+ // When both |ordinal_in_parent| and |position_in_parent| are set,
+ // the first 8 bytes of |ordinal_in_parent| must be equal to the
+ // bytes of flip-sign-bit(|position_in_parent|) in big-endian order
+ // (MSB first), and if those bytes are all zero, a 9th byte equal to
+ // 128 must be added.
optional int64 position_in_parent = 15;
// Contains the ID of the element (under the same parent) after which this
@@ -225,11 +243,7 @@ message SyncEntity {
// communicate position.
//
// Present only in CommitMessage.
- //
- // This is being deprecated: clients should now explicitly set
- // an absolute |position_in_parent| value at commit time. In the
- // interim, clients should supply both values and continue to honor
- // the |position_in_parent| value returned in the CommitResponse.
+ // This is deprecated: see comment for |position_in_parent| above.
optional string insert_after_item_id = 16;
// Arbitrary key/value pairs associated with this item.
@@ -290,6 +304,31 @@ message SyncEntity {
// May be returned in GetUpdatesMessage and sent up in CommitMessage.
//
optional string client_defined_unique_tag = 23;
+
+ // Supplies an ordinal for this item, relative to other items with the
+ // same parent. Ordinals are ordered lexicographically bytewise.
+ // Ordinals must be a least 8 bytes (for backwards compatibility), and
+ // must not be all zeroes.
+ //
+ // Clients should not make sure that each item they know of has a
+ // unique ordinal-in-parent. However, updates from the server might
+ // break this invariant. In that case, among the items with the
+ // same ordinal-in-parent, a client should randomly pick one, and
+ // then perturb the ordinal-in-parents of all the other ones (within
+ // the bounds of the preceding and succeeding ordinal-in-parent)
+ // until they're unique; a byte of randomness per item should be
+ // more than enough.
+ //
+ // Available in version 31+.
+ //
+ // Present in both GetUpdatesResponse and CommitMessage.
+ //
+ // In a CommitMessage context, server implementations may choose whether
+ // to compute a position based on this field, |position_in_parent|, or
+ // |insert_after_item_id|. Clients should set all values so that they
+ // result in a consistent ordering regardless of which choice the server
+ // makes.
+ optional bytes ordinal_in_parent = 24;
};
// This message contains diagnostic information used to correlate
@@ -460,7 +499,7 @@ message ClearUserDataResponse {
message ClientToServerMessage {
required string share = 1;
- optional int32 protocol_version = 2 [default = 30];
+ optional int32 protocol_version = 2 [default = 31];
enum Contents {
COMMIT = 1;
GET_UPDATES = 2;