xds_route_config.h
Go to the documentation of this file.
1 //
2 // Copyright 2018 gRPC authors.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 #ifndef GRPC_CORE_EXT_XDS_XDS_ROUTE_CONFIG_H
18 #define GRPC_CORE_EXT_XDS_XDS_ROUTE_CONFIG_H
19 
21 
22 #include <stddef.h>
23 #include <stdint.h>
24 
25 #include <algorithm>
26 #include <map>
27 #include <memory>
28 #include <string>
29 #include <vector>
30 
31 #include "absl/status/statusor.h"
32 #include "absl/strings/string_view.h"
33 #include "absl/types/optional.h"
34 #include "absl/types/variant.h"
37 #include "re2/re2.h"
38 #include "upb/def.h"
39 
48 
49 namespace grpc_core {
50 
51 bool XdsRbacEnabled();
52 
54  using TypedPerFilterConfig =
55  std::map<std::string, XdsHttpFilterImpl::FilterConfig>;
56 
57  struct RetryPolicy {
60 
61  struct RetryBackOff {
64 
65  bool operator==(const RetryBackOff& other) const {
66  return base_interval == other.base_interval &&
67  max_interval == other.max_interval;
68  }
69  std::string ToString() const;
70  };
72 
73  bool operator==(const RetryPolicy& other) const {
74  return (retry_on == other.retry_on && num_retries == other.num_retries &&
76  }
77  std::string ToString() const;
78  };
79 
80  struct Route {
81  // Matchers for this route.
82  struct Matchers {
84  std::vector<HeaderMatcher> header_matchers;
86 
87  bool operator==(const Matchers& other) const {
88  return path_matcher == other.path_matcher &&
91  }
92  std::string ToString() const;
93  };
94 
96 
97  struct UnknownAction {
98  bool operator==(const UnknownAction& /* other */) const { return true; }
99  };
100 
101  struct RouteAction {
102  struct HashPolicy {
103  enum Type { HEADER, CHANNEL_ID };
105  bool terminal = false;
106  // Fields used for type HEADER.
108  std::unique_ptr<RE2> regex = nullptr;
110 
112 
113  // Copyable.
114  HashPolicy(const HashPolicy& other);
115  HashPolicy& operator=(const HashPolicy& other);
116 
117  // Moveable.
118  HashPolicy(HashPolicy&& other) noexcept;
119  HashPolicy& operator=(HashPolicy&& other) noexcept;
120 
121  bool operator==(const HashPolicy& other) const;
122  std::string ToString() const;
123  };
124 
125  struct ClusterWeight {
129 
130  bool operator==(const ClusterWeight& other) const {
131  return name == other.name && weight == other.weight &&
133  }
134  std::string ToString() const;
135  };
136 
137  std::vector<HashPolicy> hash_policies;
139 
140  // Action for this route.
141  static constexpr size_t kClusterIndex = 0;
142  static constexpr size_t kWeightedClustersIndex = 1;
143  static constexpr size_t kClusterSpecifierPluginIndex = 2;
146  // Storing the timeout duration from route action:
147  // RouteAction.max_stream_duration.grpc_timeout_header_max or
148  // RouteAction.max_stream_duration.max_stream_duration if the former is
149  // not set.
151 
152  bool operator==(const RouteAction& other) const {
153  return hash_policies == other.hash_policies &&
154  retry_policy == other.retry_policy && action == other.action &&
156  }
157  std::string ToString() const;
158  };
159 
161  bool operator==(const NonForwardingAction& /* other */) const {
162  return true;
163  }
164  };
165 
168 
169  bool operator==(const Route& other) const {
170  return matchers == other.matchers && action == other.action &&
172  }
173  std::string ToString() const;
174  };
175 
176  struct VirtualHost {
177  std::vector<std::string> domains;
178  std::vector<Route> routes;
180 
181  bool operator==(const VirtualHost& other) const {
182  return domains == other.domains && routes == other.routes &&
184  }
185  };
186 
187  std::vector<VirtualHost> virtual_hosts;
188  std::map<std::string /*cluster_specifier_plugin_name*/,
189  std::string /*LB policy config*/>
191 
192  bool operator==(const XdsRouteConfigResource& other) const {
193  return virtual_hosts == other.virtual_hosts &&
195  }
196  std::string ToString() const;
197 
198  static grpc_error_handle Parse(
200  const envoy_config_route_v3_RouteConfiguration* route_config,
202 };
203 
205  : public XdsResourceTypeImpl<XdsRouteConfigResourceType,
206  XdsRouteConfigResource> {
207  public:
208  absl::string_view type_url() const override {
209  return "envoy.config.route.v3.RouteConfiguration";
210  }
211  absl::string_view v2_type_url() const override {
212  return "envoy.api.v2.RouteConfiguration";
213  }
214 
216  absl::string_view serialized_resource,
217  bool /*is_v2*/) const override;
218 
219  void InitUpbSymtab(upb_DefPool* symtab) const override {
222  }
223 };
224 
225 } // namespace grpc_core
226 
227 #endif // GRPC_CORE_EXT_XDS_XDS_ROUTE_CONFIG_H
grpc_core::XdsRouteConfigResource::Route::RouteAction::ClusterWeight::ToString
std::string ToString() const
Definition: xds_route_config.cc:225
grpc_core::XdsRouteConfigResource::operator==
bool operator==(const XdsRouteConfigResource &other) const
Definition: xds_route_config.h:192
grpc_core::XdsRouteConfigResource::VirtualHost::typed_per_filter_config
TypedPerFilterConfig typed_per_filter_config
Definition: xds_route_config.h:179
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::operator=
HashPolicy & operator=(const HashPolicy &other)
Definition: xds_route_config.cc:154
grpc_core::XdsRouteConfigResource::Route::RouteAction::operator==
bool operator==(const RouteAction &other) const
Definition: xds_route_config.h:152
route.upb.h
grpc_core::XdsRbacEnabled
bool XdsRbacEnabled()
Definition: xds_route_config.cc:82
grpc_core::XdsRouteConfigResource::Route::RouteAction::kClusterSpecifierPluginIndex
static constexpr size_t kClusterSpecifierPluginIndex
Definition: xds_route_config.h:143
rds_update
absl::optional< absl::StatusOr< XdsRouteConfigResource > > rds_update
Definition: xds_server_config_fetcher.cc:231
grpc_core::XdsRouteConfigResource::Route::Matchers::header_matchers
std::vector< HeaderMatcher > header_matchers
Definition: xds_route_config.h:84
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::regex
std::unique_ptr< RE2 > regex
Definition: xds_route_config.h:108
grpc_core::XdsRouteConfigResource::Route::matchers
Matchers matchers
Definition: xds_route_config.h:95
grpc_core::XdsRouteConfigResource::Route::NonForwardingAction::operator==
bool operator==(const NonForwardingAction &) const
Definition: xds_route_config.h:161
grpc_core::XdsRouteConfigResource::RetryPolicy::retry_on
internal::StatusCodeSet retry_on
Definition: xds_route_config.h:58
grpc_core::XdsRouteConfigResourceType::Decode
absl::StatusOr< DecodeResult > Decode(const XdsEncodingContext &context, absl::string_view serialized_resource, bool) const override
Definition: xds_route_config.cc:1113
grpc_core::XdsEncodingContext
Definition: upb_utils.h:39
grpc_core
Definition: call_metric_recorder.h:31
grpc_core::XdsRouteConfigResourceType::InitUpbSymtab
void InitUpbSymtab(upb_DefPool *symtab) const override
Definition: xds_route_config.h:219
status_util.h
grpc_core::XdsRouteConfigResource::RetryPolicy::RetryBackOff::base_interval
Duration base_interval
Definition: xds_route_config.h:62
grpc_core::XdsRouteConfigResource::VirtualHost
Definition: xds_route_config.h:176
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::HashPolicy
HashPolicy()
Definition: xds_route_config.h:111
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
xds_http_filters.h
grpc_core::XdsRouteConfigResource::RetryPolicy::RetryBackOff::operator==
bool operator==(const RetryBackOff &other) const
Definition: xds_route_config.h:65
xds_resource_type_impl.h
grpc_core::XdsRouteConfigResource::Route::Matchers::ToString
std::string ToString() const
Definition: xds_route_config.cc:124
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy
Definition: xds_route_config.h:102
grpc_core::XdsRouteConfigResource
Definition: xds_route_config.h:53
grpc_core::XdsRouteConfigResource::Route::NonForwardingAction
Definition: xds_route_config.h:160
map
zval * map
Definition: php/ext/google/protobuf/encode_decode.c:480
grpc_core::XdsRouteConfigResource::virtual_hosts
std::vector< VirtualHost > virtual_hosts
Definition: xds_route_config.h:187
grpc_core::XdsRouteConfigResource::Route::RouteAction::ClusterWeight::operator==
bool operator==(const ClusterWeight &other) const
Definition: xds_route_config.h:130
route.upbdefs.h
grpc_core::XdsRouteConfigResource::Route::RouteAction::kWeightedClustersIndex
static constexpr size_t kWeightedClustersIndex
Definition: xds_route_config.h:142
uint32_t
unsigned int uint32_t
Definition: stdint-msvc2008.h:80
grpc_core::XdsRouteConfigResource::Route::action
absl::variant< UnknownAction, RouteAction, NonForwardingAction > action
Definition: xds_route_config.h:166
grpc_core::XdsRouteConfigResource::Route::RouteAction::ToString
std::string ToString() const
Definition: xds_route_config.cc:246
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::ToString
std::string ToString() const
Definition: xds_route_config.cc:199
grpc_core::XdsResourceTypeImpl
Definition: xds_resource_type_impl.h:34
grpc_core::XdsRouteConfigResource::Route::typed_per_filter_config
TypedPerFilterConfig typed_per_filter_config
Definition: xds_route_config.h:167
grpc_core::XdsRouteConfigResource::Route::RouteAction::ClusterWeight::weight
uint32_t weight
Definition: xds_route_config.h:127
grpc_core::XdsRouteConfigResource::TypedPerFilterConfig
std::map< std::string, XdsHttpFilterImpl::FilterConfig > TypedPerFilterConfig
Definition: xds_route_config.h:55
Type
Definition: bloaty/third_party/protobuf/src/google/protobuf/type.pb.h:182
envoy_config_route_v3_RouteConfiguration
struct envoy_config_route_v3_RouteConfiguration envoy_config_route_v3_RouteConfiguration
Definition: route.upb.h:26
grpc_core::XdsRouteConfigResource::Route::RouteAction::ClusterWeight::typed_per_filter_config
TypedPerFilterConfig typed_per_filter_config
Definition: xds_route_config.h:128
grpc_core::XdsRouteConfigResourceType
Definition: xds_route_config.h:204
grpc_core::XdsRouteConfigResource::Route::RouteAction::hash_policies
std::vector< HashPolicy > hash_policies
Definition: xds_route_config.h:137
grpc_core::XdsRouteConfigResource::ToString
std::string ToString() const
Definition: xds_route_config.cc:306
matchers.h
grpc_core::XdsRouteConfigResource::VirtualHost::routes
std::vector< Route > routes
Definition: xds_route_config.h:178
absl::optional< uint32_t >
grpc_core::XdsRouteConfigResource::Route::RouteAction::ClusterWeight::name
std::string name
Definition: xds_route_config.h:126
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::terminal
bool terminal
Definition: xds_route_config.h:105
time.h
grpc_core::XdsRouteConfigResource::Route::Matchers::operator==
bool operator==(const Matchers &other) const
Definition: xds_route_config.h:87
error.h
grpc_core::XdsRouteConfigResourceType::v2_type_url
absl::string_view v2_type_url() const override
Definition: xds_route_config.h:211
grpc_core::XdsRouteConfigResource::Route
Definition: xds_route_config.h:80
grpc_core::XdsRouteConfigResource::VirtualHost::operator==
bool operator==(const VirtualHost &other) const
Definition: xds_route_config.h:181
xds_cluster_specifier_plugin.h
stdint.h
grpc_core::XdsRouteConfigResource::cluster_specifier_plugin_map
std::map< std::string, std::string > cluster_specifier_plugin_map
Definition: xds_route_config.h:190
grpc_core::XdsRouteConfigResource::Route::RouteAction::ClusterWeight
Definition: xds_route_config.h:125
grpc_core::XdsRouteConfigResource::RetryPolicy::RetryBackOff::ToString
std::string ToString() const
Definition: xds_route_config.cc:103
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::regex_substitution
std::string regex_substitution
Definition: xds_route_config.h:109
grpc_core::XdsRouteConfigResource::RetryPolicy::retry_back_off
RetryBackOff retry_back_off
Definition: xds_route_config.h:71
grpc_core::XdsRouteConfigResource::RetryPolicy::num_retries
uint32_t num_retries
Definition: xds_route_config.h:59
grpc_core::StringMatcher
Definition: matchers/matchers.h:32
grpc_core::XdsRouteConfigResource::RetryPolicy::RetryBackOff
Definition: xds_route_config.h:61
symtab
upb_symtab * symtab
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/protobuf.h:774
grpc_core::internal::StatusCodeSet
A set of grpc_status_code values.
Definition: status_util.h:43
grpc_core::XdsRouteConfigResource::Route::operator==
bool operator==(const Route &other) const
Definition: xds_route_config.h:169
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::operator==
bool operator==(const HashPolicy &other) const
grpc_core::XdsRouteConfigResource::RetryPolicy::operator==
bool operator==(const RetryPolicy &other) const
Definition: xds_route_config.h:73
def.h
envoy_config_route_v3_RouteConfiguration_getmsgdef
const UPB_INLINE upb_MessageDef * envoy_config_route_v3_RouteConfiguration_getmsgdef(upb_DefPool *s)
Definition: route.upbdefs.h:24
grpc_core::XdsRouteConfigResource::Route::RouteAction::kClusterIndex
static constexpr size_t kClusterIndex
Definition: xds_route_config.h:141
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::header_name
std::string header_name
Definition: xds_route_config.h:107
grpc_core::XdsRouteConfigResource::VirtualHost::domains
std::vector< std::string > domains
Definition: xds_route_config.h:177
grpc_core::XdsRouteConfigResource::Route::RouteAction::retry_policy
absl::optional< RetryPolicy > retry_policy
Definition: xds_route_config.h:138
grpc_core::XdsRouteConfigResourceType::type_url
absl::string_view type_url() const override
Definition: xds_route_config.h:208
grpc_core::XdsRouteConfigResource::Route::UnknownAction::operator==
bool operator==(const UnknownAction &) const
Definition: xds_route_config.h:98
grpc_core::XdsRouteConfigResource::Route::ToString
std::string ToString() const
Definition: xds_route_config.cc:277
grpc_core::XdsRouteConfigResource::Route::RouteAction
Definition: xds_route_config.h:101
grpc_core::XdsRouteConfigResource::Parse
static grpc_error_handle Parse(const XdsEncodingContext &context, const envoy_config_route_v3_RouteConfiguration *route_config, XdsRouteConfigResource *rds_update)
Definition: xds_route_config.cc:945
grpc_core::XdsRouteConfigResource::Route::RouteAction::max_stream_duration
absl::optional< Duration > max_stream_duration
Definition: xds_route_config.h:150
context
grpc::ClientContext context
Definition: istio_echo_server_lib.cc:61
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::type
Type type
Definition: xds_route_config.h:104
grpc_core::XdsRouteConfigResource::RetryPolicy
Definition: xds_route_config.h:57
absl::StatusOr
Definition: abseil-cpp/absl/status/statusor.h:187
grpc_core::XdsRouteConfigResource::Route::Matchers::path_matcher
StringMatcher path_matcher
Definition: xds_route_config.h:83
grpc_core::XdsRouteConfigResource::Route::Matchers
Definition: xds_route_config.h:82
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::HEADER
@ HEADER
Definition: xds_route_config.h:103
grpc_error
Definition: error_internal.h:42
grpc_core::XdsRouteConfigResource::Route::Matchers::fraction_per_million
absl::optional< uint32_t > fraction_per_million
Definition: xds_route_config.h:85
upb_utils.h
grpc_core::XdsClusterSpecifierPluginRegistry::PopulateSymtab
static void PopulateSymtab(upb_DefPool *symtab)
Definition: xds_cluster_specifier_plugin.cc:131
grpc_core::Duration
Definition: src/core/lib/gprpp/time.h:122
grpc_core::XdsRouteConfigResource::Route::RouteAction::action
absl::variant< std::string, std::vector< ClusterWeight >, std::string > action
Definition: xds_route_config.h:145
grpc_core::XdsRouteConfigResource::Route::UnknownAction
Definition: xds_route_config.h:97
absl::variant
Definition: abseil-cpp/absl/types/internal/variant.h:46
grpc_core::XdsRouteConfigResource::RetryPolicy::ToString
std::string ToString() const
Definition: xds_route_config.cc:113
upb_DefPool
Definition: upb/upb/def.c:217
grpc_core::XdsRouteConfigResource::RetryPolicy::RetryBackOff::max_interval
Duration max_interval
Definition: xds_route_config.h:63
grpc_core::XdsRouteConfigResource::Route::RouteAction::HashPolicy::CHANNEL_ID
@ CHANNEL_ID
Definition: xds_route_config.h:103
port_platform.h


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:59