Merge pull request #22063 from markdroth/xds_lrs_metadata
Update LRS to use "PROXYLESS_CLIENT_HOSTNAME" metadata instead of cluster field.
This commit is contained in:
commit
2a67b2d55a
|
|
@ -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…
Reference in New Issue