Update LRS to use "PROXYLESS_CLIENT_HOSTNAME" metadata instead of cluster field.

pull/22063/head
Mark D. Roth 5 years ago
parent 20a0726c55
commit 06e34a1d4f
  1. 27
      src/core/ext/filters/client_channel/xds/xds_api.cc
  2. 7
      test/cpp/end2end/xds_end2end_test.cc

@ -185,7 +185,8 @@ void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
}
void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node,
const char* build_version, envoy_api_v2_core_Node* node_msg) {
const char* build_version, const std::string& server_name,
envoy_api_v2_core_Node* node_msg) {
if (node != nullptr) {
if (!node->id.empty()) {
envoy_api_v2_core_Node_set_id(node_msg,
@ -200,6 +201,18 @@ void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node,
envoy_api_v2_core_Node_mutable_metadata(node_msg, arena);
PopulateMetadata(arena, metadata, node->metadata.object_value());
}
if (!server_name.empty()) {
google_protobuf_Struct* metadata =
envoy_api_v2_core_Node_mutable_metadata(node_msg, arena);
google_protobuf_Struct_FieldsEntry* field =
google_protobuf_Struct_add_fields(metadata, arena);
google_protobuf_Struct_FieldsEntry_set_key(
field, upb_strview_makez("PROXYLESS_CLIENT_HOSTNAME"));
google_protobuf_Value* value =
google_protobuf_Struct_FieldsEntry_mutable_value(field, arena);
google_protobuf_Value_set_string_value(
value, upb_strview_make(server_name.data(), server_name.size()));
}
if (!node->locality_region.empty() || !node->locality_zone.empty() ||
!node->locality_subzone.empty()) {
envoy_api_v2_core_Locality* locality =
@ -260,7 +273,7 @@ envoy_api_v2_DiscoveryRequest* CreateDiscoveryRequest(
if (build_version != nullptr) {
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, build_version, "", node_msg);
}
return request;
}
@ -960,15 +973,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_, node_msg);
// Add cluster stats. There is only one because we only use one server name in
// one channel.
envoy_api_v2_endpoint_ClusterStats* cluster_stats =
envoy_service_load_stats_v2_LoadStatsRequest_add_cluster_stats(
request, arena.ptr());
// Set the cluster name.
envoy_api_v2_endpoint_ClusterStats_set_cluster_name(
cluster_stats, upb_strview_makez(server_name.c_str()));
PopulateNode(arena.ptr(), node_, build_version_, server_name, node_msg);
return SerializeLrsRequest(request, arena.ptr());
}

@ -751,7 +751,12 @@ class LrsServiceImpl : public LrsService {
IncreaseRequestCount();
// Send response.
LoadStatsResponse response;
auto server_name = request.cluster_stats()[0].cluster_name();
std::string server_name;
auto it = request.node().metadata().fields().find(
"PROXYLESS_CLIENT_HOSTNAME");
if (it != request.node().metadata().fields().end()) {
server_name = it->second.string_value();
}
GPR_ASSERT(server_name != "");
response.add_clusters(server_name);
response.mutable_load_reporting_interval()->set_seconds(

Loading…
Cancel
Save