peering: Make Upstream peer-aware (#12900)
Adds DestinationPeer field to Upstream. Adds Peer field to UpstreamID and its string conversion functions.
This commit is contained in:
parent
23b3f88141
commit
829554c706
|
@ -1697,6 +1697,7 @@ func (b *builder) upstreamsVal(v []Upstream) structs.Upstreams {
|
||||||
DestinationType: stringVal(u.DestinationType),
|
DestinationType: stringVal(u.DestinationType),
|
||||||
DestinationNamespace: stringVal(u.DestinationNamespace),
|
DestinationNamespace: stringVal(u.DestinationNamespace),
|
||||||
DestinationPartition: stringVal(u.DestinationPartition),
|
DestinationPartition: stringVal(u.DestinationPartition),
|
||||||
|
DestinationPeer: stringVal(u.DestinationPeer),
|
||||||
DestinationName: stringVal(u.DestinationName),
|
DestinationName: stringVal(u.DestinationName),
|
||||||
Datacenter: stringVal(u.Datacenter),
|
Datacenter: stringVal(u.Datacenter),
|
||||||
LocalBindAddress: stringVal(u.LocalBindAddress),
|
LocalBindAddress: stringVal(u.LocalBindAddress),
|
||||||
|
|
|
@ -505,6 +505,7 @@ type Upstream struct {
|
||||||
DestinationType *string `mapstructure:"destination_type"`
|
DestinationType *string `mapstructure:"destination_type"`
|
||||||
DestinationNamespace *string `mapstructure:"destination_namespace"`
|
DestinationNamespace *string `mapstructure:"destination_namespace"`
|
||||||
DestinationPartition *string `mapstructure:"destination_partition"`
|
DestinationPartition *string `mapstructure:"destination_partition"`
|
||||||
|
DestinationPeer *string `mapstructure:"destination_peer"`
|
||||||
DestinationName *string `mapstructure:"destination_name"`
|
DestinationName *string `mapstructure:"destination_name"`
|
||||||
|
|
||||||
// Datacenter that the service discovery request should be run against. Note
|
// Datacenter that the service discovery request should be run against. Note
|
||||||
|
|
|
@ -21,6 +21,7 @@ func UpstreamSNI(u *structs.Upstream, subset string, dc string, trustDomain stri
|
||||||
if u.DestinationType == structs.UpstreamDestTypePreparedQuery {
|
if u.DestinationType == structs.UpstreamDestTypePreparedQuery {
|
||||||
return QuerySNI(u.DestinationName, dc, trustDomain)
|
return QuerySNI(u.DestinationName, dc, trustDomain)
|
||||||
}
|
}
|
||||||
|
// TODO(peering): account for peer here?
|
||||||
return ServiceSNI(u.DestinationName, subset, u.DestinationNamespace, u.DestinationPartition, dc, trustDomain)
|
return ServiceSNI(u.DestinationName, subset, u.DestinationNamespace, u.DestinationPartition, dc, trustDomain)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -121,6 +121,7 @@ func (s *handlerIngressGateway) handleUpdate(ctx context.Context, u cache.Update
|
||||||
|
|
||||||
uid := NewUpstreamID(&u)
|
uid := NewUpstreamID(&u)
|
||||||
|
|
||||||
|
// TODO(peering): pipe destination_peer here
|
||||||
watchOpts := discoveryChainWatchOpts{
|
watchOpts := discoveryChainWatchOpts{
|
||||||
id: uid,
|
id: uid,
|
||||||
name: u.DestinationName,
|
name: u.DestinationName,
|
||||||
|
|
|
@ -11,6 +11,9 @@ type UpstreamID struct {
|
||||||
Type string
|
Type string
|
||||||
Name string
|
Name string
|
||||||
Datacenter string
|
Datacenter string
|
||||||
|
// If Peer is not empty, Namespace refers to the remote
|
||||||
|
// peer namespace and Partition refers to the local partition
|
||||||
|
Peer string
|
||||||
acl.EnterpriseMeta
|
acl.EnterpriseMeta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,11 +26,13 @@ func NewUpstreamID(u *structs.Upstream) UpstreamID {
|
||||||
u.DestinationPartition,
|
u.DestinationPartition,
|
||||||
u.DestinationNamespace,
|
u.DestinationNamespace,
|
||||||
),
|
),
|
||||||
|
Peer: u.DestinationPeer,
|
||||||
}
|
}
|
||||||
id.normalize()
|
id.normalize()
|
||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(peering): confirm we don't need peername here
|
||||||
func NewUpstreamIDFromServiceName(sn structs.ServiceName) UpstreamID {
|
func NewUpstreamIDFromServiceName(sn structs.ServiceName) UpstreamID {
|
||||||
id := UpstreamID{
|
id := UpstreamID{
|
||||||
Name: sn.Name,
|
Name: sn.Name,
|
||||||
|
@ -37,6 +42,7 @@ func NewUpstreamIDFromServiceName(sn structs.ServiceName) UpstreamID {
|
||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(peering): confirm we don't need peername here
|
||||||
func NewUpstreamIDFromServiceID(sid structs.ServiceID) UpstreamID {
|
func NewUpstreamIDFromServiceID(sid structs.ServiceID) UpstreamID {
|
||||||
id := UpstreamID{
|
id := UpstreamID{
|
||||||
Name: sid.ID,
|
Name: sid.ID,
|
||||||
|
@ -46,6 +52,7 @@ func NewUpstreamIDFromServiceID(sid structs.ServiceID) UpstreamID {
|
||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(peering): confirm we don't need peername here
|
||||||
func NewUpstreamIDFromTargetID(tid string) UpstreamID {
|
func NewUpstreamIDFromTargetID(tid string) UpstreamID {
|
||||||
// Drop the leading subset if one is present in the target ID.
|
// Drop the leading subset if one is present in the target ID.
|
||||||
separators := strings.Count(tid, ".")
|
separators := strings.Count(tid, ".")
|
||||||
|
@ -76,7 +83,7 @@ func (u *UpstreamID) normalize() {
|
||||||
// String encodes the UpstreamID into a string for use in agent cache keys.
|
// String encodes the UpstreamID into a string for use in agent cache keys.
|
||||||
// You can decode it back again using UpstreamIDFromString.
|
// You can decode it back again using UpstreamIDFromString.
|
||||||
func (u UpstreamID) String() string {
|
func (u UpstreamID) String() string {
|
||||||
return UpstreamIDString(u.Type, u.Datacenter, u.Name, &u.EnterpriseMeta)
|
return UpstreamIDString(u.Type, u.Datacenter, u.Name, &u.EnterpriseMeta, u.Peer)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u UpstreamID) GoString() string {
|
func (u UpstreamID) GoString() string {
|
||||||
|
@ -84,12 +91,13 @@ func (u UpstreamID) GoString() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpstreamIDFromString(input string) UpstreamID {
|
func UpstreamIDFromString(input string) UpstreamID {
|
||||||
typ, dc, name, entMeta := ParseUpstreamIDString(input)
|
typ, dc, name, entMeta, peerName := ParseUpstreamIDString(input)
|
||||||
id := UpstreamID{
|
id := UpstreamID{
|
||||||
Type: typ,
|
Type: typ,
|
||||||
Datacenter: dc,
|
Datacenter: dc,
|
||||||
Name: name,
|
Name: name,
|
||||||
EnterpriseMeta: *entMeta,
|
EnterpriseMeta: *entMeta,
|
||||||
|
Peer: peerName,
|
||||||
}
|
}
|
||||||
id.normalize()
|
id.normalize()
|
||||||
return id
|
return id
|
||||||
|
@ -97,21 +105,25 @@ func UpstreamIDFromString(input string) UpstreamID {
|
||||||
|
|
||||||
const upstreamTypePreparedQueryPrefix = structs.UpstreamDestTypePreparedQuery + ":"
|
const upstreamTypePreparedQueryPrefix = structs.UpstreamDestTypePreparedQuery + ":"
|
||||||
|
|
||||||
func ParseUpstreamIDString(input string) (typ, dc, name string, meta *acl.EnterpriseMeta) {
|
func ParseUpstreamIDString(input string) (typ, dc, name string, meta *acl.EnterpriseMeta, peerName string) {
|
||||||
if strings.HasPrefix(input, upstreamTypePreparedQueryPrefix) {
|
if strings.HasPrefix(input, upstreamTypePreparedQueryPrefix) {
|
||||||
typ = structs.UpstreamDestTypePreparedQuery
|
typ = structs.UpstreamDestTypePreparedQuery
|
||||||
input = strings.TrimPrefix(input, upstreamTypePreparedQueryPrefix)
|
input = strings.TrimPrefix(input, upstreamTypePreparedQueryPrefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
idx := strings.LastIndex(input, "?dc=")
|
before, after, found := strings.Cut(input, "?")
|
||||||
if idx != -1 {
|
input = before
|
||||||
dc = input[idx+4:]
|
if found {
|
||||||
input = input[0:idx]
|
if _, peerVal, ok := strings.Cut(after, "peer="); ok {
|
||||||
|
peerName = peerVal
|
||||||
|
} else if _, dcVal, ok2 := strings.Cut(after, "dc="); ok2 {
|
||||||
|
dc = dcVal
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
name, meta = parseInnerUpstreamIDString(input)
|
name, meta = parseInnerUpstreamIDString(input)
|
||||||
|
|
||||||
return typ, dc, name, meta
|
return typ, dc, name, meta, peerName
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnvoyID returns a string representation that uniquely identifies the
|
// EnvoyID returns a string representation that uniquely identifies the
|
||||||
|
@ -126,7 +138,9 @@ func (u UpstreamID) EnvoyID() string {
|
||||||
name := u.enterpriseIdentifierPrefix() + u.Name
|
name := u.enterpriseIdentifierPrefix() + u.Name
|
||||||
typ := u.Type
|
typ := u.Type
|
||||||
|
|
||||||
if u.Datacenter != "" {
|
if u.Peer != "" {
|
||||||
|
name += "?peer=" + u.Peer
|
||||||
|
} else if u.Datacenter != "" {
|
||||||
name += "?dc=" + u.Datacenter
|
name += "?dc=" + u.Datacenter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,12 @@ import (
|
||||||
"github.com/hashicorp/consul/agent/structs"
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
)
|
)
|
||||||
|
|
||||||
func UpstreamIDString(typ, dc, name string, _ *acl.EnterpriseMeta) string {
|
func UpstreamIDString(typ, dc, name string, _ *acl.EnterpriseMeta, peerName string) string {
|
||||||
ret := name
|
ret := name
|
||||||
|
|
||||||
if dc != "" {
|
if peerName != "" {
|
||||||
|
ret += "?peer=" + peerName
|
||||||
|
} else if dc != "" {
|
||||||
ret += "?dc=" + dc
|
ret += "?dc=" + dc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
"github.com/hashicorp/consul/agent/structs"
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO(freddy): Needs enterprise test
|
|
||||||
func TestUpstreamIDFromTargetID(t *testing.T) {
|
func TestUpstreamIDFromTargetID(t *testing.T) {
|
||||||
type testcase struct {
|
type testcase struct {
|
||||||
tid string
|
tid string
|
||||||
|
@ -91,6 +90,13 @@ func TestUpstreamIDFromString(t *testing.T) {
|
||||||
Datacenter: "dc2",
|
Datacenter: "dc2",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"normal with peer": {
|
||||||
|
"foo?peer=payments",
|
||||||
|
UpstreamID{
|
||||||
|
Name: "foo",
|
||||||
|
Peer: "payments",
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, tc := range cases {
|
for name, tc := range cases {
|
||||||
|
@ -159,6 +165,13 @@ func TestUpstreamID_String(t *testing.T) {
|
||||||
},
|
},
|
||||||
prefix + "foo?dc=dc2",
|
prefix + "foo?dc=dc2",
|
||||||
},
|
},
|
||||||
|
"normal with peer": {
|
||||||
|
UpstreamID{
|
||||||
|
Name: "foo",
|
||||||
|
Peer: "payments",
|
||||||
|
},
|
||||||
|
prefix + "foo?peer=payments",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, tc := range cases {
|
for name, tc := range cases {
|
||||||
|
@ -222,6 +235,13 @@ func TestUpstreamID_EnvoyID(t *testing.T) {
|
||||||
},
|
},
|
||||||
"foo?dc=dc2",
|
"foo?dc=dc2",
|
||||||
},
|
},
|
||||||
|
"normal with peer": {
|
||||||
|
UpstreamID{
|
||||||
|
Name: "foo",
|
||||||
|
Peer: "billing",
|
||||||
|
},
|
||||||
|
"foo?peer=billing",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, tc := range cases {
|
for name, tc := range cases {
|
||||||
|
|
|
@ -124,6 +124,14 @@ func copyProxyConfig(ns *structs.NodeService) (structs.ConnectProxyConfig, error
|
||||||
if us.DestinationNamespace == "" {
|
if us.DestinationNamespace == "" {
|
||||||
proxyCfg.Upstreams[idx].DestinationNamespace = ns.EnterpriseMeta.NamespaceOrDefault()
|
proxyCfg.Upstreams[idx].DestinationNamespace = ns.EnterpriseMeta.NamespaceOrDefault()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If PeerName is not empty, the DestinationPartition refers
|
||||||
|
// to the local Partition in which the Peer exists and the
|
||||||
|
// DestinationNamespace refers to the Namespace residing in
|
||||||
|
// the remote peer
|
||||||
|
if us.DestinationPeer == "" {
|
||||||
|
proxyCfg.Upstreams[idx].DestinationPeer = ns.PeerName
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -338,6 +338,7 @@ type Upstream struct {
|
||||||
DestinationType string `alias:"destination_type"`
|
DestinationType string `alias:"destination_type"`
|
||||||
DestinationNamespace string `json:",omitempty" alias:"destination_namespace"`
|
DestinationNamespace string `json:",omitempty" alias:"destination_namespace"`
|
||||||
DestinationPartition string `json:",omitempty" alias:"destination_partition"`
|
DestinationPartition string `json:",omitempty" alias:"destination_partition"`
|
||||||
|
DestinationPeer string `json:",omitempty" alias:"destination_peer"`
|
||||||
DestinationName string `alias:"destination_name"`
|
DestinationName string `alias:"destination_name"`
|
||||||
|
|
||||||
// Datacenter that the service discovery request should be run against. Note
|
// Datacenter that the service discovery request should be run against. Note
|
||||||
|
@ -384,6 +385,7 @@ func (t *Upstream) UnmarshalJSON(data []byte) (err error) {
|
||||||
DestinationTypeSnake string `json:"destination_type"`
|
DestinationTypeSnake string `json:"destination_type"`
|
||||||
DestinationPartitionSnake string `json:"destination_partition"`
|
DestinationPartitionSnake string `json:"destination_partition"`
|
||||||
DestinationNamespaceSnake string `json:"destination_namespace"`
|
DestinationNamespaceSnake string `json:"destination_namespace"`
|
||||||
|
DestinationPeerSnake string `json:"destination_peer"`
|
||||||
DestinationNameSnake string `json:"destination_name"`
|
DestinationNameSnake string `json:"destination_name"`
|
||||||
|
|
||||||
LocalBindAddressSnake string `json:"local_bind_address"`
|
LocalBindAddressSnake string `json:"local_bind_address"`
|
||||||
|
@ -410,6 +412,9 @@ func (t *Upstream) UnmarshalJSON(data []byte) (err error) {
|
||||||
if t.DestinationPartition == "" {
|
if t.DestinationPartition == "" {
|
||||||
t.DestinationPartition = aux.DestinationPartitionSnake
|
t.DestinationPartition = aux.DestinationPartitionSnake
|
||||||
}
|
}
|
||||||
|
if t.DestinationPeer == "" {
|
||||||
|
t.DestinationPeer = aux.DestinationPeerSnake
|
||||||
|
}
|
||||||
if t.DestinationName == "" {
|
if t.DestinationName == "" {
|
||||||
t.DestinationName = aux.DestinationNameSnake
|
t.DestinationName = aux.DestinationNameSnake
|
||||||
}
|
}
|
||||||
|
@ -447,6 +452,9 @@ func (u *Upstream) Validate() error {
|
||||||
if u.DestinationName == WildcardSpecifier && !u.CentrallyConfigured {
|
if u.DestinationName == WildcardSpecifier && !u.CentrallyConfigured {
|
||||||
return fmt.Errorf("upstream destination name cannot be a wildcard")
|
return fmt.Errorf("upstream destination name cannot be a wildcard")
|
||||||
}
|
}
|
||||||
|
if u.DestinationPeer != "" && u.Datacenter != "" {
|
||||||
|
return fmt.Errorf("upstream cannot specify both destination peer and datacenter")
|
||||||
|
}
|
||||||
|
|
||||||
if u.LocalBindPort == 0 && u.LocalBindSocketPath == "" && !u.CentrallyConfigured {
|
if u.LocalBindPort == 0 && u.LocalBindSocketPath == "" && !u.CentrallyConfigured {
|
||||||
return fmt.Errorf("upstream local bind port or local socket path must be defined and nonzero")
|
return fmt.Errorf("upstream local bind port or local socket path must be defined and nonzero")
|
||||||
|
@ -467,6 +475,7 @@ func (u *Upstream) ToAPI() api.Upstream {
|
||||||
DestinationType: api.UpstreamDestType(u.DestinationType),
|
DestinationType: api.UpstreamDestType(u.DestinationType),
|
||||||
DestinationNamespace: u.DestinationNamespace,
|
DestinationNamespace: u.DestinationNamespace,
|
||||||
DestinationPartition: u.DestinationPartition,
|
DestinationPartition: u.DestinationPartition,
|
||||||
|
DestinationPeer: u.DestinationPeer,
|
||||||
DestinationName: u.DestinationName,
|
DestinationName: u.DestinationName,
|
||||||
Datacenter: u.Datacenter,
|
Datacenter: u.Datacenter,
|
||||||
LocalBindAddress: u.LocalBindAddress,
|
LocalBindAddress: u.LocalBindAddress,
|
||||||
|
@ -482,13 +491,14 @@ func (u *Upstream) ToAPI() api.Upstream {
|
||||||
// upstream in a canonical way. Set and unset values are deliberately handled
|
// upstream in a canonical way. Set and unset values are deliberately handled
|
||||||
// differently.
|
// differently.
|
||||||
//
|
//
|
||||||
// These fields should be user-specificed explicit values and not inferred
|
// These fields should be user-specified explicit values and not inferred
|
||||||
// values.
|
// values.
|
||||||
func (u *Upstream) ToKey() UpstreamKey {
|
func (u *Upstream) ToKey() UpstreamKey {
|
||||||
return UpstreamKey{
|
return UpstreamKey{
|
||||||
DestinationType: u.DestinationType,
|
DestinationType: u.DestinationType,
|
||||||
DestinationPartition: u.DestinationPartition,
|
DestinationPartition: u.DestinationPartition,
|
||||||
DestinationNamespace: u.DestinationNamespace,
|
DestinationNamespace: u.DestinationNamespace,
|
||||||
|
DestinationPeer: u.DestinationPeer,
|
||||||
DestinationName: u.DestinationName,
|
DestinationName: u.DestinationName,
|
||||||
Datacenter: u.Datacenter,
|
Datacenter: u.Datacenter,
|
||||||
}
|
}
|
||||||
|
@ -528,16 +538,18 @@ type UpstreamKey struct {
|
||||||
DestinationName string
|
DestinationName string
|
||||||
DestinationPartition string
|
DestinationPartition string
|
||||||
DestinationNamespace string
|
DestinationNamespace string
|
||||||
|
DestinationPeer string
|
||||||
Datacenter string
|
Datacenter string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k UpstreamKey) String() string {
|
func (k UpstreamKey) String() string {
|
||||||
return fmt.Sprintf(
|
return fmt.Sprintf(
|
||||||
"[type=%q, name=%q, partition=%q, namespace=%q, datacenter=%q]",
|
"[type=%q, name=%q, partition=%q, namespace=%q, peer=%q, datacenter=%q]",
|
||||||
k.DestinationType,
|
k.DestinationType,
|
||||||
k.DestinationName,
|
k.DestinationName,
|
||||||
k.DestinationPartition,
|
k.DestinationPartition,
|
||||||
k.DestinationNamespace,
|
k.DestinationNamespace,
|
||||||
|
k.DestinationPeer,
|
||||||
k.Datacenter,
|
k.Datacenter,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -548,7 +560,9 @@ func (us *Upstream) String() string {
|
||||||
name := us.enterpriseStringPrefix() + us.DestinationName
|
name := us.enterpriseStringPrefix() + us.DestinationName
|
||||||
typ := us.DestinationType
|
typ := us.DestinationType
|
||||||
|
|
||||||
if us.Datacenter != "" {
|
if us.DestinationPeer != "" {
|
||||||
|
name += "?peer=" + us.DestinationPeer
|
||||||
|
} else if us.Datacenter != "" {
|
||||||
name += "?dc=" + us.Datacenter
|
name += "?dc=" + us.Datacenter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -565,6 +579,7 @@ func UpstreamFromAPI(u api.Upstream) Upstream {
|
||||||
DestinationType: string(u.DestinationType),
|
DestinationType: string(u.DestinationType),
|
||||||
DestinationPartition: u.DestinationPartition,
|
DestinationPartition: u.DestinationPartition,
|
||||||
DestinationNamespace: u.DestinationNamespace,
|
DestinationNamespace: u.DestinationNamespace,
|
||||||
|
DestinationPeer: u.DestinationPeer,
|
||||||
DestinationName: u.DestinationName,
|
DestinationName: u.DestinationName,
|
||||||
Datacenter: u.Datacenter,
|
Datacenter: u.Datacenter,
|
||||||
LocalBindAddress: u.LocalBindAddress,
|
LocalBindAddress: u.LocalBindAddress,
|
||||||
|
|
|
@ -90,7 +90,7 @@ func (s *ServiceDefinition) NodeService() *NodeService {
|
||||||
ns.Proxy.Upstreams[i].DestinationType = UpstreamDestTypeService
|
ns.Proxy.Upstreams[i].DestinationType = UpstreamDestTypeService
|
||||||
}
|
}
|
||||||
|
|
||||||
// If a proxy's namespace is not defined, inherit the proxied service's namespace.
|
// If a proxy's namespace and partition are not defined, inherit from the proxied service
|
||||||
// Applicable only to Consul Enterprise.
|
// Applicable only to Consul Enterprise.
|
||||||
if ns.Proxy.Upstreams[i].DestinationNamespace == "" {
|
if ns.Proxy.Upstreams[i].DestinationNamespace == "" {
|
||||||
ns.Proxy.Upstreams[i].DestinationNamespace = ns.EnterpriseMeta.NamespaceOrEmpty()
|
ns.Proxy.Upstreams[i].DestinationNamespace = ns.EnterpriseMeta.NamespaceOrEmpty()
|
||||||
|
|
|
@ -1349,17 +1349,34 @@ func (s *NodeService) Validate() error {
|
||||||
bindAddrs = make(map[string]struct{})
|
bindAddrs = make(map[string]struct{})
|
||||||
)
|
)
|
||||||
for _, u := range s.Proxy.Upstreams {
|
for _, u := range s.Proxy.Upstreams {
|
||||||
|
|
||||||
destinationPartition := u.DestinationPartition
|
destinationPartition := u.DestinationPartition
|
||||||
if destinationPartition == "" {
|
if destinationPartition == "" {
|
||||||
|
|
||||||
|
// If we have a set DestinationPeer, then DestinationPartition
|
||||||
|
// must match the NodeService's Partition
|
||||||
|
if u.DestinationPeer != "" {
|
||||||
|
destinationPartition = s.PartitionOrDefault()
|
||||||
|
} else {
|
||||||
destinationPartition = acl.DefaultPartitionName
|
destinationPartition = acl.DefaultPartitionName
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if u.DestinationPeer == "" {
|
||||||
// cross DC Upstreams are only allowed for non "default" partitions
|
// cross DC Upstreams are only allowed for non "default" partitions
|
||||||
if u.Datacenter != "" && (destinationPartition != acl.DefaultPartitionName || s.PartitionOrDefault() != "default") {
|
if u.Datacenter != "" && (destinationPartition != acl.DefaultPartitionName || s.PartitionOrDefault() != "default") {
|
||||||
result = multierror.Append(result, fmt.Errorf(
|
result = multierror.Append(result, fmt.Errorf(
|
||||||
"upstreams cannot target another datacenter in non default partition"))
|
"upstreams cannot target another datacenter in non default partition"))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if destinationPartition != s.PartitionOrDefault() {
|
||||||
|
result = multierror.Append(result, fmt.Errorf(
|
||||||
|
"upstreams must target peers in the same partition as the service"))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := u.Validate(); err != nil {
|
if err := u.Validate(); err != nil {
|
||||||
result = multierror.Append(result, err)
|
result = multierror.Append(result, err)
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -166,6 +166,11 @@ var expectedFieldConfigUpstreams bexpr.FieldConfigurations = bexpr.FieldConfigur
|
||||||
CoerceFn: bexpr.CoerceString,
|
CoerceFn: bexpr.CoerceString,
|
||||||
SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches},
|
SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches},
|
||||||
},
|
},
|
||||||
|
"DestinationPeer": &bexpr.FieldConfiguration{
|
||||||
|
StructFieldName: "DestinationPeer",
|
||||||
|
CoerceFn: bexpr.CoerceString,
|
||||||
|
SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches},
|
||||||
|
},
|
||||||
"DestinationName": &bexpr.FieldConfiguration{
|
"DestinationName": &bexpr.FieldConfiguration{
|
||||||
StructFieldName: "DestinationName",
|
StructFieldName: "DestinationName",
|
||||||
CoerceFn: bexpr.CoerceString,
|
CoerceFn: bexpr.CoerceString,
|
||||||
|
|
|
@ -1120,6 +1120,20 @@ func TestStructs_NodeService_ValidateConnectProxy(t *testing.T) {
|
||||||
},
|
},
|
||||||
"upstreams cannot contain duplicates",
|
"upstreams cannot contain duplicates",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"connect-proxy: valid Upstream.PeerDestination",
|
||||||
|
func(x *NodeService) {
|
||||||
|
x.Proxy.Upstreams = Upstreams{
|
||||||
|
{
|
||||||
|
DestinationType: UpstreamDestTypeService,
|
||||||
|
DestinationName: "foo",
|
||||||
|
DestinationPeer: "peer1",
|
||||||
|
LocalBindPort: 5000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
|
@ -1178,6 +1192,36 @@ func TestStructs_NodeService_ValidateConnectProxy_In_Partition(t *testing.T) {
|
||||||
},
|
},
|
||||||
"",
|
"",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"connect-proxy: Upstream with peer targets partition different from NodeService",
|
||||||
|
func(x *NodeService) {
|
||||||
|
x.Proxy.Upstreams = Upstreams{
|
||||||
|
{
|
||||||
|
DestinationType: UpstreamDestTypeService,
|
||||||
|
DestinationName: "foo",
|
||||||
|
DestinationPartition: "part1",
|
||||||
|
DestinationPeer: "peer1",
|
||||||
|
LocalBindPort: 5000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"upstreams must target peers in the same partition as the service",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"connect-proxy: Upstream with peer defaults to NodeService's peer",
|
||||||
|
func(x *NodeService) {
|
||||||
|
x.Proxy.Upstreams = Upstreams{
|
||||||
|
{
|
||||||
|
DestinationType: UpstreamDestTypeService,
|
||||||
|
DestinationName: "foo",
|
||||||
|
// No DestinationPartition here but we assert that it defaults to "bar" and not "default"
|
||||||
|
DestinationPeer: "peer1",
|
||||||
|
LocalBindPort: 5000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
|
|
|
@ -427,6 +427,7 @@ type Upstream struct {
|
||||||
DestinationType UpstreamDestType `json:",omitempty"`
|
DestinationType UpstreamDestType `json:",omitempty"`
|
||||||
DestinationPartition string `json:",omitempty"`
|
DestinationPartition string `json:",omitempty"`
|
||||||
DestinationNamespace string `json:",omitempty"`
|
DestinationNamespace string `json:",omitempty"`
|
||||||
|
DestinationPeer string `json:",omitempty"`
|
||||||
DestinationName string
|
DestinationName string
|
||||||
Datacenter string `json:",omitempty"`
|
Datacenter string `json:",omitempty"`
|
||||||
LocalBindAddress string `json:",omitempty"`
|
LocalBindAddress string `json:",omitempty"`
|
||||||
|
|
|
@ -185,6 +185,7 @@ func UpstreamToStructs(s *Upstream, t *structs.Upstream) {
|
||||||
t.DestinationType = s.DestinationType
|
t.DestinationType = s.DestinationType
|
||||||
t.DestinationNamespace = s.DestinationNamespace
|
t.DestinationNamespace = s.DestinationNamespace
|
||||||
t.DestinationPartition = s.DestinationPartition
|
t.DestinationPartition = s.DestinationPartition
|
||||||
|
t.DestinationPeer = s.DestinationPeer
|
||||||
t.DestinationName = s.DestinationName
|
t.DestinationName = s.DestinationName
|
||||||
t.Datacenter = s.Datacenter
|
t.Datacenter = s.Datacenter
|
||||||
t.LocalBindAddress = s.LocalBindAddress
|
t.LocalBindAddress = s.LocalBindAddress
|
||||||
|
@ -204,6 +205,7 @@ func UpstreamFromStructs(t *structs.Upstream, s *Upstream) {
|
||||||
s.DestinationType = t.DestinationType
|
s.DestinationType = t.DestinationType
|
||||||
s.DestinationNamespace = t.DestinationNamespace
|
s.DestinationNamespace = t.DestinationNamespace
|
||||||
s.DestinationPartition = t.DestinationPartition
|
s.DestinationPartition = t.DestinationPartition
|
||||||
|
s.DestinationPeer = t.DestinationPeer
|
||||||
s.DestinationName = t.DestinationName
|
s.DestinationName = t.DestinationName
|
||||||
s.Datacenter = t.Datacenter
|
s.Datacenter = t.Datacenter
|
||||||
s.LocalBindAddress = t.LocalBindAddress
|
s.LocalBindAddress = t.LocalBindAddress
|
||||||
|
|
|
@ -220,6 +220,8 @@ type Upstream struct {
|
||||||
// on service definitions in various places.
|
// on service definitions in various places.
|
||||||
DestinationType string `protobuf:"bytes,1,opt,name=DestinationType,proto3" json:"DestinationType,omitempty"`
|
DestinationType string `protobuf:"bytes,1,opt,name=DestinationType,proto3" json:"DestinationType,omitempty"`
|
||||||
DestinationNamespace string `protobuf:"bytes,2,opt,name=DestinationNamespace,proto3" json:"DestinationNamespace,omitempty"`
|
DestinationNamespace string `protobuf:"bytes,2,opt,name=DestinationNamespace,proto3" json:"DestinationNamespace,omitempty"`
|
||||||
|
DestinationPartition string `protobuf:"bytes,12,opt,name=DestinationPartition,proto3" json:"DestinationPartition,omitempty"`
|
||||||
|
DestinationPeer string `protobuf:"bytes,13,opt,name=DestinationPeer,proto3" json:"DestinationPeer,omitempty"`
|
||||||
DestinationName string `protobuf:"bytes,3,opt,name=DestinationName,proto3" json:"DestinationName,omitempty"`
|
DestinationName string `protobuf:"bytes,3,opt,name=DestinationName,proto3" json:"DestinationName,omitempty"`
|
||||||
// Datacenter that the service discovery request should be run against. Note
|
// Datacenter that the service discovery request should be run against. Note
|
||||||
// for prepared queries, the actual results might be from a different
|
// for prepared queries, the actual results might be from a different
|
||||||
|
@ -245,7 +247,6 @@ type Upstream struct {
|
||||||
// LocalBindSocketPath is the socket to create to connect to the upstream service
|
// LocalBindSocketPath is the socket to create to connect to the upstream service
|
||||||
LocalBindSocketPath string `protobuf:"bytes,10,opt,name=LocalBindSocketPath,proto3" json:"LocalBindSocketPath,omitempty"`
|
LocalBindSocketPath string `protobuf:"bytes,10,opt,name=LocalBindSocketPath,proto3" json:"LocalBindSocketPath,omitempty"`
|
||||||
LocalBindSocketMode string `protobuf:"bytes,11,opt,name=LocalBindSocketMode,proto3" json:"LocalBindSocketMode,omitempty"`
|
LocalBindSocketMode string `protobuf:"bytes,11,opt,name=LocalBindSocketMode,proto3" json:"LocalBindSocketMode,omitempty"`
|
||||||
DestinationPartition string `protobuf:"bytes,12,opt,name=DestinationPartition,proto3" json:"DestinationPartition,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Upstream) Reset() {
|
func (x *Upstream) Reset() {
|
||||||
|
@ -294,6 +295,20 @@ func (x *Upstream) GetDestinationNamespace() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *Upstream) GetDestinationPartition() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.DestinationPartition
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Upstream) GetDestinationPeer() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.DestinationPeer
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func (x *Upstream) GetDestinationName() string {
|
func (x *Upstream) GetDestinationName() string {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.DestinationName
|
return x.DestinationName
|
||||||
|
@ -357,13 +372,6 @@ func (x *Upstream) GetLocalBindSocketMode() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Upstream) GetDestinationPartition() string {
|
|
||||||
if x != nil {
|
|
||||||
return x.DestinationPartition
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// ServiceConnect are the shared Connect settings between all service
|
// ServiceConnect are the shared Connect settings between all service
|
||||||
// definitions from the agent to the state store.
|
// definitions from the agent to the state store.
|
||||||
// mog annotation:
|
// mog annotation:
|
||||||
|
@ -1076,141 +1084,144 @@ var file_proto_pbservice_service_proto_rawDesc = []byte{
|
||||||
0x79, 0x12, 0x36, 0x0a, 0x16, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
0x79, 0x12, 0x36, 0x0a, 0x16, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||||
0x65, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28,
|
0x65, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28,
|
||||||
0x09, 0x52, 0x16, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53,
|
0x09, 0x52, 0x16, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53,
|
||||||
0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0xbf, 0x04, 0x0a, 0x08, 0x55, 0x70,
|
0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0xe9, 0x04, 0x0a, 0x08, 0x55, 0x70,
|
||||||
0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e,
|
0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e,
|
||||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65,
|
0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65,
|
||||||
0x12, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e,
|
0x12, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e,
|
||||||
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14,
|
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14,
|
||||||
0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73,
|
0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73,
|
||||||
0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
|
0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
|
||||||
0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x44,
|
0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01,
|
||||||
0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e,
|
0x28, 0x09, 0x52, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50,
|
||||||
0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01,
|
0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74,
|
||||||
0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2a,
|
0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28,
|
||||||
0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65,
|
0x09, 0x52, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65,
|
||||||
0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42,
|
0x65, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
|
||||||
0x69, 0x6e, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f,
|
0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x44, 0x65, 0x73,
|
||||||
0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
|
0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a,
|
||||||
0x05, 0x52, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74,
|
0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x12, 0x2f, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
|
0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10,
|
||||||
0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
|
||||||
0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69,
|
0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e,
|
||||||
0x67, 0x12, 0x3e, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
|
0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x63, 0x61,
|
||||||
0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69,
|
0x6c, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52,
|
||||||
0x63, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f,
|
0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x2f,
|
||||||
0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
|
0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
|
||||||
0x79, 0x12, 0x30, 0x0a, 0x13, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x43, 0x6f,
|
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
|
||||||
0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13,
|
0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
|
||||||
0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
|
0x3e, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x08,
|
||||||
0x72, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64,
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09,
|
0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66,
|
||||||
|
0x69, 0x67, 0x52, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12,
|
||||||
|
0x30, 0x0a, 0x13, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66,
|
||||||
|
0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x43, 0x65,
|
||||||
|
0x6e, 0x74, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65,
|
||||||
|
0x64, 0x12, 0x30, 0x0a, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x6f,
|
||||||
|
0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13,
|
||||||
|
0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50,
|
||||||
|
0x61, 0x74, 0x68, 0x12, 0x30, 0x0a, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64,
|
||||||
|
0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x52, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x6f, 0x63, 0x6b, 0x65,
|
0x52, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x6f, 0x63, 0x6b, 0x65,
|
||||||
0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x30, 0x0a, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69,
|
0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x6e, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
0x6e, 0x64, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01,
|
0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x61, 0x74, 0x69, 0x76,
|
||||||
0x28, 0x09, 0x52, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x6f, 0x63,
|
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x12,
|
||||||
0x6b, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69,
|
0x44, 0x0a, 0x0e, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||||
0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
|
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76,
|
||||||
0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69,
|
|
||||||
0x6f, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6e, 0x0a, 0x0e, 0x53,
|
|
||||||
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a,
|
|
||||||
0x06, 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e,
|
|
||||||
0x61, 0x74, 0x69, 0x76, 0x65, 0x12, 0x44, 0x0a, 0x0e, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72,
|
|
||||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
|
|
||||||
0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
|
||||||
0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x53, 0x69, 0x64,
|
|
||||||
0x65, 0x63, 0x61, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x53, 0x0a, 0x0c, 0x45,
|
|
||||||
0x78, 0x70, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x43,
|
|
||||||
0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x43, 0x68, 0x65,
|
|
||||||
0x63, 0x6b, 0x73, 0x12, 0x2b, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03,
|
|
||||||
0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45,
|
|
||||||
0x78, 0x70, 0x6f, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73,
|
|
||||||
0x22, 0xb0, 0x01, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12,
|
|
||||||
0x22, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18,
|
|
||||||
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50,
|
|
||||||
0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28,
|
|
||||||
0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c,
|
|
||||||
0x50, 0x61, 0x74, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d,
|
|
||||||
0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a,
|
|
||||||
0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
|
|
||||||
0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x61, 0x72,
|
|
||||||
0x73, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01,
|
|
||||||
0x28, 0x08, 0x52, 0x0f, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68,
|
|
||||||
0x65, 0x63, 0x6b, 0x22, 0x27, 0x0a, 0x11, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77,
|
|
||||||
0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65,
|
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x74, 0x0a, 0x16,
|
|
||||||
0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79,
|
|
||||||
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x32, 0x0a, 0x14, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75,
|
|
||||||
0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x01,
|
|
||||||
0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4c, 0x69,
|
|
||||||
0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x44, 0x69,
|
|
||||||
0x61, 0x6c, 0x65, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01,
|
|
||||||
0x28, 0x08, 0x52, 0x0e, 0x44, 0x69, 0x61, 0x6c, 0x65, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74,
|
|
||||||
0x6c, 0x79, 0x22, 0xd4, 0x06, 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65,
|
|
||||||
0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64,
|
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02,
|
|
||||||
0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04,
|
|
||||||
0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65,
|
|
||||||
0x12, 0x12, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04,
|
|
||||||
0x54, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18,
|
|
||||||
0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x5b,
|
|
||||||
0x0a, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65,
|
|
||||||
0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76,
|
|
||||||
0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e,
|
0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e,
|
||||||
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72,
|
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x53, 0x65,
|
||||||
0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x54, 0x61, 0x67, 0x67,
|
0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x53, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x43,
|
||||||
0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x04, 0x4d,
|
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18,
|
||||||
0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x62, 0x73, 0x65,
|
0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, 0x2b, 0x0a,
|
||||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66,
|
0x05, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70,
|
||||||
0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72,
|
0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x50,
|
||||||
0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x18,
|
0x61, 0x74, 0x68, 0x52, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x0a, 0x45,
|
||||||
0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x53,
|
0x78, 0x70, 0x6f, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x69, 0x73,
|
||||||
0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52,
|
0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
|
||||||
0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x43,
|
0x0c, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a,
|
||||||
0x68, 0x65, 0x63, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x73,
|
0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74,
|
||||||
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65,
|
0x68, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x50, 0x6f,
|
||||||
0x52, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x2c, 0x0a, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b,
|
0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50,
|
||||||
0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76,
|
0x61, 0x74, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x43,
|
0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, 0x2c, 0x0a, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73,
|
0x63, 0x6f, 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x46, 0x72, 0x6f,
|
||||||
0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69,
|
0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x50, 0x61,
|
||||||
0x63, 0x65, 0x2e, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x52, 0x07, 0x57, 0x65, 0x69, 0x67,
|
0x72, 0x73, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x27, 0x0a,
|
||||||
0x68, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0b, 0x20, 0x01,
|
0x11, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66,
|
||||||
0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x45, 0x6e, 0x61,
|
0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x62, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x0c,
|
0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x74, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70,
|
||||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x4f,
|
0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
|
||||||
0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x78, 0x79,
|
0x12, 0x32, 0x0a, 0x14, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74,
|
||||||
0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69,
|
0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14,
|
||||||
0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43,
|
0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72,
|
||||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x3e, 0x0a, 0x0e,
|
0x50, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x44, 0x69, 0x61, 0x6c, 0x65, 0x64, 0x44, 0x69,
|
||||||
0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x11,
|
0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x44, 0x69,
|
||||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e,
|
0x61, 0x6c, 0x65, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x22, 0xd4, 0x06, 0x0a,
|
||||||
0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e,
|
0x11, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69,
|
||||||
0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x07,
|
0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
|
0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01,
|
||||||
0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03,
|
||||||
0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x61,
|
||||||
0x74, 0x1a, 0x5d, 0x0a, 0x14, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65,
|
0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, 0x18,
|
||||||
0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
|
0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76,
|
0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x5b, 0x0a, 0x0f, 0x54, 0x61, 0x67, 0x67,
|
||||||
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x73,
|
0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28,
|
||||||
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64,
|
0x0b, 0x32, 0x31, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65,
|
||||||
0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
|
0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
|
||||||
0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
|
0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45,
|
||||||
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
|
0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72,
|
||||||
0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
|
0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20,
|
||||||
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3e, 0x0a, 0x0e, 0x53, 0x65, 0x72,
|
0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e,
|
||||||
0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x41,
|
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f,
|
||||||
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64,
|
0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74,
|
||||||
0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20,
|
0x61, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52,
|
||||||
0x01, 0x28, 0x05, 0x52, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x3d, 0x0a, 0x07, 0x57, 0x65, 0x69,
|
0x04, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50,
|
||||||
0x67, 0x68, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18,
|
0x61, 0x74, 0x68, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x65,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x12, 0x18,
|
0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x08,
|
||||||
0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68,
|
0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x43, 0x68, 0x65, 0x63,
|
||||||
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
0x6b, 0x12, 0x2c, 0x0a, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28,
|
||||||
0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62,
|
0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68,
|
||||||
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x65, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12,
|
||||||
|
0x2c, 0x0a, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
|
||||||
|
0x32, 0x12, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x65, 0x69,
|
||||||
|
0x67, 0x68, 0x74, 0x73, 0x52, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x14, 0x0a,
|
||||||
|
0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f,
|
||||||
|
0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x61, 0x67,
|
||||||
|
0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11,
|
||||||
|
0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
|
||||||
|
0x65, 0x12, 0x33, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b,
|
||||||
|
0x32, 0x1d, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e,
|
||||||
|
0x6e, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
|
||||||
|
0x05, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x3e, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70,
|
||||||
|
0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,
|
||||||
|
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69,
|
||||||
|
0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69,
|
||||||
|
0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
|
||||||
|
0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76,
|
||||||
|
0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65,
|
||||||
|
0x63, 0x74, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x1a, 0x5d, 0x0a, 0x14, 0x54,
|
||||||
|
0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e,
|
||||||
|
0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||||
|
0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
|
||||||
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
|
0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52,
|
||||||
|
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65,
|
||||||
|
0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
|
||||||
|
0x20, 0x01, 0x28, 0x09, 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, 0x3e, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64,
|
||||||
|
0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
|
||||||
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12,
|
||||||
|
0x12, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x50,
|
||||||
|
0x6f, 0x72, 0x74, 0x22, 0x3d, 0x0a, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x18,
|
||||||
|
0x0a, 0x07, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
|
||||||
|
0x07, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e,
|
||||||
|
0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69,
|
||||||
|
0x6e, 0x67, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
|
||||||
|
0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75,
|
||||||
|
0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||||
|
0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -95,6 +95,8 @@ message Upstream {
|
||||||
// on service definitions in various places.
|
// on service definitions in various places.
|
||||||
string DestinationType = 1;
|
string DestinationType = 1;
|
||||||
string DestinationNamespace = 2;
|
string DestinationNamespace = 2;
|
||||||
|
string DestinationPartition = 12;
|
||||||
|
string DestinationPeer = 13;
|
||||||
string DestinationName = 3;
|
string DestinationName = 3;
|
||||||
|
|
||||||
// Datacenter that the service discovery request should be run against. Note
|
// Datacenter that the service discovery request should be run against. Note
|
||||||
|
@ -127,7 +129,6 @@ message Upstream {
|
||||||
// LocalBindSocketPath is the socket to create to connect to the upstream service
|
// LocalBindSocketPath is the socket to create to connect to the upstream service
|
||||||
string LocalBindSocketPath = 10;
|
string LocalBindSocketPath = 10;
|
||||||
string LocalBindSocketMode = 11;
|
string LocalBindSocketMode = 11;
|
||||||
string DestinationPartition = 12;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ServiceConnect are the shared Connect settings between all service
|
// ServiceConnect are the shared Connect settings between all service
|
||||||
|
|
Loading…
Reference in New Issue