|
|
@ -57,12 +57,12 @@ |
|
|
|
namespace grpc_core { |
|
|
|
namespace grpc_core { |
|
|
|
|
|
|
|
|
|
|
|
XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer, |
|
|
|
XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer, |
|
|
|
const XdsBootstrap::Node* node, upb::SymbolTable* symtab, |
|
|
|
const XdsBootstrap::Node* node, upb::DefPool* def_pool, |
|
|
|
std::string user_agent_name, std::string user_agent_version) |
|
|
|
std::string user_agent_name, std::string user_agent_version) |
|
|
|
: client_(client), |
|
|
|
: client_(client), |
|
|
|
tracer_(tracer), |
|
|
|
tracer_(tracer), |
|
|
|
node_(node), |
|
|
|
node_(node), |
|
|
|
symtab_(symtab), |
|
|
|
def_pool_(def_pool), |
|
|
|
user_agent_name_(std::move(user_agent_name)), |
|
|
|
user_agent_name_(std::move(user_agent_name)), |
|
|
|
user_agent_version_(std::move(user_agent_version)) {} |
|
|
|
user_agent_version_(std::move(user_agent_version)) {} |
|
|
|
|
|
|
|
|
|
|
@ -71,7 +71,7 @@ namespace { |
|
|
|
struct XdsApiContext { |
|
|
|
struct XdsApiContext { |
|
|
|
XdsClient* client; |
|
|
|
XdsClient* client; |
|
|
|
TraceFlag* tracer; |
|
|
|
TraceFlag* tracer; |
|
|
|
upb_DefPool* symtab; |
|
|
|
upb_DefPool* def_pool; |
|
|
|
upb_Arena* arena; |
|
|
|
upb_Arena* arena; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
@ -183,7 +183,7 @@ void MaybeLogDiscoveryRequest( |
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) && |
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) && |
|
|
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) { |
|
|
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) { |
|
|
|
const upb_MessageDef* msg_type = |
|
|
|
const upb_MessageDef* msg_type = |
|
|
|
envoy_service_discovery_v3_DiscoveryRequest_getmsgdef(context.symtab); |
|
|
|
envoy_service_discovery_v3_DiscoveryRequest_getmsgdef(context.def_pool); |
|
|
|
char buf[10240]; |
|
|
|
char buf[10240]; |
|
|
|
upb_TextEncode(request, msg_type, nullptr, 0, buf, sizeof(buf)); |
|
|
|
upb_TextEncode(request, msg_type, nullptr, 0, buf, sizeof(buf)); |
|
|
|
gpr_log(GPR_DEBUG, "[xds_client %p] constructed ADS request: %s", |
|
|
|
gpr_log(GPR_DEBUG, "[xds_client %p] constructed ADS request: %s", |
|
|
@ -207,7 +207,8 @@ std::string XdsApi::CreateAdsRequest( |
|
|
|
absl::string_view nonce, const std::vector<std::string>& resource_names, |
|
|
|
absl::string_view nonce, const std::vector<std::string>& resource_names, |
|
|
|
absl::Status status, bool populate_node) { |
|
|
|
absl::Status status, bool populate_node) { |
|
|
|
upb::Arena arena; |
|
|
|
upb::Arena arena; |
|
|
|
const XdsApiContext context = {client_, tracer_, symtab_->ptr(), arena.ptr()}; |
|
|
|
const XdsApiContext context = {client_, tracer_, def_pool_->ptr(), |
|
|
|
|
|
|
|
arena.ptr()}; |
|
|
|
// Create a request.
|
|
|
|
// Create a request.
|
|
|
|
envoy_service_discovery_v3_DiscoveryRequest* request = |
|
|
|
envoy_service_discovery_v3_DiscoveryRequest* request = |
|
|
|
envoy_service_discovery_v3_DiscoveryRequest_new(arena.ptr()); |
|
|
|
envoy_service_discovery_v3_DiscoveryRequest_new(arena.ptr()); |
|
|
@ -270,7 +271,8 @@ void MaybeLogDiscoveryResponse( |
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) && |
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) && |
|
|
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) { |
|
|
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) { |
|
|
|
const upb_MessageDef* msg_type = |
|
|
|
const upb_MessageDef* msg_type = |
|
|
|
envoy_service_discovery_v3_DiscoveryResponse_getmsgdef(context.symtab); |
|
|
|
envoy_service_discovery_v3_DiscoveryResponse_getmsgdef( |
|
|
|
|
|
|
|
context.def_pool); |
|
|
|
char buf[10240]; |
|
|
|
char buf[10240]; |
|
|
|
upb_TextEncode(response, msg_type, nullptr, 0, buf, sizeof(buf)); |
|
|
|
upb_TextEncode(response, msg_type, nullptr, 0, buf, sizeof(buf)); |
|
|
|
gpr_log(GPR_DEBUG, "[xds_client %p] received response: %s", context.client, |
|
|
|
gpr_log(GPR_DEBUG, "[xds_client %p] received response: %s", context.client, |
|
|
@ -283,7 +285,8 @@ void MaybeLogDiscoveryResponse( |
|
|
|
absl::Status XdsApi::ParseAdsResponse(absl::string_view encoded_response, |
|
|
|
absl::Status XdsApi::ParseAdsResponse(absl::string_view encoded_response, |
|
|
|
AdsResponseParserInterface* parser) { |
|
|
|
AdsResponseParserInterface* parser) { |
|
|
|
upb::Arena arena; |
|
|
|
upb::Arena arena; |
|
|
|
const XdsApiContext context = {client_, tracer_, symtab_->ptr(), arena.ptr()}; |
|
|
|
const XdsApiContext context = {client_, tracer_, def_pool_->ptr(), |
|
|
|
|
|
|
|
arena.ptr()}; |
|
|
|
// Decode the response.
|
|
|
|
// Decode the response.
|
|
|
|
const envoy_service_discovery_v3_DiscoveryResponse* response = |
|
|
|
const envoy_service_discovery_v3_DiscoveryResponse* response = |
|
|
|
envoy_service_discovery_v3_DiscoveryResponse_parse( |
|
|
|
envoy_service_discovery_v3_DiscoveryResponse_parse( |
|
|
@ -356,7 +359,8 @@ void MaybeLogLrsRequest( |
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) && |
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) && |
|
|
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) { |
|
|
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) { |
|
|
|
const upb_MessageDef* msg_type = |
|
|
|
const upb_MessageDef* msg_type = |
|
|
|
envoy_service_load_stats_v3_LoadStatsRequest_getmsgdef(context.symtab); |
|
|
|
envoy_service_load_stats_v3_LoadStatsRequest_getmsgdef( |
|
|
|
|
|
|
|
context.def_pool); |
|
|
|
char buf[10240]; |
|
|
|
char buf[10240]; |
|
|
|
upb_TextEncode(request, msg_type, nullptr, 0, buf, sizeof(buf)); |
|
|
|
upb_TextEncode(request, msg_type, nullptr, 0, buf, sizeof(buf)); |
|
|
|
gpr_log(GPR_DEBUG, "[xds_client %p] constructed LRS request: %s", |
|
|
|
gpr_log(GPR_DEBUG, "[xds_client %p] constructed LRS request: %s", |
|
|
@ -377,7 +381,8 @@ std::string SerializeLrsRequest( |
|
|
|
|
|
|
|
|
|
|
|
std::string XdsApi::CreateLrsInitialRequest() { |
|
|
|
std::string XdsApi::CreateLrsInitialRequest() { |
|
|
|
upb::Arena arena; |
|
|
|
upb::Arena arena; |
|
|
|
const XdsApiContext context = {client_, tracer_, symtab_->ptr(), arena.ptr()}; |
|
|
|
const XdsApiContext context = {client_, tracer_, def_pool_->ptr(), |
|
|
|
|
|
|
|
arena.ptr()}; |
|
|
|
// Create a request.
|
|
|
|
// Create a request.
|
|
|
|
envoy_service_load_stats_v3_LoadStatsRequest* request = |
|
|
|
envoy_service_load_stats_v3_LoadStatsRequest* request = |
|
|
|
envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr()); |
|
|
|
envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr()); |
|
|
@ -447,7 +452,8 @@ void LocalityStatsPopulate( |
|
|
|
std::string XdsApi::CreateLrsRequest( |
|
|
|
std::string XdsApi::CreateLrsRequest( |
|
|
|
ClusterLoadReportMap cluster_load_report_map) { |
|
|
|
ClusterLoadReportMap cluster_load_report_map) { |
|
|
|
upb::Arena arena; |
|
|
|
upb::Arena arena; |
|
|
|
const XdsApiContext context = {client_, tracer_, symtab_->ptr(), arena.ptr()}; |
|
|
|
const XdsApiContext context = {client_, tracer_, def_pool_->ptr(), |
|
|
|
|
|
|
|
arena.ptr()}; |
|
|
|
// Create a request.
|
|
|
|
// Create a request.
|
|
|
|
envoy_service_load_stats_v3_LoadStatsRequest* request = |
|
|
|
envoy_service_load_stats_v3_LoadStatsRequest* request = |
|
|
|
envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr()); |
|
|
|
envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr()); |
|
|
@ -514,7 +520,8 @@ void MaybeLogLrsResponse( |
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) && |
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) && |
|
|
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) { |
|
|
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) { |
|
|
|
const upb_MessageDef* msg_type = |
|
|
|
const upb_MessageDef* msg_type = |
|
|
|
envoy_service_load_stats_v3_LoadStatsResponse_getmsgdef(context.symtab); |
|
|
|
envoy_service_load_stats_v3_LoadStatsResponse_getmsgdef( |
|
|
|
|
|
|
|
context.def_pool); |
|
|
|
char buf[10240]; |
|
|
|
char buf[10240]; |
|
|
|
upb_TextEncode(response, msg_type, nullptr, 0, buf, sizeof(buf)); |
|
|
|
upb_TextEncode(response, msg_type, nullptr, 0, buf, sizeof(buf)); |
|
|
|
gpr_log(GPR_DEBUG, "[xds_client %p] received LRS response: %s", |
|
|
|
gpr_log(GPR_DEBUG, "[xds_client %p] received LRS response: %s", |
|
|
@ -537,7 +544,8 @@ absl::Status XdsApi::ParseLrsResponse(absl::string_view encoded_response, |
|
|
|
if (decoded_response == nullptr) { |
|
|
|
if (decoded_response == nullptr) { |
|
|
|
return absl::UnavailableError("Can't decode response."); |
|
|
|
return absl::UnavailableError("Can't decode response."); |
|
|
|
} |
|
|
|
} |
|
|
|
const XdsApiContext context = {client_, tracer_, symtab_->ptr(), arena.ptr()}; |
|
|
|
const XdsApiContext context = {client_, tracer_, def_pool_->ptr(), |
|
|
|
|
|
|
|
arena.ptr()}; |
|
|
|
MaybeLogLrsResponse(context, decoded_response); |
|
|
|
MaybeLogLrsResponse(context, decoded_response); |
|
|
|
// Check send_all_clusters.
|
|
|
|
// Check send_all_clusters.
|
|
|
|
if (envoy_service_load_stats_v3_LoadStatsResponse_send_all_clusters( |
|
|
|
if (envoy_service_load_stats_v3_LoadStatsResponse_send_all_clusters( |
|
|
@ -585,7 +593,8 @@ std::string XdsApi::AssembleClientConfig( |
|
|
|
// Fill-in the node information
|
|
|
|
// Fill-in the node information
|
|
|
|
auto* node = envoy_service_status_v3_ClientConfig_mutable_node(client_config, |
|
|
|
auto* node = envoy_service_status_v3_ClientConfig_mutable_node(client_config, |
|
|
|
arena.ptr()); |
|
|
|
arena.ptr()); |
|
|
|
const XdsApiContext context = {client_, tracer_, symtab_->ptr(), arena.ptr()}; |
|
|
|
const XdsApiContext context = {client_, tracer_, def_pool_->ptr(), |
|
|
|
|
|
|
|
arena.ptr()}; |
|
|
|
PopulateNode(context, node_, user_agent_name_, user_agent_version_, node); |
|
|
|
PopulateNode(context, node_, user_agent_name_, user_agent_version_, node); |
|
|
|
// Dump each resource.
|
|
|
|
// Dump each resource.
|
|
|
|
std::vector<std::string> type_url_storage; |
|
|
|
std::vector<std::string> type_url_storage; |
|
|
|