Reviewer feedback

reviewable/pr13883/r8
ncteisen 7 years ago
parent ac945eba98
commit 7d90d5497c
  1. 66
      CMakeLists.txt
  2. 84
      Makefile
  3. 26
      build.yaml
  4. 29
      src/core/lib/channel/channel_tracer.cc
  5. 28
      src/core/lib/channel/channel_tracer.h
  6. 5
      src/core/lib/surface/channel.cc
  7. 25
      test/core/channel/channel_tracer_test.cc
  8. 36
      tools/run_tests/generated/sources_and_headers.json
  9. 48
      tools/run_tests/generated/tests.json

@ -283,7 +283,6 @@ add_dependencies(buildtests_c grpc_byte_buffer_reader_test)
add_dependencies(buildtests_c grpc_channel_args_test) add_dependencies(buildtests_c grpc_channel_args_test)
add_dependencies(buildtests_c grpc_channel_stack_builder_test) add_dependencies(buildtests_c grpc_channel_stack_builder_test)
add_dependencies(buildtests_c grpc_channel_stack_test) add_dependencies(buildtests_c grpc_channel_stack_test)
add_dependencies(buildtests_c grpc_channel_tracer_test)
add_dependencies(buildtests_c grpc_completion_queue_test) add_dependencies(buildtests_c grpc_completion_queue_test)
add_dependencies(buildtests_c grpc_completion_queue_threading_test) add_dependencies(buildtests_c grpc_completion_queue_threading_test)
add_dependencies(buildtests_c grpc_credentials_test) add_dependencies(buildtests_c grpc_credentials_test)
@ -518,6 +517,7 @@ add_dependencies(buildtests_cxx bm_pollset)
endif() endif()
add_dependencies(buildtests_cxx channel_arguments_test) add_dependencies(buildtests_cxx channel_arguments_test)
add_dependencies(buildtests_cxx channel_filter_test) add_dependencies(buildtests_cxx channel_filter_test)
add_dependencies(buildtests_cxx channel_tracer_test)
add_dependencies(buildtests_cxx chttp2_settings_timeout_test) add_dependencies(buildtests_cxx chttp2_settings_timeout_test)
add_dependencies(buildtests_cxx cli_call_test) add_dependencies(buildtests_cxx cli_call_test)
add_dependencies(buildtests_cxx client_channel_stress_test) add_dependencies(buildtests_cxx client_channel_stress_test)
@ -6559,33 +6559,6 @@ target_link_libraries(grpc_channel_stack_test
endif (gRPC_BUILD_TESTS) endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS)
add_executable(grpc_channel_tracer_test
test/core/channel/channel_tracer_test.cc
)
target_include_directories(grpc_channel_tracer_test
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
)
target_link_libraries(grpc_channel_tracer_test
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
grpc
gpr_test_util
gpr
)
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
add_executable(grpc_completion_queue_test add_executable(grpc_completion_queue_test
test/core/surface/completion_queue_test.cc test/core/surface/completion_queue_test.cc
) )
@ -9512,6 +9485,43 @@ target_link_libraries(channel_filter_test
endif (gRPC_BUILD_TESTS) endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS)
add_executable(channel_tracer_test
test/core/channel/channel_tracer_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(channel_tracer_test
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
PRIVATE third_party/googletest/googletest/include
PRIVATE third_party/googletest/googletest
PRIVATE third_party/googletest/googlemock/include
PRIVATE third_party/googletest/googlemock
PRIVATE ${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(channel_tracer_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
grpc++
grpc
gpr_test_util
gpr
${_gRPC_GFLAGS_LIBRARIES}
)
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
add_executable(chttp2_settings_timeout_test add_executable(chttp2_settings_timeout_test
test/core/transport/chttp2/settings_timeout_test.cc test/core/transport/chttp2/settings_timeout_test.cc
third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googletest/src/gtest-all.cc

@ -1006,7 +1006,6 @@ grpc_byte_buffer_reader_test: $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test
grpc_channel_args_test: $(BINDIR)/$(CONFIG)/grpc_channel_args_test grpc_channel_args_test: $(BINDIR)/$(CONFIG)/grpc_channel_args_test
grpc_channel_stack_builder_test: $(BINDIR)/$(CONFIG)/grpc_channel_stack_builder_test grpc_channel_stack_builder_test: $(BINDIR)/$(CONFIG)/grpc_channel_stack_builder_test
grpc_channel_stack_test: $(BINDIR)/$(CONFIG)/grpc_channel_stack_test grpc_channel_stack_test: $(BINDIR)/$(CONFIG)/grpc_channel_stack_test
grpc_channel_tracer_test: $(BINDIR)/$(CONFIG)/grpc_channel_tracer_test
grpc_completion_queue_test: $(BINDIR)/$(CONFIG)/grpc_completion_queue_test grpc_completion_queue_test: $(BINDIR)/$(CONFIG)/grpc_completion_queue_test
grpc_completion_queue_threading_test: $(BINDIR)/$(CONFIG)/grpc_completion_queue_threading_test grpc_completion_queue_threading_test: $(BINDIR)/$(CONFIG)/grpc_completion_queue_threading_test
grpc_create_jwt: $(BINDIR)/$(CONFIG)/grpc_create_jwt grpc_create_jwt: $(BINDIR)/$(CONFIG)/grpc_create_jwt
@ -1115,6 +1114,7 @@ bm_metadata: $(BINDIR)/$(CONFIG)/bm_metadata
bm_pollset: $(BINDIR)/$(CONFIG)/bm_pollset bm_pollset: $(BINDIR)/$(CONFIG)/bm_pollset
channel_arguments_test: $(BINDIR)/$(CONFIG)/channel_arguments_test channel_arguments_test: $(BINDIR)/$(CONFIG)/channel_arguments_test
channel_filter_test: $(BINDIR)/$(CONFIG)/channel_filter_test channel_filter_test: $(BINDIR)/$(CONFIG)/channel_filter_test
channel_tracer_test: $(BINDIR)/$(CONFIG)/channel_tracer_test
chttp2_settings_timeout_test: $(BINDIR)/$(CONFIG)/chttp2_settings_timeout_test chttp2_settings_timeout_test: $(BINDIR)/$(CONFIG)/chttp2_settings_timeout_test
cli_call_test: $(BINDIR)/$(CONFIG)/cli_call_test cli_call_test: $(BINDIR)/$(CONFIG)/cli_call_test
client_channel_stress_test: $(BINDIR)/$(CONFIG)/client_channel_stress_test client_channel_stress_test: $(BINDIR)/$(CONFIG)/client_channel_stress_test
@ -1425,7 +1425,6 @@ buildtests_c: privatelibs_c \
$(BINDIR)/$(CONFIG)/grpc_channel_args_test \ $(BINDIR)/$(CONFIG)/grpc_channel_args_test \
$(BINDIR)/$(CONFIG)/grpc_channel_stack_builder_test \ $(BINDIR)/$(CONFIG)/grpc_channel_stack_builder_test \
$(BINDIR)/$(CONFIG)/grpc_channel_stack_test \ $(BINDIR)/$(CONFIG)/grpc_channel_stack_test \
$(BINDIR)/$(CONFIG)/grpc_channel_tracer_test \
$(BINDIR)/$(CONFIG)/grpc_completion_queue_test \ $(BINDIR)/$(CONFIG)/grpc_completion_queue_test \
$(BINDIR)/$(CONFIG)/grpc_completion_queue_threading_test \ $(BINDIR)/$(CONFIG)/grpc_completion_queue_threading_test \
$(BINDIR)/$(CONFIG)/grpc_credentials_test \ $(BINDIR)/$(CONFIG)/grpc_credentials_test \
@ -1584,6 +1583,7 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/bm_pollset \ $(BINDIR)/$(CONFIG)/bm_pollset \
$(BINDIR)/$(CONFIG)/channel_arguments_test \ $(BINDIR)/$(CONFIG)/channel_arguments_test \
$(BINDIR)/$(CONFIG)/channel_filter_test \ $(BINDIR)/$(CONFIG)/channel_filter_test \
$(BINDIR)/$(CONFIG)/channel_tracer_test \
$(BINDIR)/$(CONFIG)/chttp2_settings_timeout_test \ $(BINDIR)/$(CONFIG)/chttp2_settings_timeout_test \
$(BINDIR)/$(CONFIG)/cli_call_test \ $(BINDIR)/$(CONFIG)/cli_call_test \
$(BINDIR)/$(CONFIG)/client_channel_stress_test \ $(BINDIR)/$(CONFIG)/client_channel_stress_test \
@ -1732,6 +1732,7 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/bm_pollset \ $(BINDIR)/$(CONFIG)/bm_pollset \
$(BINDIR)/$(CONFIG)/channel_arguments_test \ $(BINDIR)/$(CONFIG)/channel_arguments_test \
$(BINDIR)/$(CONFIG)/channel_filter_test \ $(BINDIR)/$(CONFIG)/channel_filter_test \
$(BINDIR)/$(CONFIG)/channel_tracer_test \
$(BINDIR)/$(CONFIG)/chttp2_settings_timeout_test \ $(BINDIR)/$(CONFIG)/chttp2_settings_timeout_test \
$(BINDIR)/$(CONFIG)/cli_call_test \ $(BINDIR)/$(CONFIG)/cli_call_test \
$(BINDIR)/$(CONFIG)/client_channel_stress_test \ $(BINDIR)/$(CONFIG)/client_channel_stress_test \
@ -1918,8 +1919,6 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/grpc_channel_stack_builder_test || ( echo test grpc_channel_stack_builder_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/grpc_channel_stack_builder_test || ( echo test grpc_channel_stack_builder_test failed ; exit 1 )
$(E) "[RUN] Testing grpc_channel_stack_test" $(E) "[RUN] Testing grpc_channel_stack_test"
$(Q) $(BINDIR)/$(CONFIG)/grpc_channel_stack_test || ( echo test grpc_channel_stack_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/grpc_channel_stack_test || ( echo test grpc_channel_stack_test failed ; exit 1 )
$(E) "[RUN] Testing grpc_channel_tracer_test"
$(Q) $(BINDIR)/$(CONFIG)/grpc_channel_tracer_test || ( echo test grpc_channel_tracer_test failed ; exit 1 )
$(E) "[RUN] Testing grpc_completion_queue_test" $(E) "[RUN] Testing grpc_completion_queue_test"
$(Q) $(BINDIR)/$(CONFIG)/grpc_completion_queue_test || ( echo test grpc_completion_queue_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/grpc_completion_queue_test || ( echo test grpc_completion_queue_test failed ; exit 1 )
$(E) "[RUN] Testing grpc_completion_queue_threading_test" $(E) "[RUN] Testing grpc_completion_queue_threading_test"
@ -2130,6 +2129,8 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/channel_arguments_test || ( echo test channel_arguments_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/channel_arguments_test || ( echo test channel_arguments_test failed ; exit 1 )
$(E) "[RUN] Testing channel_filter_test" $(E) "[RUN] Testing channel_filter_test"
$(Q) $(BINDIR)/$(CONFIG)/channel_filter_test || ( echo test channel_filter_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/channel_filter_test || ( echo test channel_filter_test failed ; exit 1 )
$(E) "[RUN] Testing channel_tracer_test"
$(Q) $(BINDIR)/$(CONFIG)/channel_tracer_test || ( echo test channel_tracer_test failed ; exit 1 )
$(E) "[RUN] Testing chttp2_settings_timeout_test" $(E) "[RUN] Testing chttp2_settings_timeout_test"
$(Q) $(BINDIR)/$(CONFIG)/chttp2_settings_timeout_test || ( echo test chttp2_settings_timeout_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/chttp2_settings_timeout_test || ( echo test chttp2_settings_timeout_test failed ; exit 1 )
$(E) "[RUN] Testing cli_call_test" $(E) "[RUN] Testing cli_call_test"
@ -11414,38 +11415,6 @@ endif
endif endif
GRPC_CHANNEL_TRACER_TEST_SRC = \
test/core/channel/channel_tracer_test.cc \
GRPC_CHANNEL_TRACER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_CHANNEL_TRACER_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/grpc_channel_tracer_test: openssl_dep_error
else
$(BINDIR)/$(CONFIG)/grpc_channel_tracer_test: $(GRPC_CHANNEL_TRACER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LD) $(LDFLAGS) $(GRPC_CHANNEL_TRACER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/grpc_channel_tracer_test
endif
$(OBJDIR)/$(CONFIG)/test/core/channel/channel_tracer_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_grpc_channel_tracer_test: $(GRPC_CHANNEL_TRACER_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(GRPC_CHANNEL_TRACER_TEST_OBJS:.o=.dep)
endif
endif
GRPC_COMPLETION_QUEUE_TEST_SRC = \ GRPC_COMPLETION_QUEUE_TEST_SRC = \
test/core/surface/completion_queue_test.cc \ test/core/surface/completion_queue_test.cc \
@ -15165,6 +15134,49 @@ endif
endif endif
CHANNEL_TRACER_TEST_SRC = \
test/core/channel/channel_tracer_test.cc \
CHANNEL_TRACER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CHANNEL_TRACER_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/channel_tracer_test: openssl_dep_error
else
ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
$(BINDIR)/$(CONFIG)/channel_tracer_test: protobuf_dep_error
else
$(BINDIR)/$(CONFIG)/channel_tracer_test: $(PROTOBUF_DEP) $(CHANNEL_TRACER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LDXX) $(LDFLAGS) $(CHANNEL_TRACER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/channel_tracer_test
endif
endif
$(OBJDIR)/$(CONFIG)/test/core/channel/channel_tracer_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_channel_tracer_test: $(CHANNEL_TRACER_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(CHANNEL_TRACER_TEST_OBJS:.o=.dep)
endif
endif
CHTTP2_SETTINGS_TIMEOUT_TEST_SRC = \ CHTTP2_SETTINGS_TIMEOUT_TEST_SRC = \
test/core/transport/chttp2/settings_timeout_test.cc \ test/core/transport/chttp2/settings_timeout_test.cc \

@ -2432,17 +2432,6 @@ targets:
- gpr_test_util - gpr_test_util
- gpr - gpr
uses_polling: false uses_polling: false
- name: grpc_channel_tracer_test
build: test
language: c
src:
- test/core/channel/channel_tracer_test.cc
deps:
- grpc_test_util
- grpc
- gpr_test_util
- gpr
uses_polling: false
- name: grpc_completion_queue_test - name: grpc_completion_queue_test
build: test build: test
language: c language: c
@ -3896,6 +3885,21 @@ targets:
- grpc - grpc
- gpr - gpr
uses_polling: false uses_polling: false
- name: channel_tracer_test
gtest: true
build: test
language: c++
src:
- test/core/channel/channel_tracer_test.cc
deps:
- grpc_test_util
- grpc++
- grpc
- gpr_test_util
- gpr
uses:
- grpc++_test
uses_polling: false
- name: chttp2_settings_timeout_test - name: chttp2_settings_timeout_test
gtest: true gtest: true
build: test build: test

@ -40,6 +40,27 @@
namespace grpc_core { namespace grpc_core {
ChannelTrace::TraceEvent::TraceEvent(
grpc_slice data, grpc_error* error,
grpc_connectivity_state connectivity_state,
RefCountedPtr<ChannelTrace> referenced_tracer)
: data_(data),
error_(error),
timestamp_(grpc_millis_to_timespec(grpc_core::ExecCtx::Get()->Now(),
GPR_CLOCK_REALTIME)),
connectivity_state_(connectivity_state),
next_(nullptr),
referenced_tracer_(std::move(referenced_tracer)) {}
ChannelTrace::TraceEvent::TraceEvent(grpc_slice data, grpc_error* error,
grpc_connectivity_state connectivity_state)
: data_(data),
error_(error),
timestamp_(grpc_millis_to_timespec(grpc_core::ExecCtx::Get()->Now(),
GPR_CLOCK_REALTIME)),
connectivity_state_(connectivity_state),
next_(nullptr) {}
ChannelTrace::TraceEvent::~TraceEvent() { ChannelTrace::TraceEvent::~TraceEvent() {
GRPC_ERROR_UNREF(error_); GRPC_ERROR_UNREF(error_);
grpc_slice_unref_internal(data_); grpc_slice_unref_internal(data_);
@ -72,7 +93,7 @@ ChannelTrace::~ChannelTrace() {
gpr_mu_destroy(&tracer_mu_); gpr_mu_destroy(&tracer_mu_);
} }
intptr_t ChannelTrace::GetUuid() { return channel_uuid_; } intptr_t ChannelTrace::GetUuid() const { return channel_uuid_; }
void ChannelTrace::AddTraceEventHelper(TraceEvent* new_trace_event) { void ChannelTrace::AddTraceEventHelper(TraceEvent* new_trace_event) {
++num_events_logged_; ++num_events_logged_;
@ -125,7 +146,7 @@ char* fmt_time(gpr_timespec tm) {
} // anonymous namespace } // anonymous namespace
void ChannelTrace::TraceEvent::RenderTraceEvent(grpc_json* json) { void ChannelTrace::TraceEvent::RenderTraceEvent(grpc_json* json) const {
grpc_json* json_iterator = nullptr; grpc_json* json_iterator = nullptr;
json_iterator = grpc_json_create_child(json_iterator, json, "description", json_iterator = grpc_json_create_child(json_iterator, json, "description",
grpc_slice_to_c_string(data_), grpc_slice_to_c_string(data_),
@ -150,7 +171,7 @@ void ChannelTrace::TraceEvent::RenderTraceEvent(grpc_json* json) {
} }
json_iterator = json_iterator =
grpc_json_create_child(json_iterator, json, "timestamp", grpc_json_create_child(json_iterator, json, "timestamp",
fmt_time(time_created_), GRPC_JSON_STRING, true); fmt_time(timestamp_), GRPC_JSON_STRING, true);
json_iterator = json_iterator =
grpc_json_create_child(json_iterator, json, "state", grpc_json_create_child(json_iterator, json, "state",
grpc_connectivity_state_name(connectivity_state_), grpc_connectivity_state_name(connectivity_state_),
@ -163,7 +184,7 @@ void ChannelTrace::TraceEvent::RenderTraceEvent(grpc_json* json) {
} }
} }
char* ChannelTrace::RenderTrace() { char* ChannelTrace::RenderTrace() const {
if (!max_list_size_) if (!max_list_size_)
return nullptr; // tracing is disabled if max_events == 0 return nullptr; // tracing is disabled if max_events == 0
grpc_json* json = grpc_json_create(GRPC_JSON_OBJECT); grpc_json* json = grpc_json_create(GRPC_JSON_OBJECT);

@ -38,7 +38,7 @@ class ChannelTrace : public RefCounted<ChannelTrace> {
~ChannelTrace(); ~ChannelTrace();
// returns the tracer's uuid // returns the tracer's uuid
intptr_t GetUuid(); intptr_t GetUuid() const;
// Adds a new trace event to the tracing object // Adds a new trace event to the tracing object
void AddTraceEvent(grpc_slice data, grpc_error* error, void AddTraceEvent(grpc_slice data, grpc_error* error,
@ -57,7 +57,7 @@ class ChannelTrace : public RefCounted<ChannelTrace> {
// Returns the tracing data rendered as a grpc json string. // Returns the tracing data rendered as a grpc json string.
// The string is owned by the caller and must be freed. // The string is owned by the caller and must be freed.
char* RenderTrace(); char* RenderTrace() const;
private: private:
// Private class to encapsulate all the data and bookkeeping needed for a // Private class to encapsulate all the data and bookkeeping needed for a
@ -69,41 +69,27 @@ class ChannelTrace : public RefCounted<ChannelTrace> {
// overall channelz object, not just the ChannelTrace object // overall channelz object, not just the ChannelTrace object
TraceEvent(grpc_slice data, grpc_error* error, TraceEvent(grpc_slice data, grpc_error* error,
grpc_connectivity_state connectivity_state, grpc_connectivity_state connectivity_state,
RefCountedPtr<ChannelTrace> referenced_tracer) RefCountedPtr<ChannelTrace> referenced_tracer);
: data_(data),
error_(error),
connectivity_state_(connectivity_state),
next_(nullptr),
referenced_tracer_(std::move(referenced_tracer)) {
time_created_ = gpr_now(GPR_CLOCK_REALTIME);
}
// Constructor for a TraceEvent that does not reverence a different // Constructor for a TraceEvent that does not reverence a different
// channel. // channel.
TraceEvent(grpc_slice data, grpc_error* error, TraceEvent(grpc_slice data, grpc_error* error,
grpc_connectivity_state connectivity_state) grpc_connectivity_state connectivity_state);
: data_(data),
error_(error),
connectivity_state_(connectivity_state),
next_(nullptr),
referenced_tracer_(nullptr) {
time_created_ = gpr_now(GPR_CLOCK_REALTIME);
}
~TraceEvent(); ~TraceEvent();
// Renders the data inside of this TraceEvent into a json object. This is // Renders the data inside of this TraceEvent into a json object. This is
// used by the ChannelTrace, when it is rendering itself. // used by the ChannelTrace, when it is rendering itself.
void RenderTraceEvent(grpc_json* json); void RenderTraceEvent(grpc_json* json) const;
// set and get for the next_ pointer. // set and get for the next_ pointer.
TraceEvent* next() { return next_; } TraceEvent* next() const { return next_; }
void set_next(TraceEvent* next) { next_ = next; } void set_next(TraceEvent* next) { next_ = next; }
private: private:
grpc_slice data_; grpc_slice data_;
grpc_error* error_; grpc_error* error_;
gpr_timespec time_created_; gpr_timespec timestamp_;
grpc_connectivity_state connectivity_state_; grpc_connectivity_state connectivity_state_;
TraceEvent* next_; TraceEvent* next_;
// the tracer object for the (sub)channel that this trace event refers to. // the tracer object for the (sub)channel that this trace event refers to.

@ -21,6 +21,7 @@
#include "src/core/lib/surface/channel.h" #include "src/core/lib/surface/channel.h"
#include <inttypes.h> #include <inttypes.h>
#include <limits.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -173,8 +174,8 @@ grpc_channel* grpc_channel_create_with_builder(
} else if (0 == strcmp(args->args[i].key, } else if (0 == strcmp(args->args[i].key,
GRPC_ARG_MAX_CHANNEL_TRACE_EVENTS_PER_NODE)) { GRPC_ARG_MAX_CHANNEL_TRACE_EVENTS_PER_NODE)) {
GPR_ASSERT(channel_tracer_max_nodes == 0); GPR_ASSERT(channel_tracer_max_nodes == 0);
// max_nodes defaults to 0 (which is off), clamped between 0 and 100. // max_nodes defaults to 0 (which is off), clamped between 0 and INT_MAX
const grpc_integer_options options = {0, 0, 100}; const grpc_integer_options options = {0, 0, INT_MAX};
channel_tracer_max_nodes = channel_tracer_max_nodes =
(size_t)grpc_channel_arg_get_integer(&args->args[i], options); (size_t)grpc_channel_arg_get_integer(&args->args[i], options);
} }

@ -22,6 +22,8 @@
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <gtest/gtest.h>
#include "src/core/lib/channel/channel_tracer.h" #include "src/core/lib/channel/channel_tracer.h"
#include "src/core/lib/channel/object_registry.h" #include "src/core/lib/channel/object_registry.h"
#include "src/core/lib/gpr/useful.h" #include "src/core/lib/gpr/useful.h"
@ -30,9 +32,8 @@
#include "test/core/util/channel_tracing_utils.h" #include "test/core/util/channel_tracing_utils.h"
#include "test/core/util/test_config.h" #include "test/core/util/test_config.h"
using grpc_core::ChannelTrace; namespace grpc_core {
using grpc_core::MakeRefCounted; namespace testing {
using grpc_core::RefCountedPtr;
static void add_simple_trace_event(RefCountedPtr<ChannelTrace> tracer) { static void add_simple_trace_event(RefCountedPtr<ChannelTrace> tracer) {
tracer->AddTraceEvent(grpc_slice_from_static_string("simple trace"), tracer->AddTraceEvent(grpc_slice_from_static_string("simple trace"),
@ -99,7 +100,7 @@ static void test_basic_channel_tracing(size_t max_nodes) {
// Calls basic test with various values for max_nodes (including 0, which turns // Calls basic test with various values for max_nodes (including 0, which turns
// the tracer off). // the tracer off).
static void test_basic_channel_sizing() { TEST(ChannelTracerTest, BasicTest) {
test_basic_channel_tracing(0); test_basic_channel_tracing(0);
test_basic_channel_tracing(1); test_basic_channel_tracing(1);
test_basic_channel_tracing(2); test_basic_channel_tracing(2);
@ -152,7 +153,7 @@ static void test_complex_channel_tracing(size_t max_nodes) {
} }
// Calls the complex test with a sweep of sizes for max_nodes. // Calls the complex test with a sweep of sizes for max_nodes.
static void test_complex_channel_sizing() { TEST(ChannelTracerTest, ComplexTest) {
test_complex_channel_tracing(0); test_complex_channel_tracing(0);
test_complex_channel_tracing(1); test_complex_channel_tracing(1);
test_complex_channel_tracing(2); test_complex_channel_tracing(2);
@ -164,7 +165,7 @@ static void test_complex_channel_sizing() {
// Test a case in which the parent channel has subchannels and the subchannels // Test a case in which the parent channel has subchannels and the subchannels
// have connections. Ensures that everything lives as long as it should then // have connections. Ensures that everything lives as long as it should then
// gets deleted. // gets deleted.
static void test_nesting() { TEST(ChannelTracerTest, TestNesting) {
grpc_core::ExecCtx exec_ctx; grpc_core::ExecCtx exec_ctx;
RefCountedPtr<ChannelTrace> tracer = MakeRefCounted<ChannelTrace>(10); RefCountedPtr<ChannelTrace> tracer = MakeRefCounted<ChannelTrace>(10);
add_simple_trace_event(tracer); add_simple_trace_event(tracer);
@ -195,14 +196,14 @@ static void test_nesting() {
conn1.reset(nullptr); conn1.reset(nullptr);
} }
} // namespace testing
} // namespace grpc_core
int main(int argc, char** argv) { int main(int argc, char** argv) {
grpc_test_init(argc, argv); grpc_test_init(argc, argv);
grpc_init(); grpc_init();
test_basic_channel_tracing(5); ::testing::InitGoogleTest(&argc, argv);
test_basic_channel_sizing(); int ret = RUN_ALL_TESTS();
test_complex_channel_tracing(5);
test_complex_channel_sizing();
test_nesting();
grpc_shutdown(); grpc_shutdown();
return 0; return ret;
} }

@ -916,23 +916,6 @@
"third_party": false, "third_party": false,
"type": "target" "type": "target"
}, },
{
"deps": [
"gpr",
"gpr_test_util",
"grpc",
"grpc_test_util"
],
"headers": [],
"is_filegroup": false,
"language": "c",
"name": "grpc_channel_tracer_test",
"src": [
"test/core/channel/channel_tracer_test.cc"
],
"third_party": false,
"type": "target"
},
{ {
"deps": [ "deps": [
"gpr", "gpr",
@ -2842,6 +2825,25 @@
"third_party": false, "third_party": false,
"type": "target" "type": "target"
}, },
{
"deps": [
"gpr",
"gpr_test_util",
"grpc",
"grpc++",
"grpc++_test",
"grpc_test_util"
],
"headers": [],
"is_filegroup": false,
"language": "c++",
"name": "channel_tracer_test",
"src": [
"test/core/channel/channel_tracer_test.cc"
],
"third_party": false,
"type": "target"
},
{ {
"deps": [ "deps": [
"gpr", "gpr",

@ -1223,30 +1223,6 @@
], ],
"uses_polling": false "uses_polling": false
}, },
{
"args": [],
"benchmark": false,
"ci_platforms": [
"linux",
"mac",
"posix",
"windows"
],
"cpu_cost": 1.0,
"exclude_configs": [],
"exclude_iomgrs": [],
"flaky": false,
"gtest": false,
"language": "c",
"name": "grpc_channel_tracer_test",
"platforms": [
"linux",
"mac",
"posix",
"windows"
],
"uses_polling": false
},
{ {
"args": [], "args": [],
"benchmark": false, "benchmark": false,
@ -3361,6 +3337,30 @@
], ],
"uses_polling": false "uses_polling": false
}, },
{
"args": [],
"benchmark": false,
"ci_platforms": [
"linux",
"mac",
"posix",
"windows"
],
"cpu_cost": 1.0,
"exclude_configs": [],
"exclude_iomgrs": [],
"flaky": false,
"gtest": true,
"language": "c++",
"name": "channel_tracer_test",
"platforms": [
"linux",
"mac",
"posix",
"windows"
],
"uses_polling": false
},
{ {
"args": [], "args": [],
"benchmark": false, "benchmark": false,

Loading…
Cancel
Save