diff options
author | 2018-01-03 17:42:52 -0800 | |
---|---|---|
committer | 2018-01-03 17:48:30 -0800 | |
commit | 1d2f23b338fee1a88db63bc5728bbe23065fbba7 (patch) | |
tree | b0a5b8fe0bee4d5ef2d071e945266d916f298420 | |
parent | fb505cc7c76cf5ec73cae16d146374e74aec5e30 (diff) |
Register tracers, not (sub)channels
-rw-r--r-- | src/core/ext/filters/client_channel/subchannel.cc | 13 | ||||
-rw-r--r-- | src/core/ext/filters/client_channel/subchannel.h | 4 | ||||
-rw-r--r-- | src/core/lib/channel/channel_tracer.cc | 30 | ||||
-rw-r--r-- | src/core/lib/channel/channel_tracer.h | 16 | ||||
-rw-r--r-- | src/core/lib/support/object_registry.h | 3 | ||||
-rw-r--r-- | src/core/lib/surface/channel.cc | 6 |
6 files changed, 25 insertions, 47 deletions
diff --git a/src/core/ext/filters/client_channel/subchannel.cc b/src/core/ext/filters/client_channel/subchannel.cc index 8b8e468f16..02bcba0e73 100644 --- a/src/core/ext/filters/client_channel/subchannel.cc +++ b/src/core/ext/filters/client_channel/subchannel.cc @@ -188,7 +188,6 @@ 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); @@ -343,8 +342,7 @@ 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->uuid = -1; c->key = key; gpr_atm_no_barrier_store(&c->ref_pair, 1 << INTERNAL_REF_BITS); c->connector = connector; @@ -393,15 +391,6 @@ 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; diff --git a/src/core/ext/filters/client_channel/subchannel.h b/src/core/ext/filters/client_channel/subchannel.h index 3584d3928a..9d34fff07a 100644 --- a/src/core/ext/filters/client_channel/subchannel.h +++ b/src/core/ext/filters/client_channel/subchannel.h @@ -165,10 +165,6 @@ struct grpc_subchannel_args { grpc_subchannel* grpc_subchannel_create(grpc_connector* connector, const grpc_subchannel_args* args); -/// retrieves the trace for this subchannel in JSON form. -char* grpc_subchannel_get_trace(grpc_subchannel* subchannel, bool recursive); -intptr_t grpc_subchannel_get_uuid(grpc_subchannel* subchannel); - /// Sets \a addr from \a args. void grpc_get_subchannel_address_arg(const grpc_channel_args* args, grpc_resolved_address* addr); diff --git a/src/core/lib/channel/channel_tracer.cc b/src/core/lib/channel/channel_tracer.cc index 31c1d842a0..931f4b32b5 100644 --- a/src/core/lib/channel/channel_tracer.cc +++ b/src/core/lib/channel/channel_tracer.cc @@ -25,7 +25,6 @@ #include <stdlib.h> #include <string.h> -#include "src/core/ext/filters/client_channel/subchannel.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/support/object_registry.h" @@ -62,12 +61,11 @@ struct grpc_channel_tracer { }; #ifndef NDEBUG -grpc_channel_tracer* grpc_channel_tracer_create(size_t max_nodes, intptr_t uuid, +grpc_channel_tracer* grpc_channel_tracer_create(size_t max_nodes, const char* file, int line, const char* func) { #else -grpc_channel_tracer* grpc_channel_tracer_create(size_t max_nodes, - intptr_t uuid) { +grpc_channel_tracer* grpc_channel_tracer_create(size_t max_nodes) { #endif grpc_channel_tracer* tracer = static_cast<grpc_channel_tracer*>( gpr_zalloc(sizeof(grpc_channel_tracer))); @@ -78,7 +76,8 @@ grpc_channel_tracer* grpc_channel_tracer_create(size_t max_nodes, gpr_log(GPR_DEBUG, "%p create [%s:%d %s]", tracer, file, line, func); } #endif - tracer->channel_uuid = uuid; + tracer->channel_uuid = grpc_object_registry_register_object( + tracer, GRPC_OBJECT_REGISTRY_CHANNEL_TRACER); tracer->max_list_size = max_nodes; tracer->time_created = gpr_now(GPR_CLOCK_REALTIME); return tracer; @@ -145,6 +144,10 @@ void grpc_channel_tracer_unref(grpc_channel_tracer* tracer) { } #endif +intptr_t grpc_channel_tracer_get_uuid(grpc_channel_tracer* tracer) { + return tracer->channel_uuid; +} + void grpc_channel_tracer_add_trace(grpc_channel_tracer* tracer, grpc_slice data, grpc_error* error, grpc_connectivity_state connectivity_state, @@ -318,18 +321,7 @@ char* grpc_channel_tracer_get_trace(intptr_t uuid, bool recursive) { void* object; grpc_object_registry_type type = grpc_object_registry_get_object(uuid, &object); - GPR_ASSERT(type == GRPC_OBJECT_REGISTRY_CHANNEL || - type == GPRC_OBJECT_REGISTRY_SUBCHANNEL); - switch (type) { - case GRPC_OBJECT_REGISTRY_CHANNEL: - return grpc_channel_get_trace(static_cast<grpc_channel*>(object), - recursive); - break; - case GPRC_OBJECT_REGISTRY_SUBCHANNEL: - return grpc_subchannel_get_trace(static_cast<grpc_subchannel*>(object), - recursive); - break; - default: - abort(); - } + GPR_ASSERT(type == GRPC_OBJECT_REGISTRY_CHANNEL_TRACER); + return grpc_channel_tracer_render_trace( + static_cast<grpc_channel_tracer*>(object), recursive); } diff --git a/src/core/lib/channel/channel_tracer.h b/src/core/lib/channel/channel_tracer.h index 34bb242ca0..5c34f1bc44 100644 --- a/src/core/lib/channel/channel_tracer.h +++ b/src/core/lib/channel/channel_tracer.h @@ -30,16 +30,15 @@ extern grpc_core::DebugOnlyTraceFlag grpc_trace_channel_tracer_refcount; /* Creates a new tracer. The caller owns a reference to the returned tracer. */ #ifndef NDEBUG -grpc_channel_tracer* grpc_channel_tracer_create(size_t max_nodes, intptr_t uuid, +grpc_channel_tracer* grpc_channel_tracer_create(size_t max_nodes, const char* file, int line, const char* func); -#define GRPC_CHANNEL_TRACER_CREATE(max_nodes, id) \ - grpc_channel_tracer_create(max_nodes, id, __FILE__, __LINE__, __func__) +#define GRPC_CHANNEL_TRACER_CREATE(max_nodes) \ + grpc_channel_tracer_create(max_nodes, __FILE__, __LINE__, __func__) #else -grpc_channel_tracer* grpc_channel_tracer_create(size_t max_nodes, - intptr_t uuid); -#define GRPC_CHANNEL_TRACER_CREATE(max_nodes, id) \ - grpc_channel_tracer_create(max_nodes, id) +grpc_channel_tracer* grpc_channel_tracer_create(size_t max_nodes); +#define GRPC_CHANNEL_TRACER_CREATE(max_nodes) \ + grpc_channel_tracer_create(max_nodes) #endif #ifndef NDEBUG @@ -59,6 +58,9 @@ void grpc_channel_tracer_unref(grpc_channel_tracer* tracer); #define GRPC_CHANNEL_TRACER_UNREF(tracer) grpc_channel_tracer_unref(tracer) #endif +/* returns the tracers uuid */ +intptr_t grpc_channel_tracer_get_uuid(grpc_channel_tracer* tracer); + /* Adds a new trace node to the tracing object */ void grpc_channel_tracer_add_trace(grpc_channel_tracer* tracer, grpc_slice data, grpc_error* error, diff --git a/src/core/lib/support/object_registry.h b/src/core/lib/support/object_registry.h index 3a0d056e2a..1b8e13d054 100644 --- a/src/core/lib/support/object_registry.h +++ b/src/core/lib/support/object_registry.h @@ -22,8 +22,7 @@ #include <stdint.h> typedef enum { - GRPC_OBJECT_REGISTRY_CHANNEL, - GPRC_OBJECT_REGISTRY_SUBCHANNEL, + GRPC_OBJECT_REGISTRY_CHANNEL_TRACER, GRPC_OBJECT_REGISTRY_UNKNOWN, } grpc_object_registry_type; diff --git a/src/core/lib/surface/channel.cc b/src/core/lib/surface/channel.cc index e94413e3bc..e182da2718 100644 --- a/src/core/lib/surface/channel.cc +++ b/src/core/lib/surface/channel.cc @@ -101,10 +101,9 @@ grpc_channel* grpc_channel_create_with_builder( } memset(channel, 0, sizeof(*channel)); - channel->uuid = grpc_object_registry_register_object( - channel, GRPC_OBJECT_REGISTRY_CHANNEL); channel->target = target; channel->is_client = grpc_channel_stack_type_is_client(channel_stack_type); + channel->uuid = -1; channel->tracer = NULL; gpr_mu_init(&channel->registered_call_mu); channel->registered_calls = nullptr; @@ -203,7 +202,8 @@ grpc_channel* grpc_channel_create_with_builder( size_t max_nodes = (size_t)grpc_channel_arg_get_integer(&args->args[i], options); if (max_nodes > 0) { - channel->tracer = GRPC_CHANNEL_TRACER_CREATE(max_nodes, channel->uuid); + channel->tracer = GRPC_CHANNEL_TRACER_CREATE(max_nodes); + channel->uuid = grpc_channel_tracer_get_uuid(channel->tracer); } } } |