diff options
Diffstat (limited to 'Firestore/Protos/protos/firestore/local/target.proto')
-rw-r--r-- | Firestore/Protos/protos/firestore/local/target.proto | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/Firestore/Protos/protos/firestore/local/target.proto b/Firestore/Protos/protos/firestore/local/target.proto new file mode 100644 index 0000000..7f34515 --- /dev/null +++ b/Firestore/Protos/protos/firestore/local/target.proto @@ -0,0 +1,90 @@ +syntax = "proto3"; + +package firestore.client; + +option java_multiple_files = true; +option java_package = "com.google.firebase.firestore.proto"; + +option objc_class_prefix = "FSTPB"; + +import "google/firestore/v1beta1/firestore.proto"; +import "google/protobuf/timestamp.proto"; + +// A Target is a long-lived data structure representing a resumable listen on a +// particular user query. While the query describes what to listen to, the +// Target records data about when the results were last updated and enough +// information to be able to resume listening later. +message Target { + // An auto-generated sequential numeric identifier for the target. This + // serves as the identity of the target, and once assigned never changes. + int32 target_id = 1; + + // The last snapshot version received from the Watch Service for this target. + // + // This is the same value as TargetChange.read_time + google.protobuf.Timestamp snapshot_version = 2; + + // An opaque, server-assigned token that allows watching a query to be + // resumed after disconnecting without retransmitting all the data that + // matches the query. The resume token essentially identifies a point in + // time from which the server should resume sending results. + // + // This is related to the snapshot_version in that the resume_token + // effectively also encodes that value, but the resume_token is opaque and + // sometimes encodes additional information. + // + // A consequence of this is that the resume_token should be used when asking + // the server to reason about where this client is in the watch stream, but + // the client should use the snapshot_version for its own purposes. + // + // This is the same value as TargetChange.resume_token + bytes resume_token = 3; + + // A sequence number representing the last time this query was listened to, + // used for garbage collection purposes. + // + // Conventionally this would be a timestamp value, but device-local clocks + // are unreliable and they must be able to create new listens even while + // disconnected. Instead this should be a monotonically increasing number + // that's incremented on each listen call. + // + // This is different from the target_id since the target_id is an immutable + // identifier assigned to the Target on first use while + // last_listen_sequence_number is updated every time the query is listened + // to. + int64 last_listen_sequence_number = 4; + + // The server-side type of target to listen to. + oneof target_type { + // A target specified by a query. + google.firestore.v1beta1.Target.QueryTarget query = 5; + + // A target specified by a set of document names. + google.firestore.v1beta1.Target.DocumentsTarget documents = 6; + } +} + +// Global state tracked across all Targets, tracked separately to avoid the +// need for extra indexes. +message TargetGlobal { + // The highest numbered target id across all Targets. + // + // See Target.target_id. + int32 highest_target_id = 1; + + // The highest numbered last_listen_sequence_number across all Targets. + // + // See Target.last_listen_sequence_number. + int64 highest_listen_sequence_number = 2; + + // A global snapshot version representing the last consistent snapshot we + // received from the backend. This is monotonically increasing and any + // snapshots received from the backend prior to this version (e.g. for + // targets resumed with a resume_token) should be suppressed (buffered) until + // the backend has caught up to this snapshot_version again. This prevents + // our cache from ever going backwards in time. + // + // This is updated whenever our we get a TargetChange with a read_time and + // empty target_ids. + google.protobuf.Timestamp last_remote_snapshot_version = 3; +} |