aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ext/filters/client_channel/subchannel.cc2
-rw-r--r--src/core/lib/channel/channel_trace.cc6
-rw-r--r--src/core/lib/channel/channel_trace_registry.cc (renamed from src/core/lib/channel/object_registry.cc)59
-rw-r--r--src/core/lib/channel/channel_trace_registry.h43
-rw-r--r--src/core/lib/channel/object_registry.h52
-rw-r--r--src/core/lib/surface/channel.cc1
-rw-r--r--src/core/lib/surface/init.cc6
7 files changed, 68 insertions, 101 deletions
diff --git a/src/core/ext/filters/client_channel/subchannel.cc b/src/core/ext/filters/client_channel/subchannel.cc
index e8ff352be8..4802110e5a 100644
--- a/src/core/ext/filters/client_channel/subchannel.cc
+++ b/src/core/ext/filters/client_channel/subchannel.cc
@@ -37,8 +37,8 @@
#include "src/core/lib/backoff/backoff.h"
#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/channel/channel_trace.h"
+#include "src/core/lib/channel/channel_trace_registry.h"
#include "src/core/lib/channel/connected_channel.h"
-#include "src/core/lib/channel/object_registry.h"
#include "src/core/lib/debug/stats.h"
#include "src/core/lib/gprpp/debug_location.h"
#include "src/core/lib/gprpp/manual_constructor.h"
diff --git a/src/core/lib/channel/channel_trace.cc b/src/core/lib/channel/channel_trace.cc
index 3217a83fba..226ab0292d 100644
--- a/src/core/lib/channel/channel_trace.cc
+++ b/src/core/lib/channel/channel_trace.cc
@@ -28,7 +28,7 @@
#include <string.h>
#include "src/core/ext/filters/client_channel/status_util.h"
-#include "src/core/lib/channel/object_registry.h"
+#include "src/core/lib/channel/channel_trace_registry.h"
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/memory.h"
@@ -76,8 +76,7 @@ ChannelTrace::ChannelTrace(size_t max_events)
tail_trace_(nullptr) {
if (max_list_size_ == 0) return; // tracing is disabled if max_events == 0
gpr_mu_init(&tracer_mu_);
- channel_uuid_ = grpc_object_registry_register_object(
- this, GRPC_OBJECT_REGISTRY_CHANNEL_TRACER);
+ channel_uuid_ = grpc_channel_trace_registry_register_channel_trace(this);
time_created_ = grpc_millis_to_timespec(grpc_core::ExecCtx::Get()->Now(),
GPR_CLOCK_REALTIME);
}
@@ -90,6 +89,7 @@ ChannelTrace::~ChannelTrace() {
it = it->next();
Delete<TraceEvent>(to_free);
}
+ grpc_channel_trace_registry_unregister_channel_trace(channel_uuid_);
gpr_mu_destroy(&tracer_mu_);
}
diff --git a/src/core/lib/channel/object_registry.cc b/src/core/lib/channel/channel_trace_registry.cc
index 987c5366ca..6c82431467 100644
--- a/src/core/lib/channel/object_registry.cc
+++ b/src/core/lib/channel/channel_trace_registry.cc
@@ -19,7 +19,8 @@
#include <grpc/impl/codegen/port_platform.h>
#include "src/core/lib/avl/avl.h"
-#include "src/core/lib/channel/object_registry.h"
+#include "src/core/lib/channel/channel_trace.h"
+#include "src/core/lib/channel/channel_trace_registry.h"
#include "src/core/lib/gpr/useful.h"
#include <grpc/support/alloc.h>
@@ -30,12 +31,7 @@ static gpr_mu g_mu;
static grpc_avl g_avl;
static gpr_atm g_uuid = 0;
-typedef struct {
- void* object;
- grpc_object_registry_type type;
-} object_tracker;
-
-// avl vtable for uuid (intptr_t) -> object_tracker
+// avl vtable for uuid (intptr_t) -> ChannelTrace
// this table is only looking, it does not own anything.
static void destroy_intptr(void* not_used, void* user_data) {}
static void* copy_intptr(void* key, void* user_data) { return key; }
@@ -43,61 +39,42 @@ static long compare_intptr(void* key1, void* key2, void* user_data) {
return GPR_ICMP(key1, key2);
}
-static void destroy_tracker(void* tracker, void* user_data) {
- gpr_free((object_tracker*)tracker);
-}
-
-static void* copy_tracker(void* value, void* user_data) {
- object_tracker* old = static_cast<object_tracker*>(value);
- object_tracker* new_obj =
- static_cast<object_tracker*>(gpr_malloc(sizeof(object_tracker)));
- new_obj->object = old->object;
- new_obj->type = old->type;
- return new_obj;
-}
+static void destroy_channel_trace(void* trace, void* user_data) {}
+static void* copy_channel_trace(void* trace, void* user_data) { return trace; }
static const grpc_avl_vtable avl_vtable = {
- destroy_intptr, copy_intptr, compare_intptr, destroy_tracker, copy_tracker};
+ destroy_intptr, copy_intptr, compare_intptr, destroy_channel_trace,
+ copy_channel_trace};
-void grpc_object_registry_init() {
+void grpc_channel_trace_registry_init() {
gpr_mu_init(&g_mu);
g_avl = grpc_avl_create(&avl_vtable);
}
-void grpc_object_registry_shutdown() {
+void grpc_channel_trace_registry_shutdown() {
grpc_avl_unref(g_avl, nullptr);
gpr_mu_destroy(&g_mu);
}
-intptr_t grpc_object_registry_register_object(void* object,
- grpc_object_registry_type type) {
- object_tracker* tracker =
- static_cast<object_tracker*>(gpr_malloc(sizeof(object_tracker)));
- tracker->object = object;
- tracker->type = type;
+intptr_t grpc_channel_trace_registry_register_channel_trace(
+ grpc_core::ChannelTrace* channel_trace) {
intptr_t prior = gpr_atm_no_barrier_fetch_add(&g_uuid, 1);
gpr_mu_lock(&g_mu);
- g_avl = grpc_avl_add(g_avl, (void*)prior, tracker, nullptr);
+ g_avl = grpc_avl_add(g_avl, (void*)prior, channel_trace, nullptr);
gpr_mu_unlock(&g_mu);
return prior;
}
-void grpc_object_registry_unregister_object(intptr_t uuid) {
+void grpc_channel_trace_registry_unregister_channel_trace(intptr_t uuid) {
gpr_mu_lock(&g_mu);
g_avl = grpc_avl_remove(g_avl, (void*)uuid, nullptr);
gpr_mu_unlock(&g_mu);
}
-grpc_object_registry_type grpc_object_registry_get_object(intptr_t uuid,
- void** object) {
- GPR_ASSERT(object);
+grpc_core::ChannelTrace* grpc_channel_trace_registry_get_channel_trace(
+ intptr_t uuid) {
gpr_mu_lock(&g_mu);
- object_tracker* tracker =
- static_cast<object_tracker*>(grpc_avl_get(g_avl, (void*)uuid, nullptr));
+ grpc_core::ChannelTrace* ret = static_cast<grpc_core::ChannelTrace*>(
+ grpc_avl_get(g_avl, (void*)uuid, nullptr));
gpr_mu_unlock(&g_mu);
- if (tracker == nullptr) {
- *object = nullptr;
- return GRPC_OBJECT_REGISTRY_UNKNOWN;
- }
- *object = tracker->object;
- return tracker->type;
+ return ret;
}
diff --git a/src/core/lib/channel/channel_trace_registry.h b/src/core/lib/channel/channel_trace_registry.h
new file mode 100644
index 0000000000..391ecba7de
--- /dev/null
+++ b/src/core/lib/channel/channel_trace_registry.h
@@ -0,0 +1,43 @@
+/*
+ *
+ * Copyright 2017 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef GRPC_CORE_LIB_CHANNEL_CHANNEL_TRACE_REGISTRY_H
+#define GRPC_CORE_LIB_CHANNEL_CHANNEL_TRACE_REGISTRY_H
+
+#include <grpc/impl/codegen/port_platform.h>
+
+#include "src/core/lib/channel/channel_trace.h"
+
+#include <stdint.h>
+
+// TODO(ncteisen): convert this file to C++
+
+void grpc_channel_trace_registry_init();
+void grpc_channel_trace_registry_shutdown();
+
+// globally registers a ChannelTrace. Returns its unique uuid
+intptr_t grpc_channel_trace_registry_register_channel_trace(
+ grpc_core::ChannelTrace* channel_trace);
+// globally unregisters the ChannelTrace that is associated to uuid.
+void grpc_channel_trace_registry_unregister_channel_trace(intptr_t uuid);
+// if object with uuid has previously been registered, returns the ChannelTrace
+// associated with that uuid. Else returns nullptr.
+grpc_core::ChannelTrace* grpc_channel_trace_registry_get_channel_trace(
+ intptr_t uuid);
+
+#endif /* GRPC_CORE_LIB_CHANNEL_CHANNEL_TRACE_REGISTRY_H */
diff --git a/src/core/lib/channel/object_registry.h b/src/core/lib/channel/object_registry.h
deleted file mode 100644
index 446d0cb41f..0000000000
--- a/src/core/lib/channel/object_registry.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef GRPC_CORE_LIB_CHANNEL_OBJECT_REGISTRY_H
-#define GRPC_CORE_LIB_CHANNEL_OBJECT_REGISTRY_H
-
-#include <grpc/impl/codegen/port_platform.h>
-
-#include <stdint.h>
-
-// TODO(ncteisen): convert this file to C++
-
-// Different types that may be stored in the general object registry. For now,
-// the only use case is channel tracers, but the design has been left general.
-typedef enum {
- // Used to hold uuid -> ChannelTracer mappings to allow for the trace data
- // to be looked up by uuid, rather then have to walk the entire tree of
- // trace.
- GRPC_OBJECT_REGISTRY_CHANNEL_TRACER,
- // Usually represents an error has occurred in the object lookup.
- GRPC_OBJECT_REGISTRY_UNKNOWN,
-} grpc_object_registry_type;
-
-void grpc_object_registry_init();
-void grpc_object_registry_shutdown();
-
-// globally registers the object. Returns its unique uuid
-intptr_t grpc_object_registry_register_object(void* object,
- grpc_object_registry_type type);
-// globally unregisters the object that is associated to uuid.
-void grpc_object_registry_unregister_object(intptr_t uuid);
-// if object with uuid has previously been registered, stores it in *object.
-// if not, returns GRPC_OBJECT_REGISTRY_UNKNOWN and sets *object unchanged.
-grpc_object_registry_type grpc_object_registry_get_object(intptr_t uuid,
- void** object);
-
-#endif /* GRPC_CORE_LIB_CHANNEL_OBJECT_REGISTRY_H */
diff --git a/src/core/lib/surface/channel.cc b/src/core/lib/surface/channel.cc
index c470f6d0d8..dca583abbe 100644
--- a/src/core/lib/surface/channel.cc
+++ b/src/core/lib/surface/channel.cc
@@ -32,7 +32,6 @@
#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/channel/channel_trace.h"
-#include "src/core/lib/channel/object_registry.h"
#include "src/core/lib/debug/stats.h"
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gprpp/manual_constructor.h"
diff --git a/src/core/lib/surface/init.cc b/src/core/lib/surface/init.cc
index 2d4b3b55d4..bd436d6857 100644
--- a/src/core/lib/surface/init.cc
+++ b/src/core/lib/surface/init.cc
@@ -27,9 +27,9 @@
#include <grpc/support/log.h>
#include <grpc/support/time.h>
#include "src/core/lib/channel/channel_stack.h"
+#include "src/core/lib/channel/channel_trace_registry.h"
#include "src/core/lib/channel/connected_channel.h"
#include "src/core/lib/channel/handshaker_registry.h"
-#include "src/core/lib/channel/object_registry.h"
#include "src/core/lib/debug/stats.h"
#include "src/core/lib/debug/trace.h"
#include "src/core/lib/gpr/fork.h"
@@ -129,7 +129,7 @@ void grpc_init(void) {
grpc_slice_intern_init();
grpc_mdctx_global_init();
grpc_channel_init_init();
- grpc_object_registry_init();
+ grpc_channel_trace_registry_init();
grpc_security_pre_init();
grpc_core::ExecCtx::GlobalInit();
grpc_iomgr_init();
@@ -178,7 +178,7 @@ void grpc_shutdown(void) {
grpc_mdctx_global_shutdown();
grpc_handshaker_factory_registry_shutdown();
grpc_slice_intern_shutdown();
- grpc_object_registry_shutdown();
+ grpc_channel_trace_registry_shutdown();
grpc_stats_shutdown();
}
grpc_core::ExecCtx::GlobalShutdown();