From 3c98b9d8fe4a7497acbff66b05a6b7ffffcb35b2 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Wed, 26 Feb 2020 10:59:48 -0800 Subject: [PATCH] populate user_agent_name and user_agent_version --- .../ext/filters/client_channel/xds/xds_api.cc | 38 +++++++++++++------ .../ext/filters/client_channel/xds/xds_api.h | 5 +-- .../filters/client_channel/xds/xds_client.cc | 11 +----- .../filters/client_channel/xds/xds_client.h | 2 - 4 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/core/ext/filters/client_channel/xds/xds_api.cc b/src/core/ext/filters/client_channel/xds/xds_api.cc index e6e0a1a1790..daff1a57e83 100644 --- a/src/core/ext/filters/client_channel/xds/xds_api.cc +++ b/src/core/ext/filters/client_channel/xds/xds_api.cc @@ -22,6 +22,8 @@ #include #include +#include "absl/strings/str_cat.h" + #include #include #include @@ -123,6 +125,10 @@ const char* XdsApi::kCdsTypeUrl = "type.googleapis.com/envoy.api.v2.Cluster"; const char* XdsApi::kEdsTypeUrl = "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment"; +XdsApi::XdsApi(const XdsBootstrap::Node* node) + : node_(node), + user_agent_name_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING)) {} + namespace { void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb, @@ -185,7 +191,8 @@ void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb, } void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node, - const char* build_version, const std::string& server_name, + const std::string& user_agent_name, + const std::string& server_name, envoy_api_v2_core_Node* node_msg) { if (node != nullptr) { if (!node->id.empty()) { @@ -231,8 +238,15 @@ void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node, } } } - envoy_api_v2_core_Node_set_build_version(node_msg, - upb_strview_makez(build_version)); + std::string build_version = + absl::StrCat(user_agent_name, " ", grpc_version_string()); + envoy_api_v2_core_Node_set_build_version( + node_msg, upb_strview_make(build_version.data(), build_version.size())); + envoy_api_v2_core_Node_set_user_agent_name( + node_msg, + upb_strview_make(user_agent_name.data(), user_agent_name.size())); + envoy_api_v2_core_Node_set_user_agent_version( + node_msg, upb_strview_makez(grpc_version_string())); envoy_api_v2_core_Node_add_client_features( node_msg, upb_strview_makez("envoy.lb.does_not_support_overprovisioning"), arena); @@ -241,7 +255,7 @@ void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node, envoy_api_v2_DiscoveryRequest* CreateDiscoveryRequest( upb_arena* arena, const char* type_url, const std::string& version, const std::string& nonce, grpc_error* error, const XdsBootstrap::Node* node, - const char* build_version) { + const std::string& user_agent_name) { // Create a request. envoy_api_v2_DiscoveryRequest* request = envoy_api_v2_DiscoveryRequest_new(arena); @@ -273,10 +287,10 @@ envoy_api_v2_DiscoveryRequest* CreateDiscoveryRequest( GRPC_ERROR_UNREF(error); } // Populate node. - if (build_version != nullptr) { + if (!user_agent_name.empty()) { envoy_api_v2_core_Node* node_msg = envoy_api_v2_DiscoveryRequest_mutable_node(request, arena); - PopulateNode(arena, node, build_version, "", node_msg); + PopulateNode(arena, node, user_agent_name, "", node_msg); } return request; } @@ -297,7 +311,7 @@ grpc_slice XdsApi::CreateUnsupportedTypeNackRequest(const std::string& type_url, upb::Arena arena; envoy_api_v2_DiscoveryRequest* request = CreateDiscoveryRequest( arena.ptr(), type_url.c_str(), /*version=*/"", nonce, error, - /*node=*/nullptr, /*build_version=*/nullptr); + /*node=*/nullptr, /*user_agent_name=*/""); return SerializeDiscoveryRequest(arena.ptr(), request); } @@ -309,7 +323,7 @@ grpc_slice XdsApi::CreateLdsRequest(const std::string& server_name, envoy_api_v2_DiscoveryRequest* request = CreateDiscoveryRequest(arena.ptr(), kLdsTypeUrl, version, nonce, error, populate_node ? node_ : nullptr, - populate_node ? build_version_ : nullptr); + populate_node ? user_agent_name_ : ""); // Add resource_name. envoy_api_v2_DiscoveryRequest_add_resource_names( request, upb_strview_make(server_name.data(), server_name.size()), @@ -325,7 +339,7 @@ grpc_slice XdsApi::CreateRdsRequest(const std::string& route_config_name, envoy_api_v2_DiscoveryRequest* request = CreateDiscoveryRequest(arena.ptr(), kRdsTypeUrl, version, nonce, error, populate_node ? node_ : nullptr, - populate_node ? build_version_ : nullptr); + populate_node ? user_agent_name_ : ""); // Add resource_name. envoy_api_v2_DiscoveryRequest_add_resource_names( request, @@ -342,7 +356,7 @@ grpc_slice XdsApi::CreateCdsRequest(const std::set& cluster_names, envoy_api_v2_DiscoveryRequest* request = CreateDiscoveryRequest(arena.ptr(), kCdsTypeUrl, version, nonce, error, populate_node ? node_ : nullptr, - populate_node ? build_version_ : nullptr); + populate_node ? user_agent_name_ : ""); // Add resource_names. for (const auto& cluster_name : cluster_names) { envoy_api_v2_DiscoveryRequest_add_resource_names( @@ -359,7 +373,7 @@ grpc_slice XdsApi::CreateEdsRequest( envoy_api_v2_DiscoveryRequest* request = CreateDiscoveryRequest(arena.ptr(), kEdsTypeUrl, version, nonce, error, populate_node ? node_ : nullptr, - populate_node ? build_version_ : nullptr); + populate_node ? user_agent_name_ : ""); // Add resource_names. for (const auto& eds_service_name : eds_service_names) { envoy_api_v2_DiscoveryRequest_add_resource_names( @@ -976,7 +990,7 @@ grpc_slice XdsApi::CreateLrsInitialRequest(const std::string& server_name) { envoy_api_v2_core_Node* node_msg = envoy_service_load_stats_v2_LoadStatsRequest_mutable_node(request, arena.ptr()); - PopulateNode(arena.ptr(), node_, build_version_, server_name, node_msg); + PopulateNode(arena.ptr(), node_, user_agent_name_, server_name, node_msg); return SerializeLrsRequest(request, arena.ptr()); } diff --git a/src/core/ext/filters/client_channel/xds/xds_api.h b/src/core/ext/filters/client_channel/xds/xds_api.h index 866531b35b7..5a1fbbb1f3f 100644 --- a/src/core/ext/filters/client_channel/xds/xds_api.h +++ b/src/core/ext/filters/client_channel/xds/xds_api.h @@ -187,8 +187,7 @@ class XdsApi { std::pair, ClusterLoadReport>; - XdsApi(const XdsBootstrap::Node* node, const char* build_version) - : node_(node), build_version_(build_version) {} + explicit XdsApi(const XdsBootstrap::Node* node); // Creates a request to nack an unsupported resource type. // Takes ownership of \a error. @@ -251,7 +250,7 @@ class XdsApi { private: const XdsBootstrap::Node* node_; - const char* build_version_; + std::string user_agent_name_; }; } // namespace grpc_core diff --git a/src/core/ext/filters/client_channel/xds/xds_client.cc b/src/core/ext/filters/client_channel/xds/xds_client.cc index 10286787688..bd4eb9566fc 100644 --- a/src/core/ext/filters/client_channel/xds/xds_client.cc +++ b/src/core/ext/filters/client_channel/xds/xds_client.cc @@ -1714,13 +1714,6 @@ grpc_millis GetRequestTimeout(const grpc_channel_args& args) { {15000, 0, INT_MAX}); } -UniquePtr GenerateBuildVersionString() { - char* build_version_str; - gpr_asprintf(&build_version_str, "gRPC C-core %s %s", grpc_version_string(), - GPR_PLATFORM_STRING); - return UniquePtr(build_version_str); -} - } // namespace XdsClient::XdsClient(Combiner* combiner, grpc_pollset_set* interested_parties, @@ -1729,12 +1722,10 @@ XdsClient::XdsClient(Combiner* combiner, grpc_pollset_set* interested_parties, const grpc_channel_args& channel_args, grpc_error** error) : InternallyRefCounted(&grpc_xds_client_trace), request_timeout_(GetRequestTimeout(channel_args)), - build_version_(GenerateBuildVersionString()), combiner_(GRPC_COMBINER_REF(combiner, "xds_client")), interested_parties_(interested_parties), bootstrap_(XdsBootstrap::ReadFromFile(error)), - api_(bootstrap_ == nullptr ? nullptr : bootstrap_->node(), - build_version_.get()), + api_(bootstrap_ == nullptr ? nullptr : bootstrap_->node()), server_name_(server_name), service_config_watcher_(std::move(watcher)) { if (*error != GRPC_ERROR_NONE) { diff --git a/src/core/ext/filters/client_channel/xds/xds_client.h b/src/core/ext/filters/client_channel/xds/xds_client.h index c6bb5affe15..02e80680399 100644 --- a/src/core/ext/filters/client_channel/xds/xds_client.h +++ b/src/core/ext/filters/client_channel/xds/xds_client.h @@ -226,8 +226,6 @@ class XdsClient : public InternallyRefCounted { const grpc_millis request_timeout_; - grpc_core::UniquePtr build_version_; - Combiner* combiner_; grpc_pollset_set* interested_parties_;