Go to the documentation of this file.
24 #include <type_traits>
27 #include "absl/memory/memory.h"
28 #include "absl/status/status.h"
29 #include "absl/strings/str_cat.h"
30 #include "absl/strings/str_join.h"
57 std::vector<std::string> endpoint_strings;
59 endpoint_strings.emplace_back(endpoint.ToString());
62 ", lb_weight=",
lb_weight,
", endpoints=[",
71 if (*it1->first != *it2->first)
return false;
72 if (it1->second != it2->second)
return false;
80 std::vector<std::string> locality_strings;
82 locality_strings.emplace_back(p.second.ToString());
89 for (
size_t i = 0;
i < drop_category_list_.size(); ++
i) {
90 const auto& drop_category = drop_category_list_[
i];
93 if (random < drop_category.parts_per_million) {
94 *category_name = &drop_category.name;
102 std::vector<std::string> category_strings;
103 for (
const DropCategory& category : drop_category_list_) {
104 category_strings.emplace_back(
105 absl::StrCat(category.name,
"=", category.parts_per_million));
108 "], drop_all=", drop_all_,
"}");
112 std::vector<std::string> priority_strings;
115 priority_strings.emplace_back(
128 void MaybeLogClusterLoadAssignment(
170 if (load_balancing_weight !=
nullptr) {
174 "Invalid endpoint weight of 0.");
183 std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
186 absl::make_unique<ServerAddressWeightAttribute>(
weight);
193 XdsEndpointResource::Priority::Locality* output_locality,
198 locality_lb_endpoints);
202 output_locality->lb_weight =
208 locality_lb_endpoints);
209 if (locality ==
nullptr) {
218 output_locality->name = MakeRefCounted<XdsLocalityName>(
224 locality_lb_endpoints, &
size);
225 for (
size_t i = 0;
i <
size; ++
i) {
227 lb_endpoints[i], &output_locality->endpoints);
232 locality_lb_endpoints);
244 if (category.empty()) {
253 const auto denominator =
257 switch (denominator) {
270 numerator =
std::min(numerator, 1000000u);
276 const XdsEncodingContext& ,
278 cluster_load_assignment,
279 bool , XdsEndpointResource* eds_update) {
280 std::vector<grpc_error_handle>
errors;
282 size_t locality_size;
285 cluster_load_assignment, &locality_size);
286 for (
size_t j = 0;
j < locality_size; ++
j) {
288 XdsEndpointResource::Priority::Locality locality;
295 if (locality.lb_weight == 0)
continue;
298 if (eds_update->priorities.size() <
priority + 1) {
299 eds_update->priorities.resize(
priority + 1);
301 auto& locality_map = eds_update->priorities[
priority].localities;
302 auto it = locality_map.find(locality.name.get());
303 if (
it != locality_map.end()) {
305 "duplicate locality ", locality.name->AsHumanReadableString(),
308 locality_map.emplace(locality.name.get(),
std::move(locality));
311 for (
const auto&
priority : eds_update->priorities) {
318 eds_update->drop_config = MakeRefCounted<XdsEndpointResource::DropConfig>();
321 cluster_load_assignment);
322 if (policy !=
nullptr) {
328 for (
size_t j = 0;
j < drop_size; ++
j) {
330 DropParseAndAppend(drop_overload[j], eds_update->drop_config.get());
334 "drop config validation error"),
349 serialized_resource.
data(), serialized_resource.
size(),
context.arena);
350 if (resource ==
nullptr) {
352 "Can't parse ClusterLoadAssignment resource.");
354 MaybeLogClusterLoadAssignment(
context, resource);
359 auto endpoint_data = absl::make_unique<ResourceDataSubclass>();
361 EdsResourceParse(
context, resource, is_v2, &endpoint_data->resource);
372 gpr_log(
GPR_INFO,
"[xds_client %p] parsed ClusterLoadAssignment %s: %s",
374 endpoint_data->resource.ToString().c_str());
Status InvalidArgumentError(absl::string_view message)
UPB_INLINE int32_t envoy_config_endpoint_v3_LbEndpoint_health_status(const envoy_config_endpoint_v3_LbEndpoint *msg)
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
GPRAPI void GPRAPI int gpr_should_log(gpr_log_severity severity)
UPB_INLINE const struct envoy_config_core_v3_Locality * envoy_config_endpoint_v3_LocalityLbEndpoints_locality(const envoy_config_endpoint_v3_LocalityLbEndpoints *msg)
@ envoy_type_v3_FractionalPercent_HUNDRED
UPB_INLINE const struct envoy_config_endpoint_v3_LocalityLbEndpoints *const * envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(const envoy_config_endpoint_v3_ClusterLoadAssignment *msg, size_t *len)
struct envoy_config_endpoint_v3_ClusterLoadAssignment_Policy envoy_config_endpoint_v3_ClusterLoadAssignment_Policy
std::map< XdsLocalityName *, Locality, XdsLocalityName::Less > localities
std::string ToString() const
UPB_INLINE upb_StringView envoy_config_core_v3_Locality_zone(const envoy_config_core_v3_Locality *msg)
struct envoy_config_endpoint_v3_ClusterLoadAssignment envoy_config_endpoint_v3_ClusterLoadAssignment
UPB_INLINE uint32_t envoy_config_core_v3_SocketAddress_port_value(const envoy_config_core_v3_SocketAddress *msg)
const UPB_INLINE envoy_config_endpoint_v3_LbEndpoint *const * envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(const envoy_config_endpoint_v3_LocalityLbEndpoints *msg, size_t *len)
@ envoy_config_core_v3_UNKNOWN
std::string ToString() const
struct envoy_config_endpoint_v3_LocalityLbEndpoints envoy_config_endpoint_v3_LocalityLbEndpoints
#define GRPC_TRACE_FLAG_ENABLED(f)
#define GRPC_ERROR_CREATE_FROM_VECTOR(desc, error_list)
std::string UpbStringToStdString(const upb_StringView &str)
bool ShouldDrop(const std::string **category_name) const
UPB_INLINE uint32_t envoy_config_endpoint_v3_LocalityLbEndpoints_priority(const envoy_config_endpoint_v3_LocalityLbEndpoints *msg)
grpc_error_handle grpc_error_add_child(grpc_error_handle src, grpc_error_handle child)
struct envoy_config_endpoint_v3_Endpoint envoy_config_endpoint_v3_Endpoint
RefCountedPtr< DropConfig > drop_config
UPB_INLINE int32_t envoy_type_v3_FractionalPercent_denominator(const envoy_type_v3_FractionalPercent *msg)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
struct envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload
RefCountedPtr< XdsLocalityName > name
std::string StrJoin(Iterator start, Iterator end, absl::string_view sep, Formatter &&fmt)
constexpr size_type size() const noexcept
@ envoy_type_v3_FractionalPercent_MILLION
UPB_INLINE const struct envoy_config_core_v3_Address * envoy_config_endpoint_v3_Endpoint_address(const envoy_config_endpoint_v3_Endpoint *msg)
const UPB_INLINE envoy_config_endpoint_v3_Endpoint * envoy_config_endpoint_v3_LbEndpoint_endpoint(const envoy_config_endpoint_v3_LbEndpoint *msg)
grpc_error_handle grpc_string_to_sockaddr(grpc_resolved_address *out, const char *addr, int port)
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
UPB_INLINE envoy_config_endpoint_v3_ClusterLoadAssignment * envoy_config_endpoint_v3_ClusterLoadAssignment_parse(const char *buf, size_t size, upb_Arena *arena)
const UPB_INLINE envoy_config_core_v3_SocketAddress * envoy_config_core_v3_Address_socket_address(const envoy_config_core_v3_Address *msg)
UPB_INLINE upb_StringView envoy_config_core_v3_SocketAddress_address(const envoy_config_core_v3_SocketAddress *msg)
UPB_INLINE upb_StringView envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(const envoy_config_endpoint_v3_ClusterLoadAssignment *msg)
const UPB_INLINE envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload *const * envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_drop_overloads(const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy *msg, size_t *len)
std::string ToString() const
absl::StatusOr< DecodeResult > Decode(const XdsEncodingContext &context, absl::string_view serialized_resource, bool is_v2) const override
std::vector< ServerAddress > ServerAddressList
static const char * kServerAddressWeightAttributeKey
@ envoy_type_v3_FractionalPercent_TEN_THOUSAND
std::string ToString() const
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc)
struct envoy_type_v3_FractionalPercent envoy_type_v3_FractionalPercent
UPB_INLINE const struct google_protobuf_UInt32Value * envoy_config_endpoint_v3_LbEndpoint_load_balancing_weight(const envoy_config_endpoint_v3_LbEndpoint *msg)
envoy_type_v3_FractionalPercent_DenominatorType
UPB_INLINE uint32_t google_protobuf_UInt32Value_value(const google_protobuf_UInt32Value *msg)
UPB_INLINE const struct envoy_type_v3_FractionalPercent * envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload *msg)
UPB_INLINE upb_StringView envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_category(const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload *msg)
size_t upb_TextEncode(const upb_Message *msg, const upb_MessageDef *m, const upb_DefPool *ext_pool, int options, char *buf, size_t size)
struct envoy_config_core_v3_Locality envoy_config_core_v3_Locality
const UPB_INLINE upb_MessageDef * envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(upb_DefPool *s)
UPB_INLINE upb_StringView envoy_config_core_v3_Locality_sub_zone(const envoy_config_core_v3_Locality *msg)
@ envoy_config_core_v3_HEALTHY
const UPB_INLINE envoy_config_endpoint_v3_ClusterLoadAssignment_Policy * envoy_config_endpoint_v3_ClusterLoadAssignment_policy(const envoy_config_endpoint_v3_ClusterLoadAssignment *msg)
std::string grpc_error_std_string(grpc_error_handle error)
#define GRPC_ERROR_CREATE_FROM_CPP_STRING(desc)
UPB_INLINE upb_StringView envoy_config_core_v3_Locality_region(const envoy_config_core_v3_Locality *msg)
#define GRPC_ERROR_UNREF(err)
struct envoy_config_core_v3_SocketAddress envoy_config_core_v3_SocketAddress
struct envoy_config_endpoint_v3_LbEndpoint envoy_config_endpoint_v3_LbEndpoint
bool operator==(const Priority &other) const
grpc::ClientContext context
struct google_protobuf_UInt32Value google_protobuf_UInt32Value
UPB_INLINE uint32_t envoy_type_v3_FractionalPercent_numerator(const envoy_type_v3_FractionalPercent *msg)
struct envoy_config_core_v3_Address envoy_config_core_v3_Address
constexpr const_pointer data() const noexcept
UPB_INLINE const struct google_protobuf_UInt32Value * envoy_config_endpoint_v3_LocalityLbEndpoints_load_balancing_weight(const envoy_config_endpoint_v3_LocalityLbEndpoints *msg)
#define GRPC_ERROR_IS_NONE(err)
ServerAddressList endpoints
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:58