mirror of https://github.com/grpc/grpc-go.git
xdsclient: add Cluster Specifier Name to Route (#4972)
* xdsclient: add Cluster Specifier Name to Route
This commit is contained in:
parent
82d8af8bf0
commit
6e79bc8afe
|
@ -111,14 +111,14 @@ func (s) TestRDSHandleResponseWithRouting(t *testing.T) {
|
|||
Domains: []string{uninterestingDomain},
|
||||
Routes: []*xdsresource.Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]xdsresource.WeightedCluster{uninterestingClusterName: {Weight: 1}},
|
||||
RouteAction: xdsresource.RouteActionRoute}},
|
||||
ActionType: xdsresource.RouteActionRoute}},
|
||||
},
|
||||
{
|
||||
Domains: []string{goodLDSTarget1},
|
||||
Routes: []*xdsresource.Route{{
|
||||
Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]xdsresource.WeightedCluster{goodClusterName2: {Weight: 1}},
|
||||
RouteAction: xdsresource.RouteActionRoute}},
|
||||
ActionType: xdsresource.RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
Raw: marshaledGoodRouteConfig2,
|
||||
|
@ -142,13 +142,13 @@ func (s) TestRDSHandleResponseWithRouting(t *testing.T) {
|
|||
Routes: []*xdsresource.Route{{
|
||||
Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]xdsresource.WeightedCluster{uninterestingClusterName: {Weight: 1}},
|
||||
RouteAction: xdsresource.RouteActionRoute}},
|
||||
ActionType: xdsresource.RouteActionRoute}},
|
||||
},
|
||||
{
|
||||
Domains: []string{goodLDSTarget1},
|
||||
Routes: []*xdsresource.Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]xdsresource.WeightedCluster{goodClusterName1: {Weight: 1}},
|
||||
RouteAction: xdsresource.RouteActionRoute}},
|
||||
ActionType: xdsresource.RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
Raw: marshaledGoodRouteConfig1,
|
||||
|
|
|
@ -86,8 +86,8 @@ type VirtualHostWithInterceptors struct {
|
|||
type RouteWithInterceptors struct {
|
||||
// M is the matcher used to match to this route.
|
||||
M *CompositeMatcher
|
||||
// RouteAction is the type of routing action to initiate once matched to.
|
||||
RouteAction RouteAction
|
||||
// ActionType is the type of routing action to initiate once matched to.
|
||||
ActionType RouteActionType
|
||||
// Interceptors are interceptors instantiated for this route. These will be
|
||||
// constructed from a combination of the top level configuration and any
|
||||
// HTTP Filter overrides present in Virtual Host or Route.
|
||||
|
@ -112,7 +112,7 @@ func (f *FilterChain) convertVirtualHost(virtualHost *VirtualHost) (VirtualHostW
|
|||
rs := make([]RouteWithInterceptors, len(virtualHost.Routes))
|
||||
for i, r := range virtualHost.Routes {
|
||||
var err error
|
||||
rs[i].RouteAction = r.RouteAction
|
||||
rs[i].ActionType = r.ActionType
|
||||
rs[i].M, err = RouteToMatcher(r)
|
||||
if err != nil {
|
||||
return VirtualHostWithInterceptors{}, fmt.Errorf("matcher construction: %v", err)
|
||||
|
|
|
@ -66,7 +66,7 @@ var (
|
|||
inlineRouteConfig = &RouteConfigUpdate{
|
||||
VirtualHosts: []*VirtualHost{{
|
||||
Domains: []string{"lds.target.good:3333"},
|
||||
Routes: []*Route{{Prefix: newStringP("/"), RouteAction: RouteActionNonForwardingAction}},
|
||||
Routes: []*Route{{Prefix: newStringP("/"), ActionType: RouteActionNonForwardingAction}},
|
||||
}}}
|
||||
emptyValidNetworkFilters = []*v3listenerpb.Filter{
|
||||
{
|
||||
|
|
|
@ -95,14 +95,14 @@ type HashPolicy struct {
|
|||
RegexSubstitution string
|
||||
}
|
||||
|
||||
// RouteAction is the action of the route from a received RDS response.
|
||||
type RouteAction int
|
||||
// RouteActionType is the action of the route from a received RDS response.
|
||||
type RouteActionType int
|
||||
|
||||
const (
|
||||
// RouteActionUnsupported are routing types currently unsupported by grpc.
|
||||
// According to A36, "A Route with an inappropriate action causes RPCs
|
||||
// matching that route to fail."
|
||||
RouteActionUnsupported RouteAction = iota
|
||||
RouteActionUnsupported RouteActionType = iota
|
||||
// RouteActionRoute is the expected route type on the client side. Route
|
||||
// represents routing a request to some upstream cluster. On the client
|
||||
// side, if an RPC matches to a route that is not RouteActionRoute, the RPC
|
||||
|
@ -129,7 +129,6 @@ type Route struct {
|
|||
HashPolicies []*HashPolicy
|
||||
|
||||
// If the matchers above indicate a match, the below configuration is used.
|
||||
WeightedClusters map[string]WeightedCluster
|
||||
// If MaxStreamDuration is nil, it indicates neither of the route action's
|
||||
// max_stream_duration fields (grpc_timeout_header_max nor
|
||||
// max_stream_duration) were set. In this case, the ListenerUpdate's
|
||||
|
@ -143,10 +142,17 @@ type Route struct {
|
|||
HTTPFilterConfigOverride map[string]httpfilter.FilterConfig
|
||||
RetryConfig *RetryConfig
|
||||
|
||||
RouteAction RouteAction
|
||||
ActionType RouteActionType
|
||||
|
||||
// Only one of the following fields (WeightedClusters or
|
||||
// ClusterSpecifierPlugin) will be set for a route.
|
||||
WeightedClusters map[string]WeightedCluster
|
||||
// ClusterSpecifierPlugin is the name of the Cluster Specifier Plugin that
|
||||
// this Route is linked to, if specified by xDS.
|
||||
ClusterSpecifierPlugin string
|
||||
}
|
||||
|
||||
// WeightedCluster contains settings for an xds RouteAction.WeightedCluster.
|
||||
// WeightedCluster contains settings for an xds ActionType.WeightedCluster.
|
||||
type WeightedCluster struct {
|
||||
// Weight is the relative weight of the cluster. It will never be zero.
|
||||
Weight uint32
|
||||
|
|
|
@ -633,7 +633,7 @@ func (s) TestUnmarshalListener_ClientSide(t *testing.T) {
|
|||
InlineRouteConfig: &RouteConfigUpdate{
|
||||
VirtualHosts: []*VirtualHost{{
|
||||
Domains: []string{v3LDSTarget},
|
||||
Routes: []*Route{{Prefix: newStringP("/"), WeightedClusters: map[string]WeightedCluster{clusterName: {Weight: 1}}, RouteAction: RouteActionRoute}},
|
||||
Routes: []*Route{{Prefix: newStringP("/"), WeightedClusters: map[string]WeightedCluster{clusterName: {Weight: 1}}, ActionType: RouteActionRoute}},
|
||||
}}},
|
||||
MaxStreamDuration: time.Second,
|
||||
Raw: v3LisWithInlineRoute,
|
||||
|
@ -730,7 +730,7 @@ func (s) TestUnmarshalListener_ServerSide(t *testing.T) {
|
|||
inlineRouteConfig = &RouteConfigUpdate{
|
||||
VirtualHosts: []*VirtualHost{{
|
||||
Domains: []string{"lds.target.good:3333"},
|
||||
Routes: []*Route{{Prefix: newStringP("/"), RouteAction: RouteActionNonForwardingAction}},
|
||||
Routes: []*Route{{Prefix: newStringP("/"), ActionType: RouteActionNonForwardingAction}},
|
||||
}}}
|
||||
emptyValidNetworkFilters = []*v3listenerpb.Filter{
|
||||
{
|
||||
|
|
|
@ -119,7 +119,7 @@ func generateRDSUpdateFromRouteConfiguration(rc *v3routepb.RouteConfiguration, l
|
|||
}
|
||||
|
||||
// "For any entry in the RouteConfiguration.cluster_specifier_plugins not
|
||||
// referenced by an enclosed RouteAction's cluster_specifier_plugin, the xDS
|
||||
// referenced by an enclosed ActionType's cluster_specifier_plugin, the xDS
|
||||
// client should not provide it to its consumers." - RLS in xDS Design
|
||||
for name := range csps {
|
||||
if !cspNames[name] {
|
||||
|
@ -356,6 +356,7 @@ func routesProtoToSlice(routes []*v3routepb.Route, csps map[string]clusterspecif
|
|||
return nil, nil, fmt.Errorf("route %+v, action %+v, specifies a cluster specifier plugin %+v that is not in Route Configuration", r, a, a.ClusterSpecifierPlugin)
|
||||
}
|
||||
cspNames[a.ClusterSpecifierPlugin] = true
|
||||
route.ClusterSpecifierPlugin = a.ClusterSpecifierPlugin
|
||||
default:
|
||||
return nil, nil, fmt.Errorf("route %+v, has an unknown ClusterSpecifier: %+v", r, a)
|
||||
}
|
||||
|
@ -377,13 +378,13 @@ func routesProtoToSlice(routes []*v3routepb.Route, csps map[string]clusterspecif
|
|||
return nil, nil, fmt.Errorf("route %+v, action %+v: %v", r, action, err)
|
||||
}
|
||||
|
||||
route.RouteAction = RouteActionRoute
|
||||
route.ActionType = RouteActionRoute
|
||||
|
||||
case *v3routepb.Route_NonForwardingAction:
|
||||
// Expected to be used on server side.
|
||||
route.RouteAction = RouteActionNonForwardingAction
|
||||
route.ActionType = RouteActionNonForwardingAction
|
||||
default:
|
||||
route.RouteAction = RouteActionUnsupported
|
||||
route.ActionType = RouteActionUnsupported
|
||||
}
|
||||
|
||||
if !v2 {
|
||||
|
|
|
@ -104,7 +104,7 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) {
|
|||
Routes: []*Route{{
|
||||
Prefix: newStringP("/"),
|
||||
WeightedClusters: map[string]WeightedCluster{clusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
HTTPFilterConfigOverride: cfgs,
|
||||
}},
|
||||
|
@ -114,8 +114,9 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) {
|
|||
VirtualHosts: []*VirtualHost{{
|
||||
Domains: []string{ldsTarget},
|
||||
Routes: []*Route{{
|
||||
Prefix: newStringP("1"),
|
||||
RouteAction: RouteActionRoute,
|
||||
Prefix: newStringP("1"),
|
||||
ActionType: RouteActionRoute,
|
||||
ClusterSpecifierPlugin: "cspA",
|
||||
}},
|
||||
}},
|
||||
ClusterSpecifierPlugins: map[string]clusterspecifier.BalancerConfig{
|
||||
|
@ -155,7 +156,7 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) {
|
|||
Routes: []*Route{{
|
||||
Prefix: newStringP("/"),
|
||||
WeightedClusters: map[string]WeightedCluster{clusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
RetryConfig: rrc,
|
||||
}},
|
||||
RetryConfig: vhrc,
|
||||
|
@ -263,7 +264,7 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) {
|
|||
Routes: []*Route{{Prefix: newStringP("/"),
|
||||
CaseInsensitive: true,
|
||||
WeightedClusters: map[string]WeightedCluster{clusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -307,13 +308,13 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) {
|
|||
Domains: []string{uninterestingDomain},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{uninterestingClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
{
|
||||
Domains: []string{ldsTarget},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{clusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -345,7 +346,7 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) {
|
|||
Domains: []string{ldsTarget},
|
||||
Routes: []*Route{{Prefix: newStringP("/"),
|
||||
WeightedClusters: map[string]WeightedCluster{clusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -422,7 +423,7 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) {
|
|||
"b": {Weight: 3},
|
||||
"c": {Weight: 5},
|
||||
},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
},
|
||||
},
|
||||
|
@ -457,7 +458,7 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) {
|
|||
Prefix: newStringP("/"),
|
||||
WeightedClusters: map[string]WeightedCluster{clusterName: {Weight: 1}},
|
||||
MaxStreamDuration: newDurationP(time.Second),
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
},
|
||||
},
|
||||
|
@ -492,7 +493,7 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) {
|
|||
Prefix: newStringP("/"),
|
||||
WeightedClusters: map[string]WeightedCluster{clusterName: {Weight: 1}},
|
||||
MaxStreamDuration: newDurationP(time.Second),
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
},
|
||||
},
|
||||
|
@ -527,7 +528,7 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) {
|
|||
Prefix: newStringP("/"),
|
||||
WeightedClusters: map[string]WeightedCluster{clusterName: {Weight: 1}},
|
||||
MaxStreamDuration: newDurationP(0),
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
},
|
||||
},
|
||||
|
@ -860,13 +861,13 @@ func (s) TestUnmarshalRouteConfig(t *testing.T) {
|
|||
Domains: []string{uninterestingDomain},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{uninterestingClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
{
|
||||
Domains: []string{ldsTarget},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{v2ClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
Raw: v2RouteConfig,
|
||||
|
@ -887,13 +888,13 @@ func (s) TestUnmarshalRouteConfig(t *testing.T) {
|
|||
Domains: []string{uninterestingDomain},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{uninterestingClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
{
|
||||
Domains: []string{ldsTarget},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{v3ClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
Raw: v3RouteConfig,
|
||||
|
@ -914,13 +915,13 @@ func (s) TestUnmarshalRouteConfig(t *testing.T) {
|
|||
Domains: []string{uninterestingDomain},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{uninterestingClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
{
|
||||
Domains: []string{ldsTarget},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{v3ClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
Raw: v3RouteConfig,
|
||||
|
@ -931,13 +932,13 @@ func (s) TestUnmarshalRouteConfig(t *testing.T) {
|
|||
Domains: []string{uninterestingDomain},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{uninterestingClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
{
|
||||
Domains: []string{ldsTarget},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{v2ClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
Raw: v2RouteConfig,
|
||||
|
@ -969,13 +970,13 @@ func (s) TestUnmarshalRouteConfig(t *testing.T) {
|
|||
Domains: []string{uninterestingDomain},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{uninterestingClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
{
|
||||
Domains: []string{ldsTarget},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{v3ClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
Raw: v3RouteConfig,
|
||||
|
@ -986,13 +987,13 @@ func (s) TestUnmarshalRouteConfig(t *testing.T) {
|
|||
Domains: []string{uninterestingDomain},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{uninterestingClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
{
|
||||
Domains: []string{ldsTarget},
|
||||
Routes: []*Route{{Prefix: newStringP(""),
|
||||
WeightedClusters: map[string]WeightedCluster{v2ClusterName: {Weight: 1}},
|
||||
RouteAction: RouteActionRoute}},
|
||||
ActionType: RouteActionRoute}},
|
||||
},
|
||||
},
|
||||
Raw: v2RouteConfig,
|
||||
|
@ -1059,7 +1060,7 @@ func (s) TestRoutesProtoToSlice(t *testing.T) {
|
|||
CaseInsensitive: true,
|
||||
WeightedClusters: map[string]WeightedCluster{"A": {Weight: 40}, "B": {Weight: 60, HTTPFilterConfigOverride: cfgs}},
|
||||
HTTPFilterConfigOverride: cfgs,
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}}
|
||||
}
|
||||
)
|
||||
|
@ -1099,7 +1100,7 @@ func (s) TestRoutesProtoToSlice(t *testing.T) {
|
|||
Prefix: newStringP("/"),
|
||||
CaseInsensitive: true,
|
||||
WeightedClusters: map[string]WeightedCluster{"A": {Weight: 40}, "B": {Weight: 60}},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
},
|
||||
{
|
||||
|
@ -1147,7 +1148,7 @@ func (s) TestRoutesProtoToSlice(t *testing.T) {
|
|||
},
|
||||
Fraction: newUInt32P(10000),
|
||||
WeightedClusters: map[string]WeightedCluster{"A": {Weight: 40}, "B": {Weight: 60}},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
wantErr: false,
|
||||
},
|
||||
|
@ -1193,7 +1194,7 @@ func (s) TestRoutesProtoToSlice(t *testing.T) {
|
|||
},
|
||||
Fraction: newUInt32P(10000),
|
||||
WeightedClusters: map[string]WeightedCluster{"A": {Weight: 40}, "B": {Weight: 60}},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
wantErr: false,
|
||||
},
|
||||
|
@ -1228,7 +1229,7 @@ func (s) TestRoutesProtoToSlice(t *testing.T) {
|
|||
wantRoutes: []*Route{{
|
||||
Prefix: newStringP("/a/"),
|
||||
WeightedClusters: map[string]WeightedCluster{"A": {Weight: 40}, "B": {Weight: 60}},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
wantErr: false,
|
||||
},
|
||||
|
@ -1410,7 +1411,7 @@ func (s) TestRoutesProtoToSlice(t *testing.T) {
|
|||
wantRoutes: []*Route{{
|
||||
Prefix: newStringP("/a/"),
|
||||
WeightedClusters: map[string]WeightedCluster{"A": {Weight: 40}, "B": {Weight: 60}},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
wantErr: false,
|
||||
},
|
||||
|
@ -1436,7 +1437,7 @@ func (s) TestRoutesProtoToSlice(t *testing.T) {
|
|||
wantRoutes: []*Route{{
|
||||
Prefix: newStringP("/a/"),
|
||||
WeightedClusters: map[string]WeightedCluster{"A": {Weight: 20}, "B": {Weight: 30}},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
wantErr: false,
|
||||
},
|
||||
|
@ -1492,7 +1493,7 @@ func (s) TestRoutesProtoToSlice(t *testing.T) {
|
|||
HashPolicies: []*HashPolicy{
|
||||
{HashPolicyType: HashPolicyTypeChannelID},
|
||||
},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
wantErr: false,
|
||||
},
|
||||
|
@ -1551,7 +1552,7 @@ func (s) TestRoutesProtoToSlice(t *testing.T) {
|
|||
{HashPolicyType: HashPolicyTypeHeader,
|
||||
HeaderName: ":path"},
|
||||
},
|
||||
RouteAction: RouteActionRoute,
|
||||
ActionType: RouteActionRoute,
|
||||
}},
|
||||
wantErr: false,
|
||||
},
|
||||
|
|
|
@ -359,7 +359,7 @@ func routeAndProcess(ctx context.Context) error {
|
|||
if r.M.Match(rpcInfo) {
|
||||
// "NonForwardingAction is expected for all Routes used on server-side; a route with an inappropriate action causes
|
||||
// RPCs matching that route to fail with UNAVAILABLE." - A36
|
||||
if r.RouteAction != xdsresource.RouteActionNonForwardingAction {
|
||||
if r.ActionType != xdsresource.RouteActionNonForwardingAction {
|
||||
return status.Error(codes.Unavailable, "the incoming RPC matched to a route that was not of action type non forwarding")
|
||||
}
|
||||
rwi = &r
|
||||
|
|
Loading…
Reference in New Issue