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

Unified Diff: third_party/cacheinvalidation/src/proto/client_protocol.proto

Issue 1162033004: Pull cacheinvalidations code directory into chromium repo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months 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
Index: third_party/cacheinvalidation/src/proto/client_protocol.proto
diff --git a/third_party/cacheinvalidation/src/proto/client_protocol.proto b/third_party/cacheinvalidation/src/proto/client_protocol.proto
new file mode 100644
index 0000000000000000000000000000000000000000..dabbc0541929da6cb33efb2bb6d12ef7621344ca
--- /dev/null
+++ b/third_party/cacheinvalidation/src/proto/client_protocol.proto
@@ -0,0 +1,619 @@
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//
+// Specification of protocol buffers and the client-server protocol that
+// are used by the clients of the system.
+//
+// Note: unless otherwise specified in a comment, all fields in all messages
+// are required, even though they are listed as optional.
+
+syntax = "proto2";
+
+package com.google.protos.ipc.invalidation;
+
+option optimize_for = LITE_RUNTIME;
+
+
+
+option java_outer_classname = "NanoClientProtocol";
+option java_package = "com.google.protos.ipc.invalidation";
+
+
+
+// Here is a high-level overview of the protocol. The protocol is designed in a
+// "message-passing" style, i.e., the client (C) or the server (S) can send any
+// message SPONTANEOUSLY at any time and both sides have to be prepared for any
+// message from the other side. However, even with this style, there are some
+// "flows" which are somewhat like requests and replies.
+
+// 1. Initialization: When a client starts up, it needs a token to alow it to
+// perform any other operation with the server.
+// C -> S: InitializeMessage
+// S -> C: TokenControlMessage
+//
+// 2. Registration: When a client has to register or unregister for a set of
+// objects, the following flow occurs:
+// C -> S: RegistrationMessage
+// S -> C: RegistrationStatusMessage
+//
+// 3. Invalidation: The server sends an invalidation and the client sends back
+// an ack.
+// S -> C InvalidationMessage
+// C -> S InvalidationMessage
+//
+// 4. Registration sync: Once in a while the server may detect that the client
+// and server's registration state is out of sync (the server can detect this
+// since it gets the client's registration summary in the client's message
+// header). In that case, it asks the client some registration information
+// and the client sends it to the server.
+// S -> C: RegistrationSyncRequestMessage
+// C -> S: RegistrationSyncMessage
+//
+// 5. Information messages: The server can occasionally for client-side
+// information such as statistics, etc. The client responds with the
+// requested information
+// S -> C: InfoRequestMessage
+// C -> S: InfoMessage
+//
+// Client protocol messages are typically validated. Validation rules may be
+// declared in the following locations when making changes to this file:
+//
+// 1. TiclMessageValidator2.java: validation logic that is run on the
+// server.
+//
+// 2. ClientProtoWrapperGenerator.java: validation logic that is run
+// on the client.
+// ------------------------------------------------------------------------
+
+// A basic message type used for versioning public proto messages and/or
+// types. The two fields are supposed to be used as follows:
+//
+// * The major version number is changed whenever an incompatible protocol
+// change or type has been made. When a message/object with a particular
+// major version is received, the receiver needs to either know how to handle
+// this version or it needs to drop the message
+//
+// * The minor version can be changed (say) to document some internal change
+// for debugging purposes. When a message is received by a receiver, it MUST
+// ignore the minor version number for making any protocol/type
+// decisions. I.e., the minor version number is for debugging purposes only.
+//
+// Versioning is used in various places - for entities that are part of a
+// protocol (e.g., message requests), for various client implementations, and
+// for other data types that change independently of the protocol (e.g.,
+// session tokens). For each versioned entity, we define a specific message
+// type to encapsulate the version of that entity (e.g., ProtocolVersion,
+// ClientVersion, etc.).
+message Version {
+ optional int32 major_version = 1;
+ optional int32 minor_version = 2;
+}
+
+// Message included in all client <-> server messages to indicate the version
+// of the protocol in use by the sender.
+message ProtocolVersion {
+ optional Version version = 1;
+}
+
+// Defines a specific version of the client library (for information purposes
+// only) May not be used to make decisions at the server (use ProtocolVersion
+// instead).
+message ClientVersion {
+
+ // A client-specific version number.
+ optional Version version = 1;
+
+ // All fields below are for informational/debugging/monitoring purposes only.
+ // No critical code decision is supposed to be made using them.
+
+ // Optional: information about the client operating system/platform, e.g.,
+ // Windows, ChromeOS.
+ optional string platform = 2;
+
+ // Optional: language used for the library.
+ optional string language = 3;
+
+ // Optional: extra information about the client (e.g., application name).
+ optional string application_info = 4;
+}
+
+// Message indicating the result of an operation.
+message StatusP {
+
+ // Whether operation is successful or not
+ enum Code {
+ SUCCESS = 1;
+ TRANSIENT_FAILURE = 2;
+ PERMANENT_FAILURE = 3;
+ }
+
+ optional Code code = 1;
+
+ // Textual description of the status or additional context about any
+ // error. (Optional - Can be set for success also.)
+ optional string description = 2;
+}
+
+// Identifies an object that a client can register for.
+message ObjectIdP {
+
+ // The source of the data.
+ optional int32 source = 1;
+
+ // The id of the object relative to the source. Must be <= 64 bytes.
+ optional bytes name = 2;
+}
+
+// A message containing the part of the client's id that the application
+// controls. This id is used for squelching invalidations on the server side.
+// For example, if a client C1 modifies object x and informs the backend about
+// C1's application client id as part of the invalidation. The backend can then
+// avoid sending the invalidation unnecessarily to that client.
+//
+// If the application wishes to use this squelching feature, it must assign a
+// globally unique client_name for a given client_type so that the particular
+// instantation of the application can be identified.
+message ApplicationClientIdP {
+ // The type of the client.
+ optional int32 client_type = 1;
+
+ // A client name or unique id assigned by the application. Application should
+ // choose a unique name for different client instances if it wants to squelch
+ // invalidations by name (as discussed above).
+ optional bytes client_name = 2;
+}
+
+// Invalidation for a given object/version.
+message InvalidationP {
+ // The id of the object being invalidated.
+ optional ObjectIdP object_id = 1;
+
+ // Whether the invalidation is for a known version of the object as assigned
+ // by an application backend (is_known_version == true) or an unknown system
+ // version synthesized by the invalidation service. (Note that if
+ // is_known_version is false then is_trickle_restart be true or missing
+ // because an unknown version implies that invalidation versions prior to the
+ // current backend version may have been dropped.)
+ optional bool is_known_version = 2;
+
+ // Version being invalidated (see comment on is_known_version). If the
+ // is_known_version is false, the version corresponds to an internal "system
+ // version" for *that* object. An object's system version has no meaning to
+ // the application other than the fact that these system versions are also
+ // monotonically increasing and the client must ack such an invalidation with
+ // this system version (and an ack for a later system version acknowledges an
+ // invalidation for all earlier system version for *that* object.
+ optional int64 version = 3;
+
+ // Whether the object's Trickle is restarting at this version.
+ // sets this value to true to inform Trickle API clients that it may
+ // have dropped invalidations prior to "version", or, if is_known_version is
+ // false, prior to the current backend version. This field is logically
+ // required and is always set by current code. The default is true because
+ // old Android invalidation clients strip this field when acking
+ // invalidations due to ProtoLite limitations; true is the correct default
+ // because invalidation clients logically ack all current versions and
+ // because old persisted invalidations are all restarted.
+ optional bool is_trickle_restart = 6 [default = true];
+
+ // Optional payload associated with this invalidation.
+ optional bytes payload = 4;
+
+ // DEPRECATED: bridge arrival time is now maintained by
+ // InvalidationMetadataP in the SourcedInvalidation, InvalidationContents and
+ // ClientInvalidation containers.
+ optional int64 bridge_arrival_time_ms_deprecated = 5 [deprecated=true];
+}
+
+// Specifies the intention to change a registration on a specific object. To
+// update registrations, a client sends a message containing repeated
+// RegistrationP messages.
+message RegistrationP {
+ enum OpType {
+ REGISTER = 1;
+ UNREGISTER = 2;
+ }
+
+ // The object for which to (un)register.
+ optional ObjectIdP object_id = 1;
+
+ // Whether to register or unregister.
+ optional OpType op_type = 2;
+}
+
+// Summary of the registration state associated with a particular client, sent
+// in the header of client<->server messages. This summary has two different
+// (but related) meanings depending on where it is used:
+//
+// 1) In a client->server message, it describes the DESIRED client state.
+// 2) In a server->client message, it describes the ACTUAL state at the server
+// for that client.
+message RegistrationSummary {
+ // Number of registrations desired (client) or held (server).
+ optional int32 num_registrations = 1;
+
+ // Top-level digest over the registrations.
+ //
+ // The digest for an object id is computed as following (the digest chosen for
+ // this method is SHA-1):
+ //
+ // digest = new Digest();
+ // digest.update(Little endian encoding of object source type)
+ // digest.update(object name)
+ // digest.getDigestSummary()
+ //
+ // For a set of objects, digest is computing by sorting lexicographically
+ // based on their digests and then performing the update process given above
+ // (i.e., calling digest.update on each object's digest and then calling
+ // getDigestSummary at the end).
+ optional bytes registration_digest = 2;
+}
+
+// Header included on every client -> server message.
+message ClientHeader {
+
+ // Protocol version of this message.
+ optional ProtocolVersion protocol_version = 1;
+
+ // Token identifying the client. Tokens are issued by the server in response
+ // to client requests (see InitializeMessage, below). In order to perform any
+ // operation other than initialization, the client must supply a token. When
+ // performing initialization, this field must be left unset.
+ optional bytes client_token = 2;
+
+ // Optional summary of the client's desired registration state. The client is
+ // encouraged to provide this summary in every message once a "steady" state
+ // of registrations/unregistrations has been reached. For example, it may not
+ // want to send this summary during initialization (but after the initial set
+ // has been registered, it should try to send it).
+ optional RegistrationSummary registration_summary = 3;
+
+ // Timestamp from the client's clock, expressed as ms since 00:00:00 UTC, 1
+ // January 1970 (i.e., the UNIX epoch) - for debugging/monitoring purposes.
+ optional int64 client_time_ms = 4;
+
+ // Highest server timestamp observed by the client (the server includes its
+ // time on every message to the client). Note: this time is NOT necessarily
+ // expressed as relative to the UNIX epoch - for debugging/monitoring
+ // purposes.
+ optional int64 max_known_server_time_ms = 5;
+
+ // Message id to identify the message -for debugging/monitoring purposes.
+ optional string message_id = 6;
+
+ // Client typecode (as in the InitializeMessage, below). This field may or
+ // may not be set.
+ optional int32 client_type = 7;
+}
+
+// A message from the client to the server.
+message ClientToServerMessage {
+ // Header.
+ optional ClientHeader header = 1;
+
+ // Any or all of the follow messages may be present.
+
+ // Optional initialization message, used to obtain a new token. Note that, if
+ // present, this message is always processed before the messages below, and
+ // those messages will be interpreted relative to the new token assigned here.
+ optional InitializeMessage initialize_message = 2;
+
+ // Optional request to perform registrations.
+ optional RegistrationMessage registration_message = 3;
+
+ // Optional data for registration sync.
+ optional RegistrationSyncMessage registration_sync_message = 4;
+
+ // Optional invalidation acks.
+ optional InvalidationMessage invalidation_ack_message = 5;
+
+ // Optional information about the client.
+ optional InfoMessage info_message = 6;
+}
+
+// Used to obtain a new token when the client does not have one.
+message InitializeMessage {
+
+ // Defines how clients serialize object ids when computing digests for
+ // registrations.
+ enum DigestSerializationType {
+
+ // The digest for an object id is computed by serializing the object id into
+ // bytes.
+ BYTE_BASED = 1;
+
+ // The digest for an object id is computed by serializing the object id into
+ // an array of numbers. TODO: Determine and specify this
+ // more precisely.
+ NUMBER_BASED = 2;
+ }
+
+ // Type of the client. This value is assigned by the backend notification
+ // system (out-of-band) and the client must use the correct value.
+ optional int32 client_type = 1;
+
+ // Nonce. This value will be echoed as the existing token in the header of
+ // the server message that supplies the new token (the new token itself will
+ // be provided in a TokenControlMessage; see below).
+ optional bytes nonce = 2;
+
+ // Id of the client as assigned by the application.
+ optional ApplicationClientIdP application_client_id = 3;
+
+ // Type of registration digest used by this client.
+ optional DigestSerializationType digest_serialization_type = 4;
+}
+
+// Registration operations to perform.
+message RegistrationMessage {
+ repeated RegistrationP registration = 1;
+}
+
+// Message from the client to the server.
+message RegistrationSyncMessage {
+
+ // Objects for which the client is registered.
+ repeated RegistrationSubtree subtree = 1;
+}
+
+// Message sent from the client to the server about registered objects
+// (typically) in response to a registration sync request.
+//
+// The name of the message implies a "tree" for future expansion where the
+// intention is to not necessarily send the complete set of objects but to
+// partition the object space into multiple ranges and then exchange Merkle-tree
+// like data structures to determine which ranges are out-of-sync.
+message RegistrationSubtree {
+ // Registered objects
+ repeated ObjectIdP registered_object = 1;
+}
+
+// A message from the client to the server with info such as performance
+// counters, client os info, etc.
+message InfoMessage {
+ optional ClientVersion client_version = 1;
+
+ // Config parameters used by the client.
+ // Deprecated and removed - the client_config parameter is what is used now.
+ repeated PropertyRecord config_parameter = 2;
+
+ // Performance counters from the client.
+ repeated PropertyRecord performance_counter = 3;
+
+ // If 'true', indicates that the client does not know the server's
+ // registration summary, so the server should respond with it even if the
+ // client's summary matches the server's.
+ optional bool server_registration_summary_requested = 4;
+
+ // Configuration parameters for this client.
+ optional ClientConfigP client_config = 5;
+}
+
+// Information about a single config/performance counter value in the
+// InfoMessage.
+message PropertyRecord {
+
+ // Name of the performance counter/config parameter.
+ optional string name = 1;
+
+ // Value of the performance counter/config parameter.
+ optional int32 value = 2;
+}
+
+message ServerHeader {
+ // Protocol version of this message.
+ optional ProtocolVersion protocol_version = 1;
+
+ // Current token that the server expects the client to have. Clients must
+ // ignore messages where this token field does not match their current token.
+ // During initialization, the client's "token" is the nonce that it generates
+ // and sends in the InitializeMessage.
+ optional bytes client_token = 2;
+
+ // Summary of registration state held by the server for the client.
+ optional RegistrationSummary registration_summary = 3;
+
+ // Timestamp from the server's clock. No guarantee on when this time is
+ // relative to.
+ optional int64 server_time_ms = 4;
+
+ // Message id to identify the message (for debug purposes only).
+ optional string message_id = 5;
+}
+
+// If ServerToClientMessage is modified, you need to change the type
+// TestServerToClientMessageWithExtraFields in the same way to match.
+message ServerToClientMessage {
+ optional ServerHeader header = 1;
+
+ // Message to assign a new client token or invalidate an existing one. Note
+ // that, if present, this message is always processed before the messages
+ // below, and those messages will be interpreted relative to the new token
+ // assigned here.
+ optional TokenControlMessage token_control_message = 2;
+
+ // Invalidations.
+ optional InvalidationMessage invalidation_message = 3;
+
+ // Registration operation replies.
+ optional RegistrationStatusMessage registration_status_message = 4;
+
+ // Request for client registration state.
+ optional RegistrationSyncRequestMessage registration_sync_request_message = 5;
+
+ // Request to change config from the server.
+ optional ConfigChangeMessage config_change_message = 6;
+
+ // Request for client information.
+ optional InfoRequestMessage info_request_message = 7;
+
+ // Asynchronous error information that the server sends to the client.
+ optional ErrorMessage error_message = 8;
+}
+
+// Message used to supply a new client token or invalidate an existing one.
+message TokenControlMessage {
+ // If status is failure, new_token cannot be set.
+ optional bytes new_token = 1; // If missing, means destroy_token
+}
+
+// Status of a particular registration (could be sent spontaneously by the
+// server or in response to a registration request).
+message RegistrationStatus {
+ optional RegistrationP registration = 1;
+ optional StatusP status = 2;
+}
+
+// Registration status of several messages from the server to the client.
+message RegistrationStatusMessage {
+ repeated RegistrationStatus registration_status = 1;
+}
+
+// Request from the server to get the registration info from the client for
+// sync purposes.
+message RegistrationSyncRequestMessage {
+}
+
+// A set of invalidations from the client to the server or vice-versa
+message InvalidationMessage {
+ repeated InvalidationP invalidation = 1;
+}
+
+// A request from the server to the client for information such as
+// performance counters, client os, etc
+message InfoRequestMessage {
+ enum InfoType {
+ GET_PERFORMANCE_COUNTERS = 1;
+ }
+ repeated InfoType info_type = 1;
+}
+
+// A rate limit: a count of events and a window duration in which the events
+// may occur.
+message RateLimitP {
+
+ // The size of the window over which the rate limit applies.
+ optional int32 window_ms = 1;
+
+ // The number of events allowed within a given window.
+ optional int32 count = 2;
+}
+
+// Configuration parameters for the protocol handler in the Ticl.
+message ProtocolHandlerConfigP {
+ // Batching delay - certain messages (e.g., registrations, invalidation acks)
+ // are sent to the server after this delay.
+ optional int32 batching_delay_ms = 1 [default = 500];
+
+ // Rate limits for sending messages. Only two levels allowed currently.
+ repeated RateLimitP rate_limit = 2;
+}
+
+// Configuration parameters for the Ticl.
+message ClientConfigP {
+
+ optional Version version = 1;
+
+ // The delay after which a network message sent to the server is considered
+ // timed out.
+ optional int32 network_timeout_delay_ms = 2 [default = 60000];
+
+ // Retry delay for a persistent write if it fails
+ optional int32 write_retry_delay_ms = 3 [default = 10000];
+
+ // Delay for sending heartbeats to the server.
+ optional int32 heartbeat_interval_ms = 4 [default = 1200000];
+
+ // Delay after which performance counters are sent to the server.
+ optional int32 perf_counter_delay_ms = 5 [default = 21600000]; // 6 hours.
+
+ // The maximum exponential backoff factor used for network and persistence
+ /// timeouts.
+ optional int32 max_exponential_backoff_factor = 6 [default = 500];
+
+ // Smearing percent for randomizing delays.
+ optional int32 smear_percent = 7 [default = 20];
+
+ // Whether the client is transient, that is, does not write its session
+ // token to durable storage.
+ // TODO: need to expose to the clients.
+ optional bool is_transient = 8 [default = false];
+
+ // Initial delay for a heartbeat after restarting from persistent state. We
+ // use this so that the application has a chance to respond to the
+ // reissueRegistrations call.
+ optional int32 initial_persistent_heartbeat_delay_ms = 9 [default = 2000];
+
+ // Configuration for the protocol client to control batching etc.
+ optional ProtocolHandlerConfigP protocol_handler_config = 10;
+
+ // Whether the channel supports delivery while the client is offline. If
+ // true, then the servers' use of the channel is such that the
+ // following holds: if any number of messages are sent to the client while
+ // the client is unreachable, then the channel will eventually deliver at
+ // least one message to the client such that, on receiving the message, the
+ // client will send a message to the server. E.g., the channel could deliver
+ // a single invalidation or a single registration sync request. C2DM is
+ // an example of a suitable channel.
+ //
+ // When this is true, the Ticl will record in persistent storage the last
+ // time it sent a message to the server. On persistent restart, it will not
+ // send a message to the server unless the last one was sent more than a
+ // heartbeat-interval ago. This is designed to support efficient Android
+ // clients, which will destroy and recreate the Ticl when transitioning
+ // between foreground and background states.
+ optional bool channel_supports_offline_delivery = 11 [default = false];
+
+ // If the client loses network connectivity, it will send a heartbeat after it
+ // comes online, unless it had already sent a message more recently than this
+ // threshold.
+ optional int32 offline_heartbeat_threshold_ms = 12 [default = 60000];
+
+ // Whether the client allows suppression. If true (the default), then
+ // both continuous and restarted invalidations result in an invalidate()
+ // upcall, which is appropriate for invalidation clients. If false,
+ // then restarted invalidations result in an invalidateUnknownVersion()
+ // upcall, which provides correct semantics for Trickles clients.
+ optional bool allow_suppression = 13 [default = true];
+}
+
+// A message asking the client to change its configuration parameters
+message ConfigChangeMessage {
+
+ // On receipt of this value, do not send any new message to the server
+ // for the specified delay (this message needs to be accepted without
+ // any token check). A zero value is ignored by the client. So the lowest
+ // value for this field is 1. This concept exists to allow the server
+ // to tell the clients that they should not come back to the server
+ // for some period of time.
+ optional int64 next_message_delay_ms = 1;
+}
+
+// An error message that contains an enum for different types of failures with a
+// textual description of the failure (as the need arises new error codes will
+// be added to this message).
+message ErrorMessage {
+
+ enum Code {
+ AUTH_FAILURE = 1; // Authorization or authentication failure.
+ UNKNOWN_FAILURE = 10000; // Some failure which is not described above.
+ };
+
+ optional Code code = 1;
+
+ // Textual description of the error
+ optional string description = 2;
+}
« no previous file with comments | « third_party/cacheinvalidation/src/proto/client.proto ('k') | third_party/cacheinvalidation/src/proto/java_client.proto » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698