populate user_agent_name and user_agent_version

pull/22147/head
Mark D. Roth 5 years ago
parent 412419b5f9
commit 3c98b9d8fe
  1. 38
      src/core/ext/filters/client_channel/xds/xds_api.cc
  2. 5
      src/core/ext/filters/client_channel/xds/xds_api.h
  3. 11
      src/core/ext/filters/client_channel/xds/xds_client.cc
  4. 2
      src/core/ext/filters/client_channel/xds/xds_client.h

@ -22,6 +22,8 @@
#include <cctype>
#include <cstdlib>
#include "absl/strings/str_cat.h"
#include <grpc/impl/codegen/log.h>
#include <grpc/support/alloc.h>
#include <grpc/support/string_util.h>
@ -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<StringView>& 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());
}

@ -187,8 +187,7 @@ class XdsApi {
std::pair<std::string /*cluster_name*/, std::string /*eds_service_name*/>,
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

@ -1714,13 +1714,6 @@ grpc_millis GetRequestTimeout(const grpc_channel_args& args) {
{15000, 0, INT_MAX});
}
UniquePtr<char> GenerateBuildVersionString() {
char* build_version_str;
gpr_asprintf(&build_version_str, "gRPC C-core %s %s", grpc_version_string(),
GPR_PLATFORM_STRING);
return UniquePtr<char>(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<XdsClient>(&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) {

@ -226,8 +226,6 @@ class XdsClient : public InternallyRefCounted<XdsClient> {
const grpc_millis request_timeout_;
grpc_core::UniquePtr<char> build_version_;
Combiner* combiner_;
grpc_pollset_set* interested_parties_;

Loading…
Cancel
Save