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

Unified Diff: sync/protocol/sync.proto

Issue 11636006: WIP: The Bookmark Position Megapatch (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Various updates, including switch suffix to unique_client_tag style 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/protocol/bookmark_specifics.proto ('k') | sync/sync.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/protocol/sync.proto
diff --git a/sync/protocol/sync.proto b/sync/protocol/sync.proto
index 6877ece4927003f2c04c13bd27a353552fa4f318..b9cc22478b4b13c1dbd062e7910ac77ec686c1f6 100644
--- a/sync/protocol/sync.proto
+++ b/sync/protocol/sync.proto
@@ -223,23 +223,24 @@ message SyncEntity {
// result in a consistent ordering regardless of which choice the server
// makes.
//
- // This is deprecated: clients should set |ordinal_in_parent|
+ // This is deprecated: clients should set |unique_position|
// instead. But until the production servers fully support
- // |ordinal_in_parent|, clients should set all three position fields
+ // |unique_position|, 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
+ // |unique_position| 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
+ // Similarly, when |unique_position| 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.
+ // When both |unique_position| and |position_in_parent| are set, the first 8
+ // bytes of |unique_position| must be equal to the bytes of
+ // flip-sign-bit(|position_in_parent|) in big-endian order (MSB first). The
+ // |unique_position| verstion will also include trailing bytes that may
+ // provide more precise position information, a suffix, and a "terminator"
+ // byte (0xFF).
optional int64 position_in_parent = 15;
// Contains the ID of the element (under the same parent) after which this
@@ -268,12 +269,21 @@ message SyncEntity {
// reunite the original with its official committed version in the case
// where a client does not receive or process the commit response for
// some reason.
+ //
// Present only in GetUpdatesResponse.
+ //
+ // This field is also used in determinging the unique identifier used in
+ // bookmarks' unique_position field. It is expected that the string consist
+ // of 16 bytes of data that have been base64 encoded.
optional string originator_cache_guid = 19;
// The local item id of this entry from the client that initially
// committed this entity. Typically a negative integer.
// Present only in GetUpdatesResponse.
+ //
+ // This field is also used in determinging the unique identifier used in
+ // bookmarks' unique_position field. It is expected that the ID be the string
+ // representation of a negative 64bit integer.
optional string originator_client_item_id = 20;
// Extensible container for datatype-specific data.
@@ -312,30 +322,30 @@ message SyncEntity {
//
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 at least 8 bytes (for backwards compatibility), and
- // must not be all zeroes.
+ // This positioning system had a relatively short life. It was made obsolete
+ // by |unique_position| before either the client or server made much of an
+ // attempt to support it.
+ optional bytes ordinal_in_parent = 24;
+
+ // This is the fourth attempt at positioning.
//
- // 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.
+ // Unique positions are unique per-item, since they are guaranteed to
+ // include a fixed-length suffix. The last byte of a unique position
+ // is always 0xFF, which is appended to the unique suffix.
//
- // Available in version 31+.
+ // Prior to both the suffix and terminator is the position information. This
+ // sequence of bytes with arbitrary length are chosen such that this item
+ // compares to its siblings as desired.
//
- // Present in both GetUpdatesResponse and CommitMessage.
+ // Present in both GetUpdatesResponse and CommitMessage, if the client client
+ // that wrote the item supports it. Older clients will not set this field, so
+ // the receiver will need to convert the |server_position_in_parent| value
+ // which will be present to a unique_position.
//
- // 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 field will not be set for items whose type ignores positioning.
+ // Clients will not attempt to read this field on the receipt of an item of a
+ // type that ignores positioning.
+ optional bytes unique_position = 25;
};
// This message contains diagnostic information used to correlate
« no previous file with comments | « sync/protocol/bookmark_specifics.proto ('k') | sync/sync.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698