|
|
|
@ -183,42 +183,30 @@ void CreateChannelzNode(grpc_channel_stack_builder* builder) { |
|
|
|
|
const grpc_channel_args* args = |
|
|
|
|
grpc_channel_stack_builder_get_channel_arguments(builder); |
|
|
|
|
// Check whether channelz is enabled.
|
|
|
|
|
const bool channelz_enabled = grpc_channel_arg_get_bool( |
|
|
|
|
grpc_channel_args_find(args, GRPC_ARG_ENABLE_CHANNELZ), |
|
|
|
|
GRPC_ENABLE_CHANNELZ_DEFAULT); |
|
|
|
|
const bool channelz_enabled = grpc_channel_args_find_bool( |
|
|
|
|
args, GRPC_ARG_ENABLE_CHANNELZ, GRPC_ENABLE_CHANNELZ_DEFAULT); |
|
|
|
|
if (!channelz_enabled) return; |
|
|
|
|
// Get parameters needed to create the channelz node.
|
|
|
|
|
const size_t channel_tracer_max_memory = grpc_channel_arg_get_integer( |
|
|
|
|
grpc_channel_args_find(args, |
|
|
|
|
GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE), |
|
|
|
|
const size_t channel_tracer_max_memory = grpc_channel_args_find_integer( |
|
|
|
|
args, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE, |
|
|
|
|
{GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX}); |
|
|
|
|
const intptr_t channelz_parent_uuid = |
|
|
|
|
grpc_core::channelz::GetParentUuidFromArgs(*args); |
|
|
|
|
const bool is_internal_channel = grpc_channel_args_find_bool( |
|
|
|
|
args, GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL, false); |
|
|
|
|
// Create the channelz node.
|
|
|
|
|
const char* target = grpc_channel_stack_builder_get_target(builder); |
|
|
|
|
grpc_core::RefCountedPtr<grpc_core::channelz::ChannelNode> channelz_node = |
|
|
|
|
grpc_core::MakeRefCounted<grpc_core::channelz::ChannelNode>( |
|
|
|
|
target != nullptr ? target : "", channel_tracer_max_memory, |
|
|
|
|
channelz_parent_uuid); |
|
|
|
|
is_internal_channel); |
|
|
|
|
channelz_node->AddTraceEvent( |
|
|
|
|
grpc_core::channelz::ChannelTrace::Severity::Info, |
|
|
|
|
grpc_slice_from_static_string("Channel created")); |
|
|
|
|
// Update parent channel node, if any.
|
|
|
|
|
if (channelz_parent_uuid > 0) { |
|
|
|
|
grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> parent_node = |
|
|
|
|
grpc_core::channelz::ChannelzRegistry::Get(channelz_parent_uuid); |
|
|
|
|
if (parent_node != nullptr) { |
|
|
|
|
grpc_core::channelz::ChannelNode* parent = |
|
|
|
|
static_cast<grpc_core::channelz::ChannelNode*>(parent_node.get()); |
|
|
|
|
parent->AddChildChannel(channelz_node->uuid()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// Add channelz node to channel args.
|
|
|
|
|
// We remove the arg for the parent uuid, since we no longer need it.
|
|
|
|
|
// We remove the is_internal_channel arg, since we no longer need it.
|
|
|
|
|
grpc_arg new_arg = grpc_channel_arg_pointer_create( |
|
|
|
|
const_cast<char*>(GRPC_ARG_CHANNELZ_CHANNEL_NODE), channelz_node.get(), |
|
|
|
|
&channelz_node_arg_vtable); |
|
|
|
|
const char* args_to_remove[] = {GRPC_ARG_CHANNELZ_PARENT_UUID}; |
|
|
|
|
const char* args_to_remove[] = {GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL}; |
|
|
|
|
grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove( |
|
|
|
|
args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1); |
|
|
|
|
grpc_channel_stack_builder_set_channel_arguments(builder, new_args); |
|
|
|
@ -506,16 +494,6 @@ grpc_call* grpc_channel_create_registered_call( |
|
|
|
|
static void destroy_channel(void* arg, grpc_error* /*error*/) { |
|
|
|
|
grpc_channel* channel = static_cast<grpc_channel*>(arg); |
|
|
|
|
if (channel->channelz_node != nullptr) { |
|
|
|
|
if (channel->channelz_node->parent_uuid() > 0) { |
|
|
|
|
grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> parent_node = |
|
|
|
|
grpc_core::channelz::ChannelzRegistry::Get( |
|
|
|
|
channel->channelz_node->parent_uuid()); |
|
|
|
|
if (parent_node != nullptr) { |
|
|
|
|
grpc_core::channelz::ChannelNode* parent = |
|
|
|
|
static_cast<grpc_core::channelz::ChannelNode*>(parent_node.get()); |
|
|
|
|
parent->RemoveChildChannel(channel->channelz_node->uuid()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
channel->channelz_node->AddTraceEvent( |
|
|
|
|
grpc_core::channelz::ChannelTrace::Severity::Info, |
|
|
|
|
grpc_slice_from_static_string("Channel destroyed")); |
|
|
|
|