From d27e836adff81e430a46b12a31ead7e4be0759e4 Mon Sep 17 00:00:00 2001 From: Hein Meling Date: Fri, 20 Dec 2024 13:19:36 +0100 Subject: [PATCH] refactor(backend): uses new streamlined latency.Matrix to add delay This replaces the old multi-map-based location and latencies lookups that were a bit awkward to work with. This removes the existing map[string]map[string]time.Duration{} latencies using the data in the internal/latency package. The new latency package provides the lm.Latency(a, b) to get the latency between two hotstuff.IDs. We now only need to fill the Locations []string in the ReplicaOpts to pass the set of locations around. --- .vscode/settings.json | 2 +- backend/latencies.go | 489 ------------------ backend/options.go | 30 +- backend/server.go | 20 +- internal/orchestration/controller.go | 8 +- internal/orchestration/worker.go | 19 +- .../proto/orchestrationpb/orchestration.pb.go | 369 +++++++------ .../proto/orchestrationpb/orchestration.proto | 26 +- replica/replica.go | 6 +- 9 files changed, 230 insertions(+), 739 deletions(-) delete mode 100644 backend/latencies.go diff --git a/.vscode/settings.json b/.vscode/settings.json index 13e27018..44ab7d52 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "clang-format.style": "{ IndentWidth: 4, BasedOnStyle: google, AlignConsecutiveAssignments: true, ColumnLimit: 120 }", + "clang-format.style": "{ IndentWidth: 2, BasedOnStyle: google, AlignConsecutiveAssignments: true, ColumnLimit: 120 }", "editor.formatOnSave": true, "files.insertFinalNewline": true, "protoc": { diff --git a/backend/latencies.go b/backend/latencies.go deleted file mode 100644 index b3e38d52..00000000 --- a/backend/latencies.go +++ /dev/null @@ -1,489 +0,0 @@ -package backend - -import "time" - -var latencies = map[string]map[string]time.Duration{ - "Bahrain": { - "Bahrain": 3960000, - "Cape Town": 246180000, - "Central": 162030000, - "Frankfurt": 87440000, - "Hong Kong": 128590000, - "Ireland": 95350000, - "London": 86400000, - "Milan": 83550000, - "Mumbai": 41280000, - "N. California": 219100000, - "N. Virginia": 160300000, - "Ohio": 169180000, - "Oregon": 210340000, - "Osaka": 164960000, - "Paris": 78550000, - "Sao Paulo": 272020000, - "Seoul": 162730000, - "Singapore": 97190000, - "Stockholm": 103980000, - "Sydney": 186880000, - "Tokyo": 169230000, - }, - "Cape Town": { - "Bahrain": 207850000, - "Cape Town": 12220000, - "Central": 226520000, - "Frankfurt": 157040000, - "Hong Kong": 255050000, - "Ireland": 159970000, - "London": 152140000, - "Milan": 164980000, - "Mumbai": 161490000, - "N. California": 286840000, - "N. Virginia": 228020000, - "Ohio": 238610000, - "Oregon": 274930000, - "Osaka": 364070000, - "Paris": 147370000, - "Sao Paulo": 340380000, - "Seoul": 386800000, - "Singapore": 218270000, - "Stockholm": 180280000, - "Sydney": 410860000, - "Tokyo": 358160000, - }, - "Central": { - "Bahrain": 159480000, - "Cape Town": 229740000, - "Central": 2870000, - "Frankfurt": 91710000, - "Hong Kong": 193610000, - "Ireland": 71540000, - "London": 78580000, - "Milan": 101260000, - "Mumbai": 189080000, - "N. California": 79020000, - "N. Virginia": 14670000, - "Ohio": 24550000, - "Oregon": 59860000, - "Osaka": 149880000, - "Paris": 83750000, - "Sao Paulo": 124810000, - "Seoul": 171920000, - "Singapore": 211180000, - "Stockholm": 106780000, - "Sydney": 197750000, - "Tokyo": 143660000, - }, - "Frankfurt": { - "Bahrain": 88490000, - "Cape Town": 160650000, - "Central": 93120000, - "Frankfurt": 3760000, - "Hong Kong": 191810000, - "Ireland": 26280000, - "London": 17570000, - "Milan": 13280000, - "Mumbai": 116600000, - "N. California": 150420000, - "N. Virginia": 91800000, - "Ohio": 104640000, - "Oregon": 144270000, - "Osaka": 231030000, - "Paris": 11290000, - "Sao Paulo": 203510000, - "Seoul": 224880000, - "Singapore": 160150000, - "Stockholm": 21930000, - "Sydney": 250780000, - "Tokyo": 225150000, - }, - "Hong Kong": { - "Bahrain": 128520000, - "Cape Town": 302150000, - "Central": 195390000, - "Frankfurt": 187810000, - "Hong Kong": 3170000, - "Ireland": 213790000, - "London": 204320000, - "Milan": 179380000, - "Mumbai": 91240000, - "N. California": 155830000, - "N. Virginia": 196580000, - "Ohio": 183070000, - "Oregon": 145400000, - "Osaka": 50320000, - "Paris": 197860000, - "Sao Paulo": 306810000, - "Seoul": 37950000, - "Singapore": 37740000, - "Stockholm": 209000000, - "Sydney": 127530000, - "Tokyo": 53590000, - }, - "Ireland": { - "Bahrain": 97760000, - "Cape Town": 169410000, - "Central": 72090000, - "Frankfurt": 28680000, - "Hong Kong": 213420000, - "Ireland": 2390000, - "London": 14540000, - "Milan": 35940000, - "Mumbai": 124940000, - "N. California": 139340000, - "N. Virginia": 71000000, - "Ohio": 78720000, - "Oregon": 119150000, - "Osaka": 209010000, - "Paris": 20070000, - "Sao Paulo": 177080000, - "Seoul": 232240000, - "Singapore": 181660000, - "Stockholm": 43110000, - "Sydney": 257920000, - "Tokyo": 202690000, - }, - "London": { - "Bahrain": 85440000, - "Cape Town": 154820000, - "Central": 79020000, - "Frankfurt": 19290000, - "Hong Kong": 204000000, - "Ireland": 13800000, - "London": 2360000, - "Milan": 25720000, - "Mumbai": 114770000, - "N. California": 148130000, - "N. Virginia": 77160000, - "Ohio": 86130000, - "Oregon": 128340000, - "Osaka": 215620000, - "Paris": 9670000, - "Sao Paulo": 186280000, - "Seoul": 242370000, - "Singapore": 173550000, - "Stockholm": 32650000, - "Sydney": 265410000, - "Tokyo": 211940000, - }, - "Milan": { - "Bahrain": 89340000, - "Cape Town": 168500000, - "Central": 100640000, - "Frankfurt": 11290000, - "Hong Kong": 179680000, - "Ireland": 35020000, - "London": 25670000, - "Milan": 2020000, - "Mumbai": 110220000, - "N. California": 160480000, - "N. Virginia": 100550000, - "Ohio": 110590000, - "Oregon": 150520000, - "Osaka": 219350000, - "Paris": 20160000, - "Sao Paulo": 212890000, - "Seoul": 213660000, - "Singapore": 149530000, - "Stockholm": 30460000, - "Sydney": 241460000, - "Tokyo": 214260000, - }, - "Mumbai": { - "Bahrain": 42100000, - "Cape Town": 223270000, - "Central": 188970000, - "Frankfurt": 117200000, - "Hong Kong": 93120000, - "Ireland": 124670000, - "London": 114350000, - "Milan": 110340000, - "Mumbai": 4780000, - "N. California": 231530000, - "N. Virginia": 187540000, - "Ohio": 198760000, - "Oregon": 224660000, - "Osaka": 127650000, - "Paris": 106600000, - "Sao Paulo": 299050000, - "Seoul": 125280000, - "Singapore": 60440000, - "Stockholm": 136360000, - "Sydney": 153330000, - "Tokyo": 130120000, - }, - "N. California": { - "Bahrain": 218930000, - "Cape Town": 292500000, - "Central": 79660000, - "Frankfurt": 151030000, - "Hong Kong": 155150000, - "Ireland": 137910000, - "London": 147060000, - "Milan": 160700000, - "Mumbai": 230640000, - "N. California": 2660000, - "N. Virginia": 60940000, - "Ohio": 50920000, - "Oregon": 22840000, - "Osaka": 109990000, - "Paris": 142840000, - "Sao Paulo": 172850000, - "Seoul": 137140000, - "Singapore": 177770000, - "Stockholm": 174140000, - "Sydney": 139920000, - "Tokyo": 108210000, - }, - "N. Virginia": { - "Bahrain": 158900000, - "Cape Town": 234730000, - "Central": 16700000, - "Frankfurt": 91760000, - "Hong Kong": 195960000, - "Ireland": 67510000, - "London": 78450000, - "Milan": 101050000, - "Mumbai": 190230000, - "N. California": 64090000, - "N. Virginia": 3880000, - "Ohio": 16470000, - "Oregon": 63330000, - "Osaka": 153320000, - "Paris": 82660000, - "Sao Paulo": 113950000, - "Seoul": 174240000, - "Singapore": 215860000, - "Stockholm": 111430000, - "Sydney": 197730000, - "Tokyo": 145350000, - }, - "Ohio": { - "Bahrain": 169330000, - "Cape Town": 240910000, - "Central": 30680000, - "Frankfurt": 105070000, - "Hong Kong": 184090000, - "Ireland": 79280000, - "London": 90320000, - "Milan": 114010000, - "Mumbai": 197490000, - "N. California": 55260000, - "N. Virginia": 15100000, - "Ohio": 6690000, - "Oregon": 56150000, - "Osaka": 138050000, - "Paris": 93300000, - "Sao Paulo": 124210000, - "Seoul": 160940000, - "Singapore": 203260000, - "Stockholm": 121670000, - "Sydney": 187400000, - "Tokyo": 132450000, - }, - "Oregon": { - "Bahrain": 210450000, - "Cape Town": 276300000, - "Central": 60200000, - "Frankfurt": 141270000, - "Hong Kong": 147240000, - "Ireland": 119150000, - "London": 128460000, - "Milan": 150710000, - "Mumbai": 222880000, - "N. California": 22050000, - "N. Virginia": 63320000, - "Ohio": 48680000, - "Oregon": 2620000, - "Osaka": 99050000, - "Paris": 134280000, - "Sao Paulo": 175060000, - "Seoul": 126750000, - "Singapore": 168230000, - "Stockholm": 157110000, - "Sydney": 140910000, - "Tokyo": 97970000, - }, - "Osaka": { - "Bahrain": 164600000, - "Cape Town": 365240000, - "Central": 149270000, - "Frankfurt": 228450000, - "Hong Kong": 49430000, - "Ireland": 207430000, - "London": 216380000, - "Milan": 218940000, - "Mumbai": 122630000, - "N. California": 108940000, - "N. Virginia": 151660000, - "Ohio": 138200000, - "Oregon": 99570000, - "Osaka": 1370000, - "Paris": 222280000, - "Sao Paulo": 262450000, - "Seoul": 29860000, - "Singapore": 73500000, - "Stockholm": 249560000, - "Sydney": 117090000, - "Tokyo": 9600000, - }, - "Paris": { - "Bahrain": 81280000, - "Cape Town": 150180000, - "Central": 86320000, - "Frankfurt": 13030000, - "Hong Kong": 198040000, - "Ireland": 18510000, - "London": 10650000, - "Milan": 21550000, - "Mumbai": 106920000, - "N. California": 142450000, - "N. Virginia": 83390000, - "Ohio": 92990000, - "Oregon": 134860000, - "Osaka": 221540000, - "Paris": 2120000, - "Sao Paulo": 195400000, - "Seoul": 245570000, - "Singapore": 165780000, - "Stockholm": 31260000, - "Sydney": 278850000, - "Tokyo": 216200000, - }, - "Sao Paulo": { - "Bahrain": 272560000, - "Cape Town": 343840000, - "Central": 126100000, - "Frankfurt": 204080000, - "Hong Kong": 307420000, - "Ireland": 178700000, - "London": 187720000, - "Milan": 215200000, - "Mumbai": 300950000, - "N. California": 173950000, - "N. Virginia": 114640000, - "Ohio": 125220000, - "Oregon": 175980000, - "Osaka": 262870000, - "Paris": 196480000, - "Sao Paulo": 3490000, - "Seoul": 286750000, - "Singapore": 326640000, - "Stockholm": 216820000, - "Sydney": 311900000, - "Tokyo": 257420000, - }, - "Seoul": { - "Bahrain": 162890000, - "Cape Town": 389610000, - "Central": 172820000, - "Frankfurt": 223400000, - "Hong Kong": 38700000, - "Ireland": 230110000, - "London": 242020000, - "Milan": 214750000, - "Mumbai": 125130000, - "N. California": 136870000, - "N. Virginia": 174610000, - "Ohio": 160650000, - "Oregon": 127160000, - "Osaka": 31420000, - "Paris": 244820000, - "Sao Paulo": 285140000, - "Seoul": 2630000, - "Singapore": 71770000, - "Stockholm": 246090000, - "Sydney": 146150000, - "Tokyo": 34300000, - }, - "Singapore": { - "Bahrain": 97590000, - "Cape Town": 272520000, - "Central": 212250000, - "Frankfurt": 157900000, - "Hong Kong": 37870000, - "Ireland": 182600000, - "London": 172570000, - "Milan": 148150000, - "Mumbai": 60110000, - "N. California": 178710000, - "N. Virginia": 215850000, - "Ohio": 201380000, - "Oregon": 167800000, - "Osaka": 72140000, - "Paris": 167250000, - "Sao Paulo": 326280000, - "Seoul": 72480000, - "Singapore": 3010000, - "Stockholm": 177940000, - "Sydney": 96130000, - "Tokyo": 72940000, - }, - "Stockholm": { - "Bahrain": 107090000, - "Cape Town": 182550000, - "Central": 109860000, - "Frankfurt": 24060000, - "Hong Kong": 209780000, - "Ireland": 43540000, - "London": 32440000, - "Milan": 32160000, - "Mumbai": 137870000, - "N. California": 174440000, - "N. Virginia": 111770000, - "Ohio": 121120000, - "Oregon": 157710000, - "Osaka": 248910000, - "Paris": 31160000, - "Sao Paulo": 215150000, - "Seoul": 243650000, - "Singapore": 180620000, - "Stockholm": 2380000, - "Sydney": 294980000, - "Tokyo": 244750000, - }, - "Sydney": { - "Bahrain": 190510000, - "Cape Town": 416640000, - "Central": 199570000, - "Frankfurt": 252120000, - "Hong Kong": 128970000, - "Ireland": 257330000, - "London": 268110000, - "Milan": 240820000, - "Mumbai": 150870000, - "N. California": 139070000, - "N. Virginia": 197680000, - "Ohio": 187150000, - "Oregon": 141980000, - "Osaka": 116950000, - "Paris": 279750000, - "Sao Paulo": 312540000, - "Seoul": 145840000, - "Singapore": 94940000, - "Stockholm": 293820000, - "Sydney": 2070000, - "Tokyo": 110630000, - }, - "Tokyo": { - "Bahrain": 168550000, - "Cape Town": 363380000, - "Central": 144410000, - "Frankfurt": 226840000, - "Hong Kong": 54670000, - "Ireland": 202590000, - "London": 211730000, - "Milan": 214970000, - "Mumbai": 130810000, - "N. California": 110600000, - "N. Virginia": 147880000, - "Ohio": 132090000, - "Oregon": 100550000, - "Osaka": 14400000, - "Paris": 217900000, - "Sao Paulo": 256610000, - "Seoul": 34880000, - "Singapore": 76790000, - "Stockholm": 245930000, - "Sydney": 110150000, - "Tokyo": 6280000, - }, -} diff --git a/backend/options.go b/backend/options.go index 5b9267ac..720ead60 100644 --- a/backend/options.go +++ b/backend/options.go @@ -1,38 +1,26 @@ package backend import ( - "time" - "github.com/relab/gorums" "github.com/relab/hotstuff" + "github.com/relab/hotstuff/internal/latency" ) type backendOptions struct { - location string - locationInfo map[hotstuff.ID]string - locationLatencies map[string]time.Duration - gorumsSrvOpts []gorums.ServerOption + id hotstuff.ID + latencyMatrix latency.Matrix + gorumsSrvOpts []gorums.ServerOption } // ServerOptions is a function for configuring the Server. type ServerOptions func(*backendOptions) -// WithLatencyInfo sets the location of the replica and the latency matrix. -func WithLatencyInfo(id hotstuff.ID, locationInfo map[hotstuff.ID]string) ServerOptions { +// WithLocations sets the locations assigned to the replicas and +// constructs the corresponding latency matrix. +func WithLocations(id hotstuff.ID, locations []string) ServerOptions { return func(opts *backendOptions) { - location, ok := locationInfo[id] - if !ok { - opts.location = hotstuff.DefaultLocation - return - } - opts.location = location - opts.locationInfo = locationInfo - locationLatencies, ok := latencies[location] - if !ok { - opts.location = hotstuff.DefaultLocation - return - } - opts.locationLatencies = locationLatencies + opts.id = id + opts.latencyMatrix = latency.MatrixFrom(locations) } } diff --git a/backend/server.go b/backend/server.go index 8cbeb4ba..d9351eba 100644 --- a/backend/server.go +++ b/backend/server.go @@ -13,6 +13,7 @@ import ( "github.com/relab/gorums" "github.com/relab/hotstuff" + "github.com/relab/hotstuff/internal/latency" "github.com/relab/hotstuff/internal/proto/hotstuffpb" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" @@ -28,9 +29,8 @@ type Server struct { configuration modules.Configuration eventLoop *eventloop.EventLoop logger logging.Logger - location string - locationInfo map[hotstuff.ID]string - latencyMatrix map[string]time.Duration + id hotstuff.ID + lm latency.Matrix gorumsSrv *gorums.Server } @@ -51,9 +51,8 @@ func NewServer(opts ...ServerOptions) *Server { opt(options) } srv := &Server{ - location: options.location, - locationInfo: options.locationInfo, - latencyMatrix: options.locationLatencies, + id: options.id, + lm: options.latencyMatrix, } options.gorumsSrvOpts = append(options.gorumsSrvOpts, gorums.WithConnectCallback(func(ctx context.Context) { srv.eventLoop.AddEvent(replicaConnected{ctx}) @@ -64,13 +63,12 @@ func NewServer(opts ...ServerOptions) *Server { } func (srv *Server) induceLatency(sender hotstuff.ID) { - if srv.location == hotstuff.DefaultLocation { + if srv.lm.Enabled() { return } - senderLocation := srv.locationInfo[sender] - senderLatency := srv.latencyMatrix[senderLocation] - srv.logger.Debugf("latency from server %s to server %s is %s\n", srv.location, senderLocation, senderLatency) - timer1 := time.NewTimer(senderLatency) + delay := srv.lm.Latency(srv.id, sender) + srv.logger.Debugf("Adding delay between %s and %s: %v\n", srv.lm.Location(srv.id), srv.lm.Location(sender), delay) + timer1 := time.NewTimer(delay) <-timer1.C } diff --git a/internal/orchestration/controller.go b/internal/orchestration/controller.go index 40ba93bc..bb0ee745 100644 --- a/internal/orchestration/controller.go +++ b/internal/orchestration/controller.go @@ -181,7 +181,7 @@ func (e *Experiment) assignReplicasAndClients() (err error) { e.hostsToReplicas = make(map[string][]hotstuff.ID) e.replicaOpts = make(map[hotstuff.ID]*orchestrationpb.ReplicaOpts) e.hostsToClients = make(map[string][]hotstuff.ID) - replicaLocationInfo := make(map[uint32]string) + replicaLocations := make([]string, 0, e.NumReplicas) nextReplicaID := hotstuff.ID(1) nextClientID := hotstuff.ID(1) @@ -273,9 +273,9 @@ func (e *Experiment) assignReplicasAndClients() (err error) { replicaOpts := proto.Clone(e.ReplicaOpts).(*orchestrationpb.ReplicaOpts) replicaOpts.ID = uint32(nextReplicaID) replicaOpts.ByzantineStrategy = byzantineStrategy - replicaLocationInfo[replicaOpts.ID] = location - // all replicaOpts share the same LocationInfo map, which is progressively updated - replicaOpts.LocationInfo = replicaLocationInfo + replicaLocations = append(replicaLocations, location) + // all replicaOpts share the same Locations slice, which is progressively updated + replicaOpts.Locations = replicaLocations e.hostsToReplicas[host] = append(e.hostsToReplicas[host], nextReplicaID) e.replicaOpts[nextReplicaID] = replicaOpts e.Logger.Infof("replica %d assigned to host %s", nextReplicaID, host) diff --git a/internal/orchestration/worker.go b/internal/orchestration/worker.go index 290d66d6..0ff018ef 100644 --- a/internal/orchestration/worker.go +++ b/internal/orchestration/worker.go @@ -220,19 +220,14 @@ func (w *Worker) createReplica(opts *orchestrationpb.ReplicaOpts) (*replica.Repl } builder.Add(m) } - // convert location info map key from uint32 to hotstuff.ID - locationInfo := make(map[hotstuff.ID]string) - for k, v := range opts.GetLocationInfo() { - locationInfo[hotstuff.ID(k)] = v - } c := replica.Config{ - ID: hotstuff.ID(opts.GetID()), - PrivateKey: privKey, - TLS: opts.GetUseTLS(), - Certificate: &certificate, - RootCAs: rootCAs, - LocationInfo: locationInfo, - BatchSize: opts.GetBatchSize(), + ID: hotstuff.ID(opts.GetID()), + PrivateKey: privKey, + TLS: opts.GetUseTLS(), + Certificate: &certificate, + RootCAs: rootCAs, + Locations: opts.GetLocations(), + BatchSize: opts.GetBatchSize(), ManagerOptions: []gorums.ManagerOption{ gorums.WithDialTimeout(opts.GetConnectTimeout().AsDuration()), gorums.WithGrpcDialOptions(grpc.WithReturnConnectionError()), diff --git a/internal/proto/orchestrationpb/orchestration.pb.go b/internal/proto/orchestrationpb/orchestration.pb.go index 3b83b42a..d0e174e1 100644 --- a/internal/proto/orchestrationpb/orchestration.pb.go +++ b/internal/proto/orchestrationpb/orchestration.pb.go @@ -63,8 +63,8 @@ type ReplicaOpts struct { SharedSeed int64 `protobuf:"varint,20,opt,name=SharedSeed,proto3" json:"SharedSeed,omitempty"` // A list of modules to load. Modules []string `protobuf:"bytes,21,rep,name=Modules,proto3" json:"Modules,omitempty"` - // locations of the replicas - LocationInfo map[uint32]string `protobuf:"bytes,22,rep,name=LocationInfo,proto3" json:"LocationInfo,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Replica locations indexed by replica ID. + Locations []string `protobuf:"bytes,22,rep,name=Locations,proto3" json:"Locations,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -232,9 +232,9 @@ func (x *ReplicaOpts) GetModules() []string { return nil } -func (x *ReplicaOpts) GetLocationInfo() map[uint32]string { +func (x *ReplicaOpts) GetLocations() []string { if x != nil { - return x.LocationInfo + return x.Locations } return nil } @@ -982,7 +982,7 @@ var file_internal_proto_orchestrationpb_orchestration_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x81, 0x07, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8a, 0x06, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x61, @@ -1029,160 +1029,153 @@ var file_internal_proto_orchestrationpb_orchestration_proto_rawDesc = []byte{ 0x61, 0x72, 0x65, 0x64, 0x53, 0x65, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x53, 0x65, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x0c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x72, 0x63, - 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x4f, 0x70, 0x74, 0x73, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x3f, 0x0a, 0x11, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x97, 0x01, 0x0a, 0x0b, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x50, 0x6f, 0x72, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x50, - 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x72, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, - 0x6f, 0x72, 0x74, 0x22, 0xf5, 0x02, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4f, 0x70, - 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, - 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x12, 0x24, 0x0a, 0x0d, 0x4d, 0x61, - 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0d, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x74, 0x65, 0x53, 0x74, 0x65, 0x70, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x52, 0x61, 0x74, 0x65, 0x53, 0x74, 0x65, 0x70, 0x12, - 0x45, 0x0a, 0x10, 0x52, 0x61, 0x74, 0x65, 0x53, 0x74, 0x65, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x52, 0x61, 0x74, 0x65, 0x53, 0x74, 0x65, 0x70, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x33, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xc2, 0x01, 0x0a, 0x14, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x73, 0x1a, 0x59, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xc2, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4f, 0x0a, 0x08, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x72, - 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x43, 0x72, + 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0b, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xf5, 0x02, 0x0a, + 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x55, + 0x73, 0x65, 0x54, 0x4c, 0x53, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x55, 0x73, 0x65, + 0x54, 0x4c, 0x53, 0x12, 0x24, 0x0a, 0x0d, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x4d, 0x61, 0x78, 0x43, + 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x09, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x52, 0x61, 0x74, 0x65, 0x53, 0x74, 0x65, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, + 0x52, 0x61, 0x74, 0x65, 0x53, 0x74, 0x65, 0x70, 0x12, 0x45, 0x0a, 0x10, 0x52, 0x61, 0x74, 0x65, + 0x53, 0x74, 0x65, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x52, + 0x61, 0x74, 0x65, 0x53, 0x74, 0x65, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, + 0x33, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x22, 0xc2, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, + 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x1a, 0x59, + 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc2, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x73, 0x74, 0x12, 0x4f, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x73, 0x1a, 0x59, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4f, + 0x70, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc4, + 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x72, 0x63, + 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x1a, 0x59, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x4f, 0x70, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc4, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x50, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x73, 0x1a, 0x59, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe6, 0x01, 0x0a, - 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0d, 0x52, 0x03, 0x49, 0x44, 0x73, 0x12, 0x5d, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, - 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe6, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x49, 0x44, 0x73, 0x12, + 0x5d, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x5e, + 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x16, + 0x0a, 0x14, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x49, 0x44, 0x73, 0x22, 0x9f, + 0x02, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, + 0x12, 0x48, 0x0a, 0x06, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xab, 0x03, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x07, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x14, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x5c, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, + 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, + 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x5e, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, - 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x0a, - 0x12, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, - 0x52, 0x03, 0x49, 0x44, 0x73, 0x22, 0x9f, 0x02, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, - 0x06, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, - 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xab, 0x03, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, - 0x0a, 0x07, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, - 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x07, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x14, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x5c, - 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x57, 0x0a, 0x0c, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, - 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x0a, 0x11, - 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, - 0x49, 0x44, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0d, 0x0a, 0x0b, 0x51, 0x75, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x62, 0x2f, 0x68, 0x6f, 0x74, - 0x73, 0x74, 0x75, 0x66, 0x66, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x57, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4f, + 0x70, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, + 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x15, + 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x44, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x49, 0x44, 0x73, 0x22, 0x14, 0x0a, 0x12, + 0x53, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x0d, 0x0a, 0x0b, 0x51, 0x75, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x72, 0x65, 0x6c, 0x61, 0x62, 0x2f, 0x68, 0x6f, 0x74, 0x73, 0x74, 0x75, 0x66, 0x66, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x72, + 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1197,7 +1190,7 @@ func file_internal_proto_orchestrationpb_orchestration_proto_rawDescGZIP() []byt return file_internal_proto_orchestrationpb_orchestration_proto_rawDescData } -var file_internal_proto_orchestrationpb_orchestration_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_internal_proto_orchestrationpb_orchestration_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_internal_proto_orchestrationpb_orchestration_proto_goTypes = []any{ (*ReplicaOpts)(nil), // 0: orchestrationpb.ReplicaOpts (*ReplicaInfo)(nil), // 1: orchestrationpb.ReplicaInfo @@ -1214,44 +1207,42 @@ var file_internal_proto_orchestrationpb_orchestration_proto_goTypes = []any{ (*StopClientRequest)(nil), // 12: orchestrationpb.StopClientRequest (*StopClientResponse)(nil), // 13: orchestrationpb.StopClientResponse (*QuitRequest)(nil), // 14: orchestrationpb.QuitRequest - nil, // 15: orchestrationpb.ReplicaOpts.LocationInfoEntry - nil, // 16: orchestrationpb.ReplicaConfiguration.ReplicasEntry - nil, // 17: orchestrationpb.CreateReplicaRequest.ReplicasEntry - nil, // 18: orchestrationpb.CreateReplicaResponse.ReplicasEntry - nil, // 19: orchestrationpb.StartReplicaRequest.ConfigurationEntry - nil, // 20: orchestrationpb.StopReplicaResponse.HashesEntry - nil, // 21: orchestrationpb.StopReplicaResponse.CountsEntry - nil, // 22: orchestrationpb.StartClientRequest.ClientsEntry - nil, // 23: orchestrationpb.StartClientRequest.ConfigurationEntry - (*durationpb.Duration)(nil), // 24: google.protobuf.Duration + nil, // 15: orchestrationpb.ReplicaConfiguration.ReplicasEntry + nil, // 16: orchestrationpb.CreateReplicaRequest.ReplicasEntry + nil, // 17: orchestrationpb.CreateReplicaResponse.ReplicasEntry + nil, // 18: orchestrationpb.StartReplicaRequest.ConfigurationEntry + nil, // 19: orchestrationpb.StopReplicaResponse.HashesEntry + nil, // 20: orchestrationpb.StopReplicaResponse.CountsEntry + nil, // 21: orchestrationpb.StartClientRequest.ClientsEntry + nil, // 22: orchestrationpb.StartClientRequest.ConfigurationEntry + (*durationpb.Duration)(nil), // 23: google.protobuf.Duration } var file_internal_proto_orchestrationpb_orchestration_proto_depIdxs = []int32{ - 24, // 0: orchestrationpb.ReplicaOpts.ConnectTimeout:type_name -> google.protobuf.Duration - 24, // 1: orchestrationpb.ReplicaOpts.InitialTimeout:type_name -> google.protobuf.Duration - 24, // 2: orchestrationpb.ReplicaOpts.MaxTimeout:type_name -> google.protobuf.Duration - 15, // 3: orchestrationpb.ReplicaOpts.LocationInfo:type_name -> orchestrationpb.ReplicaOpts.LocationInfoEntry - 24, // 4: orchestrationpb.ClientOpts.ConnectTimeout:type_name -> google.protobuf.Duration - 24, // 5: orchestrationpb.ClientOpts.RateStepInterval:type_name -> google.protobuf.Duration - 24, // 6: orchestrationpb.ClientOpts.Timeout:type_name -> google.protobuf.Duration - 16, // 7: orchestrationpb.ReplicaConfiguration.Replicas:type_name -> orchestrationpb.ReplicaConfiguration.ReplicasEntry - 17, // 8: orchestrationpb.CreateReplicaRequest.Replicas:type_name -> orchestrationpb.CreateReplicaRequest.ReplicasEntry - 18, // 9: orchestrationpb.CreateReplicaResponse.Replicas:type_name -> orchestrationpb.CreateReplicaResponse.ReplicasEntry - 19, // 10: orchestrationpb.StartReplicaRequest.Configuration:type_name -> orchestrationpb.StartReplicaRequest.ConfigurationEntry - 20, // 11: orchestrationpb.StopReplicaResponse.Hashes:type_name -> orchestrationpb.StopReplicaResponse.HashesEntry - 21, // 12: orchestrationpb.StopReplicaResponse.Counts:type_name -> orchestrationpb.StopReplicaResponse.CountsEntry - 22, // 13: orchestrationpb.StartClientRequest.Clients:type_name -> orchestrationpb.StartClientRequest.ClientsEntry - 23, // 14: orchestrationpb.StartClientRequest.Configuration:type_name -> orchestrationpb.StartClientRequest.ConfigurationEntry - 1, // 15: orchestrationpb.ReplicaConfiguration.ReplicasEntry.value:type_name -> orchestrationpb.ReplicaInfo - 0, // 16: orchestrationpb.CreateReplicaRequest.ReplicasEntry.value:type_name -> orchestrationpb.ReplicaOpts - 1, // 17: orchestrationpb.CreateReplicaResponse.ReplicasEntry.value:type_name -> orchestrationpb.ReplicaInfo - 1, // 18: orchestrationpb.StartReplicaRequest.ConfigurationEntry.value:type_name -> orchestrationpb.ReplicaInfo - 2, // 19: orchestrationpb.StartClientRequest.ClientsEntry.value:type_name -> orchestrationpb.ClientOpts - 1, // 20: orchestrationpb.StartClientRequest.ConfigurationEntry.value:type_name -> orchestrationpb.ReplicaInfo - 21, // [21:21] is the sub-list for method output_type - 21, // [21:21] is the sub-list for method input_type - 21, // [21:21] is the sub-list for extension type_name - 21, // [21:21] is the sub-list for extension extendee - 0, // [0:21] is the sub-list for field type_name + 23, // 0: orchestrationpb.ReplicaOpts.ConnectTimeout:type_name -> google.protobuf.Duration + 23, // 1: orchestrationpb.ReplicaOpts.InitialTimeout:type_name -> google.protobuf.Duration + 23, // 2: orchestrationpb.ReplicaOpts.MaxTimeout:type_name -> google.protobuf.Duration + 23, // 3: orchestrationpb.ClientOpts.ConnectTimeout:type_name -> google.protobuf.Duration + 23, // 4: orchestrationpb.ClientOpts.RateStepInterval:type_name -> google.protobuf.Duration + 23, // 5: orchestrationpb.ClientOpts.Timeout:type_name -> google.protobuf.Duration + 15, // 6: orchestrationpb.ReplicaConfiguration.Replicas:type_name -> orchestrationpb.ReplicaConfiguration.ReplicasEntry + 16, // 7: orchestrationpb.CreateReplicaRequest.Replicas:type_name -> orchestrationpb.CreateReplicaRequest.ReplicasEntry + 17, // 8: orchestrationpb.CreateReplicaResponse.Replicas:type_name -> orchestrationpb.CreateReplicaResponse.ReplicasEntry + 18, // 9: orchestrationpb.StartReplicaRequest.Configuration:type_name -> orchestrationpb.StartReplicaRequest.ConfigurationEntry + 19, // 10: orchestrationpb.StopReplicaResponse.Hashes:type_name -> orchestrationpb.StopReplicaResponse.HashesEntry + 20, // 11: orchestrationpb.StopReplicaResponse.Counts:type_name -> orchestrationpb.StopReplicaResponse.CountsEntry + 21, // 12: orchestrationpb.StartClientRequest.Clients:type_name -> orchestrationpb.StartClientRequest.ClientsEntry + 22, // 13: orchestrationpb.StartClientRequest.Configuration:type_name -> orchestrationpb.StartClientRequest.ConfigurationEntry + 1, // 14: orchestrationpb.ReplicaConfiguration.ReplicasEntry.value:type_name -> orchestrationpb.ReplicaInfo + 0, // 15: orchestrationpb.CreateReplicaRequest.ReplicasEntry.value:type_name -> orchestrationpb.ReplicaOpts + 1, // 16: orchestrationpb.CreateReplicaResponse.ReplicasEntry.value:type_name -> orchestrationpb.ReplicaInfo + 1, // 17: orchestrationpb.StartReplicaRequest.ConfigurationEntry.value:type_name -> orchestrationpb.ReplicaInfo + 2, // 18: orchestrationpb.StartClientRequest.ClientsEntry.value:type_name -> orchestrationpb.ClientOpts + 1, // 19: orchestrationpb.StartClientRequest.ConfigurationEntry.value:type_name -> orchestrationpb.ReplicaInfo + 20, // [20:20] is the sub-list for method output_type + 20, // [20:20] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name } func init() { file_internal_proto_orchestrationpb_orchestration_proto_init() } @@ -1265,7 +1256,7 @@ func file_internal_proto_orchestrationpb_orchestration_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_internal_proto_orchestrationpb_orchestration_proto_rawDesc, NumEnums: 0, - NumMessages: 24, + NumMessages: 23, NumExtensions: 0, NumServices: 0, }, diff --git a/internal/proto/orchestrationpb/orchestration.proto b/internal/proto/orchestrationpb/orchestration.proto index 1ea35340..2eac4fc3 100644 --- a/internal/proto/orchestrationpb/orchestration.proto +++ b/internal/proto/orchestrationpb/orchestration.proto @@ -51,8 +51,8 @@ message ReplicaOpts { int64 SharedSeed = 20; // A list of modules to load. repeated string Modules = 21; - // locations of the replicas - map LocationInfo = 22; + // Replica locations indexed by replica ID. + repeated string Locations = 22; } // ReplicaInfo is the information that the replicas need about each other. @@ -100,9 +100,13 @@ message ReplicaConfiguration { /* ---------------------------- CreateReplica RPC --------------------------- */ -message CreateReplicaRequest { map Replicas = 1; } +message CreateReplicaRequest { + map Replicas = 1; +} -message CreateReplicaResponse { map Replicas = 1; } +message CreateReplicaResponse { + map Replicas = 1; +} /* ---------------------------- StartReplica RPC ---------------------------- */ @@ -117,13 +121,15 @@ message StartReplicaResponse {} /* ----------------------------- StopReplica RPC ---------------------------- */ -message StopReplicaRequest { repeated uint32 IDs = 1; } +message StopReplicaRequest { + repeated uint32 IDs = 1; +} -message StopReplicaResponse { +message StopReplicaResponse { // The final state hash of all executed commands - map Hashes = 1; + map Hashes = 1; // The final count of executed commands - map Counts = 2; + map Counts = 2; } /* ----------------------------- StartClient RPC ---------------------------- */ @@ -141,7 +147,9 @@ message StartClientResponse {} /* ----------------------------- StopClient RPC ----------------------------- */ -message StopClientRequest { repeated uint32 IDs = 1; } +message StopClientRequest { + repeated uint32 IDs = 1; +} message StopClientResponse {} diff --git a/replica/replica.go b/replica/replica.go index 2a963e9a..a3f55aca 100644 --- a/replica/replica.go +++ b/replica/replica.go @@ -44,8 +44,8 @@ type Config struct { ReplicaServerOptions []gorums.ServerOption // Options for the replica manager. ManagerOptions []gorums.ManagerOption - // Location information of all replicas - LocationInfo map[hotstuff.ID]string + // Location names of all replicas. + Locations []string } // Replica is a participant in the consensus protocol. @@ -91,7 +91,7 @@ func New(conf Config, builder modules.Builder) (replica *Replica) { } srv.hsSrv = backend.NewServer( - backend.WithLatencyInfo(conf.ID, conf.LocationInfo), + backend.WithLocations(conf.ID, conf.Locations), backend.WithGorumsServerOptions(replicaSrvOpts...), )