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, 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 != nullptr) {
if (!node->id.empty()) { if (!node->id.empty()) {
envoy_api_v2_core_Node_set_id(node_msg, 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); envoy_api_v2_core_Node_mutable_metadata(node_msg, arena);
PopulateMetadata(arena, metadata, node->metadata.object_value()); 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() || if (!node->locality_region.empty() || !node->locality_zone.empty() ||
!node->locality_subzone.empty()) { !node->locality_subzone.empty()) {
envoy_api_v2_core_Locality* locality = envoy_api_v2_core_Locality* locality =
@ -260,7 +273,7 @@ envoy_api_v2_DiscoveryRequest* CreateDiscoveryRequest(
if (build_version != nullptr) { if (build_version != nullptr) {
envoy_api_v2_core_Node* node_msg = envoy_api_v2_core_Node* node_msg =
envoy_api_v2_DiscoveryRequest_mutable_node(request, arena); envoy_api_v2_DiscoveryRequest_mutable_node(request, arena);
PopulateNode(arena, node, build_version, node_msg); PopulateNode(arena, node, build_version, "", node_msg);
} }
return request; return request;
} }
@ -960,15 +973,7 @@ grpc_slice XdsApi::CreateLrsInitialRequest(const std::string& server_name) {
envoy_api_v2_core_Node* node_msg = envoy_api_v2_core_Node* node_msg =
envoy_service_load_stats_v2_LoadStatsRequest_mutable_node(request, envoy_service_load_stats_v2_LoadStatsRequest_mutable_node(request,
arena.ptr()); arena.ptr());
PopulateNode(arena.ptr(), node_, build_version_, node_msg); PopulateNode(arena.ptr(), node_, build_version_, server_name, 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()));
return SerializeLrsRequest(request, arena.ptr()); return SerializeLrsRequest(request, arena.ptr());
} }

@ -751,7 +751,12 @@ class LrsServiceImpl : public LrsService {
IncreaseRequestCount(); IncreaseRequestCount();
// Send response. // Send response.
LoadStatsResponse 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 != ""); GPR_ASSERT(server_name != "");
response.add_clusters(server_name); response.add_clusters(server_name);
response.mutable_load_reporting_interval()->set_seconds( response.mutable_load_reporting_interval()->set_seconds(

Loading…
Cancel
Save