diff options
author | 2017-12-28 15:04:48 -0800 | |
---|---|---|
committer | 2017-12-28 15:09:17 -0800 | |
commit | 7d9b6358b507aef4188739c46db1ad3f39a5bf98 (patch) | |
tree | 84991fb473351e484207e5dcd31d406f95c01d0f /src/core/ext/filters/client_channel/subchannel.cc | |
parent | 2e04b2dd0c9aed66a14e6810b18e8c5b9b4f8a04 (diff) |
Initial commit
Picks up work from https://github.com/grpc/grpc/pull/10259.
A merge was impossible due to the many sweeping changed that
have occured since I last touched that PR (c++-ization, exec_ctx,
reorganitation of filters, etc).
Diffstat (limited to 'src/core/ext/filters/client_channel/subchannel.cc')
-rw-r--r-- | src/core/ext/filters/client_channel/subchannel.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/core/ext/filters/client_channel/subchannel.cc b/src/core/ext/filters/client_channel/subchannel.cc index f07394d29b..8b8e468f16 100644 --- a/src/core/ext/filters/client_channel/subchannel.cc +++ b/src/core/ext/filters/client_channel/subchannel.cc @@ -35,6 +35,7 @@ #include "src/core/ext/filters/client_channel/uri_parser.h" #include "src/core/lib/backoff/backoff.h" #include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/channel/channel_tracer.h" #include "src/core/lib/channel/connected_channel.h" #include "src/core/lib/debug/stats.h" #include "src/core/lib/iomgr/sockaddr_utils.h" @@ -42,6 +43,7 @@ #include "src/core/lib/profiling/timers.h" #include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/support/manual_constructor.h" +#include "src/core/lib/support/object_registry.h" #include "src/core/lib/surface/channel.h" #include "src/core/lib/surface/channel_init.h" #include "src/core/lib/transport/connectivity_state.h" @@ -75,6 +77,7 @@ typedef struct external_state_watcher { } external_state_watcher; struct grpc_subchannel { + intptr_t uuid; grpc_connector* connector; /** refcount @@ -131,6 +134,8 @@ struct grpc_subchannel { bool backoff_begun; /** our alarm */ grpc_timer alarm; + + grpc_channel_tracer* tracer; }; struct grpc_subchannel_call { @@ -183,6 +188,7 @@ void grpc_connected_subchannel_unref( static void subchannel_destroy(void* arg, grpc_error* error) { grpc_subchannel* c = (grpc_subchannel*)arg; + grpc_object_registry_unregister_object(c->uuid); gpr_free((void*)c->filters); grpc_channel_args_destroy(c->args); grpc_connectivity_state_destroy(&c->state_tracker); @@ -337,6 +343,8 @@ grpc_subchannel* grpc_subchannel_create(grpc_connector* connector, GRPC_STATS_INC_CLIENT_SUBCHANNELS_CREATED(); c = (grpc_subchannel*)gpr_zalloc(sizeof(*c)); + c->uuid = + grpc_object_registry_register_object(c, GPRC_OBJECT_REGISTRY_SUBCHANNEL); c->key = key; gpr_atm_no_barrier_store(&c->ref_pair, 1 << INTERNAL_REF_BITS); c->connector = connector; @@ -385,6 +393,15 @@ grpc_subchannel* grpc_subchannel_create(grpc_connector* connector, return grpc_subchannel_index_register(key, c); } +char* grpc_subchannel_get_trace(grpc_subchannel* subchannel, bool recursive) { + return subchannel->tracer != NULL + ? grpc_channel_tracer_render_trace(subchannel->tracer, recursive) + : NULL; +} +intptr_t grpc_subchannel_get_uuid(grpc_subchannel* subchannel) { + return subchannel->uuid; +} + static void continue_connect_locked(grpc_subchannel* c) { grpc_connect_in_args args; args.interested_parties = c->pollset_set; |