aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar ncteisen <ncteisen@gmail.com>2018-01-03 17:42:52 -0800
committerGravatar ncteisen <ncteisen@gmail.com>2018-01-03 17:48:30 -0800
commit1d2f23b338fee1a88db63bc5728bbe23065fbba7 (patch)
treeb0a5b8fe0bee4d5ef2d071e945266d916f298420
parentfb505cc7c76cf5ec73cae16d146374e74aec5e30 (diff)
Register tracers, not (sub)channels
-rw-r--r--src/core/ext/filters/client_channel/subchannel.cc13
-rw-r--r--src/core/ext/filters/client_channel/subchannel.h4
-rw-r--r--src/core/lib/channel/channel_tracer.cc30
-rw-r--r--src/core/lib/channel/channel_tracer.h16
-rw-r--r--src/core/lib/support/object_registry.h3
-rw-r--r--src/core/lib/surface/channel.cc6
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);
}
}
}