Go to the documentation of this file.
27 #include "absl/memory/memory.h"
28 #include "absl/status/status.h"
29 #include "absl/strings/str_cat.h"
44 "grpc.lookup.v1.RouteLookupClusterSpecifier";
56 serialized_plugin_config.
data, serialized_plugin_config.
size,
arena);
57 if (specifier ==
nullptr) {
60 const auto* plugin_config =
62 if (plugin_config ==
nullptr) {
64 "Could not get route lookup config from route lookup cluster "
72 if (json_size ==
static_cast<size_t>(-1)) {
79 reinterpret_cast<char*
>(
buf), json_size + 1,
status.ptr());
82 rls_policy[
"routeLookupConfig"] =
88 child_policy.emplace_back(
std::move(cds_policy));
89 rls_policy[
"childPolicy"] =
std::move(child_policy);
90 rls_policy[
"childPolicyConfigTargetFieldName"] =
"cluster";
92 policy[
"rls_experimental"] =
std::move(rls_policy);
106 " ClusterSpecifierPlugin returned invalid LB policy config: ",
111 return lb_policy_config.
Dump();
116 using PluginRegistryMap =
117 std::map<absl::string_view, std::unique_ptr<XdsClusterSpecifierPluginImpl>>;
119 PluginRegistryMap* g_plugin_registry =
nullptr;
123 const XdsClusterSpecifierPluginImpl*
126 auto it = g_plugin_registry->find(config_proto_type_name);
127 if (
it == g_plugin_registry->end())
return nullptr;
128 return it->second.get();
132 for (
const auto& p : *g_plugin_registry) {
133 p.second->PopulateSymtab(
symtab);
138 std::unique_ptr<XdsClusterSpecifierPluginImpl> plugin,
140 (*g_plugin_registry)[config_proto_type_name] =
std::move(plugin);
144 g_plugin_registry =
new PluginRegistryMap;
145 RegisterPlugin(absl::make_unique<XdsRouteLookupClusterSpecifierPlugin>(),
std::vector< Json > Array
Status InvalidArgumentError(absl::string_view message)
absl::StatusOr< std::string > GenerateLoadBalancingPolicyConfig(upb_StringView serialized_plugin_config, upb_Arena *arena, upb_DefPool *symtab) const override
static void RegisterPlugin(std::unique_ptr< XdsClusterSpecifierPluginImpl > plugin, absl::string_view config_proto_type_name)
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
UPB_INLINE grpc_lookup_v1_RouteLookupClusterSpecifier * grpc_lookup_v1_RouteLookupClusterSpecifier_parse(const char *buf, size_t size, upb_Arena *arena)
void PopulateSymtab(upb_DefPool *symtab) const override
size_t upb_JsonEncode(const upb_Message *msg, const upb_MessageDef *m, const upb_DefPool *ext_pool, int options, char *buf, size_t size, upb_Status *status)
const char * upb_Status_ErrorMessage(const upb_Status *status)
const UPB_INLINE upb_MessageDef * grpc_lookup_v1_RouteLookupConfig_getmsgdef(upb_DefPool *s)
grpc_core::ScopedArenaPtr arena
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
JSON (JavaScript Object Notation).
static const XdsClusterSpecifierPluginImpl * GetPluginForType(absl::string_view config_proto_type_name)
UPB_INLINE void * upb_Arena_Malloc(upb_Arena *a, size_t size)
static Json Parse(absl::string_view json_str, grpc_error_handle *error)
static RefCountedPtr< LoadBalancingPolicy::Config > ParseLoadBalancingConfig(const Json &json, grpc_error_handle *error)
std::map< std::string, Json > Object
const char * kXdsRouteLookupClusterSpecifierPluginConfigName
std::string grpc_error_std_string(grpc_error_handle error)
#define GRPC_ERROR_UNREF(err)
static void PopulateSymtab(upb_DefPool *symtab)
std::string Dump(int indent=0) const
const UPB_INLINE grpc_lookup_v1_RouteLookupConfig * grpc_lookup_v1_RouteLookupClusterSpecifier_route_lookup_config(const grpc_lookup_v1_RouteLookupClusterSpecifier *msg)
#define GRPC_ERROR_IS_NONE(err)
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:57