|
|
@@ -411,6 +411,14 @@ grpc_core::channelz::SubchannelNode* grpc_subchannel_get_channelz_node(
|
|
|
return subchannel->channelz_subchannel.get();
|
|
|
}
|
|
|
|
|
|
+intptr_t grpc_subchannel_get_child_socket_uuid(grpc_subchannel* subchannel) {
|
|
|
+ if (subchannel->connected_subchannel != nullptr) {
|
|
|
+ return subchannel->connected_subchannel->socket_uuid();
|
|
|
+ } else {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void continue_connect_locked(grpc_subchannel* c) {
|
|
|
grpc_connect_in_args args;
|
|
|
args.interested_parties = c->pollset_set;
|
|
|
@@ -621,6 +629,7 @@ static bool publish_transport_locked(grpc_subchannel* c) {
|
|
|
GRPC_ERROR_UNREF(error);
|
|
|
return false;
|
|
|
}
|
|
|
+ intptr_t socket_uuid = c->connecting_result.socket_uuid;
|
|
|
memset(&c->connecting_result, 0, sizeof(c->connecting_result));
|
|
|
|
|
|
/* initialize state watcher */
|
|
|
@@ -641,7 +650,7 @@ static bool publish_transport_locked(grpc_subchannel* c) {
|
|
|
|
|
|
/* publish */
|
|
|
c->connected_subchannel.reset(grpc_core::New<grpc_core::ConnectedSubchannel>(
|
|
|
- stk, c->channelz_subchannel.get()));
|
|
|
+ stk, c->channelz_subchannel.get(), socket_uuid));
|
|
|
gpr_log(GPR_INFO, "New connected subchannel at %p for subchannel %p",
|
|
|
c->connected_subchannel.get(), c);
|
|
|
|
|
|
@@ -811,10 +820,11 @@ namespace grpc_core {
|
|
|
|
|
|
ConnectedSubchannel::ConnectedSubchannel(
|
|
|
grpc_channel_stack* channel_stack,
|
|
|
- channelz::SubchannelNode* channelz_subchannel)
|
|
|
+ channelz::SubchannelNode* channelz_subchannel, intptr_t socket_uuid)
|
|
|
: RefCountedWithTracing<ConnectedSubchannel>(&grpc_trace_stream_refcount),
|
|
|
channel_stack_(channel_stack),
|
|
|
- channelz_subchannel_(channelz_subchannel) {}
|
|
|
+ channelz_subchannel_(channelz_subchannel),
|
|
|
+ socket_uuid_(socket_uuid) {}
|
|
|
|
|
|
ConnectedSubchannel::~ConnectedSubchannel() {
|
|
|
GRPC_CHANNEL_STACK_UNREF(channel_stack_, "connected_subchannel_dtor");
|