aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/ext/filters/client_channel/subchannel.cc
diff options
context:
space:
mode:
authorGravatar ncteisen <ncteisen@gmail.com>2017-12-28 15:04:48 -0800
committerGravatar ncteisen <ncteisen@gmail.com>2017-12-28 15:09:17 -0800
commit7d9b6358b507aef4188739c46db1ad3f39a5bf98 (patch)
tree84991fb473351e484207e5dcd31d406f95c01d0f /src/core/ext/filters/client_channel/subchannel.cc
parent2e04b2dd0c9aed66a14e6810b18e8c5b9b4f8a04 (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.cc17
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;