diff options
Diffstat (limited to 'src/core/ext/filters')
3 files changed, 30 insertions, 15 deletions
diff --git a/src/core/ext/filters/client_channel/client_channel_channelz.cc b/src/core/ext/filters/client_channel/client_channel_channelz.cc index f797ef1b09..7120ec57f1 100644 --- a/src/core/ext/filters/client_channel/client_channel_channelz.cc +++ b/src/core/ext/filters/client_channel/client_channel_channelz.cc @@ -123,9 +123,14 @@ grpc_json* ClientChannelNode::RenderJson() { GPR_ASSERT(target_view() != nullptr); grpc_json_create_child(nullptr, json, "target", target_view(), GRPC_JSON_STRING, false); - // as CallCountingAndTracingNode to populate trace and call count data. - counter_and_tracer()->PopulateTrace(json); - counter_and_tracer()->PopulateCallData(json); + // fill in the channel trace if applicable + grpc_json* trace_json = trace()->RenderJson(); + if (trace_json != nullptr) { + trace_json->key = "trace"; // this object is named trace in channelz.proto + grpc_json_link_child(json, trace_json, nullptr); + } + // ask CallCountingHelper to populate trace and call count data. + call_counter()->PopulateCallData(json); // reset to the top level json = top_level_json; PopulateChildRefs(json); @@ -150,11 +155,12 @@ SubchannelNode::SubchannelNode(grpc_subchannel* subchannel, size_t channel_tracer_max_nodes) : BaseNode(EntityType::kSubchannel), subchannel_(subchannel), - target_( - UniquePtr<char>(gpr_strdup(grpc_subchannel_get_target(subchannel_)))), - counter_and_tracer_(channel_tracer_max_nodes) {} + target_(UniquePtr<char>( + gpr_strdup(grpc_subchannel_get_target(subchannel_)))) { + trace_.Init(channel_tracer_max_nodes); +} -SubchannelNode::~SubchannelNode() {} +SubchannelNode::~SubchannelNode() { trace_.Destroy(); } void SubchannelNode::PopulateConnectivityState(grpc_json* json) { grpc_connectivity_state state; @@ -192,8 +198,14 @@ grpc_json* SubchannelNode::RenderJson() { GPR_ASSERT(target_.get() != nullptr); grpc_json_create_child(nullptr, json, "target", target_.get(), GRPC_JSON_STRING, false); - counter_and_tracer_.PopulateTrace(json); - counter_and_tracer_.PopulateCallData(json); + // fill in the channel trace if applicable + grpc_json* trace_json = trace_->RenderJson(); + if (trace_json != nullptr) { + trace_json->key = "trace"; // this object is named trace in channelz.proto + grpc_json_link_child(json, trace_json, nullptr); + } + // ask CallCountingHelper to populate trace and call count data. + call_counter_.PopulateCallData(json); return top_level_json; } diff --git a/src/core/ext/filters/client_channel/client_channel_channelz.h b/src/core/ext/filters/client_channel/client_channel_channelz.h index f5344c049e..735ffacfd2 100644 --- a/src/core/ext/filters/client_channel/client_channel_channelz.h +++ b/src/core/ext/filters/client_channel/client_channel_channelz.h @@ -76,14 +76,17 @@ class SubchannelNode : public BaseNode { grpc_json* RenderJson() override; - CallCountingAndTracingNode* counter_and_tracer() { - return &counter_and_tracer_; - } + // proxy methods to composed classes. + ChannelTrace* trace() { return trace_.get(); } + void RecordCallStarted() { call_counter_.RecordCallStarted(); } + void RecordCallFailed() { call_counter_.RecordCallFailed(); } + void RecordCallSucceeded() { call_counter_.RecordCallSucceeded(); } private: grpc_subchannel* subchannel_; UniquePtr<char> target_; - CallCountingAndTracingNode counter_and_tracer_; + CallCountingHelper call_counter_; + ManualConstructor<ChannelTrace> trace_; void PopulateConnectivityState(grpc_json* json); }; diff --git a/src/core/ext/filters/client_channel/subchannel.cc b/src/core/ext/filters/client_channel/subchannel.cc index d7b64a900f..f0f8d94ef4 100644 --- a/src/core/ext/filters/client_channel/subchannel.cc +++ b/src/core/ext/filters/client_channel/subchannel.cc @@ -183,7 +183,7 @@ static void connection_destroy(void* arg, grpc_error* error) { static void subchannel_destroy(void* arg, grpc_error* error) { grpc_subchannel* c = static_cast<grpc_subchannel*>(arg); if (c->channelz_subchannel != nullptr) { - c->channelz_subchannel->counter_and_tracer()->trace()->AddTraceEvent( + c->channelz_subchannel->trace()->AddTraceEvent( grpc_core::channelz::ChannelTrace::Severity::Info, grpc_slice_from_static_string("Subchannel destroyed")); c->channelz_subchannel->MarkSubchannelDestroyed(); @@ -397,7 +397,7 @@ grpc_subchannel* grpc_subchannel_create(grpc_connector* connector, c->channelz_subchannel = grpc_core::MakeRefCounted<grpc_core::channelz::SubchannelNode>( c, channel_tracer_max_nodes); - c->channelz_subchannel->counter_and_tracer()->trace()->AddTraceEvent( + c->channelz_subchannel->trace()->AddTraceEvent( grpc_core::channelz::ChannelTrace::Severity::Info, grpc_slice_from_static_string("Subchannel created")); } |