1*d5c09012SAndroid Build Coastguard Worker// Copyright 2017 Google Inc. 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.watcher.v1; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/api/annotations.proto"; 20*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/any.proto"; 21*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/empty.proto"; 22*d5c09012SAndroid Build Coastguard Worker 23*d5c09012SAndroid Build Coastguard Workeroption go_package = "google.golang.org/genproto/googleapis/watcher/v1;watcher"; 24*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 25*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "WatchProto"; 26*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.watcher.v1"; 27*d5c09012SAndroid Build Coastguard Worker 28*d5c09012SAndroid Build Coastguard Worker// ## API Overview 29*d5c09012SAndroid Build Coastguard Worker// 30*d5c09012SAndroid Build Coastguard Worker// [Watcher][] lets a client watch for updates to a named entity, such as a 31*d5c09012SAndroid Build Coastguard Worker// directory or database table. For each watched entity, the client receives a 32*d5c09012SAndroid Build Coastguard Worker// reliable stream of watch events, without re-ordering. 33*d5c09012SAndroid Build Coastguard Worker// 34*d5c09012SAndroid Build Coastguard Worker// Watching is done by sending an RPC to a service that implements the API. The 35*d5c09012SAndroid Build Coastguard Worker// argument to the RPC contains the name of the entity. The result stream 36*d5c09012SAndroid Build Coastguard Worker// consists of a sequence of Change messages that the service continues to 37*d5c09012SAndroid Build Coastguard Worker// send until the call fails or is cancelled. 38*d5c09012SAndroid Build Coastguard Worker// 39*d5c09012SAndroid Build Coastguard Worker// ## Data model 40*d5c09012SAndroid Build Coastguard Worker// 41*d5c09012SAndroid Build Coastguard Worker// This API assumes that each *entity* has a name and a 42*d5c09012SAndroid Build Coastguard Worker// set of *elements*, where each element has a name and a value. The 43*d5c09012SAndroid Build Coastguard Worker// entity's name must be a unique identifier within the service, such as 44*d5c09012SAndroid Build Coastguard Worker// a resource name. What constitutes an entity or element is 45*d5c09012SAndroid Build Coastguard Worker// implementation-specific: for example, a file system implementation 46*d5c09012SAndroid Build Coastguard Worker// might define an entity as either a directory or a file, and elements would be 47*d5c09012SAndroid Build Coastguard Worker// child files or directories of that entity. 48*d5c09012SAndroid Build Coastguard Worker// 49*d5c09012SAndroid Build Coastguard Worker// The Watch API allows a client to watch an entity E's immediate 50*d5c09012SAndroid Build Coastguard Worker// elements or the whole tree rooted at E. Elements are organized into 51*d5c09012SAndroid Build Coastguard Worker// a hierarchy ("" at the top; the rest follows the natural hierarchy of the 52*d5c09012SAndroid Build Coastguard Worker// namespace of elements that is being watched). For example, when 53*d5c09012SAndroid Build Coastguard Worker// recursively watching a filesystem namespace, X is an ancestor of 54*d5c09012SAndroid Build Coastguard Worker// X/Y and X/Y/Z). 55*d5c09012SAndroid Build Coastguard Worker// 56*d5c09012SAndroid Build Coastguard Worker// ## Watch request 57*d5c09012SAndroid Build Coastguard Worker// 58*d5c09012SAndroid Build Coastguard Worker// When a client makes a request to watch an entity, it can indicate 59*d5c09012SAndroid Build Coastguard Worker// whether it wants to receive the initial state of the entity, just 60*d5c09012SAndroid Build Coastguard Worker// new changes to the entity, or resume watching from a particular 61*d5c09012SAndroid Build Coastguard Worker// point in a previous watch stream, specified with a `resume_marker` value. 62*d5c09012SAndroid Build Coastguard Worker// It can also indicate whether it wants to watch only one entity or all 63*d5c09012SAndroid Build Coastguard Worker// entities in the subtree rooted at a particular entity's name. 64*d5c09012SAndroid Build Coastguard Worker// 65*d5c09012SAndroid Build Coastguard Worker// On receiving a watch request for an entity, the server sends one or more 66*d5c09012SAndroid Build Coastguard Worker// messages to the client. The first message informs the client that the server 67*d5c09012SAndroid Build Coastguard Worker// has registered the client's request: the instant of time when the 68*d5c09012SAndroid Build Coastguard Worker// client receives the event is referred to as the client's "watch 69*d5c09012SAndroid Build Coastguard Worker// point" for that entity. 70*d5c09012SAndroid Build Coastguard Worker// 71*d5c09012SAndroid Build Coastguard Worker// ## Atomic delivery 72*d5c09012SAndroid Build Coastguard Worker// 73*d5c09012SAndroid Build Coastguard Worker// The response stream consists of a sequence of Change messages. Each 74*d5c09012SAndroid Build Coastguard Worker// message contains an `continued` bit. A sub-sequence of Change messages with 75*d5c09012SAndroid Build Coastguard Worker// `continued=true` followed by a Change message with `continued=false` forms an 76*d5c09012SAndroid Build Coastguard Worker// *atomic group*. Systems that support multi-element atomic updates may 77*d5c09012SAndroid Build Coastguard Worker// guarantee that all changes resulting from a single atomic 78*d5c09012SAndroid Build Coastguard Worker// update are delivered in the same atomic group. It is up to the 79*d5c09012SAndroid Build Coastguard Worker// documentation of a particular system that implements the Watch API to 80*d5c09012SAndroid Build Coastguard Worker// document whether or not it supports such grouping. We expect that most 81*d5c09012SAndroid Build Coastguard Worker// callers will ignore the notion of atomic delivery and the `continued` bit, 82*d5c09012SAndroid Build Coastguard Worker// i.e., they will just process each Change message as it is received. 83*d5c09012SAndroid Build Coastguard Worker// 84*d5c09012SAndroid Build Coastguard Worker// ## Batching 85*d5c09012SAndroid Build Coastguard Worker// 86*d5c09012SAndroid Build Coastguard Worker// Multiple Change messages may be grouped into a single ChangeBatch message 87*d5c09012SAndroid Build Coastguard Worker// to reduce message transfer overhead. A single ChangeBatch may contain many 88*d5c09012SAndroid Build Coastguard Worker// atomic groups, or a single atomic group may be split across many 89*d5c09012SAndroid Build Coastguard Worker// ChangeBatch messages. 90*d5c09012SAndroid Build Coastguard Worker// 91*d5c09012SAndroid Build Coastguard Worker// ## Initial State 92*d5c09012SAndroid Build Coastguard Worker// 93*d5c09012SAndroid Build Coastguard Worker// The first atomic group delivered by a watch call is special. It is 94*d5c09012SAndroid Build Coastguard Worker// delivered as soon as possible and contains the initial state of the 95*d5c09012SAndroid Build Coastguard Worker// entity being watched. The client should consider itself caught up 96*d5c09012SAndroid Build Coastguard Worker// after processing this first atomic group. 97*d5c09012SAndroid Build Coastguard Worker// 98*d5c09012SAndroid Build Coastguard Worker// The messages in the first atomic group will either refer to the 99*d5c09012SAndroid Build Coastguard Worker// entity itself (`Change.element` == "") or to elements inside the 100*d5c09012SAndroid Build Coastguard Worker// entity (`Change.element` != ""). Here are the cases to consider: 101*d5c09012SAndroid Build Coastguard Worker// 102*d5c09012SAndroid Build Coastguard Worker// 1. `resume_marker` is "" or not specified: For every element P 103*d5c09012SAndroid Build Coastguard Worker// (including the entity itself) that exists, there will be at least 104*d5c09012SAndroid Build Coastguard Worker// one message delivered with element == P and the last such message 105*d5c09012SAndroid Build Coastguard Worker// will contain the current state of P. For every element Q 106*d5c09012SAndroid Build Coastguard Worker// (including the entity itself) that does not exist, either no 107*d5c09012SAndroid Build Coastguard Worker// message will be delivered, or the last message for Q will have 108*d5c09012SAndroid Build Coastguard Worker// state == DOES_NOT_EXIST. At least one message for element="" will 109*d5c09012SAndroid Build Coastguard Worker// be delivered. 110*d5c09012SAndroid Build Coastguard Worker// 111*d5c09012SAndroid Build Coastguard Worker// 2. `resume_marker` == "now": there will be exactly one message with 112*d5c09012SAndroid Build Coastguard Worker// element = "" and state INITIAL_STATE_SKIPPED. The client cannot 113*d5c09012SAndroid Build Coastguard Worker// assume whether or not the entity exists after receiving this 114*d5c09012SAndroid Build Coastguard Worker// message. 115*d5c09012SAndroid Build Coastguard Worker// 116*d5c09012SAndroid Build Coastguard Worker// 3. `resume_marker` has a value R from a preceding watch call on this 117*d5c09012SAndroid Build Coastguard Worker// entity: The same messages as described in (1) will be delivered to 118*d5c09012SAndroid Build Coastguard Worker// the client, except that any information implied by messages received 119*d5c09012SAndroid Build Coastguard Worker// on the preceding call up to and including R may not be 120*d5c09012SAndroid Build Coastguard Worker// delivered. The expectation is that the client will start with state 121*d5c09012SAndroid Build Coastguard Worker// it had built up from the preceding watch call, apply the changes 122*d5c09012SAndroid Build Coastguard Worker// received from this call, and build an up-to-date view of the entity 123*d5c09012SAndroid Build Coastguard Worker// without having to fetch a potentially large amount of information 124*d5c09012SAndroid Build Coastguard Worker// that has not changed. Note that some information that had already 125*d5c09012SAndroid Build Coastguard Worker// been delivered by the preceding call might be delivered again. 126*d5c09012SAndroid Build Coastguard Worker// 127*d5c09012SAndroid Build Coastguard Worker// ## Ordering and Reliability 128*d5c09012SAndroid Build Coastguard Worker// 129*d5c09012SAndroid Build Coastguard Worker// The Change messages that apply to a particular element of the entity are 130*d5c09012SAndroid Build Coastguard Worker// delivered eventually in order without loss for the duration of the RPC. Note 131*d5c09012SAndroid Build Coastguard Worker// however that if multiple Changes apply to the same element, the 132*d5c09012SAndroid Build Coastguard Worker// implementation is free to suppress them and deliver just the last one. The 133*d5c09012SAndroid Build Coastguard Worker// underlying system must provide the guarantee that any relevant update 134*d5c09012SAndroid Build Coastguard Worker// received for an entity E after a client's watch point for E MUST be delivered 135*d5c09012SAndroid Build Coastguard Worker// to that client. 136*d5c09012SAndroid Build Coastguard Worker// 137*d5c09012SAndroid Build Coastguard Worker// These tight guarantees allow for the following simplifications in the client: 138*d5c09012SAndroid Build Coastguard Worker// 139*d5c09012SAndroid Build Coastguard Worker// 1. The client does not need to have a separate polling loop to make up for 140*d5c09012SAndroid Build Coastguard Worker// missed updates. 141*d5c09012SAndroid Build Coastguard Worker// 142*d5c09012SAndroid Build Coastguard Worker// 2. The client does not need to manage timestamps/versions manually; the 143*d5c09012SAndroid Build Coastguard Worker// last update delivered corresponds to the eventual state of the entity. 144*d5c09012SAndroid Build Coastguard Worker// 145*d5c09012SAndroid Build Coastguard Worker// Example: a calendar entry may have elements named { "starttime", "endtime", 146*d5c09012SAndroid Build Coastguard Worker// "attendees" } with corresponding values or it may have a single element name 147*d5c09012SAndroid Build Coastguard Worker// "entry" with a serialized proto for the calendar entry. 148*d5c09012SAndroid Build Coastguard Worker// 149*d5c09012SAndroid Build Coastguard Worker// ## Ordering constraints for parents/descendants 150*d5c09012SAndroid Build Coastguard Worker// 151*d5c09012SAndroid Build Coastguard Worker// The Watch API provides guarantees regarding the order in which 152*d5c09012SAndroid Build Coastguard Worker// messages for a parent and its descendants are delivered: 153*d5c09012SAndroid Build Coastguard Worker// 154*d5c09012SAndroid Build Coastguard Worker// 1. The creation of an ancestor (i.e., the first EXISTS message for 155*d5c09012SAndroid Build Coastguard Worker// the ancestor) is reported before the creation of any of its 156*d5c09012SAndroid Build Coastguard Worker// descendants. 157*d5c09012SAndroid Build Coastguard Worker// 158*d5c09012SAndroid Build Coastguard Worker// 2. The deletion of an ancestor (via a DOES_NOT_EXIST message) 159*d5c09012SAndroid Build Coastguard Worker// implies the deletion of all its descendants. The service will 160*d5c09012SAndroid Build Coastguard Worker// not deliver any messages for the descendants until the parent 161*d5c09012SAndroid Build Coastguard Worker// has been recreated. 162*d5c09012SAndroid Build Coastguard Worker 163*d5c09012SAndroid Build Coastguard Worker// The service that a client uses to connect to the watcher system. 164*d5c09012SAndroid Build Coastguard Worker// The errors returned by the service are in the canonical error space, 165*d5c09012SAndroid Build Coastguard Worker// see [google.rpc.Code][]. 166*d5c09012SAndroid Build Coastguard Workerservice Watcher { 167*d5c09012SAndroid Build Coastguard Worker // Start a streaming RPC to get watch information from the server. 168*d5c09012SAndroid Build Coastguard Worker rpc Watch(Request) returns (stream ChangeBatch) { 169*d5c09012SAndroid Build Coastguard Worker option (google.api.http) = { 170*d5c09012SAndroid Build Coastguard Worker get: "/v1/watch" 171*d5c09012SAndroid Build Coastguard Worker }; 172*d5c09012SAndroid Build Coastguard Worker } 173*d5c09012SAndroid Build Coastguard Worker} 174*d5c09012SAndroid Build Coastguard Worker 175*d5c09012SAndroid Build Coastguard Worker// The message used by the client to register interest in an entity. 176*d5c09012SAndroid Build Coastguard Workermessage Request { 177*d5c09012SAndroid Build Coastguard Worker // The `target` value **must** be a valid URL path pointing to an entity 178*d5c09012SAndroid Build Coastguard Worker // to watch. Note that the service name **must** be 179*d5c09012SAndroid Build Coastguard Worker // removed from the target field (e.g., the target field must say 180*d5c09012SAndroid Build Coastguard Worker // "/foo/bar", not "myservice.googleapis.com/foo/bar"). A client is 181*d5c09012SAndroid Build Coastguard Worker // also allowed to pass system-specific parameters in the URL that 182*d5c09012SAndroid Build Coastguard Worker // are only obeyed by some implementations. Some parameters will be 183*d5c09012SAndroid Build Coastguard Worker // implementation-specific. However, some have predefined meaning 184*d5c09012SAndroid Build Coastguard Worker // and are listed here: 185*d5c09012SAndroid Build Coastguard Worker // 186*d5c09012SAndroid Build Coastguard Worker // * recursive = true|false [default=false] 187*d5c09012SAndroid Build Coastguard Worker // If set to true, indicates that the client wants to watch all elements 188*d5c09012SAndroid Build Coastguard Worker // of entities in the subtree rooted at the entity's name in `target`. For 189*d5c09012SAndroid Build Coastguard Worker // descendants that are not the immediate children of the target, the 190*d5c09012SAndroid Build Coastguard Worker // `Change.element` will contain slashes. 191*d5c09012SAndroid Build Coastguard Worker // 192*d5c09012SAndroid Build Coastguard Worker // Note that some namespaces and entities will not support recursive 193*d5c09012SAndroid Build Coastguard Worker // watching. When watching such an entity, a client must not set recursive 194*d5c09012SAndroid Build Coastguard Worker // to true. Otherwise, it will receive an `UNIMPLEMENTED` error. 195*d5c09012SAndroid Build Coastguard Worker // 196*d5c09012SAndroid Build Coastguard Worker // Normal URL encoding must be used inside `target`. For example, if a query 197*d5c09012SAndroid Build Coastguard Worker // parameter name or value, or the non-query parameter portion of `target` 198*d5c09012SAndroid Build Coastguard Worker // contains a special character, it must be %-encoded. We recommend that 199*d5c09012SAndroid Build Coastguard Worker // clients and servers use their runtime's URL library to produce and consume 200*d5c09012SAndroid Build Coastguard Worker // target values. 201*d5c09012SAndroid Build Coastguard Worker string target = 1; 202*d5c09012SAndroid Build Coastguard Worker 203*d5c09012SAndroid Build Coastguard Worker // The `resume_marker` specifies how much of the existing underlying state is 204*d5c09012SAndroid Build Coastguard Worker // delivered to the client when the watch request is received by the 205*d5c09012SAndroid Build Coastguard Worker // system. The client can set this marker in one of the following ways to get 206*d5c09012SAndroid Build Coastguard Worker // different semantics: 207*d5c09012SAndroid Build Coastguard Worker // 208*d5c09012SAndroid Build Coastguard Worker // * Parameter is not specified or has the value "". 209*d5c09012SAndroid Build Coastguard Worker // Semantics: Fetch initial state. 210*d5c09012SAndroid Build Coastguard Worker // The client wants the entity's initial state to be delivered. See the 211*d5c09012SAndroid Build Coastguard Worker // description in "Initial State". 212*d5c09012SAndroid Build Coastguard Worker // 213*d5c09012SAndroid Build Coastguard Worker // * Parameter is set to the string "now" (UTF-8 encoding). 214*d5c09012SAndroid Build Coastguard Worker // Semantics: Fetch new changes only. 215*d5c09012SAndroid Build Coastguard Worker // The client just wants to get the changes received by the system after 216*d5c09012SAndroid Build Coastguard Worker // the watch point. The system may deliver changes from before the watch 217*d5c09012SAndroid Build Coastguard Worker // point as well. 218*d5c09012SAndroid Build Coastguard Worker // 219*d5c09012SAndroid Build Coastguard Worker // * Parameter is set to a value received in an earlier 220*d5c09012SAndroid Build Coastguard Worker // `Change.resume_marker` field while watching the same entity. 221*d5c09012SAndroid Build Coastguard Worker // Semantics: Resume from a specific point. 222*d5c09012SAndroid Build Coastguard Worker // The client wants to receive the changes from a specific point; this 223*d5c09012SAndroid Build Coastguard Worker // value must correspond to a value received in the `Change.resume_marker` 224*d5c09012SAndroid Build Coastguard Worker // field. The system may deliver changes from before the `resume_marker` 225*d5c09012SAndroid Build Coastguard Worker // as well. If the system cannot resume the stream from this point (e.g., 226*d5c09012SAndroid Build Coastguard Worker // if it is too far behind in the stream), it can raise the 227*d5c09012SAndroid Build Coastguard Worker // `FAILED_PRECONDITION` error. 228*d5c09012SAndroid Build Coastguard Worker // 229*d5c09012SAndroid Build Coastguard Worker // An implementation MUST support an unspecified parameter and the 230*d5c09012SAndroid Build Coastguard Worker // empty string "" marker (initial state fetching) and the "now" marker. 231*d5c09012SAndroid Build Coastguard Worker // It need not support resuming from a specific point. 232*d5c09012SAndroid Build Coastguard Worker bytes resume_marker = 2; 233*d5c09012SAndroid Build Coastguard Worker} 234*d5c09012SAndroid Build Coastguard Worker 235*d5c09012SAndroid Build Coastguard Worker// A batch of Change messages. 236*d5c09012SAndroid Build Coastguard Workermessage ChangeBatch { 237*d5c09012SAndroid Build Coastguard Worker // A list of Change messages. 238*d5c09012SAndroid Build Coastguard Worker repeated Change changes = 1; 239*d5c09012SAndroid Build Coastguard Worker} 240*d5c09012SAndroid Build Coastguard Worker 241*d5c09012SAndroid Build Coastguard Worker// A Change indicates the most recent state of an element. 242*d5c09012SAndroid Build Coastguard Workermessage Change { 243*d5c09012SAndroid Build Coastguard Worker // A reported value can be in one of the following states: 244*d5c09012SAndroid Build Coastguard Worker enum State { 245*d5c09012SAndroid Build Coastguard Worker // The element exists and its full value is included in data. 246*d5c09012SAndroid Build Coastguard Worker EXISTS = 0; 247*d5c09012SAndroid Build Coastguard Worker 248*d5c09012SAndroid Build Coastguard Worker // The element does not exist. 249*d5c09012SAndroid Build Coastguard Worker DOES_NOT_EXIST = 1; 250*d5c09012SAndroid Build Coastguard Worker 251*d5c09012SAndroid Build Coastguard Worker // Element may or may not exist. Used only for initial state delivery when 252*d5c09012SAndroid Build Coastguard Worker // the client is not interested in fetching the initial state. See the 253*d5c09012SAndroid Build Coastguard Worker // "Initial State" section above. 254*d5c09012SAndroid Build Coastguard Worker INITIAL_STATE_SKIPPED = 2; 255*d5c09012SAndroid Build Coastguard Worker 256*d5c09012SAndroid Build Coastguard Worker // The element may exist, but some error has occurred. More information is 257*d5c09012SAndroid Build Coastguard Worker // available in the data field - the value is a serialized Status 258*d5c09012SAndroid Build Coastguard Worker // proto (from [google.rpc.Status][]) 259*d5c09012SAndroid Build Coastguard Worker ERROR = 3; 260*d5c09012SAndroid Build Coastguard Worker } 261*d5c09012SAndroid Build Coastguard Worker 262*d5c09012SAndroid Build Coastguard Worker // Name of the element, interpreted relative to the entity's actual 263*d5c09012SAndroid Build Coastguard Worker // name. "" refers to the entity itself. The element name is a valid 264*d5c09012SAndroid Build Coastguard Worker // UTF-8 string. 265*d5c09012SAndroid Build Coastguard Worker string element = 1; 266*d5c09012SAndroid Build Coastguard Worker 267*d5c09012SAndroid Build Coastguard Worker // The state of the `element`. 268*d5c09012SAndroid Build Coastguard Worker State state = 2; 269*d5c09012SAndroid Build Coastguard Worker 270*d5c09012SAndroid Build Coastguard Worker // The actual change data. This field is present only when `state() == EXISTS` 271*d5c09012SAndroid Build Coastguard Worker // or `state() == ERROR`. Please see 272*d5c09012SAndroid Build Coastguard Worker // [google.protobuf.Any][google.protobuf.Any] about how to use the Any type. 273*d5c09012SAndroid Build Coastguard Worker google.protobuf.Any data = 6; 274*d5c09012SAndroid Build Coastguard Worker 275*d5c09012SAndroid Build Coastguard Worker // If present, provides a compact representation of all the messages that have 276*d5c09012SAndroid Build Coastguard Worker // been received by the caller for the given entity, e.g., it could be a 277*d5c09012SAndroid Build Coastguard Worker // sequence number or a multi-part timestamp/version vector. This marker can 278*d5c09012SAndroid Build Coastguard Worker // be provided in the Request message, allowing the caller to resume the 279*d5c09012SAndroid Build Coastguard Worker // stream watching at a specific point without fetching the initial state. 280*d5c09012SAndroid Build Coastguard Worker bytes resume_marker = 4; 281*d5c09012SAndroid Build Coastguard Worker 282*d5c09012SAndroid Build Coastguard Worker // If true, this Change is followed by more Changes that are in the same group 283*d5c09012SAndroid Build Coastguard Worker // as this Change. 284*d5c09012SAndroid Build Coastguard Worker bool continued = 5; 285*d5c09012SAndroid Build Coastguard Worker} 286