Write ClientChannelNode in terms of client_channel

pull/15906/head
ncteisen 7 years ago committed by Noah Eisen
parent 230035180f
commit c9c1feffca
  1. 17
      src/core/ext/filters/client_channel/client_channel_channelz.cc
  2. 6
      src/core/ext/filters/client_channel/client_channel_channelz.h
  3. 7
      src/core/lib/channel/channelz.h
  4. 2
      src/core/lib/surface/channel.cc

@ -18,8 +18,10 @@
#include <grpc/support/port_platform.h>
#include "src/core/ext/filters/client_channel/client_channel.h"
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/surface/channel.h"
#include "src/core/lib/transport/connectivity_state.h"
namespace grpc_core {
@ -37,12 +39,21 @@ static const grpc_arg_pointer_vtable client_channel_channelz_vtable = {
client_channel_channelz_copy, client_channel_channelz_destroy,
client_channel_channelz_cmp};
ClientChannelNode::ClientChannelNode(grpc_channel* channel,
size_t channel_tracer_max_nodes)
: ChannelNode(channel, channel_tracer_max_nodes) {
client_channel_ =
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
GPR_ASSERT(client_channel_->filter == &grpc_client_channel_filter);
}
void ClientChannelNode::PopulateConnectivityState(grpc_json* json) {
grpc_connectivity_state state;
if (channel() != nullptr) {
state = grpc_channel_check_connectivity_state(channel(), false);
} else {
if (ChannelIsDestroyed()) {
state = GRPC_CHANNEL_SHUTDOWN;
} else {
state =
grpc_client_channel_check_connectivity_state(client_channel_, false);
}
json = grpc_json_create_child(nullptr, json, "state", nullptr,
GRPC_JSON_OBJECT, false);

@ -31,8 +31,7 @@ namespace channelz {
// functionality like querying for connectivity_state and subchannel data.
class ClientChannelNode : public ChannelNode {
public:
ClientChannelNode(grpc_channel* channel, size_t channel_tracer_max_nodes)
: ChannelNode(channel, channel_tracer_max_nodes) {}
ClientChannelNode(grpc_channel* channel, size_t channel_tracer_max_nodes);
virtual ~ClientChannelNode() {}
// Override this functionality since client_channels have a notion of
@ -42,6 +41,9 @@ class ClientChannelNode : public ChannelNode {
// Helper to create a channel arg to ensure this type of ChannelNode is
// created.
static grpc_arg CreateArg();
private:
grpc_channel_element* client_channel_;
};
RefCountedPtr<ChannelNode> MakeClientChannelNode(

@ -64,15 +64,14 @@ class ChannelNode : public RefCounted<ChannelNode> {
ChannelTrace* trace() { return trace_.get(); }
void set_channel_destroyed() {
void MarkChannelDestroyed() {
GPR_ASSERT(channel_ != nullptr);
channel_ = nullptr;
}
intptr_t channel_uuid() { return channel_uuid_; }
bool ChannelIsDestroyed() { return channel_ == nullptr; }
protected:
grpc_channel* channel() { return channel_; }
intptr_t channel_uuid() { return channel_uuid_; }
private:
// testing peer friend.

@ -410,7 +410,7 @@ void grpc_channel_internal_unref(grpc_channel* c REF_ARG) {
static void destroy_channel(void* arg, grpc_error* error) {
grpc_channel* channel = static_cast<grpc_channel*>(arg);
if (channel->channelz_channel != nullptr) {
channel->channelz_channel->set_channel_destroyed();
channel->channelz_channel->MarkChannelDestroyed();
channel->channelz_channel.reset();
}
grpc_channel_stack_destroy(CHANNEL_STACK_FROM_CHANNEL(channel));

Loading…
Cancel
Save