diff --git a/BUILD b/BUILD index 9088b61f0d9228e669aca751f9c88ce1ed557f17..a72859ba97ff65a3e01ce7cd7532069736bf0e7e 100644 --- a/BUILD +++ b/BUILD @@ -180,7 +180,6 @@ cc_library( "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/error.h", "src/core/lib/iomgr/ev_epoll_linux.h", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.h", @@ -204,6 +203,7 @@ cc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", @@ -355,7 +355,6 @@ cc_library( "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/ev_epoll_linux.c", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.c", "src/core/lib/iomgr/ev_poll_posix.c", "src/core/lib/iomgr/ev_posix.c", "src/core/lib/iomgr/exec_ctx.c", @@ -377,6 +376,7 @@ cc_library( "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/resource_quota.c", "src/core/lib/iomgr/sockaddr_utils.c", + "src/core/lib/iomgr/socket_mutator.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", @@ -616,7 +616,6 @@ cc_library( "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/error.h", "src/core/lib/iomgr/ev_epoll_linux.h", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.h", @@ -640,6 +639,7 @@ cc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", @@ -776,7 +776,6 @@ cc_library( "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/ev_epoll_linux.c", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.c", "src/core/lib/iomgr/ev_poll_posix.c", "src/core/lib/iomgr/ev_posix.c", "src/core/lib/iomgr/exec_ctx.c", @@ -798,6 +797,7 @@ cc_library( "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/resource_quota.c", "src/core/lib/iomgr/sockaddr_utils.c", + "src/core/lib/iomgr/socket_mutator.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", @@ -1007,7 +1007,6 @@ cc_library( "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/error.h", "src/core/lib/iomgr/ev_epoll_linux.h", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.h", @@ -1031,6 +1030,7 @@ cc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", @@ -1159,7 +1159,6 @@ cc_library( "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/ev_epoll_linux.c", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.c", "src/core/lib/iomgr/ev_poll_posix.c", "src/core/lib/iomgr/ev_posix.c", "src/core/lib/iomgr/exec_ctx.c", @@ -1181,6 +1180,7 @@ cc_library( "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/resource_quota.c", "src/core/lib/iomgr/sockaddr_utils.c", + "src/core/lib/iomgr/socket_mutator.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", @@ -2026,7 +2026,6 @@ objc_library( "src/core/lib/iomgr/endpoint_pair_windows.c", "src/core/lib/iomgr/error.c", "src/core/lib/iomgr/ev_epoll_linux.c", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.c", "src/core/lib/iomgr/ev_poll_posix.c", "src/core/lib/iomgr/ev_posix.c", "src/core/lib/iomgr/exec_ctx.c", @@ -2048,6 +2047,7 @@ objc_library( "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/resource_quota.c", "src/core/lib/iomgr/sockaddr_utils.c", + "src/core/lib/iomgr/socket_mutator.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", @@ -2266,7 +2266,6 @@ objc_library( "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/error.h", "src/core/lib/iomgr/ev_epoll_linux.h", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.h", @@ -2290,6 +2289,7 @@ objc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", diff --git a/CMakeLists.txt b/CMakeLists.txt index e6e7ff78483b2b34814af0509a0d2ea93476da4f..3b627ecf2d1bfe90c4b82aa578bf3355a328987c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -310,7 +310,6 @@ add_library(grpc src/core/lib/iomgr/endpoint_pair_windows.c src/core/lib/iomgr/error.c src/core/lib/iomgr/ev_epoll_linux.c - src/core/lib/iomgr/ev_poll_and_epoll_posix.c src/core/lib/iomgr/ev_poll_posix.c src/core/lib/iomgr/ev_posix.c src/core/lib/iomgr/exec_ctx.c @@ -332,6 +331,7 @@ add_library(grpc src/core/lib/iomgr/resolve_address_windows.c src/core/lib/iomgr/resource_quota.c src/core/lib/iomgr/sockaddr_utils.c + src/core/lib/iomgr/socket_mutator.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c @@ -591,7 +591,6 @@ add_library(grpc_cronet src/core/lib/iomgr/endpoint_pair_windows.c src/core/lib/iomgr/error.c src/core/lib/iomgr/ev_epoll_linux.c - src/core/lib/iomgr/ev_poll_and_epoll_posix.c src/core/lib/iomgr/ev_poll_posix.c src/core/lib/iomgr/ev_posix.c src/core/lib/iomgr/exec_ctx.c @@ -613,6 +612,7 @@ add_library(grpc_cronet src/core/lib/iomgr/resolve_address_windows.c src/core/lib/iomgr/resource_quota.c src/core/lib/iomgr/sockaddr_utils.c + src/core/lib/iomgr/socket_mutator.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c @@ -844,7 +844,6 @@ add_library(grpc_unsecure src/core/lib/iomgr/endpoint_pair_windows.c src/core/lib/iomgr/error.c src/core/lib/iomgr/ev_epoll_linux.c - src/core/lib/iomgr/ev_poll_and_epoll_posix.c src/core/lib/iomgr/ev_poll_posix.c src/core/lib/iomgr/ev_posix.c src/core/lib/iomgr/exec_ctx.c @@ -866,6 +865,7 @@ add_library(grpc_unsecure src/core/lib/iomgr/resolve_address_windows.c src/core/lib/iomgr/resource_quota.c src/core/lib/iomgr/sockaddr_utils.c + src/core/lib/iomgr/socket_mutator.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c diff --git a/Makefile b/Makefile index 4e053179f17acc19472d0e79341a2bf8592bc125..b2328aac283eaf956f741a3c7738655981736e71 100644 --- a/Makefile +++ b/Makefile @@ -1038,6 +1038,7 @@ slice_test: $(BINDIR)/$(CONFIG)/slice_test sockaddr_resolver_test: $(BINDIR)/$(CONFIG)/sockaddr_resolver_test sockaddr_utils_test: $(BINDIR)/$(CONFIG)/sockaddr_utils_test socket_utils_test: $(BINDIR)/$(CONFIG)/socket_utils_test +ssl_server_fuzzer: $(BINDIR)/$(CONFIG)/ssl_server_fuzzer tcp_client_posix_test: $(BINDIR)/$(CONFIG)/tcp_client_posix_test tcp_posix_test: $(BINDIR)/$(CONFIG)/tcp_posix_test tcp_server_posix_test: $(BINDIR)/$(CONFIG)/tcp_server_posix_test @@ -1056,6 +1057,7 @@ wakeup_fd_cv_test: $(BINDIR)/$(CONFIG)/wakeup_fd_cv_test alarm_cpp_test: $(BINDIR)/$(CONFIG)/alarm_cpp_test async_end2end_test: $(BINDIR)/$(CONFIG)/async_end2end_test auth_property_iterator_test: $(BINDIR)/$(CONFIG)/auth_property_iterator_test +bm_fullstack: $(BINDIR)/$(CONFIG)/bm_fullstack channel_arguments_test: $(BINDIR)/$(CONFIG)/channel_arguments_test channel_filter_test: $(BINDIR)/$(CONFIG)/channel_filter_test cli_call_test: $(BINDIR)/$(CONFIG)/cli_call_test @@ -1204,6 +1206,7 @@ nanopb_fuzzer_serverlist_test_one_entry: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serve percent_decode_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry percent_encode_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry server_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry +ssl_server_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry uri_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry run_dep_checks: @@ -1434,6 +1437,7 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry \ + $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry \ @@ -1442,6 +1446,7 @@ buildtests_cxx: privatelibs_cxx \ $(BINDIR)/$(CONFIG)/alarm_cpp_test \ $(BINDIR)/$(CONFIG)/async_end2end_test \ $(BINDIR)/$(CONFIG)/auth_property_iterator_test \ + $(BINDIR)/$(CONFIG)/bm_fullstack \ $(BINDIR)/$(CONFIG)/channel_arguments_test \ $(BINDIR)/$(CONFIG)/channel_filter_test \ $(BINDIR)/$(CONFIG)/cli_call_test \ @@ -1534,6 +1539,7 @@ buildtests_cxx: privatelibs_cxx \ $(BINDIR)/$(CONFIG)/alarm_cpp_test \ $(BINDIR)/$(CONFIG)/async_end2end_test \ $(BINDIR)/$(CONFIG)/auth_property_iterator_test \ + $(BINDIR)/$(CONFIG)/bm_fullstack \ $(BINDIR)/$(CONFIG)/channel_arguments_test \ $(BINDIR)/$(CONFIG)/channel_filter_test \ $(BINDIR)/$(CONFIG)/cli_call_test \ @@ -1839,6 +1845,8 @@ test_cxx: buildtests_cxx $(Q) $(BINDIR)/$(CONFIG)/async_end2end_test || ( echo test async_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing auth_property_iterator_test" $(Q) $(BINDIR)/$(CONFIG)/auth_property_iterator_test || ( echo test auth_property_iterator_test failed ; exit 1 ) + $(E) "[RUN] Testing bm_fullstack" + $(Q) $(BINDIR)/$(CONFIG)/bm_fullstack || ( echo test bm_fullstack failed ; exit 1 ) $(E) "[RUN] Testing channel_arguments_test" $(Q) $(BINDIR)/$(CONFIG)/channel_arguments_test || ( echo test channel_arguments_test failed ; exit 1 ) $(E) "[RUN] Testing channel_filter_test" @@ -2641,7 +2649,6 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ - src/core/lib/iomgr/ev_poll_and_epoll_posix.c \ src/core/lib/iomgr/ev_poll_posix.c \ src/core/lib/iomgr/ev_posix.c \ src/core/lib/iomgr/exec_ctx.c \ @@ -2663,6 +2670,7 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ + src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ @@ -2940,7 +2948,6 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ - src/core/lib/iomgr/ev_poll_and_epoll_posix.c \ src/core/lib/iomgr/ev_poll_posix.c \ src/core/lib/iomgr/ev_posix.c \ src/core/lib/iomgr/exec_ctx.c \ @@ -2962,6 +2969,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ + src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ @@ -3230,7 +3238,6 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ - src/core/lib/iomgr/ev_poll_and_epoll_posix.c \ src/core/lib/iomgr/ev_poll_posix.c \ src/core/lib/iomgr/ev_posix.c \ src/core/lib/iomgr/exec_ctx.c \ @@ -3252,6 +3259,7 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ + src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ @@ -3449,7 +3457,6 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ - src/core/lib/iomgr/ev_poll_and_epoll_posix.c \ src/core/lib/iomgr/ev_poll_posix.c \ src/core/lib/iomgr/ev_posix.c \ src/core/lib/iomgr/exec_ctx.c \ @@ -3471,6 +3478,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ + src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ @@ -7000,6 +7008,7 @@ LIBEND2END_TESTS_SRC = \ test/core/end2end/tests/empty_batch.c \ test/core/end2end/tests/filter_call_init_fails.c \ test/core/end2end/tests/filter_causes_close.c \ + test/core/end2end/tests/filter_latency.c \ test/core/end2end/tests/graceful_server_shutdown.c \ test/core/end2end/tests/high_initial_seqno.c \ test/core/end2end/tests/hpack_size.c \ @@ -7085,6 +7094,7 @@ LIBEND2END_NOSEC_TESTS_SRC = \ test/core/end2end/tests/empty_batch.c \ test/core/end2end/tests/filter_call_init_fails.c \ test/core/end2end/tests/filter_causes_close.c \ + test/core/end2end/tests/filter_latency.c \ test/core/end2end/tests/graceful_server_shutdown.c \ test/core/end2end/tests/high_initial_seqno.c \ test/core/end2end/tests/hpack_size.c \ @@ -10885,6 +10895,38 @@ endif endif +SSL_SERVER_FUZZER_SRC = \ + test/core/security/ssl_server_fuzzer.c \ + +SSL_SERVER_FUZZER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SSL_SERVER_FUZZER_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/ssl_server_fuzzer: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/ssl_server_fuzzer: $(SSL_SERVER_FUZZER_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) $(LDXX) $(LDFLAGS) $(SSL_SERVER_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/ssl_server_fuzzer + +endif + +$(OBJDIR)/$(CONFIG)/test/core/security/ssl_server_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_ssl_server_fuzzer: $(SSL_SERVER_FUZZER_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(SSL_SERVER_FUZZER_OBJS:.o=.dep) +endif +endif + + TCP_CLIENT_POSIX_TEST_SRC = \ test/core/iomgr/tcp_client_posix_test.c \ @@ -11494,6 +11536,49 @@ endif endif +BM_FULLSTACK_SRC = \ + test/cpp/microbenchmarks/bm_fullstack.cc \ + +BM_FULLSTACK_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_FULLSTACK_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/bm_fullstack: 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)/bm_fullstack: protobuf_dep_error + +else + +$(BINDIR)/$(CONFIG)/bm_fullstack: $(PROTOBUF_DEP) $(BM_FULLSTACK_OBJS) $(LIBDIR)/$(CONFIG)/libgoogle_benchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(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) $(BM_FULLSTACK_OBJS) $(LIBDIR)/$(CONFIG)/libgoogle_benchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(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)/bm_fullstack + +endif + +endif + +$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_fullstack.o: $(LIBDIR)/$(CONFIG)/libgoogle_benchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(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_bm_fullstack: $(BM_FULLSTACK_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(BM_FULLSTACK_OBJS:.o=.dep) +endif +endif + + CHANNEL_ARGUMENTS_TEST_SRC = \ test/cpp/common/channel_arguments_test.cc \ @@ -16406,6 +16491,41 @@ endif endif +SSL_SERVER_FUZZER_ONE_ENTRY_SRC = \ + test/core/security/ssl_server_fuzzer.c \ + test/core/util/one_corpus_entry_fuzzer.c \ + +SSL_SERVER_FUZZER_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SSL_SERVER_FUZZER_ONE_ENTRY_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry: $(SSL_SERVER_FUZZER_ONE_ENTRY_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) $(SSL_SERVER_FUZZER_ONE_ENTRY_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)/ssl_server_fuzzer_one_entry + +endif + +$(OBJDIR)/$(CONFIG)/test/core/security/ssl_server_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +$(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_ssl_server_fuzzer_one_entry: $(SSL_SERVER_FUZZER_ONE_ENTRY_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(SSL_SERVER_FUZZER_ONE_ENTRY_OBJS:.o=.dep) +endif +endif + + URI_FUZZER_TEST_ONE_ENTRY_SRC = \ test/core/client_channel/uri_fuzzer_test.c \ test/core/util/one_corpus_entry_fuzzer.c \ diff --git a/binding.gyp b/binding.gyp index 0cc776241a4e983d354de624495415f1382ef4e6..f6ac14f265b43bf7e11999a136ae896fdff996eb 100644 --- a/binding.gyp +++ b/binding.gyp @@ -589,7 +589,6 @@ 'src/core/lib/iomgr/endpoint_pair_windows.c', 'src/core/lib/iomgr/error.c', 'src/core/lib/iomgr/ev_epoll_linux.c', - 'src/core/lib/iomgr/ev_poll_and_epoll_posix.c', 'src/core/lib/iomgr/ev_poll_posix.c', 'src/core/lib/iomgr/ev_posix.c', 'src/core/lib/iomgr/exec_ctx.c', @@ -611,6 +610,7 @@ 'src/core/lib/iomgr/resolve_address_windows.c', 'src/core/lib/iomgr/resource_quota.c', 'src/core/lib/iomgr/sockaddr_utils.c', + 'src/core/lib/iomgr/socket_mutator.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', diff --git a/build.yaml b/build.yaml index 16a4afca7826d3aeb1d74cf597ca7eb3a996df85..b885028261838e0b38c34b40565e2dbb432081ce 100644 --- a/build.yaml +++ b/build.yaml @@ -187,7 +187,6 @@ filegroups: - src/core/lib/iomgr/endpoint_pair.h - src/core/lib/iomgr/error.h - src/core/lib/iomgr/ev_epoll_linux.h - - src/core/lib/iomgr/ev_poll_and_epoll_posix.h - src/core/lib/iomgr/ev_poll_posix.h - src/core/lib/iomgr/ev_posix.h - src/core/lib/iomgr/exec_ctx.h @@ -211,6 +210,7 @@ filegroups: - src/core/lib/iomgr/sockaddr_posix.h - src/core/lib/iomgr/sockaddr_utils.h - src/core/lib/iomgr/sockaddr_windows.h + - src/core/lib/iomgr/socket_mutator.h - src/core/lib/iomgr/socket_utils.h - src/core/lib/iomgr/socket_utils_posix.h - src/core/lib/iomgr/socket_windows.h @@ -286,7 +286,6 @@ filegroups: - src/core/lib/iomgr/endpoint_pair_windows.c - src/core/lib/iomgr/error.c - src/core/lib/iomgr/ev_epoll_linux.c - - src/core/lib/iomgr/ev_poll_and_epoll_posix.c - src/core/lib/iomgr/ev_poll_posix.c - src/core/lib/iomgr/ev_posix.c - src/core/lib/iomgr/exec_ctx.c @@ -308,6 +307,7 @@ filegroups: - src/core/lib/iomgr/resolve_address_windows.c - src/core/lib/iomgr/resource_quota.c - src/core/lib/iomgr/sockaddr_utils.c + - src/core/lib/iomgr/socket_mutator.c - src/core/lib/iomgr/socket_utils_common_posix.c - src/core/lib/iomgr/socket_utils_linux.c - src/core/lib/iomgr/socket_utils_posix.c @@ -2578,6 +2578,19 @@ targets: - mac - linux - posix +- name: ssl_server_fuzzer + build: fuzzer + language: c + src: + - test/core/security/ssl_server_fuzzer.c + deps: + - grpc_test_util + - grpc + - gpr_test_util + - gpr + corpus_dirs: + - test/core/security/corpus/ssl_server_corpus + maxlen: 2048 - name: tcp_client_posix_test cpu_cost: 0.5 build: test @@ -2810,6 +2823,19 @@ targets: - grpc - gpr_test_util - gpr +- name: bm_fullstack + build: test + language: c++ + src: + - test/cpp/microbenchmarks/bm_fullstack.cc + deps: + - google_benchmark + - grpc++_test_util + - grpc_test_util + - grpc++ + - grpc + - gpr_test_util + - gpr - name: channel_arguments_test gtest: true build: test diff --git a/config.m4 b/config.m4 index 3c9b09826549e73f7579f1b5c32f74b4d50c5784..a36601e5996bbbfcc529647e0f19e432da9cb552 100644 --- a/config.m4 +++ b/config.m4 @@ -105,7 +105,6 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ - src/core/lib/iomgr/ev_poll_and_epoll_posix.c \ src/core/lib/iomgr/ev_poll_posix.c \ src/core/lib/iomgr/ev_posix.c \ src/core/lib/iomgr/exec_ctx.c \ @@ -127,6 +126,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ + src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ diff --git a/doc/PROTOCOL-WEB.md b/doc/PROTOCOL-WEB.md index 7d9b9f069ae352eb0e75b4ea65e1c4c39dc6a2a5..562d5999cf5ff9994d1701862206ca3bd49f3c7c 100644 --- a/doc/PROTOCOL-WEB.md +++ b/doc/PROTOCOL-WEB.md @@ -60,8 +60,7 @@ HTTP/2 related behavior (specified in [gRPC over HTTP2](http://www.grpc.io/docs/ Message framing (vs. [http2-transport-mapping](http://www.grpc.io/docs/guides/wire.html#http2-transport-mapping)) 1. Response status encoded as part of the response body - * Key-value pairs formatted as HTTP/1.1 headers block (without the empty - newline \r\n to terminate the block) + * Key-value pairs encoded in the HTTP/2 [literal header format](https://tools.ietf.org/html/rfc7541#section-6.2) as a single header block. 2. 8th (MSB) bit of the 1st gRPC frame byte * 0: data * 1: trailers diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index e73b8e05738b642a02c099cdbd0b2401c8197e9c..5a62ff2a867b02c29ba7fb59d861418bc3dc4315 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -270,7 +270,6 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/endpoint_pair.h', 'src/core/lib/iomgr/error.h', 'src/core/lib/iomgr/ev_epoll_linux.h', - 'src/core/lib/iomgr/ev_poll_and_epoll_posix.h', 'src/core/lib/iomgr/ev_poll_posix.h', 'src/core/lib/iomgr/ev_posix.h', 'src/core/lib/iomgr/exec_ctx.h', @@ -294,6 +293,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_windows.h', + 'src/core/lib/iomgr/socket_mutator.h', 'src/core/lib/iomgr/socket_utils.h', 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', @@ -449,7 +449,6 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/endpoint_pair_windows.c', 'src/core/lib/iomgr/error.c', 'src/core/lib/iomgr/ev_epoll_linux.c', - 'src/core/lib/iomgr/ev_poll_and_epoll_posix.c', 'src/core/lib/iomgr/ev_poll_posix.c', 'src/core/lib/iomgr/ev_posix.c', 'src/core/lib/iomgr/exec_ctx.c', @@ -471,6 +470,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/resolve_address_windows.c', 'src/core/lib/iomgr/resource_quota.c', 'src/core/lib/iomgr/sockaddr_utils.c', + 'src/core/lib/iomgr/socket_mutator.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', @@ -674,7 +674,6 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/endpoint_pair.h', 'src/core/lib/iomgr/error.h', 'src/core/lib/iomgr/ev_epoll_linux.h', - 'src/core/lib/iomgr/ev_poll_and_epoll_posix.h', 'src/core/lib/iomgr/ev_poll_posix.h', 'src/core/lib/iomgr/ev_posix.h', 'src/core/lib/iomgr/exec_ctx.h', @@ -698,6 +697,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_windows.h', + 'src/core/lib/iomgr/socket_mutator.h', 'src/core/lib/iomgr/socket_utils.h', 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', diff --git a/grpc.def b/grpc.def index 61bc173c600f4bf5d5d822b527f00c7e41c1deda..1028f9ff9e4418dff313442e1a1f6385224c0129 100644 --- a/grpc.def +++ b/grpc.def @@ -152,6 +152,7 @@ EXPORTS gpr_empty_slice grpc_slice_cmp grpc_slice_str_cmp + grpc_slice_is_equivalent grpc_slice_buffer_init grpc_slice_buffer_destroy grpc_slice_buffer_add diff --git a/grpc.gemspec b/grpc.gemspec index c50fc5a3c9c0726e471c0d91edbf784b1ef81a3f..cb3e644be38d921cf3d239a0cced2720e40e70a2 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -190,7 +190,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/endpoint_pair.h ) s.files += %w( src/core/lib/iomgr/error.h ) s.files += %w( src/core/lib/iomgr/ev_epoll_linux.h ) - s.files += %w( src/core/lib/iomgr/ev_poll_and_epoll_posix.h ) s.files += %w( src/core/lib/iomgr/ev_poll_posix.h ) s.files += %w( src/core/lib/iomgr/ev_posix.h ) s.files += %w( src/core/lib/iomgr/exec_ctx.h ) @@ -214,6 +213,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/sockaddr_posix.h ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.h ) s.files += %w( src/core/lib/iomgr/sockaddr_windows.h ) + s.files += %w( src/core/lib/iomgr/socket_mutator.h ) s.files += %w( src/core/lib/iomgr/socket_utils.h ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.h ) s.files += %w( src/core/lib/iomgr/socket_windows.h ) @@ -369,7 +369,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/endpoint_pair_windows.c ) s.files += %w( src/core/lib/iomgr/error.c ) s.files += %w( src/core/lib/iomgr/ev_epoll_linux.c ) - s.files += %w( src/core/lib/iomgr/ev_poll_and_epoll_posix.c ) s.files += %w( src/core/lib/iomgr/ev_poll_posix.c ) s.files += %w( src/core/lib/iomgr/ev_posix.c ) s.files += %w( src/core/lib/iomgr/exec_ctx.c ) @@ -391,6 +390,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/resolve_address_windows.c ) s.files += %w( src/core/lib/iomgr/resource_quota.c ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.c ) + s.files += %w( src/core/lib/iomgr/socket_mutator.c ) s.files += %w( src/core/lib/iomgr/socket_utils_common_posix.c ) s.files += %w( src/core/lib/iomgr/socket_utils_linux.c ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.c ) diff --git a/include/grpc++/impl/codegen/completion_queue.h b/include/grpc++/impl/codegen/completion_queue.h index 29bc97fdf7c19ead59201288c96d5c3bd0fe09ea..ef00163b7eceadd822c2e4398e0d59588310ff41 100644 --- a/include/grpc++/impl/codegen/completion_queue.h +++ b/include/grpc++/impl/codegen/completion_queue.h @@ -240,7 +240,7 @@ class ServerCompletionQueue : public CompletionQueue { private: bool is_frequently_polled_; friend class ServerBuilder; - /// \param is_frequently_polled Informs the GPRC library about whether the + /// \param is_frequently_polled Informs the GRPC library about whether the /// server completion queue would be actively polled (by calling Next() or /// AsyncNext()). By default all server completion queues are assumed to be /// frequently polled. diff --git a/include/grpc++/support/channel_arguments.h b/include/grpc++/support/channel_arguments.h index 49a3e9461cfc772b8eae096c37c157a5636b60ca..220b6ef1ddcfcaa37d1af7a27c34b1ebf0b88bee 100644 --- a/include/grpc++/support/channel_arguments.h +++ b/include/grpc++/support/channel_arguments.h @@ -79,6 +79,9 @@ class ChannelArguments { /// Set the compression algorithm for the channel. void SetCompressionAlgorithm(grpc_compression_algorithm algorithm); + /// Set the socket mutator for the channel. + void SetSocketMutator(grpc_socket_mutator* mutator); + /// The given string will be sent at the front of the user agent string. void SetUserAgentPrefix(const grpc::string& user_agent_prefix); @@ -104,6 +107,15 @@ class ChannelArguments { /// Set a textual argument \a value under \a key. void SetString(const grpc::string& key, const grpc::string& value); + /// Return (by value) a c grpc_channel_args structure which points to + /// arguments owned by this ChannelArguments instance + grpc_channel_args c_channel_args() { + grpc_channel_args out; + out.num_args = args_.size(); + out.args = args_.empty() ? NULL : &args_[0]; + return out; + } + private: friend class SecureChannelCredentials; friend class testing::ChannelArgumentsTest; @@ -111,7 +123,7 @@ class ChannelArguments { /// Default pointer argument operations. struct PointerVtableMembers { static void* Copy(void* in) { return in; } - static void Destroy(void* in) {} + static void Destroy(grpc_exec_ctx* exec_ctx, void* in) {} static int Compare(void* a, void* b) { if (a < b) return -1; if (a > b) return 1; diff --git a/include/grpc/impl/codegen/connectivity_state.h b/include/grpc/impl/codegen/connectivity_state.h index 71865d8a566d60b3465b68b1ea0cd33d8954e052..c6d1a3340530da6f94af179d570811e97e79163c 100644 --- a/include/grpc/impl/codegen/connectivity_state.h +++ b/include/grpc/impl/codegen/connectivity_state.h @@ -40,6 +40,8 @@ extern "C" { /** Connectivity state of a channel. */ typedef enum { + /** channel has just been initialized */ + GRPC_CHANNEL_INIT = -1, /** channel is idle */ GRPC_CHANNEL_IDLE, /** channel is connecting */ diff --git a/include/grpc/impl/codegen/exec_ctx_fwd.h b/include/grpc/impl/codegen/exec_ctx_fwd.h index 6dff2d248cb56791b688b53d1e80af0d791b985e..32edcedbb31d0dd0068d9fc34c7cf273aa619271 100644 --- a/include/grpc/impl/codegen/exec_ctx_fwd.h +++ b/include/grpc/impl/codegen/exec_ctx_fwd.h @@ -31,11 +31,11 @@ * */ -#ifndef GRPC_EXEC_CTX_H -#define GRPC_EXEC_CTX_H +#ifndef GRPC_IMPL_CODEGEN_EXEC_CTX_FWD_H +#define GRPC_IMPL_CODEGEN_EXEC_CTX_FWD_H /* forward declaration for exec_ctx.h */ struct grpc_exec_ctx; typedef struct grpc_exec_ctx grpc_exec_ctx; -#endif +#endif /* GRPC_IMPL_CODEGEN_EXEC_CTX_FWD_H */ diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index e8472fba46dcdb29b01500e1133a6af38c251992..ed5048f32fcfe3cafc91fd449607f37fd774ba14 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -34,10 +34,10 @@ #ifndef GRPC_IMPL_CODEGEN_GRPC_TYPES_H #define GRPC_IMPL_CODEGEN_GRPC_TYPES_H +#include <grpc/impl/codegen/compression_types.h> +#include <grpc/impl/codegen/exec_ctx_fwd.h> #include <grpc/impl/codegen/gpr_types.h> #include <grpc/impl/codegen/slice.h> - -#include <grpc/impl/codegen/compression_types.h> #include <grpc/impl/codegen/status.h> #include <stddef.h> @@ -84,6 +84,9 @@ typedef struct grpc_server grpc_server; can have messages written to it and read from it. */ typedef struct grpc_call grpc_call; +/** The Socket Mutator interface allows changes on socket options */ +typedef struct grpc_socket_mutator grpc_socket_mutator; + /** Type specifier for grpc_arg */ typedef enum { GRPC_ARG_STRING, @@ -215,6 +218,8 @@ typedef struct { /** Resolved addresses in a form used by the LB policy. Not intended for external use. */ #define GRPC_ARG_LB_ADDRESSES "grpc.lb_addresses" +/** The grpc_socket_mutator instance that set the socket options. A pointer. */ +#define GRPC_ARG_SOCKET_MUTATOR "grpc.socket_mutator" /** \} */ /** Result of a grpc call. If the caller satisfies the prerequisites of a diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index 34df89700dc9f559601398ebc5adb408a8d65dd0..cd989d664ca0c7bbb219a79879fb7ca307336c72 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -368,14 +368,14 @@ typedef unsigned __int64 uint64_t; #endif #endif -#ifndef GPRC_PRINT_FORMAT_CHECK +#ifndef GPR_PRINT_FORMAT_CHECK #ifdef __GNUC__ -#define GPRC_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \ +#define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \ __attribute__((format(printf, FORMAT_STR, ARGS))) #else -#define GPRC_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) +#define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) #endif -#endif /* GPRC_PRINT_FORMAT_CHECK */ +#endif /* GPR_PRINT_FORMAT_CHECK */ #if GPR_FORBID_UNREACHABLE_CODE #define GPR_UNREACHABLE_CODE(STATEMENT) diff --git a/include/grpc/slice.h b/include/grpc/slice.h index b5894a103c1afd297b9b8ad9ddc5f6cf7beb8b70..34632a371abc3ec33449b0567f895014a0dd6a9f 100644 --- a/include/grpc/slice.h +++ b/include/grpc/slice.h @@ -127,6 +127,10 @@ GPRAPI grpc_slice gpr_empty_slice(void); GPRAPI int grpc_slice_cmp(grpc_slice a, grpc_slice b); GPRAPI int grpc_slice_str_cmp(grpc_slice a, const char *b); +/* Do two slices point at the same memory, with the same length + If a or b is inlined, actually compares data */ +GPRAPI int grpc_slice_is_equivalent(grpc_slice a, grpc_slice b); + #ifdef __cplusplus } #endif diff --git a/include/grpc/support/log.h b/include/grpc/support/log.h index 5acf17fc2c99a23a2ddf8aa240247261c65eaf18..88346cc9f432e81040fa2e0224472577387512a6 100644 --- a/include/grpc/support/log.h +++ b/include/grpc/support/log.h @@ -75,7 +75,7 @@ const char *gpr_log_severity_string(gpr_log_severity severity); /* Log a message. It's advised to use GPR_xxx above to generate the context * for each message */ GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, - const char *format, ...) GPRC_PRINT_FORMAT_CHECK(4, 5); + const char *format, ...) GPR_PRINT_FORMAT_CHECK(4, 5); GPRAPI void gpr_log_message(const char *file, int line, gpr_log_severity severity, const char *message); diff --git a/include/grpc/support/string_util.h b/include/grpc/support/string_util.h index 952cbfc26b99b68fb960f8fb80734b7e533876f9..5ab983d15df9bcd7fc0e193ca13976172c93d13d 100644 --- a/include/grpc/support/string_util.h +++ b/include/grpc/support/string_util.h @@ -55,7 +55,7 @@ GPRAPI char *gpr_strdup(const char *src); On error, returns -1 and sets *strp to NULL. If the format string is bad, the result is undefined. */ GPRAPI int gpr_asprintf(char **strp, const char *format, ...) - GPRC_PRINT_FORMAT_CHECK(2, 3); + GPR_PRINT_FORMAT_CHECK(2, 3); #ifdef __cplusplus } diff --git a/package.xml b/package.xml index 786e25a589a149939cbac4086c775f9618e3acf9..1ecc6832acf343ff754549b3a30a30925a661f5a 100644 --- a/package.xml +++ b/package.xml @@ -197,7 +197,6 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/error.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/ev_epoll_linux.h" role="src" /> - <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_and_epoll_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/ev_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/exec_ctx.h" role="src" /> @@ -221,6 +220,7 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_utils.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_windows.h" role="src" /> + <file baseinstalldir="/" name="src/core/lib/iomgr/socket_mutator.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_windows.h" role="src" /> @@ -376,7 +376,6 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/error.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/ev_epoll_linux.c" role="src" /> - <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_and_epoll_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/ev_poll_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/ev_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/exec_ctx.c" role="src" /> @@ -398,6 +397,7 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/resource_quota.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_utils.c" role="src" /> + <file baseinstalldir="/" name="src/core/lib/iomgr/socket_mutator.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_common_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_linux.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_posix.c" role="src" /> diff --git a/src/core/ext/census/census_log.h b/src/core/ext/census/census_log.h index 534ecc5705a7d870bf63d9b8a90cbba129026de2..1b185a53b93902072cc66ad51a10c34d6dc6dcc1 100644 --- a/src/core/ext/census/census_log.h +++ b/src/core/ext/census/census_log.h @@ -84,7 +84,7 @@ const void *census_log_read_next(size_t *bytes_available); */ size_t census_log_remaining_space(void); -/* Returns the number of times gprc_stats_log_start_write() failed due to +/* Returns the number of times grpc_stats_log_start_write() failed due to out-of-space. */ int census_log_out_of_space_count(void); diff --git a/src/core/ext/census/mlog.h b/src/core/ext/census/mlog.h index a256426f91b377ec16a8771f0355153968727203..18805ad99405051ee367602528bb1f07f45553b0 100644 --- a/src/core/ext/census/mlog.h +++ b/src/core/ext/census/mlog.h @@ -88,7 +88,7 @@ const void* census_log_read_next(size_t* bytes_available); */ size_t census_log_remaining_space(void); -/* Returns the number of times gprc_stats_log_start_write() failed due to +/* Returns the number of times grpc_stats_log_start_write() failed due to out-of-space. */ int64_t census_log_out_of_space_count(void); diff --git a/src/core/ext/client_channel/client_channel.c b/src/core/ext/client_channel/client_channel.c index 7954fcfb8b29c8636112aa7847c1c5ca108c0ba8..8f0c856afe3e1529112a557eddcb6e751e558f62 100644 --- a/src/core/ext/client_channel/client_channel.c +++ b/src/core/ext/client_channel/client_channel.c @@ -645,7 +645,7 @@ static void subchannel_ready(grpc_exec_ctx *exec_ctx, void *arg, grpc_subchannel_call *subchannel_call = NULL; grpc_error *new_error = grpc_connected_subchannel_create_call( exec_ctx, calld->connected_subchannel, calld->pollent, calld->path, - calld->deadline, &subchannel_call); + calld->call_start_time, calld->deadline, &subchannel_call); if (new_error != GRPC_ERROR_NONE) { new_error = grpc_error_add_child(new_error, error); subchannel_call = CANCELLED_CALL; @@ -898,7 +898,7 @@ retry: grpc_subchannel_call *subchannel_call = NULL; grpc_error *error = grpc_connected_subchannel_create_call( exec_ctx, calld->connected_subchannel, calld->pollent, calld->path, - calld->deadline, &subchannel_call); + calld->call_start_time, calld->deadline, &subchannel_call); if (error != GRPC_ERROR_NONE) { subchannel_call = CANCELLED_CALL; fail_locked(exec_ctx, calld, GRPC_ERROR_REF(error)); diff --git a/src/core/ext/client_channel/subchannel.c b/src/core/ext/client_channel/subchannel.c index bcb3082267e29719238147b439fce4fad6d3277e..6ba6254785ee0b7c7a7695e9790d60da391c945e 100644 --- a/src/core/ext/client_channel/subchannel.c +++ b/src/core/ext/client_channel/subchannel.c @@ -703,15 +703,15 @@ grpc_connected_subchannel *grpc_subchannel_get_connected_subchannel( grpc_error *grpc_connected_subchannel_create_call( grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *con, - grpc_polling_entity *pollent, grpc_mdstr *path, gpr_timespec deadline, - grpc_subchannel_call **call) { + grpc_polling_entity *pollent, grpc_mdstr *path, gpr_timespec start_time, + gpr_timespec deadline, grpc_subchannel_call **call) { grpc_channel_stack *chanstk = CHANNEL_STACK_FROM_CONNECTION(con); *call = gpr_malloc(sizeof(grpc_subchannel_call) + chanstk->call_stack_size); grpc_call_stack *callstk = SUBCHANNEL_CALL_TO_CALL_STACK(*call); (*call)->connection = con; // Ref is added below. grpc_error *error = grpc_call_stack_init(exec_ctx, chanstk, 1, subchannel_call_destroy, *call, - NULL, NULL, path, deadline, callstk); + NULL, NULL, path, start_time, deadline, callstk); if (error != GRPC_ERROR_NONE) { const char *error_string = grpc_error_string(error); gpr_log(GPR_ERROR, "error: %s", error_string); diff --git a/src/core/ext/client_channel/subchannel.h b/src/core/ext/client_channel/subchannel.h index 93bd72d20d5687efae4c7c4c62718832869b8bb1..10bae620dfa6e196eb1bc3f72a9806ed79e7a83a 100644 --- a/src/core/ext/client_channel/subchannel.h +++ b/src/core/ext/client_channel/subchannel.h @@ -111,8 +111,8 @@ void grpc_subchannel_call_unref(grpc_exec_ctx *exec_ctx, /** construct a subchannel call */ grpc_error *grpc_connected_subchannel_create_call( grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *connected_subchannel, - grpc_polling_entity *pollent, grpc_mdstr *path, gpr_timespec deadline, - grpc_subchannel_call **subchannel_call); + grpc_polling_entity *pollent, grpc_mdstr *path, gpr_timespec start_time, + gpr_timespec deadline, grpc_subchannel_call **subchannel_call); /** process a transport level op */ void grpc_connected_subchannel_process_transport_op( diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index 29ad1311c47f0dc09aaf08af73688f31513003b2..4bca8def391225e571c334713c72e7183ee107c4 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -762,17 +762,24 @@ static void glb_shutdown(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) { if (glb_policy->rr_policy) { GRPC_LB_POLICY_UNREF(exec_ctx, glb_policy->rr_policy, "glb_shutdown"); } - if (glb_policy->started_picking) { - if (glb_policy->lb_call != NULL) { - grpc_call_cancel(glb_policy->lb_call, NULL); - /* lb_on_server_status_received will pick up the cancel and clean up */ - } - } grpc_connectivity_state_set( exec_ctx, &glb_policy->state_tracker, GRPC_CHANNEL_SHUTDOWN, GRPC_ERROR_CREATE("Channel Shutdown"), "glb_shutdown"); + /* We need a copy of the lb_call pointer because we can't cancell the call + * while holding glb_policy->mu: lb_on_server_status_received, invoked due to + * the cancel, needs to acquire that same lock */ + grpc_call *lb_call = glb_policy->lb_call; + glb_policy->lb_call = NULL; gpr_mu_unlock(&glb_policy->mu); + /* glb_policy->lb_call and this local lb_call must be consistent at this point + * because glb_policy->lb_call is only assigned in lb_call_init_locked as part + * of query_for_backends_locked, which can only be invoked while + * glb_policy->shutting_down is false. */ + if (lb_call != NULL) { + grpc_call_cancel(lb_call, NULL); + /* lb_on_server_status_received will pick up the cancel and clean up */ + } while (pp != NULL) { pending_pick *next = pp->next; *pp->target = NULL; @@ -956,9 +963,11 @@ static void lb_on_server_status_received(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error); static void lb_on_response_received(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error); -static void lb_call_init(grpc_exec_ctx *exec_ctx, glb_lb_policy *glb_policy) { +static void lb_call_init_locked(grpc_exec_ctx *exec_ctx, + glb_lb_policy *glb_policy) { GPR_ASSERT(glb_policy->server_name != NULL); GPR_ASSERT(glb_policy->server_name[0] != '\0'); + GPR_ASSERT(!glb_policy->shutting_down); /* Note the following LB call progresses every time there's activity in \a * glb_policy->base.interested_parties, which is comprised of the polling @@ -1011,7 +1020,9 @@ static void lb_call_destroy_locked(glb_lb_policy *glb_policy) { static void query_for_backends_locked(grpc_exec_ctx *exec_ctx, glb_lb_policy *glb_policy) { GPR_ASSERT(glb_policy->lb_channel != NULL); - lb_call_init(exec_ctx, glb_policy); + if (glb_policy->shutting_down) return; + + lb_call_init_locked(exec_ctx, glb_policy); if (grpc_lb_glb_trace) { gpr_log(GPR_INFO, "Query for backends (grpclb: %p, lb_call: %p)", @@ -1156,8 +1167,8 @@ static void lb_on_response_received(grpc_exec_ctx *exec_ctx, void *arg, } gpr_mu_unlock(&glb_policy->mu); } else { /* empty payload: call cancelled. */ - /* dispose of the "lb_on_response_received" weak ref taken in - * query_for_backends_locked() and reused in every reception loop */ + /* dispose of the "lb_on_response_received" weak ref taken in + * query_for_backends_locked() and reused in every reception loop */ gpr_mu_unlock(&glb_policy->mu); GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &glb_policy->base, "lb_on_response_received_empty_payload"); diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c index ac3c6a305ac696988f31b5d8f565143c4f474934..c69f773e7828a509d4a9880ffcfaf13470f9683b 100644 --- a/src/core/ext/lb_policy/pick_first/pick_first.c +++ b/src/core/ext/lb_policy/pick_first/pick_first.c @@ -292,6 +292,8 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, } else { loop: switch (p->checking_connectivity) { + case GRPC_CHANNEL_INIT: + GPR_UNREACHABLE_CODE(return ); case GRPC_CHANNEL_READY: grpc_connectivity_state_set(exec_ctx, &p->state_tracker, GRPC_CHANNEL_READY, GRPC_ERROR_NONE, diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c index e101c0369c6c882cdd4bf3a21bdc612aa5be3f92..f93dd078ce4509988b49254399157bd78e1a523b 100644 --- a/src/core/ext/lb_policy/round_robin/round_robin.c +++ b/src/core/ext/lb_policy/round_robin/round_robin.c @@ -116,8 +116,13 @@ typedef struct { grpc_closure connectivity_changed_closure; /** this subchannels current position in subchannel->ready_list */ ready_list *ready_list_node; - /** last observed connectivity */ - grpc_connectivity_state connectivity_state; + /** last observed connectivity. Not updated by + * \a grpc_subchannel_notify_on_state_change. Used to determine the previous + * state while processing the new state in \a rr_connectivity_changed */ + grpc_connectivity_state prev_connectivity_state; + /** current connectivity state. Updated by \a + * grpc_subchannel_notify_on_state_change */ + grpc_connectivity_state curr_connectivity_state; /** the subchannel's target user data */ void *user_data; /** vtable to operate over \a user_data */ @@ -127,6 +132,7 @@ typedef struct { struct round_robin_lb_policy { /** base policy: must be first */ grpc_lb_policy base; + gpr_mu mu; /** total number of addresses received at creation time */ size_t num_addresses; @@ -135,8 +141,11 @@ struct round_robin_lb_policy { size_t num_subchannels; subchannel_data **subchannels; - /** mutex protecting remaining members */ - gpr_mu mu; + /** how many subchannels are in TRANSIENT_FAILURE */ + size_t num_transient_failures; + /** how many subchannels are IDLE */ + size_t num_idle; + /** have we started picking? */ int started_picking; /** are we shutting down? */ @@ -258,6 +267,10 @@ static void remove_disconnected_sc_locked(round_robin_lb_policy *p, gpr_free(node); } +static bool is_ready_list_empty(round_robin_lb_policy *p) { + return p->ready_list.prev == NULL; +} + static void rr_destroy(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) { round_robin_lb_policy *p = (round_robin_lb_policy *)pol; ready_list *elem; @@ -268,7 +281,7 @@ static void rr_destroy(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) { for (size_t i = 0; i < p->num_subchannels; i++) { subchannel_data *sd = p->subchannels[i]; - GRPC_SUBCHANNEL_UNREF(exec_ctx, sd->subchannel, "round_robin_destroy"); + GRPC_SUBCHANNEL_UNREF(exec_ctx, sd->subchannel, "rr_destroy"); if (sd->user_data != NULL) { GPR_ASSERT(sd->user_data_vtable != NULL); sd->user_data_vtable->destroy(exec_ctx, sd->user_data); @@ -381,18 +394,18 @@ static void start_picking(grpc_exec_ctx *exec_ctx, round_robin_lb_policy *p) { size_t i; p->started_picking = 1; - if (grpc_lb_round_robin_trace) { - gpr_log(GPR_DEBUG, "LB_POLICY: p=%p num_subchannels=%" PRIuPTR, (void *)p, - p->num_subchannels); - } - for (i = 0; i < p->num_subchannels; i++) { subchannel_data *sd = p->subchannels[i]; - sd->connectivity_state = GRPC_CHANNEL_IDLE; + /* use some sentinel value outside of the range of grpc_connectivity_state + * to signal an undefined previous state. We won't be referring to this + * value again and it'll be overwritten after the first call to + * rr_connectivity_changed */ + sd->prev_connectivity_state = GRPC_CHANNEL_INIT; + sd->curr_connectivity_state = GRPC_CHANNEL_IDLE; + GRPC_LB_POLICY_WEAK_REF(&p->base, "rr_connectivity"); grpc_subchannel_notify_on_state_change( exec_ctx, sd->subchannel, p->base.interested_parties, - &sd->connectivity_state, &sd->connectivity_changed_closure); - GRPC_LB_POLICY_WEAK_REF(&p->base, "round_robin_connectivity"); + &sd->curr_connectivity_state, &sd->connectivity_changed_closure); } } @@ -422,7 +435,7 @@ static int rr_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, /* readily available, report right away */ *target = GRPC_CONNECTED_SUBCHANNEL_REF( grpc_subchannel_get_connected_subchannel(selected->subchannel), - "picked"); + "rr_picked"); if (user_data != NULL) { *user_data = selected->user_data; @@ -453,125 +466,184 @@ static int rr_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, } } +static void update_state_counters(subchannel_data *sd) { + round_robin_lb_policy *p = sd->policy; + + /* update p->num_transient_failures (resp. p->num_idle): if the previous + * state was TRANSIENT_FAILURE (resp. IDLE), decrement + * p->num_transient_failures (resp. p->num_idle). */ + if (sd->prev_connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) { + GPR_ASSERT(p->num_transient_failures > 0); + --p->num_transient_failures; + } else if (sd->prev_connectivity_state == GRPC_CHANNEL_IDLE) { + GPR_ASSERT(p->num_idle > 0); + --p->num_idle; + } +} + +/* sd is the subchannel_data associted with the updated subchannel. + * shutdown_error will only be used upon policy transition to TRANSIENT_FAILURE + * or SHUTDOWN */ +static grpc_connectivity_state update_lb_connectivity_status( + grpc_exec_ctx *exec_ctx, subchannel_data *sd, grpc_error *error) { + /* In priority order. The first rule to match terminates the search (ie, if we + * are on rule n, all previous rules were unfulfilled). + * + * 1) RULE: ANY subchannel is READY => policy is READY. + * CHECK: At least one subchannel is ready iff p->ready_list is NOT empty. + * + * 2) RULE: ANY subchannel is CONNECTING => policy is CONNECTING. + * CHECK: sd->curr_connectivity_state == CONNECTING. + * + * 3) RULE: ALL subchannels are SHUTDOWN => policy is SHUTDOWN. + * CHECK: p->num_subchannels = 0. + * + * 4) RULE: ALL subchannels are TRANSIENT_FAILURE => policy is + * TRANSIENT_FAILURE. + * CHECK: p->num_transient_failures == p->num_subchannels. + * + * 5) RULE: ALL subchannels are IDLE => policy is IDLE. + * CHECK: p->num_idle == p->num_subchannels. + */ + round_robin_lb_policy *p = sd->policy; + if (!is_ready_list_empty(p)) { /* 1) READY */ + grpc_connectivity_state_set(exec_ctx, &p->state_tracker, GRPC_CHANNEL_READY, + GRPC_ERROR_NONE, "rr_ready"); + return GRPC_CHANNEL_READY; + } else if (sd->curr_connectivity_state == + GRPC_CHANNEL_CONNECTING) { /* 2) CONNECTING */ + grpc_connectivity_state_set(exec_ctx, &p->state_tracker, + GRPC_CHANNEL_CONNECTING, GRPC_ERROR_NONE, + "rr_connecting"); + return GRPC_CHANNEL_CONNECTING; + } else if (p->num_subchannels == 0) { /* 3) SHUTDOWN */ + grpc_connectivity_state_set(exec_ctx, &p->state_tracker, + GRPC_CHANNEL_SHUTDOWN, GRPC_ERROR_REF(error), + "rr_shutdown"); + return GRPC_CHANNEL_SHUTDOWN; + } else if (p->num_transient_failures == + p->num_subchannels) { /* 4) TRANSIENT_FAILURE */ + grpc_connectivity_state_set(exec_ctx, &p->state_tracker, + GRPC_CHANNEL_TRANSIENT_FAILURE, + GRPC_ERROR_REF(error), "rr_transient_failure"); + return GRPC_CHANNEL_TRANSIENT_FAILURE; + } else if (p->num_idle == p->num_subchannels) { /* 5) IDLE */ + grpc_connectivity_state_set(exec_ctx, &p->state_tracker, GRPC_CHANNEL_IDLE, + GRPC_ERROR_NONE, "rr_idle"); + return GRPC_CHANNEL_IDLE; + } + /* no change */ + return sd->curr_connectivity_state; +} + static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { subchannel_data *sd = arg; round_robin_lb_policy *p = sd->policy; pending_pick *pp; - int unref = 0; - GRPC_ERROR_REF(error); gpr_mu_lock(&p->mu); if (p->shutdown) { - unref = 1; - } else { - switch (sd->connectivity_state) { - case GRPC_CHANNEL_READY: - grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_READY, GRPC_ERROR_REF(error), - "connecting_ready"); - /* add the newly connected subchannel to the list of connected ones. - * Note that it goes to the "end of the line". */ - sd->ready_list_node = add_connected_sc_locked(p, sd); - /* at this point we know there's at least one suitable subchannel. Go - * ahead and pick one and notify the pending suitors in - * p->pending_picks. This preemtively replicates rr_pick()'s actions. */ - ready_list *selected = peek_next_connected_locked(p); - GPR_ASSERT(selected != NULL); - if (p->pending_picks != NULL) { - /* if the selected subchannel is going to be used for the pending - * picks, update the last picked pointer */ - advance_last_picked_locked(p); + gpr_mu_unlock(&p->mu); + GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, "rr_connectivity"); + GRPC_ERROR_UNREF(error); + return; + } + switch (sd->curr_connectivity_state) { + case GRPC_CHANNEL_INIT: + GPR_UNREACHABLE_CODE(return ); + case GRPC_CHANNEL_READY: + /* add the newly connected subchannel to the list of connected ones. + * Note that it goes to the "end of the line". */ + sd->ready_list_node = add_connected_sc_locked(p, sd); + /* at this point we know there's at least one suitable subchannel. Go + * ahead and pick one and notify the pending suitors in + * p->pending_picks. This preemtively replicates rr_pick()'s actions. */ + ready_list *selected = peek_next_connected_locked(p); + GPR_ASSERT(selected != NULL); + if (p->pending_picks != NULL) { + /* if the selected subchannel is going to be used for the pending + * picks, update the last picked pointer */ + advance_last_picked_locked(p); + } + while ((pp = p->pending_picks)) { + p->pending_picks = pp->next; + *pp->target = GRPC_CONNECTED_SUBCHANNEL_REF( + grpc_subchannel_get_connected_subchannel(selected->subchannel), + "rr_picked"); + if (pp->user_data != NULL) { + *pp->user_data = selected->user_data; } - + if (grpc_lb_round_robin_trace) { + gpr_log(GPR_DEBUG, + "[RR CONN CHANGED] TARGET <-- SUBCHANNEL %p (NODE %p)", + (void *)selected->subchannel, (void *)selected); + } + grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, NULL); + gpr_free(pp); + } + update_lb_connectivity_status(exec_ctx, sd, error); + sd->prev_connectivity_state = sd->curr_connectivity_state; + /* renew notification: reuses the "rr_connectivity" weak ref */ + grpc_subchannel_notify_on_state_change( + exec_ctx, sd->subchannel, p->base.interested_parties, + &sd->curr_connectivity_state, &sd->connectivity_changed_closure); + break; + case GRPC_CHANNEL_IDLE: + ++p->num_idle; + /* fallthrough */ + case GRPC_CHANNEL_CONNECTING: + update_state_counters(sd); + update_lb_connectivity_status(exec_ctx, sd, error); + sd->prev_connectivity_state = sd->curr_connectivity_state; + /* renew notification: reuses the "rr_connectivity" weak ref */ + grpc_subchannel_notify_on_state_change( + exec_ctx, sd->subchannel, p->base.interested_parties, + &sd->curr_connectivity_state, &sd->connectivity_changed_closure); + break; + case GRPC_CHANNEL_TRANSIENT_FAILURE: + ++p->num_transient_failures; + /* remove from ready list if still present */ + if (sd->ready_list_node != NULL) { + remove_disconnected_sc_locked(p, sd->ready_list_node); + sd->ready_list_node = NULL; + } + update_lb_connectivity_status(exec_ctx, sd, error); + sd->prev_connectivity_state = sd->curr_connectivity_state; + /* renew notification: reuses the "rr_connectivity" weak ref */ + grpc_subchannel_notify_on_state_change( + exec_ctx, sd->subchannel, p->base.interested_parties, + &sd->curr_connectivity_state, &sd->connectivity_changed_closure); + break; + case GRPC_CHANNEL_SHUTDOWN: + update_state_counters(sd); + if (sd->ready_list_node != NULL) { + remove_disconnected_sc_locked(p, sd->ready_list_node); + sd->ready_list_node = NULL; + } + --p->num_subchannels; + GPR_SWAP(subchannel_data *, p->subchannels[sd->index], + p->subchannels[p->num_subchannels]); + GRPC_SUBCHANNEL_UNREF(exec_ctx, sd->subchannel, "rr_subchannel_shutdown"); + p->subchannels[sd->index]->index = sd->index; + if (update_lb_connectivity_status(exec_ctx, sd, error) == + GRPC_CHANNEL_SHUTDOWN) { + /* the policy is shutting down. Flush all the pending picks... */ while ((pp = p->pending_picks)) { p->pending_picks = pp->next; - - *pp->target = GRPC_CONNECTED_SUBCHANNEL_REF( - grpc_subchannel_get_connected_subchannel(selected->subchannel), - "picked"); - if (pp->user_data != NULL) { - *pp->user_data = selected->user_data; - } - if (grpc_lb_round_robin_trace) { - gpr_log(GPR_DEBUG, - "[RR CONN CHANGED] TARGET <-- SUBCHANNEL %p (NODE %p)", - (void *)selected->subchannel, (void *)selected); - } + *pp->target = NULL; grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, NULL); gpr_free(pp); } - grpc_subchannel_notify_on_state_change( - exec_ctx, sd->subchannel, p->base.interested_parties, - &sd->connectivity_state, &sd->connectivity_changed_closure); - break; - case GRPC_CHANNEL_CONNECTING: - case GRPC_CHANNEL_IDLE: - grpc_connectivity_state_set( - exec_ctx, &p->state_tracker, sd->connectivity_state, - GRPC_ERROR_REF(error), "connecting_changed"); - grpc_subchannel_notify_on_state_change( - exec_ctx, sd->subchannel, p->base.interested_parties, - &sd->connectivity_state, &sd->connectivity_changed_closure); - break; - case GRPC_CHANNEL_TRANSIENT_FAILURE: - /* renew state notification */ - grpc_subchannel_notify_on_state_change( - exec_ctx, sd->subchannel, p->base.interested_parties, - &sd->connectivity_state, &sd->connectivity_changed_closure); - - /* remove from ready list if still present */ - if (sd->ready_list_node != NULL) { - remove_disconnected_sc_locked(p, sd->ready_list_node); - sd->ready_list_node = NULL; - } - grpc_connectivity_state_set( - exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE, - GRPC_ERROR_REF(error), "connecting_transient_failure"); - break; - case GRPC_CHANNEL_SHUTDOWN: - if (sd->ready_list_node != NULL) { - remove_disconnected_sc_locked(p, sd->ready_list_node); - sd->ready_list_node = NULL; - } - - p->num_subchannels--; - GPR_SWAP(subchannel_data *, p->subchannels[sd->index], - p->subchannels[p->num_subchannels]); - GRPC_SUBCHANNEL_UNREF(exec_ctx, sd->subchannel, "round_robin"); - p->subchannels[sd->index]->index = sd->index; - gpr_free(sd); - - unref = 1; - if (p->num_subchannels == 0) { - grpc_connectivity_state_set( - exec_ctx, &p->state_tracker, GRPC_CHANNEL_SHUTDOWN, - GRPC_ERROR_CREATE_REFERENCING("Round Robin Channels Exhausted", - &error, 1), - "no_more_channels"); - while ((pp = p->pending_picks)) { - p->pending_picks = pp->next; - *pp->target = NULL; - grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, - NULL); - gpr_free(pp); - } - } else { - grpc_connectivity_state_set( - exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE, - GRPC_ERROR_REF(error), "subchannel_failed"); - } - } /* switch */ - } /* !unref */ - - gpr_mu_unlock(&p->mu); - - if (unref) { - GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, "round_robin_connectivity"); + } + gpr_free(sd); + /* unref the "rr_connectivity" weak ref from start_picking */ + GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, "rr_connectivity"); + break; } - + gpr_mu_unlock(&p->mu); GRPC_ERROR_UNREF(error); } @@ -607,9 +679,9 @@ static void rr_ping_one(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, gpr_mu_unlock(&p->mu); target = GRPC_CONNECTED_SUBCHANNEL_REF( grpc_subchannel_get_connected_subchannel(selected->subchannel), - "picked"); + "rr_picked"); grpc_connected_subchannel_ping(exec_ctx, target, closure); - GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, target, "picked"); + GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, target, "rr_picked"); } else { gpr_mu_unlock(&p->mu); grpc_exec_ctx_sched(exec_ctx, closure, @@ -705,6 +777,11 @@ static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx, grpc_lb_policy_init(&p->base, &round_robin_lb_policy_vtable); grpc_connectivity_state_init(&p->state_tracker, GRPC_CHANNEL_IDLE, "round_robin"); + + if (grpc_lb_round_robin_trace) { + gpr_log(GPR_DEBUG, "Created RR policy at %p with %lu subchannels", + (void *)p, (unsigned long)p->num_subchannels); + } gpr_mu_init(&p->mu); return &p->base; } diff --git a/src/core/ext/load_reporting/load_reporting_filter.c b/src/core/ext/load_reporting/load_reporting_filter.c index 2b08c4efec5ec1a0bd4d45ed8932ce740c9ca200..f50e6520cd237861a86233c9ecc5e180ae7e0791 100644 --- a/src/core/ext/load_reporting/load_reporting_filter.c +++ b/src/core/ext/load_reporting/load_reporting_filter.c @@ -68,7 +68,8 @@ typedef struct { grpc_exec_ctx *exec_ctx; } recv_md_filter_args; -static grpc_mdelem *recv_md_filter(void *user_data, grpc_mdelem *md) { +static grpc_mdelem *recv_md_filter(grpc_exec_ctx *exec_ctx, void *user_data, + grpc_mdelem *md) { recv_md_filter_args *a = user_data; grpc_call_element *elem = a->elem; call_data *calld = elem->call_data; @@ -189,7 +190,8 @@ static void destroy_channel_elem(grpc_exec_ctx *exec_ctx, */ } -static grpc_mdelem *lr_trailing_md_filter(void *user_data, grpc_mdelem *md) { +static grpc_mdelem *lr_trailing_md_filter(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_mdelem *md) { grpc_call_element *elem = user_data; call_data *calld = elem->call_data; diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 96d916e414a2284f5cb81307963fa7d855e5ee31..7baeddc7b89d087c74431f52e119feb84d93f372 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -1040,7 +1040,7 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op, "op.send_initial_metadata"); } } else { - s->send_trailing_metadata = NULL; + s->send_initial_metadata = NULL; grpc_chttp2_complete_closure_step( exec_ctx, t, s, &s->send_initial_metadata_finished, GRPC_ERROR_CREATE( @@ -1527,13 +1527,17 @@ static void fail_pending_writes(grpc_exec_ctx *exec_ctx, grpc_error *error) { error = removal_error(error, s, "Pending writes failed due to stream closure"); - s->fetching_send_message = NULL; + s->send_initial_metadata = NULL; grpc_chttp2_complete_closure_step( exec_ctx, t, s, &s->send_initial_metadata_finished, GRPC_ERROR_REF(error), "send_initial_metadata_finished"); + + s->send_trailing_metadata = NULL; grpc_chttp2_complete_closure_step( exec_ctx, t, s, &s->send_trailing_metadata_finished, GRPC_ERROR_REF(error), "send_trailing_metadata_finished"); + + s->fetching_send_message = NULL; grpc_chttp2_complete_closure_step( exec_ctx, t, s, &s->fetching_send_message_finished, GRPC_ERROR_REF(error), "fetching_send_message_finished"); @@ -2298,6 +2302,14 @@ static char *chttp2_get_peer(grpc_exec_ctx *exec_ctx, grpc_transport *t) { return gpr_strdup(((grpc_chttp2_transport *)t)->peer_string); } +/******************************************************************************* + * MONITORING + */ +static grpc_endpoint *chttp2_get_endpoint(grpc_exec_ctx *exec_ctx, + grpc_transport *t) { + return ((grpc_chttp2_transport *)t)->ep; +} + static const grpc_transport_vtable vtable = {sizeof(grpc_chttp2_stream), "chttp2", init_stream, @@ -2307,7 +2319,8 @@ static const grpc_transport_vtable vtable = {sizeof(grpc_chttp2_stream), perform_transport_op, destroy_stream, destroy_transport, - chttp2_get_peer}; + chttp2_get_peer, + chttp2_get_endpoint}; grpc_transport *grpc_create_chttp2_transport( grpc_exec_ctx *exec_ctx, const grpc_channel_args *channel_args, diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c index e1202e2ca55a63fa024b8686d76bdb64853812a1..4fb5dc7bd2bec429c91f6c0249f8c2eb8dd820b7 100644 --- a/src/core/ext/transport/chttp2/transport/parsing.c +++ b/src/core/ext/transport/chttp2/transport/parsing.c @@ -471,7 +471,8 @@ static void on_initial_header(grpc_exec_ctx *exec_ctx, void *tp, grpc_mdstr_as_c_string(md->value)); *cached_timeout = gpr_inf_future(GPR_TIMESPAN); } - grpc_mdelem_set_user_data(md, free_timeout, cached_timeout); + cached_timeout = + grpc_mdelem_set_user_data(md, free_timeout, cached_timeout); } grpc_chttp2_incoming_metadata_buffer_set_deadline( &s->metadata_buffer[0], diff --git a/src/core/ext/transport/cronet/transport/cronet_transport.c b/src/core/ext/transport/cronet/transport/cronet_transport.c index 2ab9a8c19db6f5dd8c8e86be3caaf8216260c68d..a4c110101ecf53f56870ac0d3e90f72920bb5bbc 100644 --- a/src/core/ext/transport/cronet/transport/cronet_transport.c +++ b/src/core/ext/transport/cronet/transport/cronet_transport.c @@ -42,6 +42,7 @@ #include <grpc/support/useful.h> #include "src/core/ext/transport/chttp2/transport/incoming_metadata.h" +#include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/support/string.h" #include "src/core/lib/surface/channel.h" @@ -1095,6 +1096,11 @@ static char *get_peer(grpc_exec_ctx *exec_ctx, grpc_transport *gt) { return NULL; } +static grpc_endpoint *get_endpoint(grpc_exec_ctx *exec_ctx, + grpc_transport *gt) { + return NULL; +} + static void perform_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt, grpc_transport_op *op) {} @@ -1107,4 +1113,5 @@ const grpc_transport_vtable grpc_cronet_vtable = {sizeof(stream_obj), perform_op, destroy_stream, destroy_transport, - get_peer}; + get_peer, + get_endpoint}; diff --git a/src/core/lib/channel/channel_args.c b/src/core/lib/channel/channel_args.c index c956b0febcf03ff9ab60c549c671a89441b5428d..1a099ac437a19abcc89dee19bf67309af9a8a2ea 100644 --- a/src/core/lib/channel/channel_args.c +++ b/src/core/lib/channel/channel_args.c @@ -300,6 +300,12 @@ uint32_t grpc_channel_args_compression_algorithm_get_states( } } +grpc_channel_args *grpc_channel_args_set_socket_mutator( + grpc_channel_args *a, grpc_socket_mutator *mutator) { + grpc_arg tmp = grpc_socket_mutator_to_arg(mutator); + return grpc_channel_args_copy_and_add(a, &tmp, 1); +} + int grpc_channel_args_compare(const grpc_channel_args *a, const grpc_channel_args *b) { int c = GPR_ICMP(a->num_args, b->num_args); diff --git a/src/core/lib/channel/channel_args.h b/src/core/lib/channel/channel_args.h index 593313341312e586423e6d3e0cb0289d11e37d20..5c7d31f8bba0306ab841bc68ea7db81790ff0f3e 100644 --- a/src/core/lib/channel/channel_args.h +++ b/src/core/lib/channel/channel_args.h @@ -36,6 +36,7 @@ #include <grpc/compression.h> #include <grpc/grpc.h> +#include "src/core/lib/iomgr/socket_mutator.h" // Channel args are intentionally immutable, to avoid the need for locking. @@ -101,6 +102,13 @@ uint32_t grpc_channel_args_compression_algorithm_get_states( int grpc_channel_args_compare(const grpc_channel_args *a, const grpc_channel_args *b); +/** Returns a channel arg instance with socket mutator added. The socket mutator + * will perform its mutate_fd method on all file descriptors used by the + * channel. + * If \a a is non-MULL, its args are copied. */ +grpc_channel_args *grpc_channel_args_set_socket_mutator( + grpc_channel_args *a, grpc_socket_mutator *mutator); + /** Returns the value of argument \a name from \a args, or NULL if not found. */ const grpc_arg *grpc_channel_args_find(const grpc_channel_args *args, const char *name); diff --git a/src/core/lib/channel/channel_stack.c b/src/core/lib/channel/channel_stack.c index 947dff4cb3196295529574efc2a541d83d73c817..285ac178af3fc0cfcb853f6aa7863dcc75230520 100644 --- a/src/core/lib/channel/channel_stack.c +++ b/src/core/lib/channel/channel_stack.c @@ -162,7 +162,8 @@ grpc_error *grpc_call_stack_init( grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack, int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg, grpc_call_context_element *context, const void *transport_server_data, - grpc_mdstr *path, gpr_timespec deadline, grpc_call_stack *call_stack) { + grpc_mdstr *path, gpr_timespec start_time, gpr_timespec deadline, + grpc_call_stack *call_stack) { grpc_channel_element *channel_elems = CHANNEL_ELEMS_FROM_STACK(channel_stack); grpc_call_element_args args; size_t count = channel_stack->count; @@ -179,7 +180,7 @@ grpc_error *grpc_call_stack_init( /* init per-filter data */ grpc_error *first_error = GRPC_ERROR_NONE; - args.start_time = gpr_now(GPR_CLOCK_MONOTONIC); + args.start_time = start_time; for (i = 0; i < count; i++) { args.call_stack = call_stack; args.server_transport_data = transport_server_data; diff --git a/src/core/lib/channel/channel_stack.h b/src/core/lib/channel/channel_stack.h index c3b662c969121262ea9bd3dabad7fbd098db6463..004643d45f6cb5b532c685d21fa04ae05b0319ce 100644 --- a/src/core/lib/channel/channel_stack.h +++ b/src/core/lib/channel/channel_stack.h @@ -231,7 +231,8 @@ grpc_error *grpc_call_stack_init( grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack, int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg, grpc_call_context_element *context, const void *transport_server_data, - grpc_mdstr *path, gpr_timespec deadline, grpc_call_stack *call_stack); + grpc_mdstr *path, gpr_timespec start_time, gpr_timespec deadline, + grpc_call_stack *call_stack); /* Set a pollset or a pollset_set for a call stack: must occur before the first * op is started */ void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx, diff --git a/src/core/lib/channel/compress_filter.c b/src/core/lib/channel/compress_filter.c index dd496ee0952a694f1f05e724da137ca2f277d206..96188f01c4cea98ce085de0d4cbe6ac9fbb62550 100644 --- a/src/core/lib/channel/compress_filter.c +++ b/src/core/lib/channel/compress_filter.c @@ -83,7 +83,8 @@ typedef struct channel_data { /** For each \a md element from the incoming metadata, filter out the entry for * "grpc-encoding", using its value to populate the call data's * compression_algorithm field. */ -static grpc_mdelem *compression_md_filter(void *user_data, grpc_mdelem *md) { +static grpc_mdelem *compression_md_filter(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_mdelem *md) { grpc_call_element *elem = user_data; call_data *calld = elem->call_data; channel_data *channeld = elem->channel_data; diff --git a/src/core/lib/channel/http_client_filter.c b/src/core/lib/channel/http_client_filter.c index 63afa4bf099268f93ec2bf832563a1fc86598e48..27064e0fb84f2a432f46ca846a8cfc17123b5b08 100644 --- a/src/core/lib/channel/http_client_filter.c +++ b/src/core/lib/channel/http_client_filter.c @@ -36,6 +36,7 @@ #include <grpc/support/string_util.h> #include <string.h> #include "src/core/lib/profiling/timers.h" +#include "src/core/lib/slice/percent_encoding.h" #include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/support/string.h" #include "src/core/lib/transport/static_metadata.h" @@ -57,6 +58,7 @@ typedef struct call_data { grpc_linked_mdelem payload_bin; grpc_metadata_batch *recv_initial_metadata; + grpc_metadata_batch *recv_trailing_metadata; uint8_t *payload_bytes; /* Vars to read data off of send_message */ @@ -70,14 +72,16 @@ typedef struct call_data { bool send_message_blocked; /** Closure to call when finished with the hc_on_recv hook */ - grpc_closure *on_done_recv; + grpc_closure *on_done_recv_initial_metadata; + grpc_closure *on_done_recv_trailing_metadata; grpc_closure *on_complete; grpc_closure *post_send; /** Receive closures are chained: we inject this closure as the on_done_recv up-call on transport_op, and remember to call our on_done_recv member after handling it. */ - grpc_closure hc_on_recv; + grpc_closure hc_on_recv_initial_metadata; + grpc_closure hc_on_recv_trailing_metadata; grpc_closure hc_on_complete; grpc_closure got_slice; grpc_closure send_done; @@ -89,13 +93,9 @@ typedef struct channel_data { size_t max_payload_size_for_get; } channel_data; -typedef struct { - grpc_call_element *elem; - grpc_exec_ctx *exec_ctx; -} client_recv_filter_args; - -static grpc_mdelem *client_recv_filter(void *user_data, grpc_mdelem *md) { - client_recv_filter_args *a = user_data; +static grpc_mdelem *client_recv_filter(grpc_exec_ctx *exec_ctx, void *user_data, + grpc_mdelem *md) { + grpc_call_element *elem = user_data; if (md == GRPC_MDELEM_STATUS_200) { return NULL; } else if (md->key == GRPC_MDSTR_STATUS) { @@ -104,9 +104,20 @@ static grpc_mdelem *client_recv_filter(void *user_data, grpc_mdelem *md) { grpc_mdstr_as_c_string(md->value)); grpc_slice message = grpc_slice_from_copied_string(message_string); gpr_free(message_string); - grpc_call_element_send_close_with_message(a->exec_ctx, a->elem, + grpc_call_element_send_close_with_message(exec_ctx, elem, GRPC_STATUS_CANCELLED, &message); return NULL; + } else if (md->key == GRPC_MDSTR_GRPC_MESSAGE) { + grpc_slice pct_decoded_msg = + grpc_permissive_percent_decode_slice(md->value->slice); + if (grpc_slice_is_equivalent(pct_decoded_msg, md->value->slice)) { + grpc_slice_unref(pct_decoded_msg); + return md; + } else { + return grpc_mdelem_from_metadata_strings( + exec_ctx, GRPC_MDSTR_GRPC_MESSAGE, + grpc_mdstr_from_slice(exec_ctx, pct_decoded_msg)); + } } else if (md == GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC) { return NULL; } else if (md->key == GRPC_MDSTR_CONTENT_TYPE) { @@ -130,16 +141,24 @@ static grpc_mdelem *client_recv_filter(void *user_data, grpc_mdelem *md) { return md; } -static void hc_on_recv(grpc_exec_ctx *exec_ctx, void *user_data, - grpc_error *error) { +static void hc_on_recv_initial_metadata(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_error *error) { grpc_call_element *elem = user_data; call_data *calld = elem->call_data; - client_recv_filter_args a; - a.elem = elem; - a.exec_ctx = exec_ctx; grpc_metadata_batch_filter(exec_ctx, calld->recv_initial_metadata, - client_recv_filter, &a); - calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, error); + client_recv_filter, elem); + grpc_closure_run(exec_ctx, calld->on_done_recv_initial_metadata, + GRPC_ERROR_REF(error)); +} + +static void hc_on_recv_trailing_metadata(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_error *error) { + grpc_call_element *elem = user_data; + call_data *calld = elem->call_data; + grpc_metadata_batch_filter(exec_ctx, calld->recv_trailing_metadata, + client_recv_filter, elem); + grpc_closure_run(exec_ctx, calld->on_done_recv_trailing_metadata, + GRPC_ERROR_REF(error)); } static void hc_on_complete(grpc_exec_ctx *exec_ctx, void *user_data, @@ -160,7 +179,8 @@ static void send_done(grpc_exec_ctx *exec_ctx, void *elemp, grpc_error *error) { calld->post_send->cb(exec_ctx, calld->post_send->cb_arg, error); } -static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) { +static grpc_mdelem *client_strip_filter(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_mdelem *md) { /* eat the things we'd like to set ourselves */ if (md->key == GRPC_MDSTR_METHOD) return NULL; if (md->key == GRPC_MDSTR_SCHEME) return NULL; @@ -282,8 +302,15 @@ static void hc_mutate_op(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, if (op->recv_initial_metadata != NULL) { /* substitute our callback for the higher callback */ calld->recv_initial_metadata = op->recv_initial_metadata; - calld->on_done_recv = op->recv_initial_metadata_ready; - op->recv_initial_metadata_ready = &calld->hc_on_recv; + calld->on_done_recv_initial_metadata = op->recv_initial_metadata_ready; + op->recv_initial_metadata_ready = &calld->hc_on_recv_initial_metadata; + } + + if (op->recv_trailing_metadata != NULL) { + /* substitute our callback for the higher callback */ + calld->recv_trailing_metadata = op->recv_trailing_metadata; + calld->on_done_recv_trailing_metadata = op->on_complete; + op->on_complete = &calld->hc_on_recv_trailing_metadata; } } @@ -309,11 +336,15 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, grpc_call_element_args *args) { call_data *calld = elem->call_data; - calld->on_done_recv = NULL; + calld->on_done_recv_initial_metadata = NULL; + calld->on_done_recv_trailing_metadata = NULL; calld->on_complete = NULL; calld->payload_bytes = NULL; grpc_slice_buffer_init(&calld->slices); - grpc_closure_init(&calld->hc_on_recv, hc_on_recv, elem); + grpc_closure_init(&calld->hc_on_recv_initial_metadata, + hc_on_recv_initial_metadata, elem); + grpc_closure_init(&calld->hc_on_recv_trailing_metadata, + hc_on_recv_trailing_metadata, elem); grpc_closure_init(&calld->hc_on_complete, hc_on_complete, elem); grpc_closure_init(&calld->got_slice, got_slice, elem); grpc_closure_init(&calld->send_done, send_done, elem); diff --git a/src/core/lib/channel/http_server_filter.c b/src/core/lib/channel/http_server_filter.c index cb0fe230cf4bdbdd9837d6374a115e0251e89dfb..db39020dca53fa407d19953456b8fd9d40e4bd37 100644 --- a/src/core/lib/channel/http_server_filter.c +++ b/src/core/lib/channel/http_server_filter.c @@ -37,6 +37,7 @@ #include <grpc/support/log.h> #include <string.h> #include "src/core/lib/profiling/timers.h" +#include "src/core/lib/slice/percent_encoding.h" #include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/transport/static_metadata.h" @@ -82,14 +83,28 @@ typedef struct call_data { typedef struct channel_data { uint8_t unused; } channel_data; -typedef struct { - grpc_call_element *elem; - grpc_exec_ctx *exec_ctx; -} server_filter_args; +static grpc_mdelem *server_filter_outgoing_metadata(grpc_exec_ctx *exec_ctx, + void *user_data, + grpc_mdelem *md) { + if (md->key == GRPC_MDSTR_GRPC_MESSAGE) { + grpc_slice pct_encoded_msg = grpc_percent_encode_slice( + md->value->slice, grpc_compatible_percent_encoding_unreserved_bytes); + if (grpc_slice_is_equivalent(pct_encoded_msg, md->value->slice)) { + grpc_slice_unref_internal(exec_ctx, pct_encoded_msg); + return md; + } else { + return grpc_mdelem_from_metadata_strings( + exec_ctx, GRPC_MDSTR_GRPC_MESSAGE, + grpc_mdstr_from_slice(exec_ctx, pct_encoded_msg)); + } + } else { + return md; + } +} -static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) { - server_filter_args *a = user_data; - grpc_call_element *elem = a->elem; +static grpc_mdelem *server_filter(grpc_exec_ctx *exec_ctx, void *user_data, + grpc_mdelem *md) { + grpc_call_element *elem = user_data; call_data *calld = elem->call_data; /* Check if it is one of the headers we care about. */ @@ -140,7 +155,7 @@ static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) { /* swallow it and error everything out. */ /* TODO(klempner): We ought to generate more descriptive error messages on the wire here. */ - grpc_call_element_send_cancel(a->exec_ctx, elem); + grpc_call_element_send_cancel(exec_ctx, elem); return NULL; } else if (md->key == GRPC_MDSTR_PATH) { if (calld->seen_path) { @@ -156,7 +171,7 @@ static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) { /* translate host to :authority since :authority may be omitted */ grpc_mdelem *authority = grpc_mdelem_from_metadata_strings( - a->exec_ctx, GRPC_MDSTR_AUTHORITY, GRPC_MDSTR_REF(md->value)); + exec_ctx, GRPC_MDSTR_AUTHORITY, GRPC_MDSTR_REF(md->value)); calld->seen_authority = 1; return authority; } else if (md->key == GRPC_MDSTR_GRPC_PAYLOAD_BIN) { @@ -178,11 +193,8 @@ static void hs_on_recv(grpc_exec_ctx *exec_ctx, void *user_data, grpc_call_element *elem = user_data; call_data *calld = elem->call_data; if (err == GRPC_ERROR_NONE) { - server_filter_args a; - a.elem = elem; - a.exec_ctx = exec_ctx; grpc_metadata_batch_filter(exec_ctx, calld->recv_initial_metadata, - server_filter, &a); + server_filter, elem); /* Have we seen the required http2 transport headers? (:method, :scheme, content-type, with :path and :authority covered at the channel level right now) */ @@ -256,7 +268,7 @@ static void hs_recv_message_ready(grpc_exec_ctx *exec_ctx, void *user_data, } } -static void hs_mutate_op(grpc_call_element *elem, +static void hs_mutate_op(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, grpc_transport_stream_op *op) { /* grab pointers to our data from the call element */ call_data *calld = elem->call_data; @@ -292,6 +304,11 @@ static void hs_mutate_op(grpc_call_element *elem, op->on_complete = &calld->hs_on_complete; } } + + if (op->send_trailing_metadata) { + grpc_metadata_batch_filter(exec_ctx, op->send_trailing_metadata, + server_filter_outgoing_metadata, elem); + } } static void hs_start_transport_op(grpc_exec_ctx *exec_ctx, @@ -299,7 +316,7 @@ static void hs_start_transport_op(grpc_exec_ctx *exec_ctx, grpc_transport_stream_op *op) { GRPC_CALL_LOG_OP(GPR_INFO, elem, op); GPR_TIMER_BEGIN("hs_start_transport_op", 0); - hs_mutate_op(elem, op); + hs_mutate_op(exec_ctx, elem, op); grpc_call_next_op(exec_ctx, elem, op); GPR_TIMER_END("hs_start_transport_op", 0); } diff --git a/src/core/lib/iomgr/endpoint.c b/src/core/lib/iomgr/endpoint.c index a4b66682766c65b9270f7b00860a605d6d9c5ff4..2d300f456084e486947c03fe345ec791b420e0d0 100644 --- a/src/core/lib/iomgr/endpoint.c +++ b/src/core/lib/iomgr/endpoint.c @@ -66,6 +66,8 @@ char* grpc_endpoint_get_peer(grpc_endpoint* ep) { return ep->vtable->get_peer(ep); } +int grpc_endpoint_get_fd(grpc_endpoint* ep) { return ep->vtable->get_fd(ep); } + grpc_workqueue* grpc_endpoint_get_workqueue(grpc_endpoint* ep) { return ep->vtable->get_workqueue(ep); } diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h index bf211ca16aad6ec0e900306e1728855b9adf9010..1609b64f2b097bb03b36c2706b30d88b96ce3123 100644 --- a/src/core/lib/iomgr/endpoint.h +++ b/src/core/lib/iomgr/endpoint.h @@ -61,6 +61,7 @@ struct grpc_endpoint_vtable { void (*destroy)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); grpc_resource_user *(*get_resource_user)(grpc_endpoint *ep); char *(*get_peer)(grpc_endpoint *ep); + int (*get_fd)(grpc_endpoint *ep); }; /* When data is available on the connection, calls the callback with slices. @@ -73,6 +74,10 @@ void grpc_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, char *grpc_endpoint_get_peer(grpc_endpoint *ep); +/* Get the file descriptor used by \a ep. Return -1 if \a ep is not using an fd. + */ +int grpc_endpoint_get_fd(grpc_endpoint *ep); + /* Retrieve a reference to the workqueue associated with this endpoint */ grpc_workqueue *grpc_endpoint_get_workqueue(grpc_endpoint *ep); diff --git a/src/core/lib/iomgr/ev_epoll_linux.c b/src/core/lib/iomgr/ev_epoll_linux.c index db51ec49392a8b91a8f464f438a9c3c274e9c401..86674ca8c6fca7e629f5ea8954dc570e2febf0cf 100644 --- a/src/core/lib/iomgr/ev_epoll_linux.c +++ b/src/core/lib/iomgr/ev_epoll_linux.c @@ -31,7 +31,6 @@ * */ -#include <grpc/grpc_posix.h> #include "src/core/lib/iomgr/port.h" /* This polling engine is only relevant on linux kernels supporting epoll() */ @@ -163,7 +162,7 @@ static void fd_global_shutdown(void); #define PI_ADD_REF(p, r) pi_add_ref((p)) #define PI_UNREF(exec_ctx, p, r) pi_unref((exec_ctx), (p)) -#endif /* !defined(GPRC_PI_REF_COUNT_DEBUG) */ +#endif /* !defined(GRPC_PI_REF_COUNT_DEBUG) */ /* This is also used as grpc_workqueue (by directly casing it) */ typedef struct polling_island { diff --git a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c deleted file mode 100644 index bf51404203c017456123d37884713062d6c9bb4a..0000000000000000000000000000000000000000 --- a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +++ /dev/null @@ -1,2076 +0,0 @@ -/* - * - * Copyright 2015, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/* This file will be removed shortly: it's here to keep refactoring - * steps simple and auditable. - * It's the combination of the old files: - * - fd_posix.{h,c} - * - pollset_posix.{h,c} - * - pullset_multipoller_with_{poll,epoll}.{h,c} - * The new version will be split into: - * - ev_poll_posix.{h,c} - * - ev_epoll_posix.{h,c} - */ - -#include "src/core/lib/iomgr/port.h" - -#ifdef GRPC_POSIX_SOCKET - -#include "src/core/lib/iomgr/ev_poll_and_epoll_posix.h" - -#include <assert.h> -#include <errno.h> -#include <poll.h> -#include <string.h> -#include <sys/socket.h> -#include <unistd.h> - -#include <grpc/support/alloc.h> -#include <grpc/support/log.h> -#include <grpc/support/string_util.h> -#include <grpc/support/tls.h> -#include <grpc/support/useful.h> - -#include "src/core/lib/iomgr/iomgr_internal.h" -#include "src/core/lib/iomgr/wakeup_fd_posix.h" -#include "src/core/lib/profiling/timers.h" -#include "src/core/lib/support/block_annotate.h" - -/******************************************************************************* - * FD declarations - */ - -typedef struct grpc_fd_watcher { - struct grpc_fd_watcher *next; - struct grpc_fd_watcher *prev; - grpc_pollset *pollset; - grpc_pollset_worker *worker; - grpc_fd *fd; -} grpc_fd_watcher; - -struct grpc_fd { - int fd; - /* refst format: - bit0: 1=active/0=orphaned - bit1-n: refcount - meaning that mostly we ref by two to avoid altering the orphaned bit, - and just unref by 1 when we're ready to flag the object as orphaned */ - gpr_atm refst; - - gpr_mu mu; - int shutdown; - int closed; - int released; - - /* The watcher list. - - The following watcher related fields are protected by watcher_mu. - - An fd_watcher is an ephemeral object created when an fd wants to - begin polling, and destroyed after the poll. - - It denotes the fd's interest in whether to read poll or write poll - or both or neither on this fd. - - If a watcher is asked to poll for reads or writes, the read_watcher - or write_watcher fields are set respectively. A watcher may be asked - to poll for both, in which case both fields will be set. - - read_watcher and write_watcher may be NULL if no watcher has been - asked to poll for reads or writes. - - If an fd_watcher is not asked to poll for reads or writes, it's added - to a linked list of inactive watchers, rooted at inactive_watcher_root. - If at a later time there becomes need of a poller to poll, one of - the inactive pollers may be kicked out of their poll loops to take - that responsibility. */ - grpc_fd_watcher inactive_watcher_root; - grpc_fd_watcher *read_watcher; - grpc_fd_watcher *write_watcher; - - grpc_closure *read_closure; - grpc_closure *write_closure; - - struct grpc_fd *freelist_next; - - grpc_closure *on_done_closure; - - grpc_iomgr_object iomgr_object; - - /* The pollset that last noticed and notified that the fd is readable */ - grpc_pollset *read_notifier_pollset; -}; - -/* Begin polling on an fd. - Registers that the given pollset is interested in this fd - so that if read - or writability interest changes, the pollset can be kicked to pick up that - new interest. - Return value is: - (fd_needs_read? read_mask : 0) | (fd_needs_write? write_mask : 0) - i.e. a combination of read_mask and write_mask determined by the fd's current - interest in said events. - Polling strategies that do not need to alter their behavior depending on the - fd's current interest (such as epoll) do not need to call this function. - MUST NOT be called with a pollset lock taken */ -static uint32_t fd_begin_poll(grpc_fd *fd, grpc_pollset *pollset, - grpc_pollset_worker *worker, uint32_t read_mask, - uint32_t write_mask, grpc_fd_watcher *rec); -/* Complete polling previously started with fd_begin_poll - MUST NOT be called with a pollset lock taken - if got_read or got_write are 1, also does the become_{readable,writable} as - appropriate. */ -static void fd_end_poll(grpc_exec_ctx *exec_ctx, grpc_fd_watcher *rec, - int got_read, int got_write, - grpc_pollset *read_notifier_pollset); - -/* Return 1 if this fd is orphaned, 0 otherwise */ -static bool fd_is_orphaned(grpc_fd *fd); - -/* Reference counting for fds */ -/*#define GRPC_FD_REF_COUNT_DEBUG*/ -#ifdef GRPC_FD_REF_COUNT_DEBUG -static void fd_ref(grpc_fd *fd, const char *reason, const char *file, int line); -static void fd_unref(grpc_fd *fd, const char *reason, const char *file, - int line); -#define GRPC_FD_REF(fd, reason) fd_ref(fd, reason, __FILE__, __LINE__) -#define GRPC_FD_UNREF(fd, reason) fd_unref(fd, reason, __FILE__, __LINE__) -#else -static void fd_ref(grpc_fd *fd); -static void fd_unref(grpc_fd *fd); -#define GRPC_FD_REF(fd, reason) fd_ref(fd) -#define GRPC_FD_UNREF(fd, reason) fd_unref(fd) -#endif - -static void fd_global_init(void); -static void fd_global_shutdown(void); - -#define CLOSURE_NOT_READY ((grpc_closure *)0) -#define CLOSURE_READY ((grpc_closure *)1) - -/******************************************************************************* - * pollset declarations - */ - -typedef struct grpc_pollset_vtable grpc_pollset_vtable; - -typedef struct grpc_cached_wakeup_fd { - grpc_wakeup_fd fd; - struct grpc_cached_wakeup_fd *next; -} grpc_cached_wakeup_fd; - -struct grpc_pollset_worker { - grpc_cached_wakeup_fd *wakeup_fd; - int reevaluate_polling_on_wakeup; - int kicked_specifically; - struct grpc_pollset_worker *next; - struct grpc_pollset_worker *prev; -}; - -struct grpc_pollset { - /* pollsets under posix can mutate representation as fds are added and - removed. - For example, we may choose a poll() based implementation on linux for - few fds, and an epoll() based implementation for many fds */ - const grpc_pollset_vtable *vtable; - gpr_mu mu; - grpc_pollset_worker root_worker; - int in_flight_cbs; - int shutting_down; - int called_shutdown; - int kicked_without_pollers; - grpc_closure *shutdown_done; - grpc_closure_list idle_jobs; - union { - int fd; - void *ptr; - } data; - /* Local cache of eventfds for workers */ - grpc_cached_wakeup_fd *local_wakeup_cache; -}; - -struct grpc_pollset_vtable { - void (*add_fd)(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - struct grpc_fd *fd, int and_unlock_pollset); - grpc_error *(*maybe_work_and_unlock)(grpc_exec_ctx *exec_ctx, - grpc_pollset *pollset, - grpc_pollset_worker *worker, - gpr_timespec deadline, gpr_timespec now); - void (*finish_shutdown)(grpc_pollset *pollset); - void (*destroy)(grpc_pollset *pollset); -}; - -/* Add an fd to a pollset */ -static void pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - struct grpc_fd *fd); - -static void pollset_set_add_fd(grpc_exec_ctx *exec_ctx, - grpc_pollset_set *pollset_set, grpc_fd *fd); - -/* Convert a timespec to milliseconds: - - very small or negative poll times are clamped to zero to do a - non-blocking poll (which becomes spin polling) - - other small values are rounded up to one millisecond - - longer than a millisecond polls are rounded up to the next nearest - millisecond to avoid spinning - - infinite timeouts are converted to -1 */ -static int poll_deadline_to_millis_timeout(gpr_timespec deadline, - gpr_timespec now); - -/* Allow kick to wakeup the currently polling worker */ -#define GRPC_POLLSET_CAN_KICK_SELF 1 -/* Force the wakee to repoll when awoken */ -#define GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP 2 -/* As per pollset_kick, with an extended set of flags (defined above) - -- mostly for fd_posix's use. */ -static grpc_error *pollset_kick_ext(grpc_pollset *p, - grpc_pollset_worker *specific_worker, - uint32_t flags) GRPC_MUST_USE_RESULT; - -/* turn a pollset into a multipoller: platform specific */ -typedef void (*platform_become_multipoller_type)(grpc_exec_ctx *exec_ctx, - grpc_pollset *pollset, - struct grpc_fd **fds, - size_t fd_count); -static platform_become_multipoller_type platform_become_multipoller; - -/* Return 1 if the pollset has active threads in pollset_work (pollset must - * be locked) */ -static int pollset_has_workers(grpc_pollset *pollset); - -static void remove_fd_from_all_epoll_sets(int fd); - -/******************************************************************************* - * pollset_set definitions - */ - -struct grpc_pollset_set { - gpr_mu mu; - - size_t pollset_count; - size_t pollset_capacity; - grpc_pollset **pollsets; - - size_t pollset_set_count; - size_t pollset_set_capacity; - struct grpc_pollset_set **pollset_sets; - - size_t fd_count; - size_t fd_capacity; - grpc_fd **fds; -}; - -/******************************************************************************* - * fd_posix.c - */ - -/* We need to keep a freelist not because of any concerns of malloc performance - * but instead so that implementations with multiple threads in (for example) - * epoll_wait deal with the race between pollset removal and incoming poll - * notifications. - * - * The problem is that the poller ultimately holds a reference to this - * object, so it is very difficult to know when is safe to free it, at least - * without some expensive synchronization. - * - * If we keep the object freelisted, in the worst case losing this race just - * becomes a spurious read notification on a reused fd. - */ -/* TODO(klempner): We could use some form of polling generation count to know - * when these are safe to free. */ -/* TODO(klempner): Consider disabling freelisting if we don't have multiple - * threads in poll on the same fd */ -/* TODO(klempner): Batch these allocations to reduce fragmentation */ -static grpc_fd *fd_freelist = NULL; -static gpr_mu fd_freelist_mu; - -static void freelist_fd(grpc_fd *fd) { - gpr_mu_lock(&fd_freelist_mu); - fd->freelist_next = fd_freelist; - fd_freelist = fd; - grpc_iomgr_unregister_object(&fd->iomgr_object); - gpr_mu_unlock(&fd_freelist_mu); -} - -static grpc_fd *alloc_fd(int fd) { - grpc_fd *r = NULL; - gpr_mu_lock(&fd_freelist_mu); - if (fd_freelist != NULL) { - r = fd_freelist; - fd_freelist = fd_freelist->freelist_next; - } - gpr_mu_unlock(&fd_freelist_mu); - if (r == NULL) { - r = gpr_malloc(sizeof(grpc_fd)); - gpr_mu_init(&r->mu); - } - - gpr_mu_lock(&r->mu); - gpr_atm_rel_store(&r->refst, 1); - r->shutdown = 0; - r->read_closure = CLOSURE_NOT_READY; - r->write_closure = CLOSURE_NOT_READY; - r->fd = fd; - r->inactive_watcher_root.next = r->inactive_watcher_root.prev = - &r->inactive_watcher_root; - r->freelist_next = NULL; - r->read_watcher = r->write_watcher = NULL; - r->on_done_closure = NULL; - r->closed = 0; - r->released = 0; - r->read_notifier_pollset = NULL; - gpr_mu_unlock(&r->mu); - return r; -} - -static void destroy(grpc_fd *fd) { - gpr_mu_destroy(&fd->mu); - gpr_free(fd); -} - -#ifdef GRPC_FD_REF_COUNT_DEBUG -#define REF_BY(fd, n, reason) ref_by(fd, n, reason, __FILE__, __LINE__) -#define UNREF_BY(fd, n, reason) unref_by(fd, n, reason, __FILE__, __LINE__) -static void ref_by(grpc_fd *fd, int n, const char *reason, const char *file, - int line) { - gpr_log(GPR_DEBUG, "FD %d %p ref %d %d -> %d [%s; %s:%d]", fd->fd, fd, n, - gpr_atm_no_barrier_load(&fd->refst), - gpr_atm_no_barrier_load(&fd->refst) + n, reason, file, line); -#else -#define REF_BY(fd, n, reason) ref_by(fd, n) -#define UNREF_BY(fd, n, reason) unref_by(fd, n) -static void ref_by(grpc_fd *fd, int n) { -#endif - GPR_ASSERT(gpr_atm_no_barrier_fetch_add(&fd->refst, n) > 0); -} - -#ifdef GRPC_FD_REF_COUNT_DEBUG -static void unref_by(grpc_fd *fd, int n, const char *reason, const char *file, - int line) { - gpr_atm old; - gpr_log(GPR_DEBUG, "FD %d %p unref %d %d -> %d [%s; %s:%d]", fd->fd, fd, n, - gpr_atm_no_barrier_load(&fd->refst), - gpr_atm_no_barrier_load(&fd->refst) - n, reason, file, line); -#else -static void unref_by(grpc_fd *fd, int n) { - gpr_atm old; -#endif - old = gpr_atm_full_fetch_add(&fd->refst, -n); - if (old == n) { - freelist_fd(fd); - } else { - GPR_ASSERT(old > n); - } -} - -static void fd_global_init(void) { gpr_mu_init(&fd_freelist_mu); } - -static void fd_global_shutdown(void) { - gpr_mu_lock(&fd_freelist_mu); - gpr_mu_unlock(&fd_freelist_mu); - while (fd_freelist != NULL) { - grpc_fd *fd = fd_freelist; - fd_freelist = fd_freelist->freelist_next; - destroy(fd); - } - gpr_mu_destroy(&fd_freelist_mu); -} - -static grpc_fd *fd_create(int fd, const char *name) { - grpc_fd *r = alloc_fd(fd); - char *name2; - gpr_asprintf(&name2, "%s fd=%d", name, fd); - grpc_iomgr_register_object(&r->iomgr_object, name2); - gpr_free(name2); -#ifdef GRPC_FD_REF_COUNT_DEBUG - gpr_log(GPR_DEBUG, "FD %d %p create %s", fd, r, name); -#endif - return r; -} - -static bool fd_is_orphaned(grpc_fd *fd) { - return (gpr_atm_acq_load(&fd->refst) & 1) == 0; -} - -static grpc_error *pollset_kick_locked(grpc_fd_watcher *watcher) { - gpr_mu_lock(&watcher->pollset->mu); - GPR_ASSERT(watcher->worker); - grpc_error *err = pollset_kick_ext(watcher->pollset, watcher->worker, - GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP); - gpr_mu_unlock(&watcher->pollset->mu); - return err; -} - -static void maybe_wake_one_watcher_locked(grpc_fd *fd) { - if (fd->inactive_watcher_root.next != &fd->inactive_watcher_root) { - pollset_kick_locked(fd->inactive_watcher_root.next); - } else if (fd->read_watcher) { - pollset_kick_locked(fd->read_watcher); - } else if (fd->write_watcher) { - pollset_kick_locked(fd->write_watcher); - } -} - -static void wake_all_watchers_locked(grpc_fd *fd) { - grpc_fd_watcher *watcher; - for (watcher = fd->inactive_watcher_root.next; - watcher != &fd->inactive_watcher_root; watcher = watcher->next) { - pollset_kick_locked(watcher); - } - if (fd->read_watcher) { - pollset_kick_locked(fd->read_watcher); - } - if (fd->write_watcher && fd->write_watcher != fd->read_watcher) { - pollset_kick_locked(fd->write_watcher); - } -} - -static int has_watchers(grpc_fd *fd) { - return fd->read_watcher != NULL || fd->write_watcher != NULL || - fd->inactive_watcher_root.next != &fd->inactive_watcher_root; -} - -static void close_fd_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd) { - fd->closed = 1; - if (!fd->released) { - close(fd->fd); - } else { - remove_fd_from_all_epoll_sets(fd->fd); - } - grpc_exec_ctx_sched(exec_ctx, fd->on_done_closure, GRPC_ERROR_NONE, NULL); -} - -static int fd_wrapped_fd(grpc_fd *fd) { - if (fd->released || fd->closed) { - return -1; - } else { - return fd->fd; - } -} - -static void fd_orphan(grpc_exec_ctx *exec_ctx, grpc_fd *fd, - grpc_closure *on_done, int *release_fd, - const char *reason) { - fd->on_done_closure = on_done; - fd->released = release_fd != NULL; - if (!fd->released) { - shutdown(fd->fd, SHUT_RDWR); - } else { - *release_fd = fd->fd; - } - gpr_mu_lock(&fd->mu); - REF_BY(fd, 1, reason); /* remove active status, but keep referenced */ - if (!has_watchers(fd)) { - close_fd_locked(exec_ctx, fd); - } else { - wake_all_watchers_locked(fd); - } - gpr_mu_unlock(&fd->mu); - UNREF_BY(fd, 2, reason); /* drop the reference */ -} - -/* increment refcount by two to avoid changing the orphan bit */ -#ifdef GRPC_FD_REF_COUNT_DEBUG -static void fd_ref(grpc_fd *fd, const char *reason, const char *file, - int line) { - ref_by(fd, 2, reason, file, line); -} - -static void fd_unref(grpc_fd *fd, const char *reason, const char *file, - int line) { - unref_by(fd, 2, reason, file, line); -} -#else -static void fd_ref(grpc_fd *fd) { ref_by(fd, 2); } - -static void fd_unref(grpc_fd *fd) { unref_by(fd, 2); } -#endif - -static grpc_error *fd_shutdown_error(bool shutdown) { - if (!shutdown) { - return GRPC_ERROR_NONE; - } else { - return GRPC_ERROR_CREATE("FD shutdown"); - } -} - -static void notify_on_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd, - grpc_closure **st, grpc_closure *closure) { - if (fd->shutdown) { - grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_CREATE("FD shutdown"), - NULL); - } else if (*st == CLOSURE_NOT_READY) { - /* not ready ==> switch to a waiting state by setting the closure */ - *st = closure; - } else if (*st == CLOSURE_READY) { - /* already ready ==> queue the closure to run immediately */ - *st = CLOSURE_NOT_READY; - grpc_exec_ctx_sched(exec_ctx, closure, fd_shutdown_error(fd->shutdown), - NULL); - maybe_wake_one_watcher_locked(fd); - } else { - /* upcallptr was set to a different closure. This is an error! */ - gpr_log(GPR_ERROR, - "User called a notify_on function with a previous callback still " - "pending"); - abort(); - } -} - -/* returns 1 if state becomes not ready */ -static int set_ready_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd, - grpc_closure **st) { - if (*st == CLOSURE_READY) { - /* duplicate ready ==> ignore */ - return 0; - } else if (*st == CLOSURE_NOT_READY) { - /* not ready, and not waiting ==> flag ready */ - *st = CLOSURE_READY; - return 0; - } else { - /* waiting ==> queue closure */ - grpc_exec_ctx_sched(exec_ctx, *st, fd_shutdown_error(fd->shutdown), NULL); - *st = CLOSURE_NOT_READY; - return 1; - } -} - -static void set_read_notifier_pollset_locked( - grpc_exec_ctx *exec_ctx, grpc_fd *fd, grpc_pollset *read_notifier_pollset) { - fd->read_notifier_pollset = read_notifier_pollset; -} - -static void fd_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd) { - gpr_mu_lock(&fd->mu); - /* only shutdown once */ - if (!fd->shutdown) { - fd->shutdown = 1; - /* signal read/write closed to OS so that future operations fail */ - shutdown(fd->fd, SHUT_RDWR); - set_ready_locked(exec_ctx, fd, &fd->read_closure); - set_ready_locked(exec_ctx, fd, &fd->write_closure); - } - gpr_mu_unlock(&fd->mu); -} - -static bool fd_is_shutdown(grpc_fd *fd) { - gpr_mu_lock(&fd->mu); - bool r = fd->shutdown; - gpr_mu_unlock(&fd->mu); - return r; -} - -static void fd_notify_on_read(grpc_exec_ctx *exec_ctx, grpc_fd *fd, - grpc_closure *closure) { - gpr_mu_lock(&fd->mu); - notify_on_locked(exec_ctx, fd, &fd->read_closure, closure); - gpr_mu_unlock(&fd->mu); -} - -static void fd_notify_on_write(grpc_exec_ctx *exec_ctx, grpc_fd *fd, - grpc_closure *closure) { - gpr_mu_lock(&fd->mu); - notify_on_locked(exec_ctx, fd, &fd->write_closure, closure); - gpr_mu_unlock(&fd->mu); -} - -/* Return the read-notifier pollset */ -static grpc_pollset *fd_get_read_notifier_pollset(grpc_exec_ctx *exec_ctx, - grpc_fd *fd) { - grpc_pollset *notifier = NULL; - - gpr_mu_lock(&fd->mu); - notifier = fd->read_notifier_pollset; - gpr_mu_unlock(&fd->mu); - - return notifier; -} - -static uint32_t fd_begin_poll(grpc_fd *fd, grpc_pollset *pollset, - grpc_pollset_worker *worker, uint32_t read_mask, - uint32_t write_mask, grpc_fd_watcher *watcher) { - uint32_t mask = 0; - grpc_closure *cur; - int requested; - /* keep track of pollers that have requested our events, in case they change - */ - GRPC_FD_REF(fd, "poll"); - - gpr_mu_lock(&fd->mu); - - /* if we are shutdown, then don't add to the watcher set */ - if (fd->shutdown) { - watcher->fd = NULL; - watcher->pollset = NULL; - watcher->worker = NULL; - gpr_mu_unlock(&fd->mu); - GRPC_FD_UNREF(fd, "poll"); - return 0; - } - - /* if there is nobody polling for read, but we need to, then start doing so */ - cur = fd->read_closure; - requested = cur != CLOSURE_READY; - if (read_mask && fd->read_watcher == NULL && requested) { - fd->read_watcher = watcher; - mask |= read_mask; - } - /* if there is nobody polling for write, but we need to, then start doing so - */ - cur = fd->write_closure; - requested = cur != CLOSURE_READY; - if (write_mask && fd->write_watcher == NULL && requested) { - fd->write_watcher = watcher; - mask |= write_mask; - } - /* if not polling, remember this watcher in case we need someone to later */ - if (mask == 0 && worker != NULL) { - watcher->next = &fd->inactive_watcher_root; - watcher->prev = watcher->next->prev; - watcher->next->prev = watcher->prev->next = watcher; - } - watcher->pollset = pollset; - watcher->worker = worker; - watcher->fd = fd; - gpr_mu_unlock(&fd->mu); - - return mask; -} - -static void fd_end_poll(grpc_exec_ctx *exec_ctx, grpc_fd_watcher *watcher, - int got_read, int got_write, - grpc_pollset *read_notifier_pollset) { - int was_polling = 0; - int kick = 0; - grpc_fd *fd = watcher->fd; - - if (fd == NULL) { - return; - } - - gpr_mu_lock(&fd->mu); - - if (watcher == fd->read_watcher) { - /* remove read watcher, kick if we still need a read */ - was_polling = 1; - if (!got_read) { - kick = 1; - } - fd->read_watcher = NULL; - } - if (watcher == fd->write_watcher) { - /* remove write watcher, kick if we still need a write */ - was_polling = 1; - if (!got_write) { - kick = 1; - } - fd->write_watcher = NULL; - } - if (!was_polling && watcher->worker != NULL) { - /* remove from inactive list */ - watcher->next->prev = watcher->prev; - watcher->prev->next = watcher->next; - } - if (got_read) { - if (set_ready_locked(exec_ctx, fd, &fd->read_closure)) { - kick = 1; - } - - if (read_notifier_pollset != NULL) { - set_read_notifier_pollset_locked(exec_ctx, fd, read_notifier_pollset); - } - } - if (got_write) { - if (set_ready_locked(exec_ctx, fd, &fd->write_closure)) { - kick = 1; - } - } - if (kick) { - maybe_wake_one_watcher_locked(fd); - } - if (fd_is_orphaned(fd) && !has_watchers(fd) && !fd->closed) { - close_fd_locked(exec_ctx, fd); - } - gpr_mu_unlock(&fd->mu); - - GRPC_FD_UNREF(fd, "poll"); -} - -static grpc_workqueue *fd_get_workqueue(grpc_fd *fd) { return NULL; } - -/******************************************************************************* - * pollset_posix.c - */ - -GPR_TLS_DECL(g_current_thread_poller); -GPR_TLS_DECL(g_current_thread_worker); - -/** The alarm system needs to be able to wakeup 'some poller' sometimes - * (specifically when a new alarm needs to be triggered earlier than the next - * alarm 'epoch'). - * This wakeup_fd gives us something to alert on when such a case occurs. */ -grpc_wakeup_fd grpc_global_wakeup_fd; - -static void remove_worker(grpc_pollset *p, grpc_pollset_worker *worker) { - worker->prev->next = worker->next; - worker->next->prev = worker->prev; -} - -static int pollset_has_workers(grpc_pollset *p) { - return p->root_worker.next != &p->root_worker; -} - -static grpc_pollset_worker *pop_front_worker(grpc_pollset *p) { - if (pollset_has_workers(p)) { - grpc_pollset_worker *w = p->root_worker.next; - remove_worker(p, w); - return w; - } else { - return NULL; - } -} - -static void push_back_worker(grpc_pollset *p, grpc_pollset_worker *worker) { - worker->next = &p->root_worker; - worker->prev = worker->next->prev; - worker->prev->next = worker->next->prev = worker; -} - -static void push_front_worker(grpc_pollset *p, grpc_pollset_worker *worker) { - worker->prev = &p->root_worker; - worker->next = worker->prev->next; - worker->prev->next = worker->next->prev = worker; -} - -static void kick_append_error(grpc_error **composite, grpc_error *error) { - if (error == GRPC_ERROR_NONE) return; - if (*composite == GRPC_ERROR_NONE) { - *composite = GRPC_ERROR_CREATE("Kick Failure"); - } - *composite = grpc_error_add_child(*composite, error); -} - -static grpc_error *pollset_kick_ext(grpc_pollset *p, - grpc_pollset_worker *specific_worker, - uint32_t flags) { - GPR_TIMER_BEGIN("pollset_kick_ext", 0); - grpc_error *error = GRPC_ERROR_NONE; - - /* pollset->mu already held */ - if (specific_worker != NULL) { - if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) { - GPR_TIMER_BEGIN("pollset_kick_ext.broadcast", 0); - GPR_ASSERT((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) == 0); - for (specific_worker = p->root_worker.next; - specific_worker != &p->root_worker; - specific_worker = specific_worker->next) { - kick_append_error( - &error, grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd)); - } - p->kicked_without_pollers = true; - GPR_TIMER_END("pollset_kick_ext.broadcast", 0); - } else if (gpr_tls_get(&g_current_thread_worker) != - (intptr_t)specific_worker) { - GPR_TIMER_MARK("different_thread_worker", 0); - if ((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) != 0) { - specific_worker->reevaluate_polling_on_wakeup = true; - } - specific_worker->kicked_specifically = true; - kick_append_error(&error, - grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd)); - } else if ((flags & GRPC_POLLSET_CAN_KICK_SELF) != 0) { - GPR_TIMER_MARK("kick_yoself", 0); - if ((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) != 0) { - specific_worker->reevaluate_polling_on_wakeup = true; - } - specific_worker->kicked_specifically = true; - kick_append_error(&error, - grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd)); - } - } else if (gpr_tls_get(&g_current_thread_poller) != (intptr_t)p) { - GPR_ASSERT((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) == 0); - GPR_TIMER_MARK("kick_anonymous", 0); - specific_worker = pop_front_worker(p); - if (specific_worker != NULL) { - if (gpr_tls_get(&g_current_thread_worker) == (intptr_t)specific_worker) { - GPR_TIMER_MARK("kick_anonymous_not_self", 0); - push_back_worker(p, specific_worker); - specific_worker = pop_front_worker(p); - if ((flags & GRPC_POLLSET_CAN_KICK_SELF) == 0 && - gpr_tls_get(&g_current_thread_worker) == - (intptr_t)specific_worker) { - push_back_worker(p, specific_worker); - specific_worker = NULL; - } - } - if (specific_worker != NULL) { - GPR_TIMER_MARK("finally_kick", 0); - push_back_worker(p, specific_worker); - kick_append_error( - &error, grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd)); - } - } else { - GPR_TIMER_MARK("kicked_no_pollers", 0); - p->kicked_without_pollers = true; - } - } - - GPR_TIMER_END("pollset_kick_ext", 0); - return error; -} - -static grpc_error *pollset_kick(grpc_pollset *p, - grpc_pollset_worker *specific_worker) { - return pollset_kick_ext(p, specific_worker, 0); -} - -/* global state management */ - -static grpc_error *pollset_global_init(void) { - gpr_tls_init(&g_current_thread_poller); - gpr_tls_init(&g_current_thread_worker); - return grpc_wakeup_fd_init(&grpc_global_wakeup_fd); -} - -static void pollset_global_shutdown(void) { - grpc_wakeup_fd_destroy(&grpc_global_wakeup_fd); - gpr_tls_destroy(&g_current_thread_poller); - gpr_tls_destroy(&g_current_thread_worker); -} - -static grpc_error *kick_poller(void) { - return grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd); -} - -/* main interface */ - -static void become_basic_pollset(grpc_pollset *pollset, grpc_fd *fd_or_null); - -static void pollset_init(grpc_pollset *pollset, gpr_mu **mu) { - gpr_mu_init(&pollset->mu); - *mu = &pollset->mu; - pollset->root_worker.next = pollset->root_worker.prev = &pollset->root_worker; - pollset->in_flight_cbs = 0; - pollset->shutting_down = 0; - pollset->called_shutdown = 0; - pollset->kicked_without_pollers = 0; - pollset->idle_jobs.head = pollset->idle_jobs.tail = NULL; - pollset->local_wakeup_cache = NULL; - pollset->kicked_without_pollers = 0; - become_basic_pollset(pollset, NULL); -} - -static void pollset_destroy(grpc_pollset *pollset) { - GPR_ASSERT(pollset->in_flight_cbs == 0); - GPR_ASSERT(!pollset_has_workers(pollset)); - GPR_ASSERT(pollset->idle_jobs.head == pollset->idle_jobs.tail); - pollset->vtable->destroy(pollset); - while (pollset->local_wakeup_cache) { - grpc_cached_wakeup_fd *next = pollset->local_wakeup_cache->next; - grpc_wakeup_fd_destroy(&pollset->local_wakeup_cache->fd); - gpr_free(pollset->local_wakeup_cache); - pollset->local_wakeup_cache = next; - } - gpr_mu_destroy(&pollset->mu); -} - -static void pollset_reset(grpc_pollset *pollset) { - GPR_ASSERT(pollset->shutting_down); - GPR_ASSERT(pollset->in_flight_cbs == 0); - GPR_ASSERT(!pollset_has_workers(pollset)); - GPR_ASSERT(pollset->idle_jobs.head == pollset->idle_jobs.tail); - pollset->vtable->destroy(pollset); - pollset->shutting_down = 0; - pollset->called_shutdown = 0; - pollset->kicked_without_pollers = 0; - become_basic_pollset(pollset, NULL); -} - -static void pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_fd *fd) { - gpr_mu_lock(&pollset->mu); - pollset->vtable->add_fd(exec_ctx, pollset, fd, 1); -/* the following (enabled only in debug) will reacquire and then release - our lock - meaning that if the unlocking flag passed to add_fd above is - not respected, the code will deadlock (in a way that we have a chance of - debugging) */ -#ifndef NDEBUG - gpr_mu_lock(&pollset->mu); - gpr_mu_unlock(&pollset->mu); -#endif -} - -static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset) { - GPR_ASSERT(grpc_closure_list_empty(pollset->idle_jobs)); - pollset->vtable->finish_shutdown(pollset); - grpc_exec_ctx_sched(exec_ctx, pollset->shutdown_done, GRPC_ERROR_NONE, NULL); -} - -static void work_combine_error(grpc_error **composite, grpc_error *error) { - if (error == GRPC_ERROR_NONE) return; - if (*composite == GRPC_ERROR_NONE) { - *composite = GRPC_ERROR_CREATE("pollset_work"); - } - *composite = grpc_error_add_child(*composite, error); -} - -static grpc_error *pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_pollset_worker **worker_hdl, - gpr_timespec now, gpr_timespec deadline) { - grpc_pollset_worker worker; - *worker_hdl = &worker; - grpc_error *error = GRPC_ERROR_NONE; - - /* pollset->mu already held */ - int added_worker = 0; - int locked = 1; - int queued_work = 0; - int keep_polling = 0; - GPR_TIMER_BEGIN("pollset_work", 0); - /* this must happen before we (potentially) drop pollset->mu */ - worker.next = worker.prev = NULL; - worker.reevaluate_polling_on_wakeup = 0; - if (pollset->local_wakeup_cache != NULL) { - worker.wakeup_fd = pollset->local_wakeup_cache; - pollset->local_wakeup_cache = worker.wakeup_fd->next; - } else { - worker.wakeup_fd = gpr_malloc(sizeof(*worker.wakeup_fd)); - error = grpc_wakeup_fd_init(&worker.wakeup_fd->fd); - if (error != GRPC_ERROR_NONE) { - return error; - } - } - worker.kicked_specifically = 0; - /* If there's work waiting for the pollset to be idle, and the - pollset is idle, then do that work */ - if (!pollset_has_workers(pollset) && - !grpc_closure_list_empty(pollset->idle_jobs)) { - GPR_TIMER_MARK("pollset_work.idle_jobs", 0); - grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL); - goto done; - } - /* If we're shutting down then we don't execute any extended work */ - if (pollset->shutting_down) { - GPR_TIMER_MARK("pollset_work.shutting_down", 0); - goto done; - } - /* Give do_promote priority so we don't starve it out */ - if (pollset->in_flight_cbs) { - GPR_TIMER_MARK("pollset_work.in_flight_cbs", 0); - gpr_mu_unlock(&pollset->mu); - locked = 0; - goto done; - } - /* Start polling, and keep doing so while we're being asked to - re-evaluate our pollers (this allows poll() based pollers to - ensure they don't miss wakeups) */ - keep_polling = 1; - while (keep_polling) { - keep_polling = 0; - if (!pollset->kicked_without_pollers) { - if (!added_worker) { - push_front_worker(pollset, &worker); - added_worker = 1; - gpr_tls_set(&g_current_thread_worker, (intptr_t)&worker); - } - gpr_tls_set(&g_current_thread_poller, (intptr_t)pollset); - GPR_TIMER_BEGIN("maybe_work_and_unlock", 0); - work_combine_error(&error, - pollset->vtable->maybe_work_and_unlock( - exec_ctx, pollset, &worker, deadline, now)); - GPR_TIMER_END("maybe_work_and_unlock", 0); - locked = 0; - gpr_tls_set(&g_current_thread_poller, 0); - } else { - GPR_TIMER_MARK("pollset_work.kicked_without_pollers", 0); - pollset->kicked_without_pollers = 0; - } - /* Finished execution - start cleaning up. - Note that we may arrive here from outside the enclosing while() loop. - In that case we won't loop though as we haven't added worker to the - worker list, which means nobody could ask us to re-evaluate polling). */ - done: - if (!locked) { - queued_work |= grpc_exec_ctx_flush(exec_ctx); - gpr_mu_lock(&pollset->mu); - locked = 1; - } - /* If we're forced to re-evaluate polling (via pollset_kick with - GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) then we land here and force - a loop */ - if (worker.reevaluate_polling_on_wakeup) { - worker.reevaluate_polling_on_wakeup = 0; - pollset->kicked_without_pollers = 0; - if (queued_work || worker.kicked_specifically) { - /* If there's queued work on the list, then set the deadline to be - immediate so we get back out of the polling loop quickly */ - deadline = gpr_inf_past(GPR_CLOCK_MONOTONIC); - } - keep_polling = 1; - } - } - if (added_worker) { - remove_worker(pollset, &worker); - gpr_tls_set(&g_current_thread_worker, 0); - } - /* release wakeup fd to the local pool */ - worker.wakeup_fd->next = pollset->local_wakeup_cache; - pollset->local_wakeup_cache = worker.wakeup_fd; - /* check shutdown conditions */ - if (pollset->shutting_down) { - if (pollset_has_workers(pollset)) { - pollset_kick(pollset, NULL); - } else if (!pollset->called_shutdown && pollset->in_flight_cbs == 0) { - pollset->called_shutdown = 1; - gpr_mu_unlock(&pollset->mu); - finish_shutdown(exec_ctx, pollset); - grpc_exec_ctx_flush(exec_ctx); - /* Continuing to access pollset here is safe -- it is the caller's - * responsibility to not destroy when it has outstanding calls to - * pollset_work. - * TODO(dklempner): Can we refactor the shutdown logic to avoid this? */ - gpr_mu_lock(&pollset->mu); - } else if (!grpc_closure_list_empty(pollset->idle_jobs)) { - grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL); - gpr_mu_unlock(&pollset->mu); - grpc_exec_ctx_flush(exec_ctx); - gpr_mu_lock(&pollset->mu); - } - } - *worker_hdl = NULL; - GPR_TIMER_END("pollset_work", 0); - return error; -} - -static void pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_closure *closure) { - GPR_ASSERT(!pollset->shutting_down); - pollset->shutting_down = 1; - pollset->shutdown_done = closure; - pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST); - if (!pollset_has_workers(pollset)) { - grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL); - } - if (!pollset->called_shutdown && pollset->in_flight_cbs == 0 && - !pollset_has_workers(pollset)) { - pollset->called_shutdown = 1; - finish_shutdown(exec_ctx, pollset); - } -} - -static int poll_deadline_to_millis_timeout(gpr_timespec deadline, - gpr_timespec now) { - gpr_timespec timeout; - static const int64_t max_spin_polling_us = 10; - if (gpr_time_cmp(deadline, gpr_inf_future(deadline.clock_type)) == 0) { - return -1; - } - if (gpr_time_cmp(deadline, gpr_time_add(now, gpr_time_from_micros( - max_spin_polling_us, - GPR_TIMESPAN))) <= 0) { - return 0; - } - timeout = gpr_time_sub(deadline, now); - return gpr_time_to_millis(gpr_time_add( - timeout, gpr_time_from_nanos(GPR_NS_PER_MS - 1, GPR_TIMESPAN))); -} - -/* - * basic_pollset - a vtable that provides polling for zero or one file - * descriptor via poll() - */ - -typedef struct grpc_unary_promote_args { - const grpc_pollset_vtable *original_vtable; - grpc_pollset *pollset; - grpc_fd *fd; - grpc_closure promotion_closure; -} grpc_unary_promote_args; - -static void basic_do_promote(grpc_exec_ctx *exec_ctx, void *args, - grpc_error *error) { - grpc_unary_promote_args *up_args = args; - const grpc_pollset_vtable *original_vtable = up_args->original_vtable; - grpc_pollset *pollset = up_args->pollset; - grpc_fd *fd = up_args->fd; - - /* - * This is quite tricky. There are a number of cases to keep in mind here: - * 1. fd may have been orphaned - * 2. The pollset may no longer be a unary poller (and we can't let case #1 - * leak to other pollset types!) - * 3. pollset's fd (which may have changed) may have been orphaned - * 4. The pollset may be shutting down. - */ - - gpr_mu_lock(&pollset->mu); - /* First we need to ensure that nobody is polling concurrently */ - GPR_ASSERT(!pollset_has_workers(pollset)); - - gpr_free(up_args); - /* At this point the pollset may no longer be a unary poller. In that case - * we should just call the right add function and be done. */ - /* TODO(klempner): If we're not careful this could cause infinite recursion. - * That's not a problem for now because empty_pollset has a trivial poller - * and we don't have any mechanism to unbecome multipoller. */ - pollset->in_flight_cbs--; - if (pollset->shutting_down) { - /* We don't care about this pollset anymore. */ - if (pollset->in_flight_cbs == 0 && !pollset->called_shutdown) { - pollset->called_shutdown = 1; - finish_shutdown(exec_ctx, pollset); - } - } else if (fd_is_orphaned(fd)) { - /* Don't try to add it to anything, we'll drop our ref on it below */ - } else if (pollset->vtable != original_vtable) { - pollset->vtable->add_fd(exec_ctx, pollset, fd, 0); - } else if (fd != pollset->data.ptr) { - grpc_fd *fds[2]; - fds[0] = pollset->data.ptr; - fds[1] = fd; - - if (fds[0] && !fd_is_orphaned(fds[0])) { - platform_become_multipoller(exec_ctx, pollset, fds, GPR_ARRAY_SIZE(fds)); - GRPC_FD_UNREF(fds[0], "basicpoll"); - } else { - /* old fd is orphaned and we haven't cleaned it up until now, so remain a - * unary poller */ - /* Note that it is possible that fds[1] is also orphaned at this point. - * That's okay, we'll correct it at the next add or poll. */ - if (fds[0]) GRPC_FD_UNREF(fds[0], "basicpoll"); - pollset->data.ptr = fd; - GRPC_FD_REF(fd, "basicpoll"); - } - } - - gpr_mu_unlock(&pollset->mu); - - /* Matching ref in basic_pollset_add_fd */ - GRPC_FD_UNREF(fd, "basicpoll_add"); -} - -static void basic_pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_fd *fd, int and_unlock_pollset) { - grpc_unary_promote_args *up_args; - GPR_ASSERT(fd); - if (fd == pollset->data.ptr) goto exit; - - if (!pollset_has_workers(pollset)) { - /* Fast path -- no in flight cbs */ - /* TODO(klempner): Comment this out and fix any test failures or establish - * they are due to timing issues */ - grpc_fd *fds[2]; - fds[0] = pollset->data.ptr; - fds[1] = fd; - - if (fds[0] == NULL) { - pollset->data.ptr = fd; - GRPC_FD_REF(fd, "basicpoll"); - } else if (!fd_is_orphaned(fds[0])) { - platform_become_multipoller(exec_ctx, pollset, fds, GPR_ARRAY_SIZE(fds)); - GRPC_FD_UNREF(fds[0], "basicpoll"); - } else { - /* old fd is orphaned and we haven't cleaned it up until now, so remain a - * unary poller */ - GRPC_FD_UNREF(fds[0], "basicpoll"); - pollset->data.ptr = fd; - GRPC_FD_REF(fd, "basicpoll"); - } - goto exit; - } - - /* Now we need to promote. This needs to happen when we're not polling. Since - * this may be called from poll, the wait needs to happen asynchronously. */ - GRPC_FD_REF(fd, "basicpoll_add"); - pollset->in_flight_cbs++; - up_args = gpr_malloc(sizeof(*up_args)); - up_args->fd = fd; - up_args->original_vtable = pollset->vtable; - up_args->pollset = pollset; - up_args->promotion_closure.cb = basic_do_promote; - up_args->promotion_closure.cb_arg = up_args; - - grpc_closure_list_append(&pollset->idle_jobs, &up_args->promotion_closure, - GRPC_ERROR_NONE); - pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST); - -exit: - if (and_unlock_pollset) { - gpr_mu_unlock(&pollset->mu); - } -} - -static grpc_error *basic_pollset_maybe_work_and_unlock( - grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_pollset_worker *worker, - gpr_timespec deadline, gpr_timespec now) { -#define POLLOUT_CHECK (POLLOUT | POLLHUP | POLLERR) -#define POLLIN_CHECK (POLLIN | POLLHUP | POLLERR) - - struct pollfd pfd[3]; - grpc_fd *fd; - grpc_fd_watcher fd_watcher; - int timeout; - int r; - nfds_t nfds; - grpc_error *error = GRPC_ERROR_NONE; - - fd = pollset->data.ptr; - if (fd && fd_is_orphaned(fd)) { - GRPC_FD_UNREF(fd, "basicpoll"); - fd = pollset->data.ptr = NULL; - } - timeout = poll_deadline_to_millis_timeout(deadline, now); - pfd[0].fd = GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd); - pfd[0].events = POLLIN; - pfd[0].revents = 0; - pfd[1].fd = GRPC_WAKEUP_FD_GET_READ_FD(&worker->wakeup_fd->fd); - pfd[1].events = POLLIN; - pfd[1].revents = 0; - nfds = 2; - if (fd) { - pfd[2].fd = fd->fd; - pfd[2].revents = 0; - GRPC_FD_REF(fd, "basicpoll_begin"); - gpr_mu_unlock(&pollset->mu); - pfd[2].events = - (short)fd_begin_poll(fd, pollset, worker, POLLIN, POLLOUT, &fd_watcher); - if (pfd[2].events != 0) { - nfds++; - } - } else { - gpr_mu_unlock(&pollset->mu); - } - - /* TODO(vpai): Consider first doing a 0 timeout poll here to avoid - even going into the blocking annotation if possible */ - /* poll fd count (argument 2) is shortened by one if we have no events - to poll on - such that it only includes the kicker */ - GPR_TIMER_BEGIN("poll", 0); - GRPC_SCHEDULING_START_BLOCKING_REGION; - r = grpc_poll_function(pfd, nfds, timeout); - GRPC_SCHEDULING_END_BLOCKING_REGION; - GPR_TIMER_END("poll", 0); - - if (r < 0) { - if (errno != EINTR) { - work_combine_error(&error, GRPC_OS_ERROR(errno, "poll")); - } - if (fd) { - fd_end_poll(exec_ctx, &fd_watcher, 0, 0, NULL); - } - } else if (r == 0) { - if (fd) { - fd_end_poll(exec_ctx, &fd_watcher, 0, 0, NULL); - } - } else { - if (pfd[0].revents & POLLIN_CHECK) { - work_combine_error(&error, - grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd)); - } - if (pfd[1].revents & POLLIN_CHECK) { - work_combine_error(&error, - grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd)); - } - if (nfds > 2) { - fd_end_poll(exec_ctx, &fd_watcher, pfd[2].revents & POLLIN_CHECK, - pfd[2].revents & POLLOUT_CHECK, pollset); - } else if (fd) { - fd_end_poll(exec_ctx, &fd_watcher, 0, 0, NULL); - } - } - - if (fd) { - GRPC_FD_UNREF(fd, "basicpoll_begin"); - } - - return error; -} - -static void basic_pollset_destroy(grpc_pollset *pollset) { - if (pollset->data.ptr != NULL) { - GRPC_FD_UNREF(pollset->data.ptr, "basicpoll"); - pollset->data.ptr = NULL; - } -} - -static const grpc_pollset_vtable basic_pollset = { - basic_pollset_add_fd, basic_pollset_maybe_work_and_unlock, - basic_pollset_destroy, basic_pollset_destroy}; - -static void become_basic_pollset(grpc_pollset *pollset, grpc_fd *fd_or_null) { - pollset->vtable = &basic_pollset; - pollset->data.ptr = fd_or_null; - if (fd_or_null != NULL) { - GRPC_FD_REF(fd_or_null, "basicpoll"); - } -} - -/******************************************************************************* - * pollset_multipoller_with_poll_posix.c - */ - -#ifndef GRPC_LINUX_MULTIPOLL_WITH_EPOLL - -typedef struct { - /* all polled fds */ - size_t fd_count; - size_t fd_capacity; - grpc_fd **fds; - /* fds that have been removed from the pollset explicitly */ - size_t del_count; - size_t del_capacity; - grpc_fd **dels; -} poll_hdr; - -static void multipoll_with_poll_pollset_add_fd(grpc_exec_ctx *exec_ctx, - grpc_pollset *pollset, - grpc_fd *fd, - int and_unlock_pollset) { - size_t i; - poll_hdr *h = pollset->data.ptr; - /* TODO(ctiller): this is O(num_fds^2); maybe switch to a hash set here */ - for (i = 0; i < h->fd_count; i++) { - if (h->fds[i] == fd) goto exit; - } - if (h->fd_count == h->fd_capacity) { - h->fd_capacity = GPR_MAX(h->fd_capacity + 8, h->fd_count * 3 / 2); - h->fds = gpr_realloc(h->fds, sizeof(grpc_fd *) * h->fd_capacity); - } - h->fds[h->fd_count++] = fd; - GRPC_FD_REF(fd, "multipoller"); -exit: - if (and_unlock_pollset) { - gpr_mu_unlock(&pollset->mu); - } -} - -static grpc_error *multipoll_with_poll_pollset_maybe_work_and_unlock( - grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_pollset_worker *worker, - gpr_timespec deadline, gpr_timespec now) { -#define POLLOUT_CHECK (POLLOUT | POLLHUP | POLLERR) -#define POLLIN_CHECK (POLLIN | POLLHUP | POLLERR) - - int timeout; - int r; - size_t i, j, fd_count; - nfds_t pfd_count; - poll_hdr *h; - /* TODO(ctiller): inline some elements to avoid an allocation */ - grpc_fd_watcher *watchers; - struct pollfd *pfds; - grpc_error *error = GRPC_ERROR_NONE; - - h = pollset->data.ptr; - timeout = poll_deadline_to_millis_timeout(deadline, now); - /* TODO(ctiller): perform just one malloc here if we exceed the inline case */ - pfds = gpr_malloc(sizeof(*pfds) * (h->fd_count + 2)); - watchers = gpr_malloc(sizeof(*watchers) * (h->fd_count + 2)); - fd_count = 0; - pfd_count = 2; - pfds[0].fd = GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd); - pfds[0].events = POLLIN; - pfds[0].revents = 0; - pfds[1].fd = GRPC_WAKEUP_FD_GET_READ_FD(&worker->wakeup_fd->fd); - pfds[1].events = POLLIN; - pfds[1].revents = 0; - for (i = 0; i < h->fd_count; i++) { - int remove = fd_is_orphaned(h->fds[i]); - for (j = 0; !remove && j < h->del_count; j++) { - if (h->fds[i] == h->dels[j]) remove = 1; - } - if (remove) { - GRPC_FD_UNREF(h->fds[i], "multipoller"); - } else { - h->fds[fd_count++] = h->fds[i]; - watchers[pfd_count].fd = h->fds[i]; - GRPC_FD_REF(watchers[pfd_count].fd, "multipoller_start"); - pfds[pfd_count].fd = h->fds[i]->fd; - pfds[pfd_count].revents = 0; - pfd_count++; - } - } - for (j = 0; j < h->del_count; j++) { - GRPC_FD_UNREF(h->dels[j], "multipoller_del"); - } - h->del_count = 0; - h->fd_count = fd_count; - gpr_mu_unlock(&pollset->mu); - - for (i = 2; i < pfd_count; i++) { - grpc_fd *fd = watchers[i].fd; - pfds[i].events = (short)fd_begin_poll(fd, pollset, worker, POLLIN, POLLOUT, - &watchers[i]); - GRPC_FD_UNREF(fd, "multipoller_start"); - } - - /* TODO(vpai): Consider first doing a 0 timeout poll here to avoid - even going into the blocking annotation if possible */ - GRPC_SCHEDULING_START_BLOCKING_REGION; - r = grpc_poll_function(pfds, pfd_count, timeout); - GRPC_SCHEDULING_END_BLOCKING_REGION; - - if (r < 0) { - if (errno != EINTR) { - work_combine_error(&error, GRPC_OS_ERROR(errno, "poll")); - } - for (i = 2; i < pfd_count; i++) { - fd_end_poll(exec_ctx, &watchers[i], 0, 0, NULL); - } - } else if (r == 0) { - for (i = 2; i < pfd_count; i++) { - fd_end_poll(exec_ctx, &watchers[i], 0, 0, NULL); - } - } else { - if (pfds[0].revents & POLLIN_CHECK) { - work_combine_error(&error, - grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd)); - } - if (pfds[1].revents & POLLIN_CHECK) { - work_combine_error(&error, - grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd)); - } - for (i = 2; i < pfd_count; i++) { - if (watchers[i].fd == NULL) { - fd_end_poll(exec_ctx, &watchers[i], 0, 0, NULL); - continue; - } - fd_end_poll(exec_ctx, &watchers[i], pfds[i].revents & POLLIN_CHECK, - pfds[i].revents & POLLOUT_CHECK, pollset); - } - } - - gpr_free(pfds); - gpr_free(watchers); - - return error; -} - -static void multipoll_with_poll_pollset_finish_shutdown(grpc_pollset *pollset) { - size_t i; - poll_hdr *h = pollset->data.ptr; - for (i = 0; i < h->fd_count; i++) { - GRPC_FD_UNREF(h->fds[i], "multipoller"); - } - for (i = 0; i < h->del_count; i++) { - GRPC_FD_UNREF(h->dels[i], "multipoller_del"); - } - h->fd_count = 0; - h->del_count = 0; -} - -static void multipoll_with_poll_pollset_destroy(grpc_pollset *pollset) { - poll_hdr *h = pollset->data.ptr; - multipoll_with_poll_pollset_finish_shutdown(pollset); - gpr_free(h->fds); - gpr_free(h->dels); - gpr_free(h); -} - -static const grpc_pollset_vtable multipoll_with_poll_pollset = { - multipoll_with_poll_pollset_add_fd, - multipoll_with_poll_pollset_maybe_work_and_unlock, - multipoll_with_poll_pollset_finish_shutdown, - multipoll_with_poll_pollset_destroy}; - -static void poll_become_multipoller(grpc_exec_ctx *exec_ctx, - grpc_pollset *pollset, grpc_fd **fds, - size_t nfds) { - size_t i; - poll_hdr *h = gpr_malloc(sizeof(poll_hdr)); - pollset->vtable = &multipoll_with_poll_pollset; - pollset->data.ptr = h; - h->fd_count = nfds; - h->fd_capacity = nfds; - h->fds = gpr_malloc(nfds * sizeof(grpc_fd *)); - h->del_count = 0; - h->del_capacity = 0; - h->dels = NULL; - for (i = 0; i < nfds; i++) { - h->fds[i] = fds[i]; - GRPC_FD_REF(fds[i], "multipoller"); - } -} - -#endif /* !GRPC_LINUX_MULTIPOLL_WITH_EPOLL */ - -/******************************************************************************* - * pollset_multipoller_with_epoll_posix.c - */ - -#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL - -#include <errno.h> -#include <poll.h> -#include <string.h> -#include <sys/epoll.h> -#include <unistd.h> - -#include <grpc/support/alloc.h> -#include <grpc/support/log.h> -#include <grpc/support/useful.h> - -#include "src/core/lib/iomgr/ev_posix.h" -#include "src/core/lib/profiling/timers.h" -#include "src/core/lib/support/block_annotate.h" - -static void set_ready(grpc_exec_ctx *exec_ctx, grpc_fd *fd, grpc_closure **st, - grpc_pollset *read_notifier_pollset) { - /* only one set_ready can be active at once (but there may be a racing - notify_on) */ - gpr_mu_lock(&fd->mu); - set_ready_locked(exec_ctx, fd, st); - - /* A non-NULL read_notifier_pollset means that the fd is readable. */ - if (read_notifier_pollset != NULL) { - /* Note: Since the fd might be a part of multiple pollsets, this might be - * called multiple times (for each time the fd becomes readable) and it is - * okay to set the fd's read-notifier pollset to anyone of these pollsets */ - set_read_notifier_pollset_locked(exec_ctx, fd, read_notifier_pollset); - } - - gpr_mu_unlock(&fd->mu); -} - -static void fd_become_readable(grpc_exec_ctx *exec_ctx, grpc_fd *fd, - grpc_pollset *notifier_pollset) { - set_ready(exec_ctx, fd, &fd->read_closure, notifier_pollset); -} - -static void fd_become_writable(grpc_exec_ctx *exec_ctx, grpc_fd *fd) { - set_ready(exec_ctx, fd, &fd->write_closure, NULL); -} - -struct epoll_fd_list { - int *epoll_fds; - size_t count; - size_t capacity; -}; - -static struct epoll_fd_list epoll_fd_global_list; -static gpr_once init_epoll_fd_list_mu = GPR_ONCE_INIT; -static gpr_mu epoll_fd_list_mu; - -static void init_mu(void) { gpr_mu_init(&epoll_fd_list_mu); } - -static void add_epoll_fd_to_global_list(int epoll_fd) { - gpr_once_init(&init_epoll_fd_list_mu, init_mu); - - gpr_mu_lock(&epoll_fd_list_mu); - if (epoll_fd_global_list.count == epoll_fd_global_list.capacity) { - epoll_fd_global_list.capacity = - GPR_MAX((size_t)8, epoll_fd_global_list.capacity * 2); - epoll_fd_global_list.epoll_fds = - gpr_realloc(epoll_fd_global_list.epoll_fds, - epoll_fd_global_list.capacity * sizeof(int)); - } - epoll_fd_global_list.epoll_fds[epoll_fd_global_list.count++] = epoll_fd; - gpr_mu_unlock(&epoll_fd_list_mu); -} - -static void remove_epoll_fd_from_global_list(int epoll_fd) { - gpr_mu_lock(&epoll_fd_list_mu); - GPR_ASSERT(epoll_fd_global_list.count > 0); - for (size_t i = 0; i < epoll_fd_global_list.count; i++) { - if (epoll_fd == epoll_fd_global_list.epoll_fds[i]) { - epoll_fd_global_list.epoll_fds[i] = - epoll_fd_global_list.epoll_fds[--(epoll_fd_global_list.count)]; - break; - } - } - gpr_mu_unlock(&epoll_fd_list_mu); -} - -static void remove_fd_from_all_epoll_sets(int fd) { - int err; - gpr_once_init(&init_epoll_fd_list_mu, init_mu); - gpr_mu_lock(&epoll_fd_list_mu); - if (epoll_fd_global_list.count == 0) { - gpr_mu_unlock(&epoll_fd_list_mu); - return; - } - for (size_t i = 0; i < epoll_fd_global_list.count; i++) { - err = epoll_ctl(epoll_fd_global_list.epoll_fds[i], EPOLL_CTL_DEL, fd, NULL); - if (err < 0 && errno != ENOENT) { - gpr_log(GPR_ERROR, "epoll_ctl del for %d failed: %s", fd, - strerror(errno)); - } - } - gpr_mu_unlock(&epoll_fd_list_mu); -} - -typedef struct { - grpc_pollset *pollset; - grpc_fd *fd; - grpc_closure closure; -} delayed_add; - -typedef struct { int epoll_fd; } epoll_hdr; - -static void finally_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_fd *fd) { - epoll_hdr *h = pollset->data.ptr; - struct epoll_event ev; - int err; - grpc_fd_watcher watcher; - - /* We pretend to be polling whilst adding an fd to keep the fd from being - closed during the add. This may result in a spurious wakeup being assigned - to this pollset whilst adding, but that should be benign. */ - GPR_ASSERT(fd_begin_poll(fd, pollset, NULL, 0, 0, &watcher) == 0); - if (watcher.fd != NULL) { - ev.events = (uint32_t)(EPOLLIN | EPOLLOUT | EPOLLET); - ev.data.ptr = fd; - err = epoll_ctl(h->epoll_fd, EPOLL_CTL_ADD, fd->fd, &ev); - if (err < 0) { - /* FDs may be added to a pollset multiple times, so EEXIST is normal. */ - if (errno != EEXIST) { - gpr_log(GPR_ERROR, "epoll_ctl add for %d failed: %s", fd->fd, - strerror(errno)); - } - } - } - fd_end_poll(exec_ctx, &watcher, 0, 0, NULL); -} - -static void perform_delayed_add(grpc_exec_ctx *exec_ctx, void *arg, - grpc_error *error) { - delayed_add *da = arg; - - if (!fd_is_orphaned(da->fd)) { - finally_add_fd(exec_ctx, da->pollset, da->fd); - } - - gpr_mu_lock(&da->pollset->mu); - da->pollset->in_flight_cbs--; - if (da->pollset->shutting_down) { - /* We don't care about this pollset anymore. */ - if (da->pollset->in_flight_cbs == 0 && !da->pollset->called_shutdown) { - da->pollset->called_shutdown = 1; - grpc_exec_ctx_sched(exec_ctx, da->pollset->shutdown_done, GRPC_ERROR_NONE, - NULL); - } - } - gpr_mu_unlock(&da->pollset->mu); - - GRPC_FD_UNREF(da->fd, "delayed_add"); - - gpr_free(da); -} - -static void multipoll_with_epoll_pollset_add_fd(grpc_exec_ctx *exec_ctx, - grpc_pollset *pollset, - grpc_fd *fd, - int and_unlock_pollset) { - if (and_unlock_pollset) { - gpr_mu_unlock(&pollset->mu); - finally_add_fd(exec_ctx, pollset, fd); - } else { - delayed_add *da = gpr_malloc(sizeof(*da)); - da->pollset = pollset; - da->fd = fd; - GRPC_FD_REF(fd, "delayed_add"); - grpc_closure_init(&da->closure, perform_delayed_add, da); - pollset->in_flight_cbs++; - grpc_exec_ctx_sched(exec_ctx, &da->closure, GRPC_ERROR_NONE, NULL); - } -} - -/* TODO(klempner): We probably want to turn this down a bit */ -#define GRPC_EPOLL_MAX_EVENTS 1000 - -static grpc_error *multipoll_with_epoll_pollset_maybe_work_and_unlock( - grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_pollset_worker *worker, - gpr_timespec deadline, gpr_timespec now) { - struct epoll_event ep_ev[GRPC_EPOLL_MAX_EVENTS]; - int ep_rv; - int poll_rv; - epoll_hdr *h = pollset->data.ptr; - int timeout_ms; - struct pollfd pfds[2]; - grpc_error *error = GRPC_ERROR_NONE; - - /* If you want to ignore epoll's ability to sanely handle parallel pollers, - * for a more apples-to-apples performance comparison with poll, add a - * if (pollset->counter != 0) { return 0; } - * here. - */ - - gpr_mu_unlock(&pollset->mu); - - timeout_ms = poll_deadline_to_millis_timeout(deadline, now); - - pfds[0].fd = GRPC_WAKEUP_FD_GET_READ_FD(&worker->wakeup_fd->fd); - pfds[0].events = POLLIN; - pfds[0].revents = 0; - pfds[1].fd = h->epoll_fd; - pfds[1].events = POLLIN; - pfds[1].revents = 0; - - /* TODO(vpai): Consider first doing a 0 timeout poll here to avoid - even going into the blocking annotation if possible */ - GPR_TIMER_BEGIN("poll", 0); - GRPC_SCHEDULING_START_BLOCKING_REGION; - poll_rv = grpc_poll_function(pfds, 2, timeout_ms); - GRPC_SCHEDULING_END_BLOCKING_REGION; - GPR_TIMER_END("poll", 0); - - if (poll_rv < 0) { - if (errno != EINTR) { - work_combine_error(&error, GRPC_OS_ERROR(errno, "poll")); - } - } else if (poll_rv == 0) { - /* do nothing */ - } else { - if (pfds[0].revents) { - work_combine_error(&error, - grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd)); - } - if (pfds[1].revents) { - do { - /* The following epoll_wait never blocks; it has a timeout of 0 */ - ep_rv = epoll_wait(h->epoll_fd, ep_ev, GRPC_EPOLL_MAX_EVENTS, 0); - if (ep_rv < 0) { - if (errno != EINTR) { - work_combine_error(&error, GRPC_OS_ERROR(errno, "epoll_wait")); - } - } else { - int i; - for (i = 0; i < ep_rv; ++i) { - grpc_fd *fd = ep_ev[i].data.ptr; - /* TODO(klempner): We might want to consider making err and pri - * separate events */ - int cancel = ep_ev[i].events & (EPOLLERR | EPOLLHUP); - int read_ev = ep_ev[i].events & (EPOLLIN | EPOLLPRI); - int write_ev = ep_ev[i].events & EPOLLOUT; - if (fd == NULL) { - work_combine_error(&error, grpc_wakeup_fd_consume_wakeup( - &grpc_global_wakeup_fd)); - } else { - if (read_ev || cancel) { - fd_become_readable(exec_ctx, fd, pollset); - } - if (write_ev || cancel) { - fd_become_writable(exec_ctx, fd); - } - } - } - } - } while (ep_rv == GRPC_EPOLL_MAX_EVENTS); - } - } - return error; -} - -static void multipoll_with_epoll_pollset_finish_shutdown( - grpc_pollset *pollset) {} - -static void multipoll_with_epoll_pollset_destroy(grpc_pollset *pollset) { - epoll_hdr *h = pollset->data.ptr; - close(h->epoll_fd); - remove_epoll_fd_from_global_list(h->epoll_fd); - gpr_free(h); -} - -static const grpc_pollset_vtable multipoll_with_epoll_pollset = { - multipoll_with_epoll_pollset_add_fd, - multipoll_with_epoll_pollset_maybe_work_and_unlock, - multipoll_with_epoll_pollset_finish_shutdown, - multipoll_with_epoll_pollset_destroy}; - -static void epoll_become_multipoller(grpc_exec_ctx *exec_ctx, - grpc_pollset *pollset, grpc_fd **fds, - size_t nfds) { - size_t i; - epoll_hdr *h = gpr_malloc(sizeof(epoll_hdr)); - struct epoll_event ev; - int err; - - pollset->vtable = &multipoll_with_epoll_pollset; - pollset->data.ptr = h; - h->epoll_fd = epoll_create1(EPOLL_CLOEXEC); - if (h->epoll_fd < 0) { - /* TODO(klempner): Fall back to poll here, especially on ENOSYS */ - gpr_log(GPR_ERROR, "epoll_create1 failed: %s", strerror(errno)); - abort(); - } - add_epoll_fd_to_global_list(h->epoll_fd); - - ev.events = (uint32_t)(EPOLLIN | EPOLLET); - ev.data.ptr = NULL; - err = epoll_ctl(h->epoll_fd, EPOLL_CTL_ADD, - GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd), &ev); - if (err < 0) { - gpr_log(GPR_ERROR, "epoll_ctl add for %d failed: %s", - GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd), - strerror(errno)); - } - - for (i = 0; i < nfds; i++) { - multipoll_with_epoll_pollset_add_fd(exec_ctx, pollset, fds[i], 0); - } -} - -#else /* GRPC_LINUX_MULTIPOLL_WITH_EPOLL */ - -static void remove_fd_from_all_epoll_sets(int fd) {} - -#endif /* GRPC_LINUX_MULTIPOLL_WITH_EPOLL */ - -/******************************************************************************* - * pollset_set_posix.c - */ - -static grpc_pollset_set *pollset_set_create(void) { - grpc_pollset_set *pollset_set = gpr_malloc(sizeof(*pollset_set)); - memset(pollset_set, 0, sizeof(*pollset_set)); - gpr_mu_init(&pollset_set->mu); - return pollset_set; -} - -static void pollset_set_destroy(grpc_pollset_set *pollset_set) { - size_t i; - gpr_mu_destroy(&pollset_set->mu); - for (i = 0; i < pollset_set->fd_count; i++) { - GRPC_FD_UNREF(pollset_set->fds[i], "pollset_set"); - } - gpr_free(pollset_set->pollsets); - gpr_free(pollset_set->pollset_sets); - gpr_free(pollset_set->fds); - gpr_free(pollset_set); -} - -static void pollset_set_add_pollset(grpc_exec_ctx *exec_ctx, - grpc_pollset_set *pollset_set, - grpc_pollset *pollset) { - size_t i, j; - gpr_mu_lock(&pollset_set->mu); - if (pollset_set->pollset_count == pollset_set->pollset_capacity) { - pollset_set->pollset_capacity = - GPR_MAX(8, 2 * pollset_set->pollset_capacity); - pollset_set->pollsets = - gpr_realloc(pollset_set->pollsets, pollset_set->pollset_capacity * - sizeof(*pollset_set->pollsets)); - } - pollset_set->pollsets[pollset_set->pollset_count++] = pollset; - for (i = 0, j = 0; i < pollset_set->fd_count; i++) { - if (fd_is_orphaned(pollset_set->fds[i])) { - GRPC_FD_UNREF(pollset_set->fds[i], "pollset_set"); - } else { - pollset_add_fd(exec_ctx, pollset, pollset_set->fds[i]); - pollset_set->fds[j++] = pollset_set->fds[i]; - } - } - pollset_set->fd_count = j; - gpr_mu_unlock(&pollset_set->mu); -} - -static void pollset_set_del_pollset(grpc_exec_ctx *exec_ctx, - grpc_pollset_set *pollset_set, - grpc_pollset *pollset) { - size_t i; - gpr_mu_lock(&pollset_set->mu); - for (i = 0; i < pollset_set->pollset_count; i++) { - if (pollset_set->pollsets[i] == pollset) { - pollset_set->pollset_count--; - GPR_SWAP(grpc_pollset *, pollset_set->pollsets[i], - pollset_set->pollsets[pollset_set->pollset_count]); - break; - } - } - gpr_mu_unlock(&pollset_set->mu); -} - -static void pollset_set_add_pollset_set(grpc_exec_ctx *exec_ctx, - grpc_pollset_set *bag, - grpc_pollset_set *item) { - size_t i, j; - gpr_mu_lock(&bag->mu); - if (bag->pollset_set_count == bag->pollset_set_capacity) { - bag->pollset_set_capacity = GPR_MAX(8, 2 * bag->pollset_set_capacity); - bag->pollset_sets = - gpr_realloc(bag->pollset_sets, - bag->pollset_set_capacity * sizeof(*bag->pollset_sets)); - } - bag->pollset_sets[bag->pollset_set_count++] = item; - for (i = 0, j = 0; i < bag->fd_count; i++) { - if (fd_is_orphaned(bag->fds[i])) { - GRPC_FD_UNREF(bag->fds[i], "pollset_set"); - } else { - pollset_set_add_fd(exec_ctx, item, bag->fds[i]); - bag->fds[j++] = bag->fds[i]; - } - } - bag->fd_count = j; - gpr_mu_unlock(&bag->mu); -} - -static void pollset_set_del_pollset_set(grpc_exec_ctx *exec_ctx, - grpc_pollset_set *bag, - grpc_pollset_set *item) { - size_t i; - gpr_mu_lock(&bag->mu); - for (i = 0; i < bag->pollset_set_count; i++) { - if (bag->pollset_sets[i] == item) { - bag->pollset_set_count--; - GPR_SWAP(grpc_pollset_set *, bag->pollset_sets[i], - bag->pollset_sets[bag->pollset_set_count]); - break; - } - } - gpr_mu_unlock(&bag->mu); -} - -static void pollset_set_add_fd(grpc_exec_ctx *exec_ctx, - grpc_pollset_set *pollset_set, grpc_fd *fd) { - size_t i; - gpr_mu_lock(&pollset_set->mu); - if (pollset_set->fd_count == pollset_set->fd_capacity) { - pollset_set->fd_capacity = GPR_MAX(8, 2 * pollset_set->fd_capacity); - pollset_set->fds = gpr_realloc( - pollset_set->fds, pollset_set->fd_capacity * sizeof(*pollset_set->fds)); - } - GRPC_FD_REF(fd, "pollset_set"); - pollset_set->fds[pollset_set->fd_count++] = fd; - for (i = 0; i < pollset_set->pollset_count; i++) { - pollset_add_fd(exec_ctx, pollset_set->pollsets[i], fd); - } - for (i = 0; i < pollset_set->pollset_set_count; i++) { - pollset_set_add_fd(exec_ctx, pollset_set->pollset_sets[i], fd); - } - gpr_mu_unlock(&pollset_set->mu); -} - -static void pollset_set_del_fd(grpc_exec_ctx *exec_ctx, - grpc_pollset_set *pollset_set, grpc_fd *fd) { - size_t i; - gpr_mu_lock(&pollset_set->mu); - for (i = 0; i < pollset_set->fd_count; i++) { - if (pollset_set->fds[i] == fd) { - pollset_set->fd_count--; - GPR_SWAP(grpc_fd *, pollset_set->fds[i], - pollset_set->fds[pollset_set->fd_count]); - GRPC_FD_UNREF(fd, "pollset_set"); - break; - } - } - for (i = 0; i < pollset_set->pollset_set_count; i++) { - pollset_set_del_fd(exec_ctx, pollset_set->pollset_sets[i], fd); - } - gpr_mu_unlock(&pollset_set->mu); -} - -/******************************************************************************* - * workqueue stubs - */ - -#ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG -static grpc_workqueue *workqueue_ref(grpc_workqueue *workqueue, - const char *file, int line, - const char *reason) { - return workqueue; -} -static void workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue, - const char *file, int line, const char *reason) {} -#else -static grpc_workqueue *workqueue_ref(grpc_workqueue *workqueue) { - return workqueue; -} -static void workqueue_unref(grpc_exec_ctx *exec_ctx, - grpc_workqueue *workqueue) {} -#endif - -static void workqueue_enqueue(grpc_exec_ctx *exec_ctx, - grpc_workqueue *workqueue, grpc_closure *closure, - grpc_error *error) { - grpc_exec_ctx_sched(exec_ctx, closure, error, NULL); -} - -/******************************************************************************* - * event engine binding - */ - -static void shutdown_engine(void) { - fd_global_shutdown(); - pollset_global_shutdown(); -} - -static const grpc_event_engine_vtable vtable = { - .pollset_size = sizeof(grpc_pollset), - - .fd_create = fd_create, - .fd_wrapped_fd = fd_wrapped_fd, - .fd_orphan = fd_orphan, - .fd_shutdown = fd_shutdown, - .fd_is_shutdown = fd_is_shutdown, - .fd_notify_on_read = fd_notify_on_read, - .fd_notify_on_write = fd_notify_on_write, - .fd_get_read_notifier_pollset = fd_get_read_notifier_pollset, - .fd_get_workqueue = fd_get_workqueue, - - .pollset_init = pollset_init, - .pollset_shutdown = pollset_shutdown, - .pollset_reset = pollset_reset, - .pollset_destroy = pollset_destroy, - .pollset_work = pollset_work, - .pollset_kick = pollset_kick, - .pollset_add_fd = pollset_add_fd, - - .pollset_set_create = pollset_set_create, - .pollset_set_destroy = pollset_set_destroy, - .pollset_set_add_pollset = pollset_set_add_pollset, - .pollset_set_del_pollset = pollset_set_del_pollset, - .pollset_set_add_pollset_set = pollset_set_add_pollset_set, - .pollset_set_del_pollset_set = pollset_set_del_pollset_set, - .pollset_set_add_fd = pollset_set_add_fd, - .pollset_set_del_fd = pollset_set_del_fd, - - .kick_poller = kick_poller, - - .workqueue_ref = workqueue_ref, - .workqueue_unref = workqueue_unref, - .workqueue_enqueue = workqueue_enqueue, - - .shutdown_engine = shutdown_engine, -}; - -const grpc_event_engine_vtable *grpc_init_poll_and_epoll_posix(void) { -#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL - platform_become_multipoller = epoll_become_multipoller; -#else - platform_become_multipoller = poll_become_multipoller; -#endif - fd_global_init(); - pollset_global_init(); - return &vtable; -} - -#endif diff --git a/src/core/lib/iomgr/ev_poll_and_epoll_posix.h b/src/core/lib/iomgr/ev_poll_and_epoll_posix.h deleted file mode 100644 index 06d6dbf29dd79a1ca28cf1a5ccad75435befad34..0000000000000000000000000000000000000000 --- a/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * - * Copyright 2015, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifndef GRPC_CORE_LIB_IOMGR_EV_POLL_AND_EPOLL_POSIX_H -#define GRPC_CORE_LIB_IOMGR_EV_POLL_AND_EPOLL_POSIX_H - -#include "src/core/lib/iomgr/ev_posix.h" - -const grpc_event_engine_vtable *grpc_init_poll_and_epoll_posix(void); - -#endif /* GRPC_CORE_LIB_IOMGR_EV_POLL_AND_EPOLL_POSIX_H */ diff --git a/src/core/lib/iomgr/ev_posix.c b/src/core/lib/iomgr/ev_posix.c index ef36ba89b2b6d4884f68896d9270c8a5092f8c8e..ab139895fdc873a7271026a45c839cbf44adc171 100644 --- a/src/core/lib/iomgr/ev_posix.c +++ b/src/core/lib/iomgr/ev_posix.c @@ -45,7 +45,6 @@ #include <grpc/support/useful.h> #include "src/core/lib/iomgr/ev_epoll_linux.h" -#include "src/core/lib/iomgr/ev_poll_and_epoll_posix.h" #include "src/core/lib/iomgr/ev_poll_posix.h" #include "src/core/lib/support/env.h" @@ -67,7 +66,6 @@ static const event_engine_factory g_factories[] = { {"epoll", grpc_init_epoll_linux}, {"poll", grpc_init_poll_posix}, {"poll-cv", grpc_init_poll_cv_posix}, - {"legacy", grpc_init_poll_and_epoll_posix}, }; static void add(const char *beg, const char *end, char ***ss, size_t *ns) { diff --git a/src/core/lib/iomgr/executor.c b/src/core/lib/iomgr/executor.c index 8d7535d6fe52bd30b095c641248de99d7a67465a..4e78b619fbf75df476eed7aa42065c5703b082da 100644 --- a/src/core/lib/iomgr/executor.c +++ b/src/core/lib/iomgr/executor.c @@ -121,9 +121,8 @@ void grpc_executor_push(grpc_closure *closure, grpc_error *error) { gpr_mu_unlock(&g_executor.mu); } -void grpc_executor_shutdown() { +void grpc_executor_shutdown(grpc_exec_ctx *exec_ctx) { int pending_join; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; gpr_mu_lock(&g_executor.mu); pending_join = g_executor.pending_join; @@ -133,8 +132,7 @@ void grpc_executor_shutdown() { * list below because we aren't accepting new work */ /* Execute pending callbacks, some may be performing cleanups */ - grpc_exec_ctx_enqueue_list(&exec_ctx, &g_executor.closures, NULL); - grpc_exec_ctx_finish(&exec_ctx); + grpc_exec_ctx_enqueue_list(exec_ctx, &g_executor.closures, NULL); GPR_ASSERT(grpc_closure_list_empty(g_executor.closures)); if (pending_join) { gpr_thd_join(g_executor.tid); diff --git a/src/core/lib/iomgr/executor.h b/src/core/lib/iomgr/executor.h index da9dcd07d02aa1a24a1fc50d63da9c2aa38d01ed..7bf8f21940be693a3c1fb40311f7af15edd53b0d 100644 --- a/src/core/lib/iomgr/executor.h +++ b/src/core/lib/iomgr/executor.h @@ -48,6 +48,6 @@ void grpc_executor_init(); void grpc_executor_push(grpc_closure *closure, grpc_error *error); /** Shutdown the executor, running all pending work as part of the call */ -void grpc_executor_shutdown(); +void grpc_executor_shutdown(grpc_exec_ctx *exec_ctx); #endif /* GRPC_CORE_LIB_IOMGR_EXECUTOR_H */ diff --git a/src/core/lib/iomgr/iomgr.c b/src/core/lib/iomgr/iomgr.c index 4fd83e0b2249a682c79c3701947731f5491aad37..8a233d0ba81b77dfda5a323f367b250f66cd3398 100644 --- a/src/core/lib/iomgr/iomgr.c +++ b/src/core/lib/iomgr/iomgr.c @@ -83,11 +83,10 @@ static void dump_objects(const char *kind) { } } -void grpc_iomgr_shutdown(void) { +void grpc_iomgr_shutdown(grpc_exec_ctx *exec_ctx) { gpr_timespec shutdown_deadline = gpr_time_add( gpr_now(GPR_CLOCK_REALTIME), gpr_time_from_seconds(10, GPR_TIMESPAN)); gpr_timespec last_warning_time = gpr_now(GPR_CLOCK_REALTIME); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_iomgr_platform_flush(); @@ -104,10 +103,9 @@ void grpc_iomgr_shutdown(void) { } last_warning_time = gpr_now(GPR_CLOCK_REALTIME); } - if (grpc_timer_check(&exec_ctx, gpr_inf_future(GPR_CLOCK_MONOTONIC), - NULL)) { + if (grpc_timer_check(exec_ctx, gpr_inf_future(GPR_CLOCK_MONOTONIC), NULL)) { gpr_mu_unlock(&g_mu); - grpc_exec_ctx_flush(&exec_ctx); + grpc_exec_ctx_flush(exec_ctx); gpr_mu_lock(&g_mu); continue; } @@ -138,8 +136,8 @@ void grpc_iomgr_shutdown(void) { } gpr_mu_unlock(&g_mu); - grpc_timer_list_shutdown(&exec_ctx); - grpc_exec_ctx_finish(&exec_ctx); + grpc_timer_list_shutdown(exec_ctx); + grpc_exec_ctx_flush(exec_ctx); /* ensure all threads have left g_mu */ gpr_mu_lock(&g_mu); diff --git a/src/core/lib/iomgr/iomgr.h b/src/core/lib/iomgr/iomgr.h index c1cfaf302e872e4f73f90d2913c39c766bb2828a..245a1e08aa2e3e705feadc0fbf25a2e2e11de71b 100644 --- a/src/core/lib/iomgr/iomgr.h +++ b/src/core/lib/iomgr/iomgr.h @@ -34,12 +34,14 @@ #ifndef GRPC_CORE_LIB_IOMGR_IOMGR_H #define GRPC_CORE_LIB_IOMGR_IOMGR_H +#include <grpc/impl/codegen/exec_ctx_fwd.h> #include "src/core/lib/iomgr/port.h" /** Initializes the iomgr. */ void grpc_iomgr_init(void); -/** Signals the intention to shutdown the iomgr. */ -void grpc_iomgr_shutdown(void); +/** Signals the intention to shutdown the iomgr. Expects to be able to flush + * exec_ctx. */ +void grpc_iomgr_shutdown(grpc_exec_ctx *exec_ctx); #endif /* GRPC_CORE_LIB_IOMGR_IOMGR_H */ diff --git a/src/core/lib/iomgr/socket_mutator.c b/src/core/lib/iomgr/socket_mutator.c new file mode 100644 index 0000000000000000000000000000000000000000..34b61dcfe5a58aaaabea256587d41c72e754cdbc --- /dev/null +++ b/src/core/lib/iomgr/socket_mutator.c @@ -0,0 +1,98 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/socket_mutator.h" + +#include <grpc/impl/codegen/grpc_types.h> +#include <grpc/support/sync.h> +#include <grpc/support/useful.h> + +void grpc_socket_mutator_init(grpc_socket_mutator *mutator, + const grpc_socket_mutator_vtable *vtable) { + mutator->vtable = vtable; + gpr_ref_init(&mutator->refcount, 1); +} + +grpc_socket_mutator *grpc_socket_mutator_ref(grpc_socket_mutator *mutator) { + gpr_ref(&mutator->refcount); + return mutator; +} + +bool grpc_socket_mutator_mutate_fd(grpc_socket_mutator *mutator, int fd) { + return mutator->vtable->mutate_fd(fd, mutator); +} + +int grpc_socket_mutator_compare(grpc_socket_mutator *a, + grpc_socket_mutator *b) { + int c = GPR_ICMP(a, b); + if (c != 0) { + grpc_socket_mutator *sma = a; + grpc_socket_mutator *smb = b; + c = GPR_ICMP(sma->vtable, smb->vtable); + if (c == 0) { + c = sma->vtable->compare(sma, smb); + } + } + return c; +} + +void grpc_socket_mutator_unref(grpc_socket_mutator *mutator) { + if (gpr_unref(&mutator->refcount)) { + mutator->vtable->destory(mutator); + } +} + +static void *socket_mutator_arg_copy(void *p) { + return grpc_socket_mutator_ref(p); +} + +static void socket_mutator_arg_destroy(grpc_exec_ctx *exec_ctx, void *p) { + grpc_socket_mutator_unref(p); +} + +static int socket_mutator_cmp(void *a, void *b) { + return grpc_socket_mutator_compare((grpc_socket_mutator *)a, + (grpc_socket_mutator *)b); +} + +static const grpc_arg_pointer_vtable socket_mutator_arg_vtable = { + socket_mutator_arg_copy, socket_mutator_arg_destroy, socket_mutator_cmp}; + +grpc_arg grpc_socket_mutator_to_arg(grpc_socket_mutator *mutator) { + grpc_arg arg; + arg.type = GRPC_ARG_POINTER; + arg.key = GRPC_ARG_SOCKET_MUTATOR; + arg.value.pointer.vtable = &socket_mutator_arg_vtable; + arg.value.pointer.p = mutator; + return arg; +} diff --git a/src/core/lib/iomgr/socket_mutator.h b/src/core/lib/iomgr/socket_mutator.h new file mode 100644 index 0000000000000000000000000000000000000000..2f5b6c248e9db3ccc12d43029c80bf8012c1e371 --- /dev/null +++ b/src/core/lib/iomgr/socket_mutator.h @@ -0,0 +1,80 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_SOCKET_MUTATOR_H +#define GRPC_CORE_LIB_IOMGR_SOCKET_MUTATOR_H + +#include <grpc/impl/codegen/grpc_types.h> +#include <grpc/support/sync.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** The virtual table of grpc_socket_mutator */ +typedef struct { + /** Mutates the socket opitons of \a fd */ + bool (*mutate_fd)(int fd, grpc_socket_mutator *mutator); + /** Compare socket mutator \a a and \a b */ + int (*compare)(grpc_socket_mutator *a, grpc_socket_mutator *b); + /** Destroys the socket mutator instance */ + void (*destory)(grpc_socket_mutator *mutator); +} grpc_socket_mutator_vtable; + +/** The Socket Mutator interface allows changes on socket options */ +struct grpc_socket_mutator { + const grpc_socket_mutator_vtable *vtable; + gpr_refcount refcount; +}; + +/** called by concrete implementations to initialize the base struct */ +void grpc_socket_mutator_init(grpc_socket_mutator *mutator, + const grpc_socket_mutator_vtable *vtable); + +/** Wrap \a mutator as a grpc_arg */ +grpc_arg grpc_socket_mutator_to_arg(grpc_socket_mutator *mutator); + +/** Perform the file descriptor mutation operation of \a mutator on \a fd */ +bool grpc_socket_mutator_mutate_fd(grpc_socket_mutator *mutator, int fd); + +/** Compare if \a a and \a b are the same mutator or have same settings */ +int grpc_socket_mutator_compare(grpc_socket_mutator *a, grpc_socket_mutator *b); + +grpc_socket_mutator *grpc_socket_mutator_ref(grpc_socket_mutator *mutator); +void grpc_socket_mutator_unref(grpc_socket_mutator *mutator); + +#ifdef __cplusplus +} +#endif + +#endif /* GRPC_CORE_LIB_IOMGR_SOCKET_MUTATOR_H */ diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index bc28bbe3166a320458e89c691faacd7ad136a78d..88e9ade253e9bef1748b7ca630f8c401948c18d6 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -209,6 +209,15 @@ grpc_error *grpc_set_socket_low_latency(int fd, int low_latency) { return GRPC_ERROR_NONE; } +/* set a socket using a grpc_socket_mutator */ +grpc_error *grpc_set_socket_with_mutator(int fd, grpc_socket_mutator *mutator) { + GPR_ASSERT(mutator); + if (!grpc_socket_mutator_mutate_fd(mutator, fd)) { + return GRPC_ERROR_CREATE("grpc_socket_mutator failed."); + } + return GRPC_ERROR_NONE; +} + static gpr_once g_probe_ipv6_once = GPR_ONCE_INIT; static int g_ipv6_loopback_available; diff --git a/src/core/lib/iomgr/socket_utils_posix.h b/src/core/lib/iomgr/socket_utils_posix.h index 175fb2b71746938de57e4c5c97f37102d86a5339..e84d3781a15f9d193476806f61f568c959870def 100644 --- a/src/core/lib/iomgr/socket_utils_posix.h +++ b/src/core/lib/iomgr/socket_utils_posix.h @@ -39,7 +39,9 @@ #include <sys/socket.h> #include <unistd.h> +#include <grpc/impl/codegen/grpc_types.h> #include "src/core/lib/iomgr/error.h" +#include "src/core/lib/iomgr/socket_mutator.h" /* a wrapper for accept or accept4 */ int grpc_accept4(int sockfd, grpc_resolved_address *resolved_addr, int nonblock, @@ -88,6 +90,9 @@ grpc_error *grpc_set_socket_sndbuf(int fd, int buffer_size_bytes); /* Tries to set the socket's receive buffer to given size. */ grpc_error *grpc_set_socket_rcvbuf(int fd, int buffer_size_bytes); +/* Tries to set the socket using a grpc_socket_mutator */ +grpc_error *grpc_set_socket_with_mutator(int fd, grpc_socket_mutator *mutator); + /* An enum to keep track of IPv4/IPv6 socket modes. Currently, this information is only used when a socket is first created, but diff --git a/src/core/lib/iomgr/tcp_client.h b/src/core/lib/iomgr/tcp_client.h index 18e6e60ebcedb04cac51d0d716886f367e9aac6c..0485661316ad09b45d0c8a8a14c13cd90e047ef8 100644 --- a/src/core/lib/iomgr/tcp_client.h +++ b/src/core/lib/iomgr/tcp_client.h @@ -34,6 +34,7 @@ #ifndef GRPC_CORE_LIB_IOMGR_TCP_CLIENT_H #define GRPC_CORE_LIB_IOMGR_TCP_CLIENT_H +#include <grpc/impl/codegen/grpc_types.h> #include <grpc/support/time.h> #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/pollset_set.h" diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 3b0fe3bc15e984c2809d9ef539950375eb9a58c7..7e49d89aa8e41d21d172090ac7e99fd2518e6d4c 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -51,6 +51,7 @@ #include "src/core/lib/iomgr/ev_posix.h" #include "src/core/lib/iomgr/iomgr_posix.h" #include "src/core/lib/iomgr/sockaddr_utils.h" +#include "src/core/lib/iomgr/socket_mutator.h" #include "src/core/lib/iomgr/socket_utils_posix.h" #include "src/core/lib/iomgr/tcp_posix.h" #include "src/core/lib/iomgr/timer.h" @@ -73,7 +74,8 @@ typedef struct { grpc_channel_args *channel_args; } async_connect; -static grpc_error *prepare_socket(const grpc_resolved_address *addr, int fd) { +static grpc_error *prepare_socket(const grpc_resolved_address *addr, int fd, + const grpc_channel_args *channel_args) { grpc_error *err = GRPC_ERROR_NONE; GPR_ASSERT(fd >= 0); @@ -88,6 +90,16 @@ static grpc_error *prepare_socket(const grpc_resolved_address *addr, int fd) { } err = grpc_set_socket_no_sigpipe_if_possible(fd); if (err != GRPC_ERROR_NONE) goto error; + if (channel_args) { + for (size_t i = 0; i < channel_args->num_args; i++) { + if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_SOCKET_MUTATOR)) { + GPR_ASSERT(channel_args->args[i].type == GRPC_ARG_POINTER); + grpc_socket_mutator *mutator = channel_args->args[i].value.pointer.p; + err = grpc_set_socket_with_mutator(fd, mutator); + if (err != GRPC_ERROR_NONE) goto error; + } + } + } goto done; error: @@ -287,7 +299,7 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, GPR_ASSERT(grpc_sockaddr_is_v4mapped(addr, &addr4_copy)); addr = &addr4_copy; } - if ((error = prepare_socket(addr, fd)) != GRPC_ERROR_NONE) { + if ((error = prepare_socket(addr, fd, channel_args)) != GRPC_ERROR_NONE) { grpc_exec_ctx_sched(exec_ctx, closure, error, NULL); return; } diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index e27a762f20d6431697465c3f5f73be7d31f8ad3f..ba288c768e15e8e66d724c196ba4d0f1a3e8d02d 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -497,6 +497,11 @@ static char *tcp_get_peer(grpc_endpoint *ep) { return gpr_strdup(tcp->peer_string); } +static int tcp_get_fd(grpc_endpoint *ep) { + grpc_tcp *tcp = (grpc_tcp *)ep; + return tcp->fd; +} + static grpc_workqueue *tcp_get_workqueue(grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; return grpc_fd_get_workqueue(tcp->em_fd); @@ -515,7 +520,8 @@ static const grpc_endpoint_vtable vtable = {tcp_read, tcp_shutdown, tcp_destroy, tcp_get_resource_user, - tcp_get_peer}; + tcp_get_peer, + tcp_get_fd}; grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, grpc_resource_quota *resource_quota, diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c index e690b18f20d11aea80ac37e2f299331b0b00244e..6e2ad1dbe923594dd4a4b3cf96e6b7ed393510a2 100644 --- a/src/core/lib/iomgr/tcp_uv.c +++ b/src/core/lib/iomgr/tcp_uv.c @@ -87,10 +87,12 @@ static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { /*#define GRPC_TCP_REFCOUNT_DEBUG*/ #ifdef GRPC_TCP_REFCOUNT_DEBUG -#define TCP_UNREF(exec_ctx, tcp, reason) tcp_unref((exec_ctx), (tcp), (reason), __FILE__, __LINE__) -#define TCP_REF(tcp, reason) tcp_ref((exec_ctx), (tcp), (reason), __FILE__, __LINE__) -static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, const char *reason, const char *file, - int line) { +#define TCP_UNREF(exec_ctx, tcp, reason) \ + tcp_unref((exec_ctx), (tcp), (reason), __FILE__, __LINE__) +#define TCP_REF(tcp, reason) \ + tcp_ref((exec_ctx), (tcp), (reason), __FILE__, __LINE__) +static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, + const char *reason, const char *file, int line) { gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp, reason, tcp->refcount.count, tcp->refcount.count - 1); if (gpr_unref(&tcp->refcount)) { @@ -157,7 +159,7 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, grpc_error_free_string(str); for (i = 0; i < tcp->read_slices->count; i++) { char *dump = grpc_dump_slice(tcp->read_slices->slices[i], - GPR_DUMP_HEX | GPR_DUMP_ASCII); + GPR_DUMP_HEX | GPR_DUMP_ASCII); gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump); gpr_free(dump); @@ -234,7 +236,7 @@ static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, for (j = 0; j < write_slices->count; j++) { char *data = grpc_dump_slice(write_slices->slices[j], - GPR_DUMP_HEX | GPR_DUMP_ASCII); + GPR_DUMP_HEX | GPR_DUMP_ASCII); gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data); gpr_free(data); } @@ -323,10 +325,13 @@ static grpc_resource_user *uv_get_resource_user(grpc_endpoint *ep) { static grpc_workqueue *uv_get_workqueue(grpc_endpoint *ep) { return NULL; } +static int uv_get_fd(grpc_endpoint *ep) { return -1; } + static grpc_endpoint_vtable vtable = { uv_endpoint_read, uv_endpoint_write, uv_get_workqueue, uv_add_to_pollset, uv_add_to_pollset_set, uv_endpoint_shutdown, - uv_destroy, uv_get_resource_user, uv_get_peer}; + uv_destroy, uv_get_resource_user, uv_get_peer, + uv_get_fd}; grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, grpc_resource_quota *resource_quota, diff --git a/src/core/lib/iomgr/tcp_windows.c b/src/core/lib/iomgr/tcp_windows.c index e5fa360094e37246bec207e9b2268dc90ae4a282..34afe51df006f1738b87c8787017b7d7b986ddec 100644 --- a/src/core/lib/iomgr/tcp_windows.c +++ b/src/core/lib/iomgr/tcp_windows.c @@ -402,6 +402,8 @@ static grpc_resource_user *win_get_resource_user(grpc_endpoint *ep) { return tcp->resource_user; } +static int win_get_fd(grpc_endpoint *ep) { return -1; } + static grpc_endpoint_vtable vtable = {win_read, win_write, win_get_workqueue, @@ -410,7 +412,8 @@ static grpc_endpoint_vtable vtable = {win_read, win_shutdown, win_destroy, win_get_resource_user, - win_get_peer}; + win_get_peer, + win_get_fd}; grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, grpc_resource_quota *resource_quota, diff --git a/src/core/lib/security/credentials/jwt/jwt_credentials.c b/src/core/lib/security/credentials/jwt/jwt_credentials.c index 4ce5675fba3327719551d65312537c8d8cdd5f88..616be64a54b59610a69e9364c80d65c3d8c93077 100644 --- a/src/core/lib/security/credentials/jwt/jwt_credentials.c +++ b/src/core/lib/security/credentials/jwt/jwt_credentials.c @@ -147,17 +147,44 @@ grpc_service_account_jwt_access_credentials_create_from_auth_json_key( return &c->base; } +static char *redact_private_key(const char *json_key) { + char *json_copy = gpr_strdup(json_key); + grpc_json *json = grpc_json_parse_string(json_copy); + if (!json) { + gpr_free(json_copy); + return gpr_strdup("<Json failed to parse.>"); + } + const char *redacted = "<redacted>"; + grpc_json *current = json->child; + while (current) { + if (current->type == GRPC_JSON_STRING && + strcmp(current->key, "private_key") == 0) { + current->value = (char *)redacted; + break; + } + current = current->next; + } + char *clean_json = grpc_json_dump_to_string(json, 2); + gpr_free(json_copy); + grpc_json_destroy(json); + return clean_json; +} + grpc_call_credentials *grpc_service_account_jwt_access_credentials_create( const char *json_key, gpr_timespec token_lifetime, void *reserved) { - GRPC_API_TRACE( - "grpc_service_account_jwt_access_credentials_create(" - "json_key=%s, " - "token_lifetime=" - "gpr_timespec { tv_sec: %" PRId64 - ", tv_nsec: %d, clock_type: %d }, " - "reserved=%p)", - 5, (json_key, token_lifetime.tv_sec, token_lifetime.tv_nsec, - (int)token_lifetime.clock_type, reserved)); + if (grpc_api_trace) { + char *clean_json = redact_private_key(json_key); + gpr_log(GPR_INFO, + "grpc_service_account_jwt_access_credentials_create(" + "json_key=%s, " + "token_lifetime=" + "gpr_timespec { tv_sec: %" PRId64 + ", tv_nsec: %d, clock_type: %d }, " + "reserved=%p)", + clean_json, token_lifetime.tv_sec, token_lifetime.tv_nsec, + (int)token_lifetime.clock_type, reserved); + gpr_free(clean_json); + } GPR_ASSERT(reserved == NULL); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_call_credentials *creds = diff --git a/src/core/lib/security/credentials/jwt/jwt_verifier.c b/src/core/lib/security/credentials/jwt/jwt_verifier.c index 0281db385bd2ec555da26adb6700de004d96c328..71febc248a8818d94320bd0851818b43616c0013 100644 --- a/src/core/lib/security/credentials/jwt/jwt_verifier.c +++ b/src/core/lib/security/credentials/jwt/jwt_verifier.c @@ -629,7 +629,7 @@ static void on_keys_retrieved(grpc_exec_ctx *exec_ctx, void *user_data, end: if (json != NULL) grpc_json_destroy(json); if (verification_key != NULL) EVP_PKEY_free(verification_key); - ctx->user_cb(ctx->user_data, status, claims); + ctx->user_cb(exec_ctx, ctx->user_data, status, claims); verifier_cb_ctx_destroy(exec_ctx, ctx); } @@ -682,7 +682,8 @@ static void on_openid_config_retrieved(grpc_exec_ctx *exec_ctx, void *user_data, error: if (json != NULL) grpc_json_destroy(json); - ctx->user_cb(ctx->user_data, GRPC_JWT_VERIFIER_KEY_RETRIEVAL_ERROR, NULL); + ctx->user_cb(exec_ctx, ctx->user_data, GRPC_JWT_VERIFIER_KEY_RETRIEVAL_ERROR, + NULL); verifier_cb_ctx_destroy(exec_ctx, ctx); } @@ -793,7 +794,8 @@ static void retrieve_key_and_verify(grpc_exec_ctx *exec_ctx, return; error: - ctx->user_cb(ctx->user_data, GRPC_JWT_VERIFIER_KEY_RETRIEVAL_ERROR, NULL); + ctx->user_cb(exec_ctx, ctx->user_data, GRPC_JWT_VERIFIER_KEY_RETRIEVAL_ERROR, + NULL); verifier_cb_ctx_destroy(exec_ctx, ctx); } @@ -844,7 +846,7 @@ void grpc_jwt_verifier_verify(grpc_exec_ctx *exec_ctx, error: if (header != NULL) jose_header_destroy(exec_ctx, header); if (claims != NULL) grpc_jwt_claims_destroy(exec_ctx, claims); - cb(user_data, GRPC_JWT_VERIFIER_BAD_FORMAT, NULL); + cb(exec_ctx, user_data, GRPC_JWT_VERIFIER_BAD_FORMAT, NULL); } grpc_jwt_verifier *grpc_jwt_verifier_create( diff --git a/src/core/lib/security/credentials/jwt/jwt_verifier.h b/src/core/lib/security/credentials/jwt/jwt_verifier.h index c084575bcfb89936c11652e68fc1a529ef5af890..b79f411903c6c6bb59207a1f38841b96bdabc9d0 100644 --- a/src/core/lib/security/credentials/jwt/jwt_verifier.h +++ b/src/core/lib/security/credentials/jwt/jwt_verifier.h @@ -115,7 +115,8 @@ void grpc_jwt_verifier_destroy(grpc_jwt_verifier *verifier); is done (maybe in another thread). It is the responsibility of the callee to call grpc_jwt_claims_destroy on the claims. */ -typedef void (*grpc_jwt_verification_done_cb)(void *user_data, +typedef void (*grpc_jwt_verification_done_cb)(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_jwt_verifier_status status, grpc_jwt_claims *claims); diff --git a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c index b7bdc53a3527bcd8a328758b1124ea2ea9d2a622..cbcd74958cff7728f4555077e95d3e9746258d59 100644 --- a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +++ b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c @@ -394,15 +394,32 @@ grpc_refresh_token_credentials_create_from_auth_refresh_token( return &c->base.base; } +static char *create_loggable_refresh_token(grpc_auth_refresh_token *token) { + if (strcmp(token->type, GRPC_AUTH_JSON_TYPE_INVALID) == 0) { + return gpr_strdup("<Invalid json token>"); + } + char *loggable_token = NULL; + gpr_asprintf(&loggable_token, + "{\n type: %s\n client_id: %s\n client_secret: " + "<redacted>\n refresh_token: <redacted>\n}", + token->type, token->client_id); + return loggable_token; +} + grpc_call_credentials *grpc_google_refresh_token_credentials_create( const char *json_refresh_token, void *reserved) { - GRPC_API_TRACE( - "grpc_refresh_token_credentials_create(json_refresh_token=%s, " - "reserved=%p)", - 2, (json_refresh_token, reserved)); + grpc_auth_refresh_token token = + grpc_auth_refresh_token_create_from_string(json_refresh_token); + if (grpc_api_trace) { + char *loggable_token = create_loggable_refresh_token(&token); + gpr_log(GPR_INFO, + "grpc_refresh_token_credentials_create(json_refresh_token=%s, " + "reserved=%p)", + loggable_token, reserved); + gpr_free(loggable_token); + } GPR_ASSERT(reserved == NULL); - return grpc_refresh_token_credentials_create_from_auth_refresh_token( - grpc_auth_refresh_token_create_from_string(json_refresh_token)); + return grpc_refresh_token_credentials_create_from_auth_refresh_token(token); } // @@ -433,9 +450,9 @@ grpc_call_credentials *grpc_access_token_credentials_create( gpr_malloc(sizeof(grpc_access_token_credentials)); char *token_md_value; GRPC_API_TRACE( - "grpc_access_token_credentials_create(access_token=%s, " + "grpc_access_token_credentials_create(access_token=<redacted>, " "reserved=%p)", - 2, (access_token, reserved)); + 1, (reserved)); GPR_ASSERT(reserved == NULL); memset(c, 0, sizeof(grpc_access_token_credentials)); c->base.type = GRPC_CALL_CREDENTIALS_TYPE_OAUTH2; diff --git a/src/core/lib/security/credentials/plugin/plugin_credentials.c b/src/core/lib/security/credentials/plugin/plugin_credentials.c index 29f28024f662be513e77c66f28f878e17405b75c..f90d7dce83f6f4977dd608f14f4d0fc7959ea355 100644 --- a/src/core/lib/security/credentials/plugin/plugin_credentials.c +++ b/src/core/lib/security/credentials/plugin/plugin_credentials.c @@ -106,6 +106,8 @@ static void plugin_md_request_metadata_ready(void *request, grpc_slice_unref_internal(&exec_ctx, md_array[i].value); } gpr_free(md_array); + } else if (num_md == 0) { + r->cb(&exec_ctx, r->user_data, NULL, 0, GRPC_CREDENTIALS_OK, NULL); } } gpr_free(r); diff --git a/src/core/lib/security/transport/handshake.c b/src/core/lib/security/transport/handshake.c index 26e63a71e9db588050403043bf15340b7efd3faf..16d758d7a1ff137f800b6c8cb581cf4e944f8a3e 100644 --- a/src/core/lib/security/transport/handshake.c +++ b/src/core/lib/security/transport/handshake.c @@ -127,7 +127,7 @@ static void security_handshake_done(grpc_exec_ctx *exec_ctx, h->auth_context); } else { const char *msg = grpc_error_string(error); - gpr_log(GPR_INFO, "Security handshake failed: %s", msg); + gpr_log(GPR_DEBUG, "Security handshake failed: %s", msg); grpc_error_free_string(msg); if (h->secure_endpoint != NULL) { diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c index 594aa6161da39adb28d957fe3917f8983f0939ea..0e9a392c60c08cb706a897dfffa5b2402286ffa4 100644 --- a/src/core/lib/security/transport/secure_endpoint.c +++ b/src/core/lib/security/transport/secure_endpoint.c @@ -31,7 +31,12 @@ * */ -#include "src/core/lib/security/transport/secure_endpoint.h" +/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when + using that endpoint. Because of various transitive includes in uv.h, + including windows.h on Windows, uv.h must be included before other system + headers. Therefore, sockaddr.h must always be included first */ +#include "src/core/lib/iomgr/sockaddr.h" + #include <grpc/slice.h> #include <grpc/slice_buffer.h> #include <grpc/support/alloc.h> @@ -39,6 +44,7 @@ #include <grpc/support/sync.h> #include "src/core/lib/debug/trace.h" #include "src/core/lib/profiling/timers.h" +#include "src/core/lib/security/transport/secure_endpoint.h" #include "src/core/lib/security/transport/tsi_error.h" #include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_string_helpers.h" @@ -367,6 +373,8 @@ static char *endpoint_get_peer(grpc_endpoint *secure_ep) { return grpc_endpoint_get_peer(ep->wrapped_ep); } +static int endpoint_get_fd(grpc_endpoint *secure_ep) { return -1; } + static grpc_workqueue *endpoint_get_workqueue(grpc_endpoint *secure_ep) { secure_endpoint *ep = (secure_endpoint *)secure_ep; return grpc_endpoint_get_workqueue(ep->wrapped_ep); @@ -386,7 +394,8 @@ static const grpc_endpoint_vtable vtable = {endpoint_read, endpoint_shutdown, endpoint_destroy, endpoint_get_resource_user, - endpoint_get_peer}; + endpoint_get_peer, + endpoint_get_fd}; grpc_endpoint *grpc_secure_endpoint_create( struct tsi_frame_protector *protector, grpc_endpoint *transport, diff --git a/src/core/lib/security/transport/server_auth_filter.c b/src/core/lib/security/transport/server_auth_filter.c index 246ca35bc6b958bfcb2f5882ae3dfcb28c5fff2e..7a0069710eac8054964982d19301a2083a8f5396 100644 --- a/src/core/lib/security/transport/server_auth_filter.c +++ b/src/core/lib/security/transport/server_auth_filter.c @@ -83,7 +83,8 @@ static grpc_metadata_array metadata_batch_to_md_array( return result; } -static grpc_mdelem *remove_consumed_md(void *user_data, grpc_mdelem *md) { +static grpc_mdelem *remove_consumed_md(grpc_exec_ctx *exec_ctx, void *user_data, + grpc_mdelem *md) { grpc_call_element *elem = user_data; call_data *calld = elem->call_data; size_t i; diff --git a/src/core/lib/slice/slice.c b/src/core/lib/slice/slice.c index 6da0952e27ba4c270992c644ce8a0e17456c72fd..a85a52b2c6ed7c1c7e8a6a1b77a028de58721aa1 100644 --- a/src/core/lib/slice/slice.c +++ b/src/core/lib/slice/slice.c @@ -368,3 +368,11 @@ int grpc_slice_str_cmp(grpc_slice a, const char *b) { if (d != 0) return d; return memcmp(GRPC_SLICE_START_PTR(a), b, b_length); } + +int grpc_slice_is_equivalent(grpc_slice a, grpc_slice b) { + if (a.refcount == NULL || b.refcount == NULL) { + return grpc_slice_cmp(a, b) == 0; + } + return a.data.refcounted.length == b.data.refcounted.length && + a.data.refcounted.bytes == b.data.refcounted.bytes; +} diff --git a/src/core/lib/slice/slice_buffer.c b/src/core/lib/slice/slice_buffer.c index 872bd10a096dd8e6a1e743e6b0714b2c6b737580..08eaf4963a6e406482bf2e05b7e7de9eec230fed 100644 --- a/src/core/lib/slice/slice_buffer.c +++ b/src/core/lib/slice/slice_buffer.c @@ -75,10 +75,7 @@ void grpc_slice_buffer_destroy_internal(grpc_exec_ctx *exec_ctx, void grpc_slice_buffer_destroy(grpc_slice_buffer *sb) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_slice_buffer_reset_and_unref_internal(&exec_ctx, sb); - if (sb->slices != sb->inlined) { - gpr_free(sb->slices); - } + grpc_slice_buffer_destroy_internal(&exec_ctx, sb); grpc_exec_ctx_finish(&exec_ctx); } diff --git a/src/core/lib/slice/slice_internal.h b/src/core/lib/slice/slice_internal.h index a027a3979b7d1de7c453f19d9ab6f0376b524ad3..8bfe066fdb43d55cea961612804d2f5a95ea6147 100644 --- a/src/core/lib/slice/slice_internal.h +++ b/src/core/lib/slice/slice_internal.h @@ -31,8 +31,8 @@ * */ -#ifndef GRPC_CORE_LIB_SUPPORT_SLICE_INTERNAL_H -#define GRPC_CORE_LIB_SUPPORT_SLICE_INTERNAL_H +#ifndef GRPC_CORE_LIB_SLICE_SLICE_INTERNAL_H +#define GRPC_CORE_LIB_SLICE_SLICE_INTERNAL_H #include <grpc/slice.h> #include <grpc/slice_buffer.h> @@ -50,4 +50,4 @@ void grpc_slice_intern_init(void); void grpc_slice_intern_shutdown(void); void grpc_test_only_set_slice_interning_hash_seed(uint32_t key); -#endif +#endif /* GRPC_CORE_LIB_SLICE_SLICE_INTERNAL_H */ diff --git a/src/core/lib/support/string.c b/src/core/lib/support/string.c index cafeb4364d0f082996c2fd8ce6f01697acbd5628..85b915f118fa33dc9d1e0aaf99407c20510b6c40 100644 --- a/src/core/lib/support/string.c +++ b/src/core/lib/support/string.c @@ -267,5 +267,28 @@ int gpr_stricmp(const char *a, const char *b) { return ca - cb; } +static void add_string_to_split(const char *beg, const char *end, char ***strs, + size_t *nstrs, size_t *capstrs) { + char *out = gpr_malloc((size_t)(end - beg) + 1); + memcpy(out, beg, (size_t)(end - beg)); + out[end - beg] = 0; + if (*nstrs == *capstrs) { + *capstrs = GPR_MAX(8, 2 * *capstrs); + *strs = gpr_realloc(*strs, sizeof(*strs) * *capstrs); + } + (*strs)[*nstrs] = out; + ++*nstrs; +} + void gpr_string_split(const char *input, const char *sep, char ***strs, - size_t *nstrs) {} + size_t *nstrs) { + char *next; + *strs = NULL; + *nstrs = 0; + size_t capstrs = 0; + while ((next = strstr(input, sep))) { + add_string_to_split(input, next, strs, nstrs, &capstrs); + input = next + strlen(sep); + } + add_string_to_split(input, input + strlen(input), strs, nstrs, &capstrs); +} diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c index 9be13d84fe303c178872ad9404c402a90f209e8d..023b0411c7ef554fcd368d3e55cf39aa2db90dd0 100644 --- a/src/core/lib/surface/call.c +++ b/src/core/lib/surface/call.c @@ -124,6 +124,7 @@ struct grpc_call { grpc_channel *channel; grpc_call *parent; grpc_call *first_child; + gpr_timespec start_time; /* TODO(ctiller): share with cq if possible? */ gpr_mu mu; @@ -241,6 +242,7 @@ grpc_error *grpc_call_create(grpc_exec_ctx *exec_ctx, call->channel = args->channel; call->cq = args->cq; call->parent = args->parent_call; + call->start_time = gpr_now(GPR_CLOCK_MONOTONIC); /* Always support no compression */ GPR_BITSET(&call->encodings_accepted_by_peer, GRPC_COMPRESS_NONE); call->is_client = args->server_transport_data == NULL; @@ -313,10 +315,10 @@ grpc_error *grpc_call_create(grpc_exec_ctx *exec_ctx, GRPC_CHANNEL_INTERNAL_REF(args->channel, "call"); /* initial refcount dropped by grpc_call_destroy */ - grpc_error *error = - grpc_call_stack_init(exec_ctx, channel_stack, 1, destroy_call, call, - call->context, args->server_transport_data, path, - send_deadline, CALL_STACK_FROM_CALL(call)); + grpc_error *error = grpc_call_stack_init( + exec_ctx, channel_stack, 1, destroy_call, call, call->context, + args->server_transport_data, path, call->start_time, send_deadline, + CALL_STACK_FROM_CALL(call)); if (error != GRPC_ERROR_NONE) { grpc_status_code status; const char *error_str; @@ -428,6 +430,8 @@ static void destroy_call(grpc_exec_ctx *exec_ctx, void *call, get_final_status(call, set_status_value_directly, &c->final_info.final_status); + c->final_info.stats.latency = + gpr_time_sub(gpr_now(GPR_CLOCK_MONOTONIC), c->start_time); grpc_call_stack_destroy(exec_ctx, CALL_STACK_FROM_CALL(c), &c->final_info, c); GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, "call"); @@ -632,9 +636,6 @@ static int prepare_application_metadata( if (call->send_extra_metadata_count == 0) { prepend_extra_metadata = 0; } else { - for (i = 0; i < call->send_extra_metadata_count; i++) { - GRPC_MDELEM_REF(call->send_extra_metadata[i].md); - } for (i = 1; i < call->send_extra_metadata_count; i++) { call->send_extra_metadata[i].prev = &call->send_extra_metadata[i - 1]; } @@ -680,6 +681,7 @@ static int prepare_application_metadata( &call->send_extra_metadata[call->send_extra_metadata_count - 1]; batch->list.head->prev = NULL; batch->list.tail->next = NULL; + call->send_extra_metadata_count = 0; break; case 3: { /* prepend AND md */ @@ -695,6 +697,7 @@ static int prepare_application_metadata( batch->list.tail = linked_from_md(last_md); batch->list.head->prev = NULL; batch->list.tail->next = NULL; + call->send_extra_metadata_count = 0; break; } default: @@ -961,38 +964,35 @@ static grpc_mdelem *publish_app_metadata(grpc_call *call, grpc_mdelem *elem, return elem; } -typedef struct { - grpc_exec_ctx *exec_ctx; - grpc_call *call; -} recv_filter_args; - -static grpc_mdelem *recv_initial_filter(void *args, grpc_mdelem *elem) { - recv_filter_args *a = args; - elem = recv_common_filter(a->exec_ctx, a->call, elem); +static grpc_mdelem *recv_initial_filter(grpc_exec_ctx *exec_ctx, void *args, + grpc_mdelem *elem) { + grpc_call *call = args; + elem = recv_common_filter(exec_ctx, call, elem); if (elem == NULL) { return NULL; } else if (elem->key == GRPC_MDSTR_GRPC_ENCODING) { GPR_TIMER_BEGIN("incoming_compression_algorithm", 0); - set_incoming_compression_algorithm(a->call, decode_compression(elem)); + set_incoming_compression_algorithm(call, decode_compression(elem)); GPR_TIMER_END("incoming_compression_algorithm", 0); return NULL; } else if (elem->key == GRPC_MDSTR_GRPC_ACCEPT_ENCODING) { GPR_TIMER_BEGIN("encodings_accepted_by_peer", 0); - set_encodings_accepted_by_peer(a->exec_ctx, a->call, elem); + set_encodings_accepted_by_peer(exec_ctx, call, elem); GPR_TIMER_END("encodings_accepted_by_peer", 0); return NULL; } else { - return publish_app_metadata(a->call, elem, 0); + return publish_app_metadata(call, elem, 0); } } -static grpc_mdelem *recv_trailing_filter(void *args, grpc_mdelem *elem) { - recv_filter_args *a = args; - elem = recv_common_filter(a->exec_ctx, a->call, elem); +static grpc_mdelem *recv_trailing_filter(grpc_exec_ctx *exec_ctx, void *args, + grpc_mdelem *elem) { + grpc_call *call = args; + elem = recv_common_filter(exec_ctx, call, elem); if (elem == NULL) { return NULL; } else { - return publish_app_metadata(a->call, elem, 1); + return publish_app_metadata(call, elem, 1); } } @@ -1238,8 +1238,7 @@ static void receiving_initial_metadata_ready(grpc_exec_ctx *exec_ctx, if (error == GRPC_ERROR_NONE) { grpc_metadata_batch *md = &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */]; - recv_filter_args args = {exec_ctx, call}; - grpc_metadata_batch_filter(exec_ctx, md, recv_initial_filter, &args); + grpc_metadata_batch_filter(exec_ctx, md, recv_initial_filter, call); GPR_TIMER_BEGIN("validate_filtered_metadata", 0); validate_filtered_metadata(exec_ctx, bctl); @@ -1305,8 +1304,7 @@ static void finish_batch(grpc_exec_ctx *exec_ctx, void *bctlp, if (bctl->recv_final_op) { grpc_metadata_batch *md = &call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */]; - recv_filter_args args = {exec_ctx, call}; - grpc_metadata_batch_filter(exec_ctx, md, recv_trailing_filter, &args); + grpc_metadata_batch_filter(exec_ctx, md, recv_trailing_filter, call); call->received_final_op = true; /* propagate cancellation to any interested children */ diff --git a/src/core/lib/surface/init.c b/src/core/lib/surface/init.c index 5a8c77f04637ed366c74abafaf387cabdb6a1f85..91b8f2b0683abdf23bc61cb5279b93cfe4e4e47a 100644 --- a/src/core/lib/surface/init.c +++ b/src/core/lib/surface/init.c @@ -229,9 +229,9 @@ void grpc_shutdown(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; gpr_mu_lock(&g_init_mu); if (--g_initializations == 0) { - grpc_executor_shutdown(); + grpc_executor_shutdown(&exec_ctx); grpc_cq_global_shutdown(); - grpc_iomgr_shutdown(); + grpc_iomgr_shutdown(&exec_ctx); gpr_timers_global_destroy(); grpc_tracer_shutdown(); for (i = g_number_of_plugins; i >= 0; i--) { diff --git a/src/core/lib/surface/server.c b/src/core/lib/surface/server.c index 530e5ed46ce03708527ac6cc0e5185de329f677e..03e0913a91528352fecfa993ccd8f0e42b2d7637 100644 --- a/src/core/lib/surface/server.c +++ b/src/core/lib/surface/server.c @@ -196,6 +196,7 @@ struct grpc_server { grpc_completion_queue **cqs; grpc_pollset **pollsets; size_t cq_count; + size_t pollset_count; bool started; /* The two following mutexes control access to server-state @@ -740,7 +741,8 @@ static void maybe_finish_shutdown(grpc_exec_ctx *exec_ctx, } } -static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) { +static grpc_mdelem *server_filter(grpc_exec_ctx *exec_ctx, void *user_data, + grpc_mdelem *md) { grpc_call_element *elem = user_data; call_data *calld = elem->call_data; if (md->key == GRPC_MDSTR_PATH) { @@ -1087,7 +1089,7 @@ void grpc_server_start(grpc_server *server) { GRPC_API_TRACE("grpc_server_start(server=%p)", 1, (server)); server->started = true; - size_t pollset_count = 0; + server->pollset_count = 0; server->pollsets = gpr_malloc(sizeof(grpc_pollset *) * server->cq_count); server->request_freelist_per_cq = gpr_malloc(sizeof(*server->request_freelist_per_cq) * server->cq_count); @@ -1095,7 +1097,8 @@ void grpc_server_start(grpc_server *server) { gpr_malloc(sizeof(*server->requested_calls_per_cq) * server->cq_count); for (i = 0; i < server->cq_count; i++) { if (!grpc_cq_is_non_listening_server_cq(server->cqs[i])) { - server->pollsets[pollset_count++] = grpc_cq_pollset(server->cqs[i]); + server->pollsets[server->pollset_count++] = + grpc_cq_pollset(server->cqs[i]); } server->request_freelist_per_cq[i] = gpr_stack_lockfree_create((size_t)server->max_requested_calls_per_cq); @@ -1114,7 +1117,8 @@ void grpc_server_start(grpc_server *server) { } for (l = server->listeners; l; l = l->next) { - l->start(&exec_ctx, server, l->arg, server->pollsets, pollset_count); + l->start(&exec_ctx, server, l->arg, server->pollsets, + server->pollset_count); } grpc_exec_ctx_finish(&exec_ctx); @@ -1122,7 +1126,7 @@ void grpc_server_start(grpc_server *server) { void grpc_server_get_pollsets(grpc_server *server, grpc_pollset ***pollsets, size_t *pollset_count) { - *pollset_count = server->cq_count; + *pollset_count = server->pollset_count; *pollsets = server->pollsets; } diff --git a/src/core/lib/transport/connectivity_state.c b/src/core/lib/transport/connectivity_state.c index fdb53078143e9607d8ebda4382dc50e09e75b38f..89072879d94bea8f5c3665b13f49298e42cfee4a 100644 --- a/src/core/lib/transport/connectivity_state.c +++ b/src/core/lib/transport/connectivity_state.c @@ -43,6 +43,8 @@ int grpc_connectivity_state_trace = 0; const char *grpc_connectivity_state_name(grpc_connectivity_state state) { switch (state) { + case GRPC_CHANNEL_INIT: + return "INIT"; case GRPC_CHANNEL_IDLE: return "IDLE"; case GRPC_CHANNEL_CONNECTING: @@ -159,6 +161,7 @@ void grpc_connectivity_state_set(grpc_exec_ctx *exec_ctx, grpc_error_free_string(error_string); } switch (state) { + case GRPC_CHANNEL_INIT: case GRPC_CHANNEL_CONNECTING: case GRPC_CHANNEL_IDLE: case GRPC_CHANNEL_READY: diff --git a/src/core/lib/transport/metadata.c b/src/core/lib/transport/metadata.c index 9b5d8099c71dc0e58d9391c27e85b7356f415a05..54c39df6a7f44722d4a05f780c0532514c288682 100644 --- a/src/core/lib/transport/metadata.c +++ b/src/core/lib/transport/metadata.c @@ -736,8 +736,8 @@ void *grpc_mdelem_get_user_data(grpc_mdelem *md, void (*destroy_func)(void *)) { return result; } -void grpc_mdelem_set_user_data(grpc_mdelem *md, void (*destroy_func)(void *), - void *user_data) { +void *grpc_mdelem_set_user_data(grpc_mdelem *md, void (*destroy_func)(void *), + void *user_data) { internal_metadata *im = (internal_metadata *)md; GPR_ASSERT(!is_mdelem_static(md)); GPR_ASSERT((user_data == NULL) == (destroy_func == NULL)); @@ -748,11 +748,12 @@ void grpc_mdelem_set_user_data(grpc_mdelem *md, void (*destroy_func)(void *), if (destroy_func != NULL) { destroy_func(user_data); } - return; + return (void *)gpr_atm_no_barrier_load(&im->user_data); } gpr_atm_no_barrier_store(&im->user_data, (gpr_atm)user_data); gpr_atm_rel_store(&im->destroy_user_data, (gpr_atm)destroy_func); gpr_mu_unlock(&im->mu_user_data); + return user_data; } grpc_slice grpc_mdstr_as_base64_encoded_and_huffman_compressed(grpc_mdstr *gs) { diff --git a/src/core/lib/transport/metadata.h b/src/core/lib/transport/metadata.h index 8a64be70250159d1b16da10b2e391968701986c9..991eee96f1c1df7189252ace3be719af8109103a 100644 --- a/src/core/lib/transport/metadata.h +++ b/src/core/lib/transport/metadata.h @@ -126,8 +126,8 @@ size_t grpc_mdelem_get_size_in_hpack_table(grpc_mdelem *elem); is used as a type tag and is checked during user_data fetch. */ void *grpc_mdelem_get_user_data(grpc_mdelem *md, void (*if_destroy_func)(void *)); -void grpc_mdelem_set_user_data(grpc_mdelem *md, void (*destroy_func)(void *), - void *user_data); +void *grpc_mdelem_set_user_data(grpc_mdelem *md, void (*destroy_func)(void *), + void *user_data); /* Reference counting */ //#define GRPC_METADATA_REFCOUNT_DEBUG diff --git a/src/core/lib/transport/metadata_batch.c b/src/core/lib/transport/metadata_batch.c index 4430224e70ff5b0cbe31b8afe49618a00e997d18..b62ecc3aa6f86aa9b17741e11ed751d1af80058c 100644 --- a/src/core/lib/transport/metadata_batch.c +++ b/src/core/lib/transport/metadata_batch.c @@ -143,7 +143,8 @@ void grpc_metadata_batch_move(grpc_metadata_batch *dst, void grpc_metadata_batch_filter(grpc_exec_ctx *exec_ctx, grpc_metadata_batch *batch, - grpc_mdelem *(*filter)(void *user_data, + grpc_mdelem *(*filter)(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_mdelem *elem), void *user_data) { grpc_linked_mdelem *l; @@ -154,7 +155,7 @@ void grpc_metadata_batch_filter(grpc_exec_ctx *exec_ctx, assert_valid_list(&batch->list); for (l = batch->list.head; l; l = next) { grpc_mdelem *orig = l->md; - grpc_mdelem *filt = filter(user_data, orig); + grpc_mdelem *filt = filter(exec_ctx, user_data, orig); next = l->next; if (filt == NULL) { if (l->prev) { @@ -181,7 +182,8 @@ void grpc_metadata_batch_filter(grpc_exec_ctx *exec_ctx, GPR_TIMER_END("grpc_metadata_batch_filter", 0); } -static grpc_mdelem *no_metadata_for_you(void *user_data, grpc_mdelem *elem) { +static grpc_mdelem *no_metadata_for_you(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_mdelem *elem) { return NULL; } diff --git a/src/core/lib/transport/metadata_batch.h b/src/core/lib/transport/metadata_batch.h index 862c21b45b24485693ab50de9749f3fe5a6d561c..c0bd5174abb97fe19efb7fa0697b2bccb2656780 100644 --- a/src/core/lib/transport/metadata_batch.h +++ b/src/core/lib/transport/metadata_batch.h @@ -122,7 +122,8 @@ void grpc_metadata_batch_add_tail(grpc_metadata_batch *batch, the element will be moved to the garbage list. */ void grpc_metadata_batch_filter(grpc_exec_ctx *exec_ctx, grpc_metadata_batch *batch, - grpc_mdelem *(*filter)(void *user_data, + grpc_mdelem *(*filter)(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_mdelem *elem), void *user_data); diff --git a/src/core/lib/transport/pid_controller.h b/src/core/lib/transport/pid_controller.h index 059b5b08346a48b1f9d13e9fb07584799e3a63f3..83c82d64713e8df6024d66f1cdbf5ea4b7bccc04 100644 --- a/src/core/lib/transport/pid_controller.h +++ b/src/core/lib/transport/pid_controller.h @@ -61,4 +61,4 @@ void grpc_pid_controller_reset(grpc_pid_controller *pid_controller); double grpc_pid_controller_update(grpc_pid_controller *pid_controller, double error, double dt); -#endif +#endif /* GRPC_CORE_LIB_TRANSPORT_PID_CONTROLLER_H */ diff --git a/src/core/lib/transport/transport.c b/src/core/lib/transport/transport.c index 1b79520e688ad1b7e033a5882e955192590dfe56..9bc278c1334428eed04a8a5f2df6186b4e53bd80 100644 --- a/src/core/lib/transport/transport.c +++ b/src/core/lib/transport/transport.c @@ -161,6 +161,11 @@ char *grpc_transport_get_peer(grpc_exec_ctx *exec_ctx, return transport->vtable->get_peer(exec_ctx, transport); } +grpc_endpoint *grpc_transport_get_endpoint(grpc_exec_ctx *exec_ctx, + grpc_transport *transport) { + return transport->vtable->get_endpoint(exec_ctx, transport); +} + void grpc_transport_stream_op_finish_with_failure(grpc_exec_ctx *exec_ctx, grpc_transport_stream_op *op, grpc_error *error) { diff --git a/src/core/lib/transport/transport.h b/src/core/lib/transport/transport.h index 3e38d98f28abfe5869b6a2af89d02545b3c012ca..d1281830aa0394d594d54a02f18ea6656093c832 100644 --- a/src/core/lib/transport/transport.h +++ b/src/core/lib/transport/transport.h @@ -37,6 +37,7 @@ #include <stddef.h> #include "src/core/lib/channel/context.h" +#include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/polling_entity.h" #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" @@ -296,6 +297,10 @@ void grpc_transport_destroy(grpc_exec_ctx *exec_ctx, grpc_transport *transport); char *grpc_transport_get_peer(grpc_exec_ctx *exec_ctx, grpc_transport *transport); +/* Get the endpoint used by \a transport */ +grpc_endpoint *grpc_transport_get_endpoint(grpc_exec_ctx *exec_ctx, + grpc_transport *transport); + /* Allocate a grpc_transport_op, and preconfigure the on_consumed closure to \a on_consumed and then delete the returned transport op */ grpc_transport_op *grpc_make_transport_op(grpc_closure *on_consumed); diff --git a/src/core/lib/transport/transport_impl.h b/src/core/lib/transport/transport_impl.h index fc7140671b9504e5e4c246a1783df2c65b7d45c4..8553148c35fd984226fd2587c3be4bd138055b51 100644 --- a/src/core/lib/transport/transport_impl.h +++ b/src/core/lib/transport/transport_impl.h @@ -74,6 +74,9 @@ typedef struct grpc_transport_vtable { /* implementation of grpc_transport_get_peer */ char *(*get_peer)(grpc_exec_ctx *exec_ctx, grpc_transport *self); + + /* implementation of grpc_transport_get_endpoint */ + grpc_endpoint *(*get_endpoint)(grpc_exec_ctx *exec_ctx, grpc_transport *self); } grpc_transport_vtable; /* an instance of a grpc transport */ diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc index d86ba9dd4e8c4760a80d7f299787ff3e61943830..bc0b68b3e044945f6fa38055edeb65efd46bb395 100644 --- a/src/cpp/common/channel_arguments.cc +++ b/src/cpp/common/channel_arguments.cc @@ -38,8 +38,11 @@ #include <grpc++/resource_quota.h> #include <grpc/impl/codegen/grpc_types.h> #include <grpc/support/log.h> +extern "C" { #include "src/core/lib/channel/channel_args.h" - +#include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/socket_mutator.h" +} namespace grpc { ChannelArguments::ChannelArguments() { @@ -88,6 +91,26 @@ void ChannelArguments::SetCompressionAlgorithm( SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, algorithm); } +void ChannelArguments::SetSocketMutator(grpc_socket_mutator* mutator) { + if (!mutator) { + return; + } + grpc_arg mutator_arg = grpc_socket_mutator_to_arg(mutator); + bool replaced = false; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + for (auto it = args_.begin(); it != args_.end(); ++it) { + if (it->type == mutator_arg.type && + grpc::string(it->key) == grpc::string(mutator_arg.key)) { + it->value.pointer.vtable->destroy(&exec_ctx, it->value.pointer.p); + it->value.pointer = mutator_arg.value.pointer; + } + } + grpc_exec_ctx_finish(&exec_ctx); + if (!replaced) { + args_.push_back(mutator_arg); + } +} + // Note: a second call to this will add in front the result of the first call. // An example is calling this on a copy of ChannelArguments which already has a // prefix. The user can build up a prefix string by calling this multiple times, diff --git a/src/cpp/common/channel_filter.cc b/src/cpp/common/channel_filter.cc index ad2c0f22950436aebc7c6f3ef779d1eb6e7b374c..c0dc9dd63e5a598a155f36b76ee4724974cafbd4 100644 --- a/src/cpp/common/channel_filter.cc +++ b/src/cpp/common/channel_filter.cc @@ -40,11 +40,12 @@ namespace grpc { // MetadataBatch -grpc_linked_mdelem *MetadataBatch::AddMetadata(const string &key, +grpc_linked_mdelem *MetadataBatch::AddMetadata(grpc_exec_ctx *exec_ctx, + const string &key, const string &value) { grpc_linked_mdelem *storage = new grpc_linked_mdelem; memset(storage, 0, sizeof(grpc_linked_mdelem)); - storage->md = grpc_mdelem_from_strings(key.c_str(), value.c_str()); + storage->md = grpc_mdelem_from_strings(exec_ctx, key.c_str(), value.c_str()); grpc_metadata_batch_link_head(batch_, storage); return storage; } @@ -89,7 +90,8 @@ std::vector<FilterRecord> *channel_filters; namespace { -bool MaybeAddFilter(grpc_channel_stack_builder *builder, void *arg) { +bool MaybeAddFilter(grpc_exec_ctx *exec_ctx, + grpc_channel_stack_builder *builder, void *arg) { const FilterRecord &filter = *(FilterRecord *)arg; if (filter.include_filter) { const grpc_channel_args *args = diff --git a/src/cpp/common/channel_filter.h b/src/cpp/common/channel_filter.h index e420efc71c9b089701501789e1a070aa8de9fdf5..65f44660d2c6c787421047318e460fc245935a9f 100644 --- a/src/cpp/common/channel_filter.h +++ b/src/cpp/common/channel_filter.h @@ -70,7 +70,8 @@ class MetadataBatch { /// Adds metadata and returns the newly allocated storage. /// The caller takes ownership of the result, which must exist for the /// lifetime of the gRPC call. - grpc_linked_mdelem *AddMetadata(const string &key, const string &value); + grpc_linked_mdelem *AddMetadata(grpc_exec_ctx *exec_ctx, const string &key, + const string &value); class const_iterator : public std::iterator<std::bidirectional_iterator_tag, const grpc_mdelem> { diff --git a/src/csharp/Grpc.Core/Internal/AsyncCall.cs b/src/csharp/Grpc.Core/Internal/AsyncCall.cs index 5e61e9ec129bd39d22f66ab0add7fa4d617919d4..da45c4829dff122ff5882edb3d7aeb7a5727b297 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCall.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCall.cs @@ -388,35 +388,29 @@ namespace Grpc.Core.Internal private void Initialize(CompletionQueueSafeHandle cq) { - using (Profilers.ForCurrentThread().NewScope("AsyncCall.Initialize")) - { - var call = CreateNativeCall(cq); + var call = CreateNativeCall(cq); - details.Channel.AddCallReference(this); - InitializeInternal(call); - RegisterCancellationCallback(); - } + details.Channel.AddCallReference(this); + InitializeInternal(call); + RegisterCancellationCallback(); } private INativeCall CreateNativeCall(CompletionQueueSafeHandle cq) { - using (Profilers.ForCurrentThread().NewScope("AsyncCall.CreateNativeCall")) - { - if (injectedNativeCall != null) - { - return injectedNativeCall; // allows injecting a mock INativeCall in tests. - } + if (injectedNativeCall != null) + { + return injectedNativeCall; // allows injecting a mock INativeCall in tests. + } - var parentCall = details.Options.PropagationToken != null ? details.Options.PropagationToken.ParentCall : CallSafeHandle.NullInstance; + var parentCall = details.Options.PropagationToken != null ? details.Options.PropagationToken.ParentCall : CallSafeHandle.NullInstance; - var credentials = details.Options.Credentials; - using (var nativeCredentials = credentials != null ? credentials.ToNativeCredentials() : null) - { - var result = details.Channel.Handle.CreateCall( - parentCall, ContextPropagationToken.DefaultMask, cq, - details.Method, details.Host, Timespec.FromDateTime(details.Options.Deadline.Value), nativeCredentials); - return result; - } + var credentials = details.Options.Credentials; + using (var nativeCredentials = credentials != null ? credentials.ToNativeCredentials() : null) + { + var result = details.Channel.Handle.CreateCall( + parentCall, ContextPropagationToken.DefaultMask, cq, + details.Method, details.Host, Timespec.FromDateTime(details.Options.Deadline.Value), nativeCredentials); + return result; } } @@ -456,47 +450,44 @@ namespace Grpc.Core.Internal // NOTE: because this event is a result of batch containing GRPC_OP_RECV_STATUS_ON_CLIENT, // success will be always set to true. - using (Profilers.ForCurrentThread().NewScope("AsyncCall.HandleUnaryResponse")) + TaskCompletionSource<object> delayedStreamingWriteTcs = null; + TResponse msg = default(TResponse); + var deserializeException = TryDeserialize(receivedMessage, out msg); + + lock (myLock) { - TaskCompletionSource<object> delayedStreamingWriteTcs = null; - TResponse msg = default(TResponse); - var deserializeException = TryDeserialize(receivedMessage, out msg); + finished = true; - lock (myLock) + if (deserializeException != null && receivedStatus.Status.StatusCode == StatusCode.OK) { - finished = true; - - if (deserializeException != null && receivedStatus.Status.StatusCode == StatusCode.OK) - { - receivedStatus = new ClientSideStatus(DeserializeResponseFailureStatus, receivedStatus.Trailers); - } - finishedStatus = receivedStatus; - - if (isStreamingWriteCompletionDelayed) - { - delayedStreamingWriteTcs = streamingWriteTcs; - streamingWriteTcs = null; - } - - ReleaseResourcesIfPossible(); + receivedStatus = new ClientSideStatus(DeserializeResponseFailureStatus, receivedStatus.Trailers); } + finishedStatus = receivedStatus; - responseHeadersTcs.SetResult(responseHeaders); - - if (delayedStreamingWriteTcs != null) + if (isStreamingWriteCompletionDelayed) { - delayedStreamingWriteTcs.SetException(GetRpcExceptionClientOnly()); + delayedStreamingWriteTcs = streamingWriteTcs; + streamingWriteTcs = null; } - var status = receivedStatus.Status; - if (status.StatusCode != StatusCode.OK) - { - unaryResponseTcs.SetException(new RpcException(status)); - return; - } + ReleaseResourcesIfPossible(); + } + + responseHeadersTcs.SetResult(responseHeaders); - unaryResponseTcs.SetResult(msg); + if (delayedStreamingWriteTcs != null) + { + delayedStreamingWriteTcs.SetException(GetRpcExceptionClientOnly()); + } + + var status = receivedStatus.Status; + if (status.StatusCode != StatusCode.OK) + { + unaryResponseTcs.SetException(new RpcException(status)); + return; } + + unaryResponseTcs.SetResult(msg); } /// <summary> diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs index 9f9d260e7ebce7f19d7b4166285d7f9ffe4fa9e1..8668903f6e9ff37eea1ed7a22d46a5e717eaa8e1 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs @@ -181,19 +181,16 @@ namespace Grpc.Core.Internal /// </summary> protected bool ReleaseResourcesIfPossible() { - using (Profilers.ForCurrentThread().NewScope("AsyncCallBase.ReleaseResourcesIfPossible")) + if (!disposed && call != null) { - if (!disposed && call != null) + bool noMoreSendCompletions = streamingWriteTcs == null && (halfcloseRequested || cancelRequested || finished); + if (noMoreSendCompletions && readingDone && finished) { - bool noMoreSendCompletions = streamingWriteTcs == null && (halfcloseRequested || cancelRequested || finished); - if (noMoreSendCompletions && readingDone && finished) - { - ReleaseResources(); - return true; - } + ReleaseResources(); + return true; } - return false; } + return false; } protected abstract bool IsClient @@ -229,28 +226,20 @@ namespace Grpc.Core.Internal protected byte[] UnsafeSerialize(TWrite msg) { - using (Profilers.ForCurrentThread().NewScope("AsyncCallBase.UnsafeSerialize")) - { - return serializer(msg); - } + return serializer(msg); } protected Exception TryDeserialize(byte[] payload, out TRead msg) { - using (Profilers.ForCurrentThread().NewScope("AsyncCallBase.TryDeserialize")) + try { - try - { - - msg = deserializer(payload); - return null; - - } - catch (Exception e) - { - msg = default(TRead); - return e; - } + msg = deserializer(payload); + return null; + } + catch (Exception e) + { + msg = default(TRead); + return e; } } diff --git a/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs b/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs index 82361f57979acc62e2c3c2a82e8f534bf0a7ba3d..f817a61bce832c951527cfdd7c725999dc2b8b49 100644 --- a/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs @@ -76,11 +76,8 @@ namespace Grpc.Core.Internal public void StartUnary(BatchContextSafeHandle ctx, byte[] payload, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags) { - using (Profilers.ForCurrentThread().NewScope("CallSafeHandle.StartUnary")) - { - Native.grpcsharp_call_start_unary(this, ctx, payload, new UIntPtr((ulong)payload.Length), metadataArray, writeFlags) - .CheckOk(); - } + Native.grpcsharp_call_start_unary(this, ctx, payload, new UIntPtr((ulong)payload.Length), metadataArray, writeFlags) + .CheckOk(); } public void StartClientStreaming(UnaryResponseClientHandler callback, MetadataArraySafeHandle metadataArray) diff --git a/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs b/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs index 62864dff0cb88cc774471aed241cfa449b0599ad..0fb6360a23e2fbba54ff8d53bf9d6718d7c34afc 100644 --- a/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs @@ -65,16 +65,13 @@ namespace Grpc.Core.Internal public CallSafeHandle CreateCall(CallSafeHandle parentCall, ContextPropagationFlags propagationMask, CompletionQueueSafeHandle cq, string method, string host, Timespec deadline, CallCredentialsSafeHandle credentials) { - using (Profilers.ForCurrentThread().NewScope("ChannelSafeHandle.CreateCall")) + var result = Native.grpcsharp_channel_create_call(this, parentCall, propagationMask, cq, method, host, deadline); + if (credentials != null) { - var result = Native.grpcsharp_channel_create_call(this, parentCall, propagationMask, cq, method, host, deadline); - if (credentials != null) - { - result.SetCredentials(credentials); - } - result.Initialize(cq); - return result; + result.SetCredentials(credentials); } + result.Initialize(cq); + return result; } public ChannelState CheckConnectivityState(bool tryToConnect) diff --git a/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs b/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs index 46f562422315ef5737281dff18c4528de9089e63..6c9a31921ebf8245114fe4aca1f7e7251233c1f5 100644 --- a/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs @@ -70,10 +70,7 @@ namespace Grpc.Core.Internal public CompletionQueueEvent Pluck(IntPtr tag) { - using (Profilers.ForCurrentThread().NewScope("CompletionQueueSafeHandle.Pluck")) - { - return Native.grpcsharp_completion_queue_pluck(this, tag); - } + return Native.grpcsharp_completion_queue_pluck(this, tag); } /// <summary> diff --git a/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs b/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs index a446c1f99f2f1ff6d239d3e11db5c22e83b69fd3..25a6589f115e9bf2315901a7dda7b7d708010a19 100644 --- a/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs +++ b/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs @@ -37,6 +37,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Grpc.Core.Logging; +using Grpc.Core.Profiling; using Grpc.Core.Utils; namespace Grpc.Core.Internal @@ -54,6 +55,8 @@ namespace Grpc.Core.Internal readonly int poolSize; readonly int completionQueueCount; + readonly List<BasicProfiler> threadProfilers = new List<BasicProfiler>(); // profilers assigned to threadpool threads + bool stopRequested; IReadOnlyCollection<CompletionQueueSafeHandle> completionQueues; @@ -82,7 +85,8 @@ namespace Grpc.Core.Internal for (int i = 0; i < poolSize; i++) { - threads.Add(CreateAndStartThread(i)); + var optionalProfiler = i < threadProfilers.Count ? threadProfilers[i] : null; + threads.Add(CreateAndStartThread(i, optionalProfiler)); } } } @@ -111,6 +115,11 @@ namespace Grpc.Core.Internal { cq.Dispose(); } + + for (int i = 0; i < threadProfilers.Count; i++) + { + threadProfilers[i].Dump(string.Format("grpc_trace_thread_{0}.txt", i)); + } }); } @@ -137,12 +146,12 @@ namespace Grpc.Core.Internal } } - private Thread CreateAndStartThread(int threadIndex) + private Thread CreateAndStartThread(int threadIndex, IProfiler optionalProfiler) { var cqIndex = threadIndex % completionQueues.Count; var cq = completionQueues.ElementAt(cqIndex); - var thread = new Thread(new ThreadStart(() => RunHandlerLoop(cq))); + var thread = new Thread(new ThreadStart(() => RunHandlerLoop(cq, optionalProfiler))); thread.IsBackground = true; thread.Name = string.Format("grpc {0} (cq {1})", threadIndex, cqIndex); thread.Start(); @@ -153,8 +162,13 @@ namespace Grpc.Core.Internal /// <summary> /// Body of the polling thread. /// </summary> - private void RunHandlerLoop(CompletionQueueSafeHandle cq) + private void RunHandlerLoop(CompletionQueueSafeHandle cq, IProfiler optionalProfiler) { + if (optionalProfiler != null) + { + Profilers.SetForCurrentThread(optionalProfiler); + } + CompletionQueueEvent ev; do { diff --git a/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs b/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs index dc9f62fdab42e2b58c60d6c4b91b0941a9255c5e..05dda5b148694514fad3489a4177b9e9e8dfdbf7 100644 --- a/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs @@ -48,22 +48,19 @@ namespace Grpc.Core.Internal public static MetadataArraySafeHandle Create(Metadata metadata) { - using (Profilers.ForCurrentThread().NewScope("MetadataArraySafeHandle.Create")) + if (metadata.Count == 0) { - if (metadata.Count == 0) - { - return new MetadataArraySafeHandle(); - } + return new MetadataArraySafeHandle(); + } - // TODO(jtattermusch): we might wanna check that the metadata is readonly - var metadataArray = Native.grpcsharp_metadata_array_create(new UIntPtr((ulong)metadata.Count)); - for (int i = 0; i < metadata.Count; i++) - { - var valueBytes = metadata[i].GetSerializedValueUnsafe(); - Native.grpcsharp_metadata_array_add(metadataArray, metadata[i].Key, valueBytes, new UIntPtr((ulong)valueBytes.Length)); - } - return metadataArray; + // TODO(jtattermusch): we might wanna check that the metadata is readonly + var metadataArray = Native.grpcsharp_metadata_array_create(new UIntPtr((ulong)metadata.Count)); + for (int i = 0; i < metadata.Count; i++) + { + var valueBytes = metadata[i].GetSerializedValueUnsafe(); + Native.grpcsharp_metadata_array_add(metadataArray, metadata[i].Key, valueBytes, new UIntPtr((ulong)valueBytes.Length)); } + return metadataArray; } /// <summary> diff --git a/src/csharp/Grpc.Core/Profiling/Profilers.cs b/src/csharp/Grpc.Core/Profiling/Profilers.cs index aa0d96c0e02624165121e4603e723845ae18b8ab..6afabff6a799e4a8ce30464592838bbb1f3b2484 100644 --- a/src/csharp/Grpc.Core/Profiling/Profilers.cs +++ b/src/csharp/Grpc.Core/Profiling/Profilers.cs @@ -80,7 +80,7 @@ namespace Grpc.Core.Profiling ProfilerEntry[] entries; int count; - public BasicProfiler() : this(1024*1024) + public BasicProfiler() : this(20*1024*1024) { } diff --git a/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs b/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs index eb3bb8a28bbce51bb2ee390e7f986d6baf491110..d55e658d949d482f5f25c6cc8c54466188e12cbf 100644 --- a/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs +++ b/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs @@ -103,6 +103,34 @@ namespace Grpc.IntegrationTesting client.UnaryCall(new SimpleRequest { }, new CallOptions(credentials: callCredentials)); } + [Test] + public void MetadataCredentials_InterceptorLeavesMetadataEmpty() + { + var channelCredentials = ChannelCredentials.Create(TestCredentials.CreateSslCredentials(), + CallCredentials.FromInterceptor(new AsyncAuthInterceptor((context, metadata) => TaskUtils.CompletedTask))); + channel = new Channel(Host, server.Ports.Single().BoundPort, channelCredentials, options); + client = new TestService.TestServiceClient(channel); + + var ex = Assert.Throws<RpcException>(() => client.UnaryCall(new SimpleRequest { })); + // StatusCode.Unknown as the server-side handler throws an exception after not receiving the authorization header. + Assert.AreEqual(StatusCode.Unknown, ex.Status.StatusCode); + } + + [Test] + public void MetadataCredentials_InterceptorThrows() + { + var callCredentials = CallCredentials.FromInterceptor(new AsyncAuthInterceptor((context, metadata) => + { + throw new Exception("Auth interceptor throws"); + })); + var channelCredentials = ChannelCredentials.Create(TestCredentials.CreateSslCredentials(), callCredentials); + channel = new Channel(Host, server.Ports.Single().BoundPort, channelCredentials, options); + client = new TestService.TestServiceClient(channel); + + var ex = Assert.Throws<RpcException>(() => client.UnaryCall(new SimpleRequest { })); + Assert.AreEqual(StatusCode.Unauthenticated, ex.Status.StatusCode); + } + private class FakeTestService : TestService.TestServiceBase { public override Task<SimpleResponse> UnaryCall(SimpleRequest request, ServerCallContext context) diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c index 0bf5b0acf3258ccc573148f1bede8cb9440862b8..37d04eb10003adf778bee8d3e3ae084ea271870a 100644 --- a/src/csharp/ext/grpc_csharp_ext.c +++ b/src/csharp/ext/grpc_csharp_ext.c @@ -991,7 +991,11 @@ GPR_EXPORT void GPR_CALLTYPE grpcsharp_metadata_credentials_notify_from_plugin( grpc_credentials_plugin_metadata_cb cb, void *user_data, grpc_metadata_array *metadata, grpc_status_code status, const char *error_details) { - cb(user_data, metadata->metadata, metadata->count, status, error_details); + if (metadata) { + cb(user_data, metadata->metadata, metadata->count, status, error_details); + } else { + cb(user_data, NULL, 0, status, error_details); + } } typedef void(GPR_CALLTYPE *grpcsharp_metadata_interceptor_func)( diff --git a/src/node/src/common.js b/src/node/src/common.js index c6c6d597a887fb6fe9983590018d3fe89af8bc7f..98eabf5c0b895cc5f7783ee10588069e6f3ef744 100644 --- a/src/node/src/common.js +++ b/src/node/src/common.js @@ -141,8 +141,14 @@ exports.getProtobufServiceAttrs = function getProtobufServiceAttrs(service, binaryAsBase64 = options.binaryAsBase64; longsAsStrings = options.longsAsStrings; } - return _.fromPairs(_.map(service.children, function(method) { - return [_.camelCase(method.name), { + /* This slightly awkward construction is used to make sure we only use + lodash@3.10.1-compatible functions. A previous version used + _.fromPairs, which would be cleaner, but was introduced in lodash + version 4 */ + return _.zipObject(_.map(service.children, function(method) { + return _.camelCase(method.name); + }), _.map(service.children, function(method) { + return { path: prefix + method.name, requestStream: method.requestStream, responseStream: method.responseStream, @@ -150,11 +156,11 @@ exports.getProtobufServiceAttrs = function getProtobufServiceAttrs(service, responseType: method.resolvedResponseType, requestSerialize: serializeCls(method.resolvedRequestType.build()), requestDeserialize: deserializeCls(method.resolvedRequestType.build(), - binaryAsBase64, longsAsStrings), + binaryAsBase64, longsAsStrings), responseSerialize: serializeCls(method.resolvedResponseType.build()), responseDeserialize: deserializeCls(method.resolvedResponseType.build(), - binaryAsBase64, longsAsStrings) - }]; + binaryAsBase64, longsAsStrings) + }; })); }; diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index c0d6bba687e4b959f587e4a5212e11a76756ed2b..3ca4d07f3551e3eefce99bfbddb35c4bbc75b3fe 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -99,7 +99,6 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/endpoint_pair_windows.c', 'src/core/lib/iomgr/error.c', 'src/core/lib/iomgr/ev_epoll_linux.c', - 'src/core/lib/iomgr/ev_poll_and_epoll_posix.c', 'src/core/lib/iomgr/ev_poll_posix.c', 'src/core/lib/iomgr/ev_posix.c', 'src/core/lib/iomgr/exec_ctx.c', @@ -121,6 +120,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/resolve_address_windows.c', 'src/core/lib/iomgr/resource_quota.c', 'src/core/lib/iomgr/sockaddr_utils.c', + 'src/core/lib/iomgr/socket_mutator.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c index b8c7eef488109b7299e18d4c9fd2ba7f56a18fd7..bc411250a2ead30298570b5a38370a4a6aa485ae 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c @@ -190,6 +190,7 @@ grpc_slice_split_head_type grpc_slice_split_head_import; gpr_empty_slice_type gpr_empty_slice_import; grpc_slice_cmp_type grpc_slice_cmp_import; grpc_slice_str_cmp_type grpc_slice_str_cmp_import; +grpc_slice_is_equivalent_type grpc_slice_is_equivalent_import; grpc_slice_buffer_init_type grpc_slice_buffer_init_import; grpc_slice_buffer_destroy_type grpc_slice_buffer_destroy_import; grpc_slice_buffer_add_type grpc_slice_buffer_add_import; @@ -466,6 +467,7 @@ void grpc_rb_load_imports(HMODULE library) { gpr_empty_slice_import = (gpr_empty_slice_type) GetProcAddress(library, "gpr_empty_slice"); grpc_slice_cmp_import = (grpc_slice_cmp_type) GetProcAddress(library, "grpc_slice_cmp"); grpc_slice_str_cmp_import = (grpc_slice_str_cmp_type) GetProcAddress(library, "grpc_slice_str_cmp"); + grpc_slice_is_equivalent_import = (grpc_slice_is_equivalent_type) GetProcAddress(library, "grpc_slice_is_equivalent"); grpc_slice_buffer_init_import = (grpc_slice_buffer_init_type) GetProcAddress(library, "grpc_slice_buffer_init"); grpc_slice_buffer_destroy_import = (grpc_slice_buffer_destroy_type) GetProcAddress(library, "grpc_slice_buffer_destroy"); grpc_slice_buffer_add_import = (grpc_slice_buffer_add_type) GetProcAddress(library, "grpc_slice_buffer_add"); diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index ba436dde471b56fa571eab077452db43e47af79b..17b625c6f5ce466b0c7408b1d8d2a560589a2dea 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -521,6 +521,9 @@ extern grpc_slice_cmp_type grpc_slice_cmp_import; typedef int(*grpc_slice_str_cmp_type)(grpc_slice a, const char *b); extern grpc_slice_str_cmp_type grpc_slice_str_cmp_import; #define grpc_slice_str_cmp grpc_slice_str_cmp_import +typedef int(*grpc_slice_is_equivalent_type)(grpc_slice a, grpc_slice b); +extern grpc_slice_is_equivalent_type grpc_slice_is_equivalent_import; +#define grpc_slice_is_equivalent grpc_slice_is_equivalent_import typedef void(*grpc_slice_buffer_init_type)(grpc_slice_buffer *sb); extern grpc_slice_buffer_init_type grpc_slice_buffer_init_import; #define grpc_slice_buffer_init grpc_slice_buffer_init_import @@ -689,7 +692,7 @@ extern gpr_join_host_port_type gpr_join_host_port_import; typedef int(*gpr_split_host_port_type)(const char *name, char **host, char **port); extern gpr_split_host_port_type gpr_split_host_port_import; #define gpr_split_host_port gpr_split_host_port_import -typedef void(*gpr_log_type)(const char *file, int line, gpr_log_severity severity, const char *format, ...) GPRC_PRINT_FORMAT_CHECK(4, 5); +typedef void(*gpr_log_type)(const char *file, int line, gpr_log_severity severity, const char *format, ...) GPR_PRINT_FORMAT_CHECK(4, 5); extern gpr_log_type gpr_log_import; #define gpr_log gpr_log_import typedef void(*gpr_log_message_type)(const char *file, int line, gpr_log_severity severity, const char *message); @@ -710,7 +713,7 @@ extern gpr_format_message_type gpr_format_message_import; typedef char *(*gpr_strdup_type)(const char *src); extern gpr_strdup_type gpr_strdup_import; #define gpr_strdup gpr_strdup_import -typedef int(*gpr_asprintf_type)(char **strp, const char *format, ...) GPRC_PRINT_FORMAT_CHECK(2, 3); +typedef int(*gpr_asprintf_type)(char **strp, const char *format, ...) GPR_PRINT_FORMAT_CHECK(2, 3); extern gpr_asprintf_type gpr_asprintf_import; #define gpr_asprintf gpr_asprintf_import typedef const char *(*gpr_subprocess_binary_extension_type)(); diff --git a/test/core/channel/channel_args_test.c b/test/core/channel/channel_args_test.c index 261d0c591695c7778901ba24fbb543454d5a0d34..6a325bc12fbed8622ef0406d7e51cc66a9426fcc 100644 --- a/test/core/channel/channel_args_test.c +++ b/test/core/channel/channel_args_test.c @@ -141,12 +141,26 @@ static void test_compression_algorithm_states(void) { grpc_exec_ctx_finish(&exec_ctx); } +static void test_set_socket_mutator(void) { + grpc_channel_args *ch_args; + grpc_socket_mutator mutator; + grpc_socket_mutator_init(&mutator, NULL); + + ch_args = grpc_channel_args_set_socket_mutator(NULL, &mutator); + GPR_ASSERT(ch_args->num_args == 1); + GPR_ASSERT(strcmp(ch_args->args[0].key, GRPC_ARG_SOCKET_MUTATOR) == 0); + GPR_ASSERT(ch_args->args[0].type == GRPC_ARG_POINTER); + + grpc_channel_args_destroy(ch_args); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); test_create(); test_set_compression_algorithm(); test_compression_algorithm_states(); + test_set_socket_mutator(); grpc_shutdown(); return 0; } diff --git a/test/core/channel/channel_stack_test.c b/test/core/channel/channel_stack_test.c index 3ecc8c036449b70eeeb2245ff23f8975f13a7682..54575ae499dc5e72cb53264903acc60984d5292b 100644 --- a/test/core/channel/channel_stack_test.c +++ b/test/core/channel/channel_stack_test.c @@ -137,9 +137,10 @@ static void test_create_channel_stack(void) { GPR_ASSERT(*channel_data == 0); call_stack = gpr_malloc(channel_stack->call_stack_size); - grpc_error *error = grpc_call_stack_init( - &exec_ctx, channel_stack, 1, free_call, call_stack, NULL, NULL, path, - gpr_inf_future(GPR_CLOCK_MONOTONIC), call_stack); + grpc_error *error = + grpc_call_stack_init(&exec_ctx, channel_stack, 1, free_call, call_stack, + NULL, NULL, path, gpr_now(GPR_CLOCK_MONOTONIC), + gpr_inf_future(GPR_CLOCK_MONOTONIC), call_stack); GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(call_stack->count == 1); call_elem = grpc_call_stack_element(call_stack, 0); diff --git a/test/core/client_channel/lb_policies_test.c b/test/core/client_channel/lb_policies_test.c index 198aafb91f5273722f8af68eb7216ef6865a096a..c373505dd769b77637c8cc8d3f98b5d443fb5346 100644 --- a/test/core/client_channel/lb_policies_test.c +++ b/test/core/client_channel/lb_policies_test.c @@ -62,8 +62,14 @@ typedef struct servers_fixture { grpc_metadata_array *request_metadata_recv; } servers_fixture; +typedef struct request_sequences { + size_t n; + int *connections; + int *connectivity_states; +} request_sequences; + typedef void (*verifier_fn)(const servers_fixture *, grpc_channel *, - const int *, const size_t); + const request_sequences *, const size_t); typedef struct test_spec { size_t num_iters; @@ -227,9 +233,24 @@ static void teardown_servers(servers_fixture *f) { gpr_free(f); } +static request_sequences request_sequences_create(size_t n) { + request_sequences res; + res.n = n; + res.connections = gpr_malloc(sizeof(*res.connections) * n); + res.connectivity_states = gpr_malloc(sizeof(*res.connectivity_states) * n); + return res; +} + +static void request_sequences_destroy(const request_sequences *rseqs) { + gpr_free(rseqs->connections); + gpr_free(rseqs->connectivity_states); +} + /** Returns connection sequence (server indices), which must be freed */ -static int *perform_request(servers_fixture *f, grpc_channel *client, - request_data *rdata, const test_spec *spec) { +static request_sequences perform_request(servers_fixture *f, + grpc_channel *client, + request_data *rdata, + const test_spec *spec) { grpc_call *c; int s_idx; int *s_valid; @@ -239,11 +260,10 @@ static int *perform_request(servers_fixture *f, grpc_channel *client, size_t i, iter_num; grpc_event ev; int read_tag; - int *connection_sequence; int completed_client; + const request_sequences sequences = request_sequences_create(spec->num_iters); s_valid = gpr_malloc(sizeof(int) * f->num_servers); - connection_sequence = gpr_malloc(sizeof(int) * spec->num_iters); for (iter_num = 0; iter_num < spec->num_iters; iter_num++) { cq_verifier *cqv = cq_verifier_create(f->cq); @@ -260,7 +280,7 @@ static int *perform_request(servers_fixture *f, grpc_channel *client, } } - connection_sequence[iter_num] = -1; + sequences.connections[iter_num] = -1; grpc_metadata_array_init(&rdata->initial_metadata_recv); grpc_metadata_array_init(&rdata->trailing_metadata_recv); @@ -305,12 +325,14 @@ static int *perform_request(servers_fixture *f, grpc_channel *client, grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(1), NULL)); s_idx = -1; - while ( - (ev = grpc_completion_queue_next( - f->cq, GRPC_TIMEOUT_MILLIS_TO_DEADLINE(10 * RETRY_TIMEOUT), NULL)) - .type != GRPC_QUEUE_TIMEOUT) { + while ((ev = grpc_completion_queue_next( + f->cq, GRPC_TIMEOUT_MILLIS_TO_DEADLINE(RETRY_TIMEOUT), NULL)) + .type != GRPC_QUEUE_TIMEOUT) { GPR_ASSERT(ev.type == GRPC_OP_COMPLETE); read_tag = ((int)(intptr_t)ev.tag); + const grpc_connectivity_state conn_state = + grpc_channel_check_connectivity_state(client, 0); + sequences.connectivity_states[iter_num] = conn_state; gpr_log(GPR_DEBUG, "EVENT: success:%d, type:%d, tag:%d iter:%" PRIuPTR, ev.success, ev.type, read_tag, iter_num); if (ev.success && read_tag >= 1000) { @@ -318,7 +340,7 @@ static int *perform_request(servers_fixture *f, grpc_channel *client, /* only server notifications for non-shutdown events */ s_idx = read_tag - 1000; s_valid[s_idx] = 1; - connection_sequence[iter_num] = s_idx; + sequences.connections[iter_num] = s_idx; break; } else if (read_tag == 1) { gpr_log(GPR_DEBUG, "client timed out"); @@ -381,10 +403,9 @@ static int *perform_request(servers_fixture *f, grpc_channel *client, } } - GPR_ASSERT( - grpc_completion_queue_next( - f->cq, GRPC_TIMEOUT_MILLIS_TO_DEADLINE(2 * RETRY_TIMEOUT), NULL) - .type == GRPC_QUEUE_TIMEOUT); + GPR_ASSERT(grpc_completion_queue_next( + f->cq, GRPC_TIMEOUT_MILLIS_TO_DEADLINE(RETRY_TIMEOUT), NULL) + .type == GRPC_QUEUE_TIMEOUT); grpc_metadata_array_destroy(&rdata->initial_metadata_recv); grpc_metadata_array_destroy(&rdata->trailing_metadata_recv); @@ -401,7 +422,7 @@ static int *perform_request(servers_fixture *f, grpc_channel *client, gpr_free(s_valid); - return connection_sequence; + return sequences; } static grpc_call **perform_multirequest(servers_fixture *f, @@ -441,62 +462,10 @@ static grpc_call **perform_multirequest(servers_fixture *f, return calls; } -static void assert_channel_connectivity(grpc_channel *ch, - size_t num_accepted_conn_states, - int accepted_conn_state, ...) { - size_t i; - grpc_channel_stack *client_stack; - grpc_channel_element *client_channel_filter; - grpc_connectivity_state actual_conn_state; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - va_list ap; - - client_stack = grpc_channel_get_channel_stack(ch); - client_channel_filter = grpc_channel_stack_last_element(client_stack); - - actual_conn_state = grpc_client_channel_check_connectivity_state( - &exec_ctx, client_channel_filter, 0 /* don't try to connect */); - grpc_exec_ctx_finish(&exec_ctx); - va_start(ap, accepted_conn_state); - for (i = 0; i < num_accepted_conn_states; i++) { - if ((int)actual_conn_state == accepted_conn_state) { - break; - } - accepted_conn_state = va_arg(ap, grpc_connectivity_state); - } - va_end(ap); - if (i == num_accepted_conn_states) { - char **accepted_strs = - gpr_malloc(sizeof(char *) * num_accepted_conn_states); - char *accepted_str_joined; - va_start(ap, accepted_conn_state); - for (i = 0; i < num_accepted_conn_states; i++) { - GPR_ASSERT(gpr_asprintf(&accepted_strs[i], "%d", accepted_conn_state) > - 0); - accepted_conn_state = va_arg(ap, grpc_connectivity_state); - } - va_end(ap); - accepted_str_joined = gpr_strjoin_sep((const char **)accepted_strs, - num_accepted_conn_states, ", ", NULL); - gpr_log( - GPR_ERROR, - "Channel connectivity assertion failed: expected <one of [%s]>, got %d", - accepted_str_joined, actual_conn_state); - - for (i = 0; i < num_accepted_conn_states; i++) { - gpr_free(accepted_strs[i]); - } - gpr_free(accepted_strs); - gpr_free(accepted_str_joined); - abort(); - } -} - void run_spec(const test_spec *spec) { grpc_channel *client; char *client_hostport; char *servers_hostports_str; - int *actual_connection_sequence; request_data rdata; servers_fixture *f; grpc_channel_args args; @@ -524,14 +493,14 @@ void run_spec(const test_spec *spec) { gpr_log(GPR_INFO, "Testing '%s' with servers=%s client=%s", spec->description, servers_hostports_str, client_hostport); - actual_connection_sequence = perform_request(f, client, &rdata, spec); + const request_sequences sequences = perform_request(f, client, &rdata, spec); - spec->verifier(f, client, actual_connection_sequence, spec->num_iters); + spec->verifier(f, client, &sequences, spec->num_iters); gpr_free(client_hostport); gpr_free(servers_hostports_str); - gpr_free(actual_connection_sequence); gpr_free(rdata.call_details); + request_sequences_destroy(&sequences); grpc_channel_destroy(client); /* calls the LB's shutdown func */ teardown_servers(f); @@ -642,8 +611,16 @@ static void test_pending_calls(size_t concurrent_calls) { } static void test_get_channel_info() { - grpc_channel *channel = grpc_insecure_channel_create( - "test:127.0.0.1:1234?lb_policy=round_robin", NULL, NULL); + grpc_channel_args args; + grpc_arg arg_array[1]; + arg_array[0].type = GRPC_ARG_STRING; + arg_array[0].key = GRPC_ARG_LB_POLICY_NAME; + arg_array[0].value.string = "round_robin"; + args.num_args = 1; + args.args = arg_array; + + grpc_channel *channel = + grpc_insecure_channel_create("ipv4:127.0.0.1:1234", &args, NULL); // Ensures that resolver returns. grpc_channel_check_connectivity_state(channel, true /* try_to_connect */); // Use grpc_channel_get_info() to get LB policy name. @@ -676,29 +653,43 @@ static void print_failed_expectations(const int *expected_connection_sequence, static void verify_vanilla_round_robin(const servers_fixture *f, grpc_channel *client, - const int *actual_connection_sequence, + const request_sequences *sequences, const size_t num_iters) { - int *expected_connection_sequence; - size_t i; const size_t expected_seq_length = f->num_servers; /* verify conn. seq. expectation */ /* get the first sequence of "num_servers" elements */ - expected_connection_sequence = gpr_malloc(sizeof(int) * expected_seq_length); - memcpy(expected_connection_sequence, actual_connection_sequence, + int *expected_connection_sequence = + gpr_malloc(sizeof(int) * expected_seq_length); + memcpy(expected_connection_sequence, sequences->connections, sizeof(int) * expected_seq_length); - for (i = 0; i < num_iters; i++) { - const int actual = actual_connection_sequence[i]; + for (size_t i = 0; i < num_iters; i++) { + const int actual = sequences->connections[i]; const int expected = expected_connection_sequence[i % expected_seq_length]; if (actual != expected) { - print_failed_expectations(expected_connection_sequence, - actual_connection_sequence, expected_seq_length, - num_iters); + gpr_log( + GPR_ERROR, + "CONNECTION SEQUENCE FAILURE: expected %d, got %d at iteration #%d", + expected, actual, (int)i); + abort(); + } + } + + /* All servers are available, therefore all client subchannels are READY, even + * when we only need one for the client channel state to be READY */ + for (size_t i = 0; i < sequences->n; i++) { + const grpc_connectivity_state actual = sequences->connectivity_states[i]; + const grpc_connectivity_state expected = GRPC_CHANNEL_READY; + if (actual != expected) { + gpr_log(GPR_ERROR, + "CONNECTIVITY STATUS SEQUENCE FAILURE: expected '%s', got '%s' " + "at iteration #%d", + grpc_connectivity_state_name(expected), + grpc_connectivity_state_name(actual), (int)i); abort(); } } - assert_channel_connectivity(client, 1, GRPC_CHANNEL_READY); gpr_free(expected_connection_sequence); } @@ -707,7 +698,7 @@ static void verify_vanilla_round_robin(const servers_fixture *f, * given in "f") are killed */ static void verify_vanishing_floor_round_robin( const servers_fixture *f, grpc_channel *client, - const int *actual_connection_sequence, const size_t num_iters) { + const request_sequences *sequences, const size_t num_iters) { int *expected_connection_sequence; const size_t expected_seq_length = 2; size_t i; @@ -715,57 +706,83 @@ static void verify_vanishing_floor_round_robin( /* verify conn. seq. expectation */ /* copy the first full sequence (without -1s) */ expected_connection_sequence = gpr_malloc(sizeof(int) * expected_seq_length); - memcpy(expected_connection_sequence, actual_connection_sequence + 2, + memcpy(expected_connection_sequence, sequences->connections + 2, expected_seq_length * sizeof(int)); /* first two elements of the sequence should be [0 (1st server), -1 (failure)] */ - GPR_ASSERT(actual_connection_sequence[0] == 0); - GPR_ASSERT(actual_connection_sequence[1] == -1); + GPR_ASSERT(sequences->connections[0] == 0); + GPR_ASSERT(sequences->connections[1] == -1); /* the next two element must be [3, 0], repeating from that point: the 3 is * brought forth by servers 1 and 2 disappearing after the intial pick of 0 */ - GPR_ASSERT(actual_connection_sequence[2] == 3); - GPR_ASSERT(actual_connection_sequence[3] == 0); + GPR_ASSERT(sequences->connections[2] == 3); + GPR_ASSERT(sequences->connections[3] == 0); /* make sure that the expectation obliges */ for (i = 2; i < num_iters; i++) { - const int actual = actual_connection_sequence[i]; + const int actual = sequences->connections[i]; const int expected = expected_connection_sequence[i % expected_seq_length]; if (actual != expected) { print_failed_expectations(expected_connection_sequence, - actual_connection_sequence, expected_seq_length, + sequences->connections, expected_seq_length, num_iters); abort(); } } + + /* There's always at least one subchannel READY (connected), therefore the + * overall state of the client channel is READY at all times. */ + for (i = 0; i < sequences->n; i++) { + const grpc_connectivity_state actual = sequences->connectivity_states[i]; + const grpc_connectivity_state expected = GRPC_CHANNEL_READY; + if (actual != expected) { + gpr_log(GPR_ERROR, + "CONNECTIVITY STATUS SEQUENCE FAILURE: expected '%s', got '%s' " + "at iteration #%d", + grpc_connectivity_state_name(expected), + grpc_connectivity_state_name(actual), (int)i); + abort(); + } + } + gpr_free(expected_connection_sequence); } -static void verify_total_carnage_round_robin( - const servers_fixture *f, grpc_channel *client, - const int *actual_connection_sequence, const size_t num_iters) { - size_t i; - - for (i = 0; i < num_iters; i++) { - const int actual = actual_connection_sequence[i]; +static void verify_total_carnage_round_robin(const servers_fixture *f, + grpc_channel *client, + const request_sequences *sequences, + const size_t num_iters) { + for (size_t i = 0; i < num_iters; i++) { + const int actual = sequences->connections[i]; const int expected = -1; if (actual != expected) { - gpr_log(GPR_ERROR, "FAILURE: expected %d, actual %d at iter %" PRIuPTR, - expected, actual, i); + gpr_log( + GPR_ERROR, + "CONNECTION SEQUENCE FAILURE: expected %d, got %d at iteration #%d", + expected, actual, (int)i); abort(); } } - /* even though we know all the servers are dead, the client is still trying - * retrying, believing it's in a transient failure situation */ - assert_channel_connectivity(client, 2, GRPC_CHANNEL_TRANSIENT_FAILURE, - GRPC_CHANNEL_CONNECTING); + /* no server is ever available. The persistent state is TRANSIENT_FAILURE */ + for (size_t i = 0; i < sequences->n; i++) { + const grpc_connectivity_state actual = sequences->connectivity_states[i]; + const grpc_connectivity_state expected = GRPC_CHANNEL_TRANSIENT_FAILURE; + if (actual != expected) { + gpr_log(GPR_ERROR, + "CONNECTIVITY STATUS SEQUENCE FAILURE: expected '%s', got '%s' " + "at iteration #%d", + grpc_connectivity_state_name(expected), + grpc_connectivity_state_name(actual), (int)i); + abort(); + } + } } static void verify_partial_carnage_round_robin( const servers_fixture *f, grpc_channel *client, - const int *actual_connection_sequence, const size_t num_iters) { + const request_sequences *sequences, const size_t num_iters) { int *expected_connection_sequence; size_t i; const size_t expected_seq_length = f->num_servers; @@ -773,15 +790,15 @@ static void verify_partial_carnage_round_robin( /* verify conn. seq. expectation */ /* get the first sequence of "num_servers" elements */ expected_connection_sequence = gpr_malloc(sizeof(int) * expected_seq_length); - memcpy(expected_connection_sequence, actual_connection_sequence, + memcpy(expected_connection_sequence, sequences->connections, sizeof(int) * expected_seq_length); for (i = 0; i < num_iters / 2; i++) { - const int actual = actual_connection_sequence[i]; + const int actual = sequences->connections[i]; const int expected = expected_connection_sequence[i % expected_seq_length]; if (actual != expected) { print_failed_expectations(expected_connection_sequence, - actual_connection_sequence, expected_seq_length, + sequences->connections, expected_seq_length, num_iters); abort(); } @@ -789,13 +806,34 @@ static void verify_partial_carnage_round_robin( /* second half of the iterations go without response */ for (; i < num_iters; i++) { - GPR_ASSERT(actual_connection_sequence[i] == -1); + GPR_ASSERT(sequences->connections[i] == -1); + } + + /* We can assert that the first client channel state should be READY, when all + * servers were available; and that the last one should be TRANSIENT_FAILURE, + * after all servers are gone. */ + grpc_connectivity_state actual = sequences->connectivity_states[0]; + grpc_connectivity_state expected = GRPC_CHANNEL_READY; + if (actual != expected) { + gpr_log(GPR_ERROR, + "CONNECTIVITY STATUS SEQUENCE FAILURE: expected '%s', got '%s' " + "at iteration #%d", + grpc_connectivity_state_name(expected), + grpc_connectivity_state_name(actual), 0); + abort(); + } + + actual = sequences->connectivity_states[num_iters - 1]; + expected = GRPC_CHANNEL_TRANSIENT_FAILURE; + if (actual != expected) { + gpr_log(GPR_ERROR, + "CONNECTIVITY STATUS SEQUENCE FAILURE: expected '%s', got '%s' " + "at iteration #%d", + grpc_connectivity_state_name(expected), + grpc_connectivity_state_name(actual), (int)num_iters - 1); + abort(); } - /* even though we know all the servers are dead, the client is still trying - * retrying, believing it's in a transient failure situation */ - assert_channel_connectivity(client, 2, GRPC_CHANNEL_TRANSIENT_FAILURE, - GRPC_CHANNEL_CONNECTING); gpr_free(expected_connection_sequence); } @@ -818,15 +856,14 @@ static void dump_array(const char *desc, const int *data, const size_t count) { static void verify_rebirth_round_robin(const servers_fixture *f, grpc_channel *client, - const int *actual_connection_sequence, + const request_sequences *sequences, const size_t num_iters) { int *expected_connection_sequence; size_t i, j, unique_seq_last_idx, unique_seq_first_idx; const size_t expected_seq_length = f->num_servers; int *seen_elements; - dump_array("actual_connection_sequence", actual_connection_sequence, - num_iters); + dump_array("actual_connection_sequence", sequences->connections, num_iters); /* verify conn. seq. expectation */ /* get the first unique run of length "num_servers". */ @@ -837,13 +874,13 @@ static void verify_rebirth_round_robin(const servers_fixture *f, memset(seen_elements, 0, sizeof(int) * expected_seq_length); for (i = 0; i < num_iters; i++) { - if (actual_connection_sequence[i] < 0 || - seen_elements[actual_connection_sequence[i]] != 0) { + if (sequences->connections[i] < 0 || + seen_elements[sequences->connections[i]] != 0) { /* if anything breaks the uniqueness of the run, back to square zero */ memset(seen_elements, 0, sizeof(int) * expected_seq_length); continue; } - seen_elements[actual_connection_sequence[i]] = 1; + seen_elements[sequences->connections[i]] = 1; for (j = 0; j < expected_seq_length; j++) { if (seen_elements[j] == 0) break; } @@ -862,30 +899,72 @@ static void verify_rebirth_round_robin(const servers_fixture *f, unique_seq_first_idx = (unique_seq_last_idx - expected_seq_length + 1); memcpy(expected_connection_sequence, - actual_connection_sequence + unique_seq_first_idx, + sequences->connections + unique_seq_first_idx, sizeof(int) * expected_seq_length); /* first iteration succeeds */ - GPR_ASSERT(actual_connection_sequence[0] != -1); + GPR_ASSERT(sequences->connections[0] != -1); /* then we fail for a while... */ - GPR_ASSERT(actual_connection_sequence[1] == -1); + GPR_ASSERT(sequences->connections[1] == -1); /* ... but should be up at "unique_seq_first_idx" */ - GPR_ASSERT(actual_connection_sequence[unique_seq_first_idx] != -1); + GPR_ASSERT(sequences->connections[unique_seq_first_idx] != -1); for (j = 0, i = unique_seq_first_idx; i < num_iters; i++) { - const int actual = actual_connection_sequence[i]; + const int actual = sequences->connections[i]; const int expected = expected_connection_sequence[j++ % expected_seq_length]; if (actual != expected) { print_failed_expectations(expected_connection_sequence, - actual_connection_sequence, expected_seq_length, + sequences->connections, expected_seq_length, num_iters); abort(); } } - /* things are fine once the servers are brought back up */ - assert_channel_connectivity(client, 1, GRPC_CHANNEL_READY); + /* We can assert that the first client channel state should be READY, when all + * servers were available; same thing for the last one. In the middle + * somewhere there must exist at least one TRANSIENT_FAILURE */ + grpc_connectivity_state actual = sequences->connectivity_states[0]; + grpc_connectivity_state expected = GRPC_CHANNEL_READY; + if (actual != expected) { + gpr_log(GPR_ERROR, + "CONNECTIVITY STATUS SEQUENCE FAILURE: expected '%s', got '%s' " + "at iteration #%d", + grpc_connectivity_state_name(expected), + grpc_connectivity_state_name(actual), 0); + abort(); + } + + actual = sequences->connectivity_states[num_iters - 1]; + expected = GRPC_CHANNEL_READY; + if (actual != expected) { + gpr_log(GPR_ERROR, + "CONNECTIVITY STATUS SEQUENCE FAILURE: expected '%s', got '%s' " + "at iteration #%d", + grpc_connectivity_state_name(expected), + grpc_connectivity_state_name(actual), (int)num_iters - 1); + abort(); + } + + bool found_failure_status = false; + for (i = 1; i < sequences->n - 1; i++) { + if (sequences->connectivity_states[i] == GRPC_CHANNEL_TRANSIENT_FAILURE) { + found_failure_status = true; + break; + } + } + if (!found_failure_status) { + gpr_log( + GPR_ERROR, + "CONNECTIVITY STATUS SEQUENCE FAILURE: " + "GRPC_CHANNEL_TRANSIENT_FAILURE status not found. Got the following " + "instead:"); + for (i = 0; i < num_iters; i++) { + gpr_log(GPR_ERROR, "[%d]: %s", (int)i, + grpc_connectivity_state_name(sequences->connectivity_states[i])); + } + } + gpr_free(expected_connection_sequence); gpr_free(seen_elements); } @@ -926,7 +1005,7 @@ int main(int argc, char **argv) { * This should knock down the server bound to be selected next */ test_spec_reset(spec); spec->verifier = verify_vanishing_floor_round_robin; - spec->description = "test_kill_all_server_at_2nd_iteration"; + spec->description = "test_kill_middle_servers_at_2nd_iteration"; for (i = 1; i < NUM_SERVERS - 1; i++) { spec->kill_at[1][i] = 1; } diff --git a/test/core/end2end/end2end_nosec_tests.c b/test/core/end2end/end2end_nosec_tests.c index 457c188ce588e72bb7a44e37f55c3348db8dce86..663489082f9fba5c676be896e2c2368e6028f3cc 100644 --- a/test/core/end2end/end2end_nosec_tests.c +++ b/test/core/end2end/end2end_nosec_tests.c @@ -75,6 +75,8 @@ extern void filter_call_init_fails(grpc_end2end_test_config config); extern void filter_call_init_fails_pre_init(void); extern void filter_causes_close(grpc_end2end_test_config config); extern void filter_causes_close_pre_init(void); +extern void filter_latency(grpc_end2end_test_config config); +extern void filter_latency_pre_init(void); extern void graceful_server_shutdown(grpc_end2end_test_config config); extern void graceful_server_shutdown_pre_init(void); extern void high_initial_seqno(grpc_end2end_test_config config); @@ -153,6 +155,7 @@ void grpc_end2end_tests_pre_init(void) { empty_batch_pre_init(); filter_call_init_fails_pre_init(); filter_causes_close_pre_init(); + filter_latency_pre_init(); graceful_server_shutdown_pre_init(); high_initial_seqno_pre_init(); hpack_size_pre_init(); @@ -207,6 +210,7 @@ void grpc_end2end_tests(int argc, char **argv, empty_batch(config); filter_call_init_fails(config); filter_causes_close(config); + filter_latency(config); graceful_server_shutdown(config); high_initial_seqno(config); hpack_size(config); @@ -304,6 +308,10 @@ void grpc_end2end_tests(int argc, char **argv, filter_causes_close(config); continue; } + if (0 == strcmp("filter_latency", argv[i])) { + filter_latency(config); + continue; + } if (0 == strcmp("graceful_server_shutdown", argv[i])) { graceful_server_shutdown(config); continue; diff --git a/test/core/end2end/end2end_tests.c b/test/core/end2end/end2end_tests.c index dc2d68a486cb140e1b1aa9ee91e0206afcc892ef..25c7c62fde51dfa45bdfe5b0a10178ae203583b2 100644 --- a/test/core/end2end/end2end_tests.c +++ b/test/core/end2end/end2end_tests.c @@ -77,6 +77,8 @@ extern void filter_call_init_fails(grpc_end2end_test_config config); extern void filter_call_init_fails_pre_init(void); extern void filter_causes_close(grpc_end2end_test_config config); extern void filter_causes_close_pre_init(void); +extern void filter_latency(grpc_end2end_test_config config); +extern void filter_latency_pre_init(void); extern void graceful_server_shutdown(grpc_end2end_test_config config); extern void graceful_server_shutdown_pre_init(void); extern void high_initial_seqno(grpc_end2end_test_config config); @@ -156,6 +158,7 @@ void grpc_end2end_tests_pre_init(void) { empty_batch_pre_init(); filter_call_init_fails_pre_init(); filter_causes_close_pre_init(); + filter_latency_pre_init(); graceful_server_shutdown_pre_init(); high_initial_seqno_pre_init(); hpack_size_pre_init(); @@ -211,6 +214,7 @@ void grpc_end2end_tests(int argc, char **argv, empty_batch(config); filter_call_init_fails(config); filter_causes_close(config); + filter_latency(config); graceful_server_shutdown(config); high_initial_seqno(config); hpack_size(config); @@ -312,6 +316,10 @@ void grpc_end2end_tests(int argc, char **argv, filter_causes_close(config); continue; } + if (0 == strcmp("filter_latency", argv[i])) { + filter_latency(config); + continue; + } if (0 == strcmp("graceful_server_shutdown", argv[i])) { graceful_server_shutdown(config); continue; diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index 5f54b821a7f7ed8e3b926f75cacdc249a442857c..201a92a1fdcc362a1a0255adcb9ce176a650afd4 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -111,6 +111,7 @@ END2END_TESTS = { 'empty_batch': default_test_options, 'filter_causes_close': default_test_options, 'filter_call_init_fails': default_test_options, + 'filter_latency': default_test_options, 'graceful_server_shutdown': default_test_options._replace(cpu_cost=LOWCPU), 'hpack_size': default_test_options._replace(proxyable=False, traceable=False), diff --git a/test/core/end2end/tests/binary_metadata.c b/test/core/end2end/tests/binary_metadata.c index a13613a4720cd9acc19ca3b0eacb3d3e29270217..dd7a8a9ad386190eb9e3c7d8077c4ef2240c6384 100644 --- a/test/core/end2end/tests/binary_metadata.c +++ b/test/core/end2end/tests/binary_metadata.c @@ -238,7 +238,22 @@ static void test_request_response_with_metadata_and_payload( op->op = GRPC_OP_SEND_STATUS_FROM_SERVER; op->data.send_status_from_server.trailing_metadata_count = 0; op->data.send_status_from_server.status = GRPC_STATUS_OK; - op->data.send_status_from_server.status_details = "xyz"; + op->data.send_status_from_server.status_details = + "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12" + "\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24" + "\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36" + "\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48" + "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a" + "\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c" + "\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e" + "\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90" + "\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2" + "\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4" + "\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6" + "\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8" + "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea" + "\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc" + "\xfd\xfe\xff"; op->flags = 0; op->reserved = NULL; op++; @@ -250,7 +265,25 @@ static void test_request_response_with_metadata_and_payload( cq_verify(cqv); GPR_ASSERT(status == GRPC_STATUS_OK); - GPR_ASSERT(0 == strcmp(details, "xyz")); + GPR_ASSERT( + 0 == + strcmp(details, + "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10" + "\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20" + "\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30" + "\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40" + "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50" + "\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60" + "\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70" + "\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80" + "\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90" + "\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0" + "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0" + "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0" + "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0" + "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0" + "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0" + "\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff")); GPR_ASSERT(0 == strcmp(call_details.method, "/foo")); validate_host_override_string("foo.test.google.fr:1234", call_details.host, config); diff --git a/test/core/end2end/tests/filter_latency.c b/test/core/end2end/tests/filter_latency.c new file mode 100644 index 0000000000000000000000000000000000000000..043f12dd9a4a59d58589c9b96b67546f80e625ce --- /dev/null +++ b/test/core/end2end/tests/filter_latency.c @@ -0,0 +1,360 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "test/core/end2end/end2end_tests.h" + +#include <limits.h> +#include <stdbool.h> +#include <stdio.h> +#include <string.h> + +#include <grpc/byte_buffer.h> +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/time.h> +#include <grpc/support/useful.h> + +#include "src/core/lib/channel/channel_stack_builder.h" +#include "src/core/lib/surface/channel_init.h" +#include "test/core/end2end/cq_verifier.h" + +enum { TIMEOUT = 200000 }; + +static bool g_enable_filter = false; +static gpr_mu g_mu; +static gpr_timespec g_client_latency; +static gpr_timespec g_server_latency; + +static void *tag(intptr_t t) { return (void *)t; } + +static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config, + const char *test_name, + grpc_channel_args *client_args, + grpc_channel_args *server_args) { + grpc_end2end_test_fixture f; + gpr_log(GPR_INFO, "%s/%s", test_name, config.name); + f = config.create_fixture(client_args, server_args); + config.init_server(&f, server_args); + config.init_client(&f, client_args); + return f; +} + +static gpr_timespec n_seconds_time(int n) { + return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(n); +} + +static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } + +static void drain_cq(grpc_completion_queue *cq) { + grpc_event ev; + do { + ev = grpc_completion_queue_next(cq, five_seconds_time(), NULL); + } while (ev.type != GRPC_QUEUE_SHUTDOWN); +} + +static void shutdown_server(grpc_end2end_test_fixture *f) { + if (!f->server) return; + grpc_server_shutdown_and_notify(f->server, f->cq, tag(1000)); + GPR_ASSERT(grpc_completion_queue_pluck( + f->cq, tag(1000), GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5), NULL) + .type == GRPC_OP_COMPLETE); + grpc_server_destroy(f->server); + f->server = NULL; +} + +static void shutdown_client(grpc_end2end_test_fixture *f) { + if (!f->client) return; + grpc_channel_destroy(f->client); + f->client = NULL; +} + +static void end_test(grpc_end2end_test_fixture *f) { + shutdown_server(f); + shutdown_client(f); + + grpc_completion_queue_shutdown(f->cq); + drain_cq(f->cq); + grpc_completion_queue_destroy(f->cq); +} + +// Simple request via a server filter that saves the reported latency value. +static void test_request(grpc_end2end_test_config config) { + grpc_call *c; + grpc_call *s; + grpc_slice request_payload_slice = + grpc_slice_from_copied_string("hello world"); + grpc_byte_buffer *request_payload = + grpc_raw_byte_buffer_create(&request_payload_slice, 1); + gpr_timespec deadline = five_seconds_time(); + grpc_end2end_test_fixture f = + begin_test(config, "filter_latency", NULL, NULL); + cq_verifier *cqv = cq_verifier_create(f.cq); + grpc_op ops[6]; + grpc_op *op; + grpc_metadata_array initial_metadata_recv; + grpc_metadata_array trailing_metadata_recv; + grpc_metadata_array request_metadata_recv; + grpc_byte_buffer *request_payload_recv = NULL; + grpc_call_details call_details; + grpc_status_code status; + grpc_call_error error; + char *details = NULL; + size_t details_capacity = 0; + int was_cancelled = 2; + + gpr_mu_lock(&g_mu); + g_client_latency = gpr_time_0(GPR_TIMESPAN); + g_server_latency = gpr_time_0(GPR_TIMESPAN); + gpr_mu_unlock(&g_mu); + const gpr_timespec start_time = gpr_now(GPR_CLOCK_MONOTONIC); + + c = grpc_channel_create_call(f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq, + "/foo", "foo.test.google.fr", deadline, NULL); + GPR_ASSERT(c); + + grpc_metadata_array_init(&initial_metadata_recv); + grpc_metadata_array_init(&trailing_metadata_recv); + grpc_metadata_array_init(&request_metadata_recv); + grpc_call_details_init(&call_details); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_SEND_INITIAL_METADATA; + op->data.send_initial_metadata.count = 0; + op->data.send_initial_metadata.metadata = NULL; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_SEND_MESSAGE; + op->data.send_message = request_payload; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_INITIAL_METADATA; + op->data.recv_initial_metadata = &initial_metadata_recv; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_STATUS_ON_CLIENT; + op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv; + op->data.recv_status_on_client.status = &status; + op->data.recv_status_on_client.status_details = &details; + op->data.recv_status_on_client.status_details_capacity = &details_capacity; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(1), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + error = + grpc_server_request_call(f.server, &s, &call_details, + &request_metadata_recv, f.cq, f.cq, tag(101)); + GPR_ASSERT(GRPC_CALL_OK == error); + + CQ_EXPECT_COMPLETION(cqv, tag(101), 1); + cq_verify(cqv); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_SEND_INITIAL_METADATA; + op->data.send_initial_metadata.count = 0; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_SEND_STATUS_FROM_SERVER; + op->data.send_status_from_server.trailing_metadata_count = 0; + op->data.send_status_from_server.status = GRPC_STATUS_UNIMPLEMENTED; + op->data.send_status_from_server.status_details = "xyz"; + op->flags = 0; + op->reserved = NULL; + op++; + op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; + op->data.recv_close_on_server.cancelled = &was_cancelled; + op->flags = 0; + op->reserved = NULL; + op++; + error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + CQ_EXPECT_COMPLETION(cqv, tag(102), 1); + CQ_EXPECT_COMPLETION(cqv, tag(1), 1); + cq_verify(cqv); + + GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); + GPR_ASSERT(0 == strcmp(details, "xyz")); + + gpr_free(details); + grpc_metadata_array_destroy(&initial_metadata_recv); + grpc_metadata_array_destroy(&trailing_metadata_recv); + grpc_metadata_array_destroy(&request_metadata_recv); + grpc_call_details_destroy(&call_details); + + grpc_call_destroy(s); + grpc_call_destroy(c); + + const gpr_timespec end_time = gpr_now(GPR_CLOCK_MONOTONIC); + const gpr_timespec max_latency = gpr_time_sub(end_time, start_time); + + gpr_mu_lock(&g_mu); + GPR_ASSERT(gpr_time_cmp(max_latency, g_client_latency) >= 0); + GPR_ASSERT(gpr_time_cmp(gpr_time_0(GPR_TIMESPAN), g_client_latency) < 0); + GPR_ASSERT(gpr_time_cmp(max_latency, g_server_latency) >= 0); + GPR_ASSERT(gpr_time_cmp(gpr_time_0(GPR_TIMESPAN), g_server_latency) < 0); + // Server latency should always be smaller than client latency. + GPR_ASSERT(gpr_time_cmp(g_server_latency, g_client_latency) < 0); + gpr_mu_unlock(&g_mu); + + cq_verifier_destroy(cqv); + + grpc_byte_buffer_destroy(request_payload); + grpc_byte_buffer_destroy(request_payload_recv); + + end_test(&f); + config.tear_down_data(&f); +} + +/******************************************************************************* + * Test latency filter + */ + +static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx, + grpc_call_element *elem, + grpc_call_element_args *args) { + return GRPC_ERROR_NONE; +} + +static void client_destroy_call_elem(grpc_exec_ctx *exec_ctx, + grpc_call_element *elem, + const grpc_call_final_info *final_info, + void *and_free_memory) { + gpr_mu_lock(&g_mu); + g_client_latency = final_info->stats.latency; + gpr_mu_unlock(&g_mu); +} + +static void server_destroy_call_elem(grpc_exec_ctx *exec_ctx, + grpc_call_element *elem, + const grpc_call_final_info *final_info, + void *and_free_memory) { + gpr_mu_lock(&g_mu); + g_server_latency = final_info->stats.latency; + gpr_mu_unlock(&g_mu); +} + +static void init_channel_elem(grpc_exec_ctx *exec_ctx, + grpc_channel_element *elem, + grpc_channel_element_args *args) {} + +static void destroy_channel_elem(grpc_exec_ctx *exec_ctx, + grpc_channel_element *elem) {} + +static const grpc_channel_filter test_client_filter = { + grpc_call_next_op, + grpc_channel_next_op, + 0, + init_call_elem, + grpc_call_stack_ignore_set_pollset_or_pollset_set, + client_destroy_call_elem, + 0, + init_channel_elem, + destroy_channel_elem, + grpc_call_next_get_peer, + grpc_channel_next_get_info, + "client_filter_latency"}; + +static const grpc_channel_filter test_server_filter = { + grpc_call_next_op, + grpc_channel_next_op, + 0, + init_call_elem, + grpc_call_stack_ignore_set_pollset_or_pollset_set, + server_destroy_call_elem, + 0, + init_channel_elem, + destroy_channel_elem, + grpc_call_next_get_peer, + grpc_channel_next_get_info, + "server_filter_latency"}; + +/******************************************************************************* + * Registration + */ + +static bool maybe_add_filter(grpc_exec_ctx *exec_ctx, + grpc_channel_stack_builder *builder, void *arg) { + grpc_channel_filter *filter = arg; + if (g_enable_filter) { + // Want to add the filter as close to the end as possible, to make + // sure that all of the filters work well together. However, we + // can't add it at the very end, because the connected channel filter + // must be the last one. So we add it right before the last one. + grpc_channel_stack_builder_iterator *it = + grpc_channel_stack_builder_create_iterator_at_last(builder); + GPR_ASSERT(grpc_channel_stack_builder_move_prev(it)); + const bool retval = + grpc_channel_stack_builder_add_filter_before(it, filter, NULL, NULL); + grpc_channel_stack_builder_iterator_destroy(it); + return retval; + } else { + return true; + } +} + +static void init_plugin(void) { + gpr_mu_init(&g_mu); + grpc_channel_init_register_stage(GRPC_CLIENT_CHANNEL, INT_MAX, + maybe_add_filter, + (void *)&test_client_filter); + grpc_channel_init_register_stage(GRPC_CLIENT_DIRECT_CHANNEL, INT_MAX, + maybe_add_filter, + (void *)&test_client_filter); + grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX, + maybe_add_filter, + (void *)&test_server_filter); +} + +static void destroy_plugin(void) { gpr_mu_destroy(&g_mu); } + +void filter_latency(grpc_end2end_test_config config) { + g_enable_filter = true; + test_request(config); + g_enable_filter = false; +} + +void filter_latency_pre_init(void) { + grpc_register_plugin(init_plugin, destroy_plugin); +} diff --git a/test/core/internal_api_canaries/iomgr.c b/test/core/internal_api_canaries/iomgr.c index f1efa87a696bb710fca9c0edc6640a1eb6354e9c..82eeb0e1bf1bd91fb6faece71d0ecfa979ffe96b 100644 --- a/test/core/internal_api_canaries/iomgr.c +++ b/test/core/internal_api_canaries/iomgr.c @@ -48,7 +48,7 @@ static void test_code(void) { /* iomgr.h */ grpc_iomgr_init(); - grpc_iomgr_shutdown(); + grpc_iomgr_shutdown(NULL); /* closure.h */ grpc_closure closure; @@ -85,7 +85,8 @@ static void test_code(void) { grpc_endpoint_shutdown, grpc_endpoint_destroy, grpc_endpoint_get_resource_user, - grpc_endpoint_get_peer}; + grpc_endpoint_get_peer, + grpc_endpoint_get_fd}; endpoint.vtable = &vtable; grpc_endpoint_read(&exec_ctx, &endpoint, NULL, NULL); @@ -99,7 +100,7 @@ static void test_code(void) { /* executor.h */ grpc_executor_init(); grpc_executor_push(&closure, GRPC_ERROR_CREATE("Phi")); - grpc_executor_shutdown(); + grpc_executor_shutdown(NULL); /* pollset.h */ grpc_pollset_size(); diff --git a/test/core/iomgr/fd_conservation_posix_test.c b/test/core/iomgr/fd_conservation_posix_test.c index 652b37eb6f461a54421f8bcefe3d8c748fe8d155..3dffa02c3c809b3790b375b5f28d92943c7e084a 100644 --- a/test/core/iomgr/fd_conservation_posix_test.c +++ b/test/core/iomgr/fd_conservation_posix_test.c @@ -65,6 +65,10 @@ int main(int argc, char **argv) { grpc_resource_quota_unref(resource_quota); - grpc_iomgr_shutdown(); + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_iomgr_shutdown(&exec_ctx); + grpc_exec_ctx_finish(&exec_ctx); + } return 0; } diff --git a/test/core/iomgr/fd_posix_test.c b/test/core/iomgr/fd_posix_test.c index 6166699fe6286e2f4dd44bdff419aaefb4a71b83..951a247d02824e1c13696e3ba48efe2936c93333 100644 --- a/test/core/iomgr/fd_posix_test.c +++ b/test/core/iomgr/fd_posix_test.c @@ -548,9 +548,10 @@ int main(int argc, char **argv) { test_grpc_fd_change(); grpc_closure_init(&destroyed, destroy_pollset, g_pollset); grpc_pollset_shutdown(&exec_ctx, g_pollset, &destroyed); - grpc_exec_ctx_finish(&exec_ctx); + grpc_exec_ctx_flush(&exec_ctx); gpr_free(g_pollset); - grpc_iomgr_shutdown(); + grpc_iomgr_shutdown(&exec_ctx); + grpc_exec_ctx_finish(&exec_ctx); return 0; } diff --git a/test/core/iomgr/resolve_address_test.c b/test/core/iomgr/resolve_address_test.c index 2dd0d88b3f80b2cf82d08204e04388651d29060f..36ee0db97a472ff32fed5c0b75df4f7260dcc14b 100644 --- a/test/core/iomgr/resolve_address_test.c +++ b/test/core/iomgr/resolve_address_test.c @@ -172,7 +172,11 @@ int main(int argc, char **argv) { test_ipv6_without_port(); test_invalid_ip_addresses(); test_unparseable_hostports(); - grpc_iomgr_shutdown(); - grpc_executor_shutdown(); + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_executor_shutdown(&exec_ctx); + grpc_iomgr_shutdown(&exec_ctx); + grpc_exec_ctx_finish(&exec_ctx); + } return 0; } diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c index 67bc914c15ccb984647d1f9b323162a98d769722..7eee2d1d102b695ebfe50fab888a7c3f34a36e36 100644 --- a/test/core/iomgr/socket_utils_test.c +++ b/test/core/iomgr/socket_utils_test.c @@ -39,13 +39,57 @@ #include "src/core/lib/iomgr/socket_utils_posix.h" #include <errno.h> +#include <netinet/ip.h> #include <string.h> +#include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/sync.h> +#include <grpc/support/useful.h> +#include "src/core/lib/iomgr/socket_mutator.h" #include "test/core/util/test_config.h" +struct test_socket_mutator { + grpc_socket_mutator base; + int option_value; +}; + +static bool mutate_fd(int fd, grpc_socket_mutator *mutator) { + int newval; + socklen_t intlen = sizeof(newval); + struct test_socket_mutator *m = (struct test_socket_mutator *)mutator; + + if (0 != setsockopt(fd, IPPROTO_IP, IP_TOS, &m->option_value, + sizeof(m->option_value))) { + return false; + } + if (0 != getsockopt(fd, IPPROTO_IP, IP_TOS, &newval, &intlen)) { + return false; + } + if (newval != m->option_value) { + return false; + } + return true; +} + +static void destroy_test_mutator(grpc_socket_mutator *mutator) { + struct test_socket_mutator *m = (struct test_socket_mutator *)mutator; + gpr_free(m); +} + +static int compare_test_mutator(grpc_socket_mutator *a, + grpc_socket_mutator *b) { + struct test_socket_mutator *ma = (struct test_socket_mutator *)a; + struct test_socket_mutator *mb = (struct test_socket_mutator *)b; + return GPR_ICMP(ma->option_value, mb->option_value); +} + +static const grpc_socket_mutator_vtable mutator_vtable = { + mutate_fd, compare_test_mutator, destroy_test_mutator}; + int main(int argc, char **argv) { int sock; + grpc_error *err; grpc_test_init(argc, argv); sock = socket(PF_INET, SOCK_STREAM, 0); @@ -68,6 +112,29 @@ int main(int argc, char **argv) { GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_low_latency", grpc_set_socket_low_latency(sock, 0))); + struct test_socket_mutator mutator; + grpc_socket_mutator_init(&mutator.base, &mutator_vtable); + + mutator.option_value = IPTOS_LOWDELAY; + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "set_socket_with_mutator", + grpc_set_socket_with_mutator(sock, (grpc_socket_mutator *)&mutator))); + + mutator.option_value = IPTOS_THROUGHPUT; + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "set_socket_with_mutator", + grpc_set_socket_with_mutator(sock, (grpc_socket_mutator *)&mutator))); + + mutator.option_value = IPTOS_RELIABILITY; + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "set_socket_with_mutator", + grpc_set_socket_with_mutator(sock, (grpc_socket_mutator *)&mutator))); + + mutator.option_value = -1; + err = grpc_set_socket_with_mutator(sock, (grpc_socket_mutator *)&mutator); + GPR_ASSERT(err != GRPC_ERROR_NONE); + GRPC_ERROR_UNREF(err); + close(sock); return 0; diff --git a/test/core/iomgr/udp_server_test.c b/test/core/iomgr/udp_server_test.c index 9bea229466820402b5a9eebf4f6e3ef9666a9435..6bd6d606044df3116f5d979cdbb73dbfe4709e91 100644 --- a/test/core/iomgr/udp_server_test.c +++ b/test/core/iomgr/udp_server_test.c @@ -238,7 +238,7 @@ int main(int argc, char **argv) { grpc_pollset_shutdown(&exec_ctx, g_pollset, &destroyed); grpc_exec_ctx_finish(&exec_ctx); gpr_free(g_pollset); - grpc_iomgr_shutdown(); + grpc_shutdown(); return 0; } diff --git a/test/core/network_benchmarks/low_level_ping_pong.c b/test/core/network_benchmarks/low_level_ping_pong.c index 9038d076755fa74c05eecff92267b48d5062ac59..0b2a920873ad3a9386e47771f5aed43b6f377294 100644 --- a/test/core/network_benchmarks/low_level_ping_pong.c +++ b/test/core/network_benchmarks/low_level_ping_pong.c @@ -56,6 +56,7 @@ #include <grpc/support/thd.h> #include <grpc/support/time.h> #include <grpc/support/useful.h> +#include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/socket_utils_posix.h" typedef struct fd_pair { @@ -229,12 +230,12 @@ static int blocking_write_bytes(struct thread_args *args, char *buf) { on the scenario we're using. */ static int set_socket_nonblocking(thread_args *args) { - if (!grpc_set_socket_nonblocking(args->fds.read_fd, 1)) { - gpr_log(GPR_ERROR, "Unable to set socket nonblocking: %s", strerror(errno)); + if (!GRPC_LOG_IF_ERROR("Unable to set read socket nonblocking", + grpc_set_socket_nonblocking(args->fds.read_fd, 1))) { return -1; } - if (!grpc_set_socket_nonblocking(args->fds.write_fd, 1)) { - gpr_log(GPR_ERROR, "Unable to set socket nonblocking: %s", strerror(errno)); + if (!GRPC_LOG_IF_ERROR("Unable to set write socket nonblocking", + grpc_set_socket_nonblocking(args->fds.write_fd, 1))) { return -1; } return 0; @@ -347,10 +348,16 @@ static int create_listening_socket(struct sockaddr *port, socklen_t len) { goto error; } - if (!grpc_set_socket_cloexec(fd, 1) || !grpc_set_socket_low_latency(fd, 1) || - !grpc_set_socket_reuse_addr(fd, 1)) { - gpr_log(GPR_ERROR, "Unable to configure socket %d: %s", fd, - strerror(errno)); + if (!GRPC_LOG_IF_ERROR("Failed to set listening socket cloexec", + grpc_set_socket_cloexec(fd, 1))) { + goto error; + } + if (!GRPC_LOG_IF_ERROR("Failed to set listening socket low latency", + grpc_set_socket_low_latency(fd, 1))) { + goto error; + } + if (!GRPC_LOG_IF_ERROR("Failed to set listening socket reuse addr", + grpc_set_socket_reuse_addr(fd, 1))) { goto error; } @@ -386,8 +393,12 @@ static int connect_client(struct sockaddr *addr, socklen_t len) { goto error; } - if (!grpc_set_socket_cloexec(fd, 1) || !grpc_set_socket_low_latency(fd, 1)) { - gpr_log(GPR_ERROR, "Failed to configure socket"); + if (!GRPC_LOG_IF_ERROR("Failed to set connecting socket cloexec", + grpc_set_socket_cloexec(fd, 1))) { + goto error; + } + if (!GRPC_LOG_IF_ERROR("Failed to set connecting socket low latency", + grpc_set_socket_low_latency(fd, 1))) { goto error; } diff --git a/test/core/profiling/mark_timings.stp b/test/core/profiling/mark_timings.stp index 0c0a417faf74370c2b23b0a4bab7695b32e532b1..e96edbc149d178d3effc0f7b8871d579dd3c39af 100644 --- a/test/core/profiling/mark_timings.stp +++ b/test/core/profiling/mark_timings.stp @@ -2,7 +2,7 @@ * probe definition. * * For a statically build binary, that'd be the name of the binary itself. - * For dinamically built ones, point to the location of the libgprc.so being + * For dynamically built ones, point to the location of the libgrpc.so being * used. */ global starts, times, times_per_tag diff --git a/test/core/security/corpus/ssl_server_corpus/05cda1e986096f42698ee2d86ab0a4a3f6a6690b b/test/core/security/corpus/ssl_server_corpus/05cda1e986096f42698ee2d86ab0a4a3f6a6690b new file mode 100644 index 0000000000000000000000000000000000000000..272c22d321e8062f5b4bc1713068b000a93b1967 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/05cda1e986096f42698ee2d86ab0a4a3f6a6690b differ diff --git a/test/core/security/corpus/ssl_server_corpus/0f65ef472e8308561c77ada56afd4de5932d950a b/test/core/security/corpus/ssl_server_corpus/0f65ef472e8308561c77ada56afd4de5932d950a new file mode 100644 index 0000000000000000000000000000000000000000..eeba79a9f27ccb1b62f1fed0e2b35517690ddcd4 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/0f65ef472e8308561c77ada56afd4de5932d950a differ diff --git a/test/core/security/corpus/ssl_server_corpus/128915cb83e66a736f8a1833c8901eccb81e0656 b/test/core/security/corpus/ssl_server_corpus/128915cb83e66a736f8a1833c8901eccb81e0656 new file mode 100644 index 0000000000000000000000000000000000000000..e699abcea0731cf9c752dc9a3fe6ceddfea88976 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/128915cb83e66a736f8a1833c8901eccb81e0656 differ diff --git a/test/core/security/corpus/ssl_server_corpus/134d3a5e7a1609a583f6282c48ef9b871e0fdc15 b/test/core/security/corpus/ssl_server_corpus/134d3a5e7a1609a583f6282c48ef9b871e0fdc15 new file mode 100644 index 0000000000000000000000000000000000000000..13c6a93dcfbdee21a354ceb5928a7e9248cfb604 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/134d3a5e7a1609a583f6282c48ef9b871e0fdc15 differ diff --git a/test/core/security/corpus/ssl_server_corpus/13fccd43a6b52c62851ea24e8be4f8cfe6c0103d b/test/core/security/corpus/ssl_server_corpus/13fccd43a6b52c62851ea24e8be4f8cfe6c0103d new file mode 100644 index 0000000000000000000000000000000000000000..505cfa73fc9dfb206402047594a2033bb1d398f1 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/13fccd43a6b52c62851ea24e8be4f8cfe6c0103d differ diff --git a/test/core/security/corpus/ssl_server_corpus/171bc6b14b94c72435d2da2e31e9682f12a3f13c b/test/core/security/corpus/ssl_server_corpus/171bc6b14b94c72435d2da2e31e9682f12a3f13c new file mode 100644 index 0000000000000000000000000000000000000000..06020e8895b76c6e01f1c15e6ad5f8ef1c240fea Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/171bc6b14b94c72435d2da2e31e9682f12a3f13c differ diff --git a/test/core/security/corpus/ssl_server_corpus/17dea38d21e9282ecd062466cf287ecf5b30c1cf b/test/core/security/corpus/ssl_server_corpus/17dea38d21e9282ecd062466cf287ecf5b30c1cf new file mode 100644 index 0000000000000000000000000000000000000000..7e77bb637164a5a4ddf0f5c162854253d43181aa Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/17dea38d21e9282ecd062466cf287ecf5b30c1cf differ diff --git a/test/core/security/corpus/ssl_server_corpus/1961eb9d4dd4bf21cbcd9c45a17b1d025eb0d200 b/test/core/security/corpus/ssl_server_corpus/1961eb9d4dd4bf21cbcd9c45a17b1d025eb0d200 new file mode 100644 index 0000000000000000000000000000000000000000..f3b9d87bdfd30d67f164e6cddfe56d2276be5b5d Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/1961eb9d4dd4bf21cbcd9c45a17b1d025eb0d200 differ diff --git a/test/core/security/corpus/ssl_server_corpus/226ebb5cc16ac42fae3be273de533ac79759ae01 b/test/core/security/corpus/ssl_server_corpus/226ebb5cc16ac42fae3be273de533ac79759ae01 new file mode 100644 index 0000000000000000000000000000000000000000..e300b25dd650474c2b156bc4c6065cbf332d60ce Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/226ebb5cc16ac42fae3be273de533ac79759ae01 differ diff --git a/test/core/security/corpus/ssl_server_corpus/2333cf428cb1e2976679ac84e64873bf76c6595e b/test/core/security/corpus/ssl_server_corpus/2333cf428cb1e2976679ac84e64873bf76c6595e new file mode 100644 index 0000000000000000000000000000000000000000..de233b4df7d2a2a4106c1b35a93d4fbbf4a64f91 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/2333cf428cb1e2976679ac84e64873bf76c6595e differ diff --git a/test/core/security/corpus/ssl_server_corpus/2885553a9e6829265d5f44ea4e24fcf7d6513436 b/test/core/security/corpus/ssl_server_corpus/2885553a9e6829265d5f44ea4e24fcf7d6513436 new file mode 100644 index 0000000000000000000000000000000000000000..c52dac216070d76d8636361e8d82108f78c94262 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/2885553a9e6829265d5f44ea4e24fcf7d6513436 differ diff --git a/test/core/security/corpus/ssl_server_corpus/28bce9a7cb21f3232239b9b71ef568137bf801f4 b/test/core/security/corpus/ssl_server_corpus/28bce9a7cb21f3232239b9b71ef568137bf801f4 new file mode 100644 index 0000000000000000000000000000000000000000..99bde1b4860a05a409afb374f369527f63a04976 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/28bce9a7cb21f3232239b9b71ef568137bf801f4 differ diff --git a/test/core/security/corpus/ssl_server_corpus/2a0286615be426d1e7fd5894aadf1a503df05a0a b/test/core/security/corpus/ssl_server_corpus/2a0286615be426d1e7fd5894aadf1a503df05a0a new file mode 100644 index 0000000000000000000000000000000000000000..e36dac871a51060bd8f3429a26da85807cd9f338 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/2a0286615be426d1e7fd5894aadf1a503df05a0a differ diff --git a/test/core/security/corpus/ssl_server_corpus/2b4a1f3ebe223d91c042a5e86aff31e460f6cc3f b/test/core/security/corpus/ssl_server_corpus/2b4a1f3ebe223d91c042a5e86aff31e460f6cc3f new file mode 100644 index 0000000000000000000000000000000000000000..eca71b4ca633f0c33b472136fcf5d4bbbd1adc66 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/2b4a1f3ebe223d91c042a5e86aff31e460f6cc3f differ diff --git a/test/core/security/corpus/ssl_server_corpus/2cfbe809bcf53160ecc0109b2df01a8696a226fd b/test/core/security/corpus/ssl_server_corpus/2cfbe809bcf53160ecc0109b2df01a8696a226fd new file mode 100644 index 0000000000000000000000000000000000000000..6a2035fe37f402f53e00ed555b2b0fcaab4649d4 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/2cfbe809bcf53160ecc0109b2df01a8696a226fd differ diff --git a/test/core/security/corpus/ssl_server_corpus/2f770de96db36ef9a71f7eb09b2e8695ac1f0655 b/test/core/security/corpus/ssl_server_corpus/2f770de96db36ef9a71f7eb09b2e8695ac1f0655 new file mode 100644 index 0000000000000000000000000000000000000000..0d1c163bb2a4e993c181ad45940f9ed97c6c46a9 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/2f770de96db36ef9a71f7eb09b2e8695ac1f0655 differ diff --git a/test/core/security/corpus/ssl_server_corpus/30ba8ad171657470b5312232387b7da70c387219 b/test/core/security/corpus/ssl_server_corpus/30ba8ad171657470b5312232387b7da70c387219 new file mode 100644 index 0000000000000000000000000000000000000000..297c1ce6494c498ae7614661b012004bae822a3b Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/30ba8ad171657470b5312232387b7da70c387219 differ diff --git a/test/core/security/corpus/ssl_server_corpus/36548a97a8b847e17a77d1e646c6eb5ec001d84a b/test/core/security/corpus/ssl_server_corpus/36548a97a8b847e17a77d1e646c6eb5ec001d84a new file mode 100644 index 0000000000000000000000000000000000000000..9c209ebb50d31c336ea737e44fce4161530ade60 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/36548a97a8b847e17a77d1e646c6eb5ec001d84a differ diff --git a/test/core/security/corpus/ssl_server_corpus/3c442804f73cfe826a609d97c12ef87852742883 b/test/core/security/corpus/ssl_server_corpus/3c442804f73cfe826a609d97c12ef87852742883 new file mode 100644 index 0000000000000000000000000000000000000000..e8574594af34069186c1956c62285f84d1e6a67d Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/3c442804f73cfe826a609d97c12ef87852742883 differ diff --git a/test/core/security/corpus/ssl_server_corpus/3dad758011b16a3771376f9af91242953be3e47b b/test/core/security/corpus/ssl_server_corpus/3dad758011b16a3771376f9af91242953be3e47b new file mode 100644 index 0000000000000000000000000000000000000000..11f9b74e3f5359f9c853f8628fbbe9d308839501 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/3dad758011b16a3771376f9af91242953be3e47b differ diff --git a/test/core/security/corpus/ssl_server_corpus/43b56a1adffaf2c3c994679bf2b6fe6414e13df4 b/test/core/security/corpus/ssl_server_corpus/43b56a1adffaf2c3c994679bf2b6fe6414e13df4 new file mode 100644 index 0000000000000000000000000000000000000000..197cc02ebc9ea8781a96e049fd9323bbd2eea905 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/43b56a1adffaf2c3c994679bf2b6fe6414e13df4 differ diff --git a/test/core/security/corpus/ssl_server_corpus/4446c60ab89c34e5ccc26bec18d7e7d21fe5aec1 b/test/core/security/corpus/ssl_server_corpus/4446c60ab89c34e5ccc26bec18d7e7d21fe5aec1 new file mode 100644 index 0000000000000000000000000000000000000000..baff50d61d23e9dc5565474f92a16cd61c5ac74a Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/4446c60ab89c34e5ccc26bec18d7e7d21fe5aec1 differ diff --git a/test/core/security/corpus/ssl_server_corpus/44924b3866956d0668ec65750c3663279ac84a36 b/test/core/security/corpus/ssl_server_corpus/44924b3866956d0668ec65750c3663279ac84a36 new file mode 100644 index 0000000000000000000000000000000000000000..4fb36b65bb6d8f4d1fc3fe12a71f4c4d1f9c04e7 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/44924b3866956d0668ec65750c3663279ac84a36 differ diff --git a/test/core/security/corpus/ssl_server_corpus/44e4370a4eafde61f8e7dc7e4542e0ad5ecf5253 b/test/core/security/corpus/ssl_server_corpus/44e4370a4eafde61f8e7dc7e4542e0ad5ecf5253 new file mode 100644 index 0000000000000000000000000000000000000000..0bc4da2caae288191c2f5bb513c7281d13526d63 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/44e4370a4eafde61f8e7dc7e4542e0ad5ecf5253 differ diff --git a/test/core/security/corpus/ssl_server_corpus/44fb8c02117ebd75c97e517624c0abc9f9a76aa7 b/test/core/security/corpus/ssl_server_corpus/44fb8c02117ebd75c97e517624c0abc9f9a76aa7 new file mode 100644 index 0000000000000000000000000000000000000000..9e4b559e9739405a83959a3a2f80a294e3c1eb69 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/44fb8c02117ebd75c97e517624c0abc9f9a76aa7 differ diff --git a/test/core/security/corpus/ssl_server_corpus/45d76dd1f0a29fce3f8d289b5177263871eb3f83 b/test/core/security/corpus/ssl_server_corpus/45d76dd1f0a29fce3f8d289b5177263871eb3f83 new file mode 100644 index 0000000000000000000000000000000000000000..52168fa700db135f00faaf9c4963608878bccb54 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/45d76dd1f0a29fce3f8d289b5177263871eb3f83 differ diff --git a/test/core/security/corpus/ssl_server_corpus/4fcbf18c4135352539eaf445c26f2f8a5da9b68e b/test/core/security/corpus/ssl_server_corpus/4fcbf18c4135352539eaf445c26f2f8a5da9b68e new file mode 100644 index 0000000000000000000000000000000000000000..e35f17d7e4875c336f3788e0f55944f9fb029529 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/4fcbf18c4135352539eaf445c26f2f8a5da9b68e differ diff --git a/test/core/security/corpus/ssl_server_corpus/508ca86c6f4e6ecc30c252ccf74e78256a893b17 b/test/core/security/corpus/ssl_server_corpus/508ca86c6f4e6ecc30c252ccf74e78256a893b17 new file mode 100644 index 0000000000000000000000000000000000000000..5692502a6445ba1ec9020666c83cb3277c10919a Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/508ca86c6f4e6ecc30c252ccf74e78256a893b17 differ diff --git a/test/core/security/corpus/ssl_server_corpus/515d240b860fcd1e77d4a5af291aa4a667d9b609 b/test/core/security/corpus/ssl_server_corpus/515d240b860fcd1e77d4a5af291aa4a667d9b609 new file mode 100644 index 0000000000000000000000000000000000000000..2de4f1f2bf967ccdc9e6848fb35a620764149f08 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/515d240b860fcd1e77d4a5af291aa4a667d9b609 differ diff --git a/test/core/security/corpus/ssl_server_corpus/528e9738d5016f01cf59d74f20a8aa3f341ad89e b/test/core/security/corpus/ssl_server_corpus/528e9738d5016f01cf59d74f20a8aa3f341ad89e new file mode 100644 index 0000000000000000000000000000000000000000..91fd77f9e35fa5029b368cc8ffb8adaa7c841b09 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/528e9738d5016f01cf59d74f20a8aa3f341ad89e differ diff --git a/test/core/security/corpus/ssl_server_corpus/54b636a2bb66ccf8247b53ff76a6400e9f1355d0 b/test/core/security/corpus/ssl_server_corpus/54b636a2bb66ccf8247b53ff76a6400e9f1355d0 new file mode 100644 index 0000000000000000000000000000000000000000..0e8bf5b9dd50911aa53bf35c81994ed12bf121ec Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/54b636a2bb66ccf8247b53ff76a6400e9f1355d0 differ diff --git a/test/core/security/corpus/ssl_server_corpus/5cc337c4b33cd703cd354804530f5b72684260d0 b/test/core/security/corpus/ssl_server_corpus/5cc337c4b33cd703cd354804530f5b72684260d0 new file mode 100644 index 0000000000000000000000000000000000000000..0b8827c39b236aa002277ea63ac2eecdd98176c0 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/5cc337c4b33cd703cd354804530f5b72684260d0 differ diff --git a/test/core/security/corpus/ssl_server_corpus/5ce3ec59111bf328044e41fcf26b3bc542df527e b/test/core/security/corpus/ssl_server_corpus/5ce3ec59111bf328044e41fcf26b3bc542df527e new file mode 100644 index 0000000000000000000000000000000000000000..9ab3862c7dd80c06343d44bc512451e8a779f550 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/5ce3ec59111bf328044e41fcf26b3bc542df527e differ diff --git a/test/core/security/corpus/ssl_server_corpus/5eaac270339f19cfce4eafa2e69d62adf100ad1c b/test/core/security/corpus/ssl_server_corpus/5eaac270339f19cfce4eafa2e69d62adf100ad1c new file mode 100644 index 0000000000000000000000000000000000000000..93d651b9a234751e0785b5f46b6266c02f8ac3ef --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/5eaac270339f19cfce4eafa2e69d62adf100ad1c @@ -0,0 +1 @@ +� GEF \ No newline at end of file diff --git a/test/core/security/corpus/ssl_server_corpus/6129382083353687a5c3acb3d4274b811227bf3d b/test/core/security/corpus/ssl_server_corpus/6129382083353687a5c3acb3d4274b811227bf3d new file mode 100644 index 0000000000000000000000000000000000000000..f8a9920fa889d8f3265e4269bdd7f44f6a20571d Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/6129382083353687a5c3acb3d4274b811227bf3d differ diff --git a/test/core/security/corpus/ssl_server_corpus/616a25f7c4557ef9eb33d4367c6884abc336802d b/test/core/security/corpus/ssl_server_corpus/616a25f7c4557ef9eb33d4367c6884abc336802d new file mode 100644 index 0000000000000000000000000000000000000000..25ce7c1041692e95d9be1421f939b5c4c6b536ac Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/616a25f7c4557ef9eb33d4367c6884abc336802d differ diff --git a/test/core/security/corpus/ssl_server_corpus/6214e558afbfdb8451e49b62619896492f1a8972 b/test/core/security/corpus/ssl_server_corpus/6214e558afbfdb8451e49b62619896492f1a8972 new file mode 100644 index 0000000000000000000000000000000000000000..db4c693368fd0daf7605080fb82465313c0f6aa9 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/6214e558afbfdb8451e49b62619896492f1a8972 differ diff --git a/test/core/security/corpus/ssl_server_corpus/6c6a6b2ce74acf8a8b90fc0b268ecc7dc992cd60 b/test/core/security/corpus/ssl_server_corpus/6c6a6b2ce74acf8a8b90fc0b268ecc7dc992cd60 new file mode 100644 index 0000000000000000000000000000000000000000..74960bda47256fde86954962e538345b2615958a --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/6c6a6b2ce74acf8a8b90fc0b268ecc7dc992cd60 @@ -0,0 +1,2 @@ +POST �TF +� \ No newline at end of file diff --git a/test/core/security/corpus/ssl_server_corpus/6f72309e1b23b824e9bbb9abf74a014b78be038e b/test/core/security/corpus/ssl_server_corpus/6f72309e1b23b824e9bbb9abf74a014b78be038e new file mode 100644 index 0000000000000000000000000000000000000000..74b7f9c4b2a29bbe6a16db179acd83a4dc800436 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/6f72309e1b23b824e9bbb9abf74a014b78be038e differ diff --git a/test/core/security/corpus/ssl_server_corpus/7137ffad853e4dd76c6d6490f37b36e20de7ede0 b/test/core/security/corpus/ssl_server_corpus/7137ffad853e4dd76c6d6490f37b36e20de7ede0 new file mode 100644 index 0000000000000000000000000000000000000000..c28d5e39e5e5afc66636538891a7f6883fa5088e Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/7137ffad853e4dd76c6d6490f37b36e20de7ede0 differ diff --git a/test/core/security/corpus/ssl_server_corpus/71c9356b6b6c5a3a07033d0fa4ed417fa74a77e5 b/test/core/security/corpus/ssl_server_corpus/71c9356b6b6c5a3a07033d0fa4ed417fa74a77e5 new file mode 100644 index 0000000000000000000000000000000000000000..9bfed86391734c442cbc6f43128b5c8983a9cb06 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/71c9356b6b6c5a3a07033d0fa4ed417fa74a77e5 differ diff --git a/test/core/security/corpus/ssl_server_corpus/7414938799ed61282f41d5fb1474751ca52b2682 b/test/core/security/corpus/ssl_server_corpus/7414938799ed61282f41d5fb1474751ca52b2682 new file mode 100644 index 0000000000000000000000000000000000000000..96343edcfdfd5e33828cf893794537b3fdc87aeb Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/7414938799ed61282f41d5fb1474751ca52b2682 differ diff --git a/test/core/security/corpus/ssl_server_corpus/75e853eb2ff7e78efb327e114b39baff5a1dd5bb b/test/core/security/corpus/ssl_server_corpus/75e853eb2ff7e78efb327e114b39baff5a1dd5bb new file mode 100644 index 0000000000000000000000000000000000000000..a53b956562704061765486f01dbda96193d2433f Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/75e853eb2ff7e78efb327e114b39baff5a1dd5bb differ diff --git a/test/core/security/corpus/ssl_server_corpus/7607c92952b4429e350260d8074c3c460468fd49 b/test/core/security/corpus/ssl_server_corpus/7607c92952b4429e350260d8074c3c460468fd49 new file mode 100644 index 0000000000000000000000000000000000000000..b6607caf0bb94435c6a28a4752d5bf35cc28c52f Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/7607c92952b4429e350260d8074c3c460468fd49 differ diff --git a/test/core/security/corpus/ssl_server_corpus/7677373c082fee56d8cdde009d9db5b117a4c8de b/test/core/security/corpus/ssl_server_corpus/7677373c082fee56d8cdde009d9db5b117a4c8de new file mode 100644 index 0000000000000000000000000000000000000000..1a6a772917918f661016e77f66bd3a8cc2d3e627 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/7677373c082fee56d8cdde009d9db5b117a4c8de differ diff --git a/test/core/security/corpus/ssl_server_corpus/76abde5c970743f9fb8bc781e46c431dee2aa104 b/test/core/security/corpus/ssl_server_corpus/76abde5c970743f9fb8bc781e46c431dee2aa104 new file mode 100644 index 0000000000000000000000000000000000000000..11ab46009002027774e468ae4ef066c53933ef41 --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/76abde5c970743f9fb8bc781e46c431dee2aa104 @@ -0,0 +1,2 @@ +CONNE�TF +� \ No newline at end of file diff --git a/test/core/security/corpus/ssl_server_corpus/77e0b4e2066853df9d32d475b8788e3d7d19329b b/test/core/security/corpus/ssl_server_corpus/77e0b4e2066853df9d32d475b8788e3d7d19329b new file mode 100644 index 0000000000000000000000000000000000000000..6eddfc2c2a4153a1f6cb2c5048692650bf40b9ec Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/77e0b4e2066853df9d32d475b8788e3d7d19329b differ diff --git a/test/core/security/corpus/ssl_server_corpus/78e66840048ddc3c75e0e4abffbb3109af0d750e b/test/core/security/corpus/ssl_server_corpus/78e66840048ddc3c75e0e4abffbb3109af0d750e new file mode 100644 index 0000000000000000000000000000000000000000..f7cd40b1d07a0a9d77c35b0cb607a7ff106448d8 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/78e66840048ddc3c75e0e4abffbb3109af0d750e differ diff --git a/test/core/security/corpus/ssl_server_corpus/7dc620eb45764390c7b106362fc4922227415407 b/test/core/security/corpus/ssl_server_corpus/7dc620eb45764390c7b106362fc4922227415407 new file mode 100644 index 0000000000000000000000000000000000000000..cc0b544aba768d8144a6e2fb1a68e51e3cf813d0 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/7dc620eb45764390c7b106362fc4922227415407 differ diff --git a/test/core/security/corpus/ssl_server_corpus/82ca7a52d589e9dbae37ebf1c59fac7ad876eb7c b/test/core/security/corpus/ssl_server_corpus/82ca7a52d589e9dbae37ebf1c59fac7ad876eb7c new file mode 100644 index 0000000000000000000000000000000000000000..36bf08db6689c2d87d835d43d34ea38c624bae59 --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/82ca7a52d589e9dbae37ebf1c59fac7ad876eb7c @@ -0,0 +1 @@ +HTT diff --git a/test/core/security/corpus/ssl_server_corpus/8997d472f73eec84fea712638abd762818ec92ec b/test/core/security/corpus/ssl_server_corpus/8997d472f73eec84fea712638abd762818ec92ec new file mode 100644 index 0000000000000000000000000000000000000000..0a1b6bee6c445c7eba85d5778212749e3c904ee2 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/8997d472f73eec84fea712638abd762818ec92ec differ diff --git a/test/core/security/corpus/ssl_server_corpus/933bc3fdc56718d7ac0486c26eecddb6db1c5ba2 b/test/core/security/corpus/ssl_server_corpus/933bc3fdc56718d7ac0486c26eecddb6db1c5ba2 new file mode 100644 index 0000000000000000000000000000000000000000..2e3c2c83e3cf3d4b42cd3b7d3492c364f858e76a Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/933bc3fdc56718d7ac0486c26eecddb6db1c5ba2 differ diff --git a/test/core/security/corpus/ssl_server_corpus/94431bda60ddc175cf86273ddc07cb41ecf45fa1 b/test/core/security/corpus/ssl_server_corpus/94431bda60ddc175cf86273ddc07cb41ecf45fa1 new file mode 100644 index 0000000000000000000000000000000000000000..8f9893f46e963060524fd55b116c65bf07a8e579 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/94431bda60ddc175cf86273ddc07cb41ecf45fa1 differ diff --git a/test/core/security/corpus/ssl_server_corpus/94c4272b2bb4fa9178eb4ae7dcf4b796fdcb22ac b/test/core/security/corpus/ssl_server_corpus/94c4272b2bb4fa9178eb4ae7dcf4b796fdcb22ac new file mode 100644 index 0000000000000000000000000000000000000000..4b77d18fefe07cb3cca2f4ae6b5eddc4f23241b9 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/94c4272b2bb4fa9178eb4ae7dcf4b796fdcb22ac differ diff --git a/test/core/security/corpus/ssl_server_corpus/9551c32a794250fb425005d8faf4bd24475acd41 b/test/core/security/corpus/ssl_server_corpus/9551c32a794250fb425005d8faf4bd24475acd41 new file mode 100644 index 0000000000000000000000000000000000000000..548f26968d11850058b5a0a7daaa1d702d872957 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/9551c32a794250fb425005d8faf4bd24475acd41 differ diff --git a/test/core/security/corpus/ssl_server_corpus/9677da7c82f18cec3e0ed2e78aadd6e590271a52 b/test/core/security/corpus/ssl_server_corpus/9677da7c82f18cec3e0ed2e78aadd6e590271a52 new file mode 100644 index 0000000000000000000000000000000000000000..c0dbbdfc8e7854f3c6ea9c5cef06eb1e70180e8d Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/9677da7c82f18cec3e0ed2e78aadd6e590271a52 differ diff --git a/test/core/security/corpus/ssl_server_corpus/9c2e6291aff608f3f5307a7c80db6b17107f0575 b/test/core/security/corpus/ssl_server_corpus/9c2e6291aff608f3f5307a7c80db6b17107f0575 new file mode 100644 index 0000000000000000000000000000000000000000..86c59f30eb28065ac8a313c227b0266d7a32c146 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/9c2e6291aff608f3f5307a7c80db6b17107f0575 differ diff --git a/test/core/security/corpus/ssl_server_corpus/9c39dc04c7414ca0bb64fb942422bebe83ed8e8f b/test/core/security/corpus/ssl_server_corpus/9c39dc04c7414ca0bb64fb942422bebe83ed8e8f new file mode 100644 index 0000000000000000000000000000000000000000..3bb43d133f5d9b03337ed81d3141fa0c87686243 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/9c39dc04c7414ca0bb64fb942422bebe83ed8e8f differ diff --git a/test/core/security/corpus/ssl_server_corpus/9cc8547d183a4f2ab7022b36376ca4a6230726c6 b/test/core/security/corpus/ssl_server_corpus/9cc8547d183a4f2ab7022b36376ca4a6230726c6 new file mode 100644 index 0000000000000000000000000000000000000000..5a1b23f80cef2c0bb5637c749360f59ab2bf1660 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/9cc8547d183a4f2ab7022b36376ca4a6230726c6 differ diff --git a/test/core/security/corpus/ssl_server_corpus/9e19e5e77789c34f99bbe1e6de198610d6765806 b/test/core/security/corpus/ssl_server_corpus/9e19e5e77789c34f99bbe1e6de198610d6765806 new file mode 100644 index 0000000000000000000000000000000000000000..66648167e5313b939c2062f5f5a96890bf2f69c4 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/9e19e5e77789c34f99bbe1e6de198610d6765806 differ diff --git a/test/core/security/corpus/ssl_server_corpus/9f0853ccf6912df9fba2d5fc3a1ddece41c377ac b/test/core/security/corpus/ssl_server_corpus/9f0853ccf6912df9fba2d5fc3a1ddece41c377ac new file mode 100644 index 0000000000000000000000000000000000000000..30d80d86c9e606b1cb85e0f3ad8b0d34bbdc7bb5 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/9f0853ccf6912df9fba2d5fc3a1ddece41c377ac differ diff --git a/test/core/security/corpus/ssl_server_corpus/a6d521e501322f052df5a81ee622e0e4942ddcda b/test/core/security/corpus/ssl_server_corpus/a6d521e501322f052df5a81ee622e0e4942ddcda new file mode 100644 index 0000000000000000000000000000000000000000..0552176dcba81f12d61955cee21a285045264b2e Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/a6d521e501322f052df5a81ee622e0e4942ddcda differ diff --git a/test/core/security/corpus/ssl_server_corpus/a9dc20f09890403be510357a7665a8f0db2468a4 b/test/core/security/corpus/ssl_server_corpus/a9dc20f09890403be510357a7665a8f0db2468a4 new file mode 100644 index 0000000000000000000000000000000000000000..2c82ef585ad9d4139bf16e39c339c7123f2add3c Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/a9dc20f09890403be510357a7665a8f0db2468a4 differ diff --git a/test/core/security/corpus/ssl_server_corpus/ac1c60970910880558ae7a2ca2e155cfd7772e05 b/test/core/security/corpus/ssl_server_corpus/ac1c60970910880558ae7a2ca2e155cfd7772e05 new file mode 100644 index 0000000000000000000000000000000000000000..9040ab0a6354d8621871697fdd97f31fac64754f Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/ac1c60970910880558ae7a2ca2e155cfd7772e05 differ diff --git a/test/core/security/corpus/ssl_server_corpus/afe36d0187a155fc6e4e5c055c0ed0f3802cf696 b/test/core/security/corpus/ssl_server_corpus/afe36d0187a155fc6e4e5c055c0ed0f3802cf696 new file mode 100644 index 0000000000000000000000000000000000000000..473e77e0480e678f54ed54380defd0a4ad6e3ce9 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/afe36d0187a155fc6e4e5c055c0ed0f3802cf696 differ diff --git a/test/core/security/corpus/ssl_server_corpus/b12b5fc39edc5407b4a525c414ff6b5e116eee05 b/test/core/security/corpus/ssl_server_corpus/b12b5fc39edc5407b4a525c414ff6b5e116eee05 new file mode 100644 index 0000000000000000000000000000000000000000..09018f3092949bc606467657125c6b7aff8229d0 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/b12b5fc39edc5407b4a525c414ff6b5e116eee05 differ diff --git a/test/core/security/corpus/ssl_server_corpus/b5b088c6e3a96f88119a940874ab04cb954797ae b/test/core/security/corpus/ssl_server_corpus/b5b088c6e3a96f88119a940874ab04cb954797ae new file mode 100644 index 0000000000000000000000000000000000000000..d0f3d4d1169f27eab9cb277c2fc3af46b4e69808 --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/b5b088c6e3a96f88119a940874ab04cb954797ae @@ -0,0 +1 @@ +�FT diff --git a/test/core/security/corpus/ssl_server_corpus/b65ad77a43ede3394ba714238829860c4ef4bc9f b/test/core/security/corpus/ssl_server_corpus/b65ad77a43ede3394ba714238829860c4ef4bc9f new file mode 100644 index 0000000000000000000000000000000000000000..fdb6e038e23d0706c14aa75760f9bf04e958192e Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/b65ad77a43ede3394ba714238829860c4ef4bc9f differ diff --git a/test/core/security/corpus/ssl_server_corpus/b6f265cad9d47e2ccd17a73a6d309d8898dc5428 b/test/core/security/corpus/ssl_server_corpus/b6f265cad9d47e2ccd17a73a6d309d8898dc5428 new file mode 100644 index 0000000000000000000000000000000000000000..bd6b0d89c126e8d5eb9e9f9e4f033ff62a8de4ad Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/b6f265cad9d47e2ccd17a73a6d309d8898dc5428 differ diff --git a/test/core/security/corpus/ssl_server_corpus/b7ca5868bca7ae7d1952f44ca966218b26fb7207 b/test/core/security/corpus/ssl_server_corpus/b7ca5868bca7ae7d1952f44ca966218b26fb7207 new file mode 100644 index 0000000000000000000000000000000000000000..29873bae09e5b6291370f4506cfbd940ed9011f7 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/b7ca5868bca7ae7d1952f44ca966218b26fb7207 differ diff --git a/test/core/security/corpus/ssl_server_corpus/bd20809eacabadb9bcc77d31e42d3359117b03f2 b/test/core/security/corpus/ssl_server_corpus/bd20809eacabadb9bcc77d31e42d3359117b03f2 new file mode 100644 index 0000000000000000000000000000000000000000..150b87d74155e450f5399ffc8c962daf60674609 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/bd20809eacabadb9bcc77d31e42d3359117b03f2 differ diff --git a/test/core/security/corpus/ssl_server_corpus/c328623c4ce12505a54cf1a7a1606e1db36e870d b/test/core/security/corpus/ssl_server_corpus/c328623c4ce12505a54cf1a7a1606e1db36e870d new file mode 100644 index 0000000000000000000000000000000000000000..32ef98cdb6a258646905c707e8b66a60d1e736a1 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/c328623c4ce12505a54cf1a7a1606e1db36e870d differ diff --git a/test/core/security/corpus/ssl_server_corpus/c823e8bd5526d9fe7d51319737f51bd18bdd75e8 b/test/core/security/corpus/ssl_server_corpus/c823e8bd5526d9fe7d51319737f51bd18bdd75e8 new file mode 100644 index 0000000000000000000000000000000000000000..ed09bd0f4a18ac8869e563714520bf7087303157 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/c823e8bd5526d9fe7d51319737f51bd18bdd75e8 differ diff --git a/test/core/security/corpus/ssl_server_corpus/c9394095d86ff36b69d90f7122592bf51cafe7dd b/test/core/security/corpus/ssl_server_corpus/c9394095d86ff36b69d90f7122592bf51cafe7dd new file mode 100644 index 0000000000000000000000000000000000000000..6aa6cd853f3772f4172844c0104dae586e63551b Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/c9394095d86ff36b69d90f7122592bf51cafe7dd differ diff --git a/test/core/security/corpus/ssl_server_corpus/cdbf0d2ae953bec07a67b7152785b548e55f85a4 b/test/core/security/corpus/ssl_server_corpus/cdbf0d2ae953bec07a67b7152785b548e55f85a4 new file mode 100644 index 0000000000000000000000000000000000000000..05a2a331845cff5024ab1b329054ccb9ca4798a5 --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/cdbf0d2ae953bec07a67b7152785b548e55f85a4 @@ -0,0 +1 @@ +�HTTP diff --git a/test/core/security/corpus/ssl_server_corpus/cef06f9c35ee338998703555847d70c26bfc9474 b/test/core/security/corpus/ssl_server_corpus/cef06f9c35ee338998703555847d70c26bfc9474 new file mode 100644 index 0000000000000000000000000000000000000000..09f8c4ef69c716fa63baabc9d5e8c570ea0dff85 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/cef06f9c35ee338998703555847d70c26bfc9474 differ diff --git a/test/core/security/corpus/ssl_server_corpus/cfb40ab8eb7031e978bed2418cdc2f0b8a8d8ec7 b/test/core/security/corpus/ssl_server_corpus/cfb40ab8eb7031e978bed2418cdc2f0b8a8d8ec7 new file mode 100644 index 0000000000000000000000000000000000000000..b1eceeaa0bb9b87f60e350bf943ad4faaade135f Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/cfb40ab8eb7031e978bed2418cdc2f0b8a8d8ec7 differ diff --git a/test/core/security/corpus/ssl_server_corpus/d30840c3f48f11179ef976ada30477045c6d1e98 b/test/core/security/corpus/ssl_server_corpus/d30840c3f48f11179ef976ada30477045c6d1e98 new file mode 100644 index 0000000000000000000000000000000000000000..03710842a227a4b79314d2038bd0fd1c4258a57f Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/d30840c3f48f11179ef976ada30477045c6d1e98 differ diff --git a/test/core/security/corpus/ssl_server_corpus/d5afef69141edc7f4911243cf2deb19c912999cf b/test/core/security/corpus/ssl_server_corpus/d5afef69141edc7f4911243cf2deb19c912999cf new file mode 100644 index 0000000000000000000000000000000000000000..3086e8e13363daade0ddef2126bbfbad107b945e Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/d5afef69141edc7f4911243cf2deb19c912999cf differ diff --git a/test/core/security/corpus/ssl_server_corpus/d5cf71396e1a04da1a7ec266957ffd2de29d6a57 b/test/core/security/corpus/ssl_server_corpus/d5cf71396e1a04da1a7ec266957ffd2de29d6a57 new file mode 100644 index 0000000000000000000000000000000000000000..9e88e9e405252b922db90af19aca55b877a40f36 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/d5cf71396e1a04da1a7ec266957ffd2de29d6a57 differ diff --git a/test/core/security/corpus/ssl_server_corpus/d6dd8a2b085db5d33ef24b23502293ce1ce906a3 b/test/core/security/corpus/ssl_server_corpus/d6dd8a2b085db5d33ef24b23502293ce1ce906a3 new file mode 100644 index 0000000000000000000000000000000000000000..8bd63513c99035f1a8b448116d7edb85d4e6def7 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/d6dd8a2b085db5d33ef24b23502293ce1ce906a3 differ diff --git a/test/core/security/corpus/ssl_server_corpus/d7676dcd39b7c7cfaac513a98b56fe4ac8ea27d8 b/test/core/security/corpus/ssl_server_corpus/d7676dcd39b7c7cfaac513a98b56fe4ac8ea27d8 new file mode 100644 index 0000000000000000000000000000000000000000..87dcaf1fc304b6597e1270d4d5cb404c900ad0b9 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/d7676dcd39b7c7cfaac513a98b56fe4ac8ea27d8 differ diff --git a/test/core/security/corpus/ssl_server_corpus/d8c9e9ef14abc23b36cb493283ba3e2812d9e537 b/test/core/security/corpus/ssl_server_corpus/d8c9e9ef14abc23b36cb493283ba3e2812d9e537 new file mode 100644 index 0000000000000000000000000000000000000000..463accbde70f165e38a38519a6110555ef37dcd3 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/d8c9e9ef14abc23b36cb493283ba3e2812d9e537 differ diff --git a/test/core/security/corpus/ssl_server_corpus/d9edb0aa5d2fe4af26ac861770c1530a4075f919 b/test/core/security/corpus/ssl_server_corpus/d9edb0aa5d2fe4af26ac861770c1530a4075f919 new file mode 100644 index 0000000000000000000000000000000000000000..809604e3440a8225dfe28e92759e8aabd06d137b --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/d9edb0aa5d2fe4af26ac861770c1530a4075f919 @@ -0,0 +1 @@ +GET F \ No newline at end of file diff --git a/test/core/security/corpus/ssl_server_corpus/da1b52041957334b9ea1371bd2993013118bc82d b/test/core/security/corpus/ssl_server_corpus/da1b52041957334b9ea1371bd2993013118bc82d new file mode 100644 index 0000000000000000000000000000000000000000..6f09bd8856b1e7c3d37980d346929ec5cdff1f88 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/da1b52041957334b9ea1371bd2993013118bc82d differ diff --git a/test/core/security/corpus/ssl_server_corpus/dca7861424c8f92d3720de5c4488454cde1c39df b/test/core/security/corpus/ssl_server_corpus/dca7861424c8f92d3720de5c4488454cde1c39df new file mode 100644 index 0000000000000000000000000000000000000000..e3bf9475704debf7bcf3a4b41fa46279101ea016 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/dca7861424c8f92d3720de5c4488454cde1c39df differ diff --git a/test/core/security/corpus/ssl_server_corpus/df3755e257d024ef8ab08f6d5cefcf28148ea4b1 b/test/core/security/corpus/ssl_server_corpus/df3755e257d024ef8ab08f6d5cefcf28148ea4b1 new file mode 100644 index 0000000000000000000000000000000000000000..a2a28cd60b1dc6f1be6fb1109cd8ced3652b9790 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/df3755e257d024ef8ab08f6d5cefcf28148ea4b1 differ diff --git a/test/core/security/corpus/ssl_server_corpus/e360a49faefb87d671edb99e777f528f52cac9ae b/test/core/security/corpus/ssl_server_corpus/e360a49faefb87d671edb99e777f528f52cac9ae new file mode 100644 index 0000000000000000000000000000000000000000..92a0113f435009faccb63ae5b12a50900e18f231 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/e360a49faefb87d671edb99e777f528f52cac9ae differ diff --git a/test/core/security/corpus/ssl_server_corpus/e5e789605744d47e5a5d433bb04db1b413bc91a8 b/test/core/security/corpus/ssl_server_corpus/e5e789605744d47e5a5d433bb04db1b413bc91a8 new file mode 100644 index 0000000000000000000000000000000000000000..55f63dcec99b9e53271dd4c3dae9579ecf3348af Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/e5e789605744d47e5a5d433bb04db1b413bc91a8 differ diff --git a/test/core/security/corpus/ssl_server_corpus/e6e44a6aa0ece409450c85e43d02c57e338ce1da b/test/core/security/corpus/ssl_server_corpus/e6e44a6aa0ece409450c85e43d02c57e338ce1da new file mode 100644 index 0000000000000000000000000000000000000000..6363a5796cc9a9b092e7e304ce195ad5a74b54cf Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/e6e44a6aa0ece409450c85e43d02c57e338ce1da differ diff --git a/test/core/security/corpus/ssl_server_corpus/e8ebd49ee98cf57ca7eb35b6e96ef8866270aac6 b/test/core/security/corpus/ssl_server_corpus/e8ebd49ee98cf57ca7eb35b6e96ef8866270aac6 new file mode 100644 index 0000000000000000000000000000000000000000..cc292176e8db77111ae7f88b0fe55b2cda6d20cb Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/e8ebd49ee98cf57ca7eb35b6e96ef8866270aac6 differ diff --git a/test/core/security/corpus/ssl_server_corpus/ea0645f46ccd233337a8389b6118db5b0289f040 b/test/core/security/corpus/ssl_server_corpus/ea0645f46ccd233337a8389b6118db5b0289f040 new file mode 100644 index 0000000000000000000000000000000000000000..8379f0182360726b1cef6bbcb4307e8e2f7ebed7 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/ea0645f46ccd233337a8389b6118db5b0289f040 differ diff --git a/test/core/security/corpus/ssl_server_corpus/f6f7687df6b7056d3c819c03c9268e22a956b6b5 b/test/core/security/corpus/ssl_server_corpus/f6f7687df6b7056d3c819c03c9268e22a956b6b5 new file mode 100644 index 0000000000000000000000000000000000000000..0a3b794dbfd86849ed96da55ce6fcc4802eeb5fb Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/f6f7687df6b7056d3c819c03c9268e22a956b6b5 differ diff --git a/test/core/security/corpus/ssl_server_corpus/f725caa73aa9467c5e934c49780fc409b36b251c b/test/core/security/corpus/ssl_server_corpus/f725caa73aa9467c5e934c49780fc409b36b251c new file mode 100644 index 0000000000000000000000000000000000000000..146d7f992435de424c771c1dd1b92efdf45d949a Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/f725caa73aa9467c5e934c49780fc409b36b251c differ diff --git a/test/core/security/corpus/ssl_server_corpus/f8d3326a860091edd4d60725f96f429d13f3abe6 b/test/core/security/corpus/ssl_server_corpus/f8d3326a860091edd4d60725f96f429d13f3abe6 new file mode 100644 index 0000000000000000000000000000000000000000..fa54b7b7b69333014d9500f0fc09d143eb80fa42 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/f8d3326a860091edd4d60725f96f429d13f3abe6 differ diff --git a/test/core/security/corpus/ssl_server_corpus/f9261344b4049e90e88b5af784dd29b938c5c838 b/test/core/security/corpus/ssl_server_corpus/f9261344b4049e90e88b5af784dd29b938c5c838 new file mode 100644 index 0000000000000000000000000000000000000000..02a90fb3a44407a8d1de4a0afd231d97fe55a128 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/f9261344b4049e90e88b5af784dd29b938c5c838 differ diff --git a/test/core/security/corpus/ssl_server_corpus/f95b97ece3b46815204a8e6d6e94f92ec40a9672 b/test/core/security/corpus/ssl_server_corpus/f95b97ece3b46815204a8e6d6e94f92ec40a9672 new file mode 100644 index 0000000000000000000000000000000000000000..c21b9b830ee358770688b9442f4bf9aac03cc017 Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/f95b97ece3b46815204a8e6d6e94f92ec40a9672 differ diff --git a/test/core/security/corpus/ssl_server_corpus/f97db29497e4e3225016a6ced837e20a13622f16 b/test/core/security/corpus/ssl_server_corpus/f97db29497e4e3225016a6ced837e20a13622f16 new file mode 100644 index 0000000000000000000000000000000000000000..1159a7772bfb2f196a88378bcf3692a3213d3d9a Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/f97db29497e4e3225016a6ced837e20a13622f16 differ diff --git a/test/core/security/corpus/ssl_server_corpus/ff1a900b12f19772f9a86bd5f560a754cdb18d1a b/test/core/security/corpus/ssl_server_corpus/ff1a900b12f19772f9a86bd5f560a754cdb18d1a new file mode 100644 index 0000000000000000000000000000000000000000..85adeac4bb4ea55043c0d5f8daaea49ef45e33ee Binary files /dev/null and b/test/core/security/corpus/ssl_server_corpus/ff1a900b12f19772f9a86bd5f560a754cdb18d1a differ diff --git a/test/core/security/jwt_verifier_test.c b/test/core/security/jwt_verifier_test.c index 14321d164efed3816bdd930b6161028e7691516e..71da935eebceae4b7295cf11c5815a5100a738b4 100644 --- a/test/core/security/jwt_verifier_test.c +++ b/test/core/security/jwt_verifier_test.c @@ -306,16 +306,14 @@ static int httpcli_get_google_keys_for_email( return 1; } -static void on_verification_success(void *user_data, +static void on_verification_success(grpc_exec_ctx *exec_ctx, void *user_data, grpc_jwt_verifier_status status, grpc_jwt_claims *claims) { GPR_ASSERT(status == GRPC_JWT_VERIFIER_OK); GPR_ASSERT(claims != NULL); GPR_ASSERT(user_data == (void *)expected_user_data); GPR_ASSERT(strcmp(grpc_jwt_claims_audience(claims), expected_audience) == 0); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_jwt_claims_destroy(&exec_ctx, claims); - grpc_exec_ctx_finish(&exec_ctx); + grpc_jwt_claims_destroy(exec_ctx, claims); } static void test_jwt_verifier_google_email_issuer_success(void) { @@ -423,7 +421,8 @@ static void test_jwt_verifier_url_issuer_success(void) { grpc_httpcli_set_override(NULL, NULL); } -static void on_verification_key_retrieval_error(void *user_data, +static void on_verification_key_retrieval_error(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_jwt_verifier_status status, grpc_jwt_claims *claims) { GPR_ASSERT(status == GRPC_JWT_VERIFIER_KEY_RETRIEVAL_ERROR); @@ -508,7 +507,8 @@ static void corrupt_jwt_sig(char *jwt) { grpc_slice_unref(sig); } -static void on_verification_bad_signature(void *user_data, +static void on_verification_bad_signature(grpc_exec_ctx *exec_ctx, + void *user_data, grpc_jwt_verifier_status status, grpc_jwt_claims *claims) { GPR_ASSERT(status == GRPC_JWT_VERIFIER_BAD_SIGNATURE); @@ -549,7 +549,7 @@ static int httpcli_get_should_not_be_called(grpc_exec_ctx *exec_ctx, return 1; } -static void on_verification_bad_format(void *user_data, +static void on_verification_bad_format(grpc_exec_ctx *exec_ctx, void *user_data, grpc_jwt_verifier_status status, grpc_jwt_claims *claims) { GPR_ASSERT(status == GRPC_JWT_VERIFIER_BAD_FORMAT); diff --git a/test/core/security/ssl_server_fuzzer.c b/test/core/security/ssl_server_fuzzer.c new file mode 100644 index 0000000000000000000000000000000000000000..04969765f59f59212db1c81f4ab9c9a4ae08acfb --- /dev/null +++ b/test/core/security/ssl_server_fuzzer.c @@ -0,0 +1,146 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include <grpc/grpc.h> +#include <grpc/grpc_security.h> +#include <grpc/support/log.h> + +#include "src/core/lib/iomgr/load_file.h" +#include "src/core/lib/security/credentials/credentials.h" +#include "src/core/lib/security/transport/security_connector.h" +#include "test/core/util/memory_counters.h" +#include "test/core/util/mock_endpoint.h" + +bool squelch = true; +// ssl has an array of global gpr_mu's that are never released. +// Turning this on will fail the leak check. +bool leak_check = false; + +#define SSL_CERT_PATH "src/core/lib/tsi/test_creds/server1.pem" +#define SSL_KEY_PATH "src/core/lib/tsi/test_creds/server1.key" +#define SSL_CA_PATH "src/core/lib/tsi/test_creds/ca.pem" + +static void discard_write(grpc_slice slice) {} + +static void dont_log(gpr_log_func_args *args) {} + +struct handshake_state { + bool done_callback_called; +}; + +static void on_secure_handshake_done(grpc_exec_ctx *exec_ctx, void *statep, + grpc_security_status status, + grpc_endpoint *secure_endpoint, + grpc_auth_context *auth_context) { + struct handshake_state *state = (struct handshake_state *)statep; + GPR_ASSERT(state->done_callback_called == false); + state->done_callback_called = true; + // The fuzzer should not pass the handshake. + GPR_ASSERT(status != GRPC_SECURITY_OK); + GPR_ASSERT(secure_endpoint == NULL); + GPR_ASSERT(auth_context == NULL); +} + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + struct grpc_memory_counters counters; + if (squelch) gpr_set_log_function(dont_log); + if (leak_check) grpc_memory_counters_init(); + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("ssl_server_fuzzer"); + grpc_endpoint *mock_endpoint = + grpc_mock_endpoint_create(discard_write, resource_quota); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); + + grpc_mock_endpoint_put_read( + &exec_ctx, mock_endpoint, + grpc_slice_from_copied_buffer((const char *)data, size)); + + // Load key pair and establish server SSL credentials. + grpc_ssl_pem_key_cert_pair pem_key_cert_pair; + grpc_slice ca_slice, cert_slice, key_slice; + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_CA_PATH, 1, &ca_slice))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_CERT_PATH, 1, &cert_slice))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_KEY_PATH, 1, &key_slice))); + const char *ca_cert = (const char *)GRPC_SLICE_START_PTR(ca_slice); + pem_key_cert_pair.private_key = (const char *)GRPC_SLICE_START_PTR(key_slice); + pem_key_cert_pair.cert_chain = (const char *)GRPC_SLICE_START_PTR(cert_slice); + grpc_server_credentials *creds = grpc_ssl_server_credentials_create( + ca_cert, &pem_key_cert_pair, 1, 0, NULL); + + // Create security connector + grpc_server_security_connector *sc = NULL; + grpc_security_status status = + grpc_server_credentials_create_security_connector(creds, &sc); + GPR_ASSERT(status == GRPC_SECURITY_OK); + sc->channel_args = NULL; + gpr_timespec deadline = gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), + gpr_time_from_seconds(1, GPR_TIMESPAN)); + + struct handshake_state state; + state.done_callback_called = false; + grpc_server_security_connector_do_handshake(&exec_ctx, sc, NULL, + mock_endpoint, NULL, deadline, + on_secure_handshake_done, &state); + grpc_exec_ctx_flush(&exec_ctx); + + // If the given string happens to be part of the correct client hello, the + // server will wait for more data. Explicitly fail the server by shutting down + // the endpoint. + if (!state.done_callback_called) { + grpc_endpoint_shutdown(&exec_ctx, mock_endpoint); + grpc_exec_ctx_flush(&exec_ctx); + } + + GPR_ASSERT(state.done_callback_called); + + GRPC_SECURITY_CONNECTOR_UNREF(&sc->base, "test"); + grpc_server_credentials_release(creds); + grpc_slice_unref(cert_slice); + grpc_slice_unref(key_slice); + grpc_slice_unref(ca_slice); + grpc_exec_ctx_flush(&exec_ctx); + + grpc_shutdown(); + if (leak_check) { + counters = grpc_memory_counters_snapshot(); + grpc_memory_counters_destroy(); + GPR_ASSERT(counters.total_size_relative == 0); + } + return 0; +} diff --git a/test/core/security/verify_jwt.c b/test/core/security/verify_jwt.c index 043d29e6bb94cf6b5115c0fde228d8f8ef70b058..32169bb8d249b4191d62208cf054fabaeb966ccc 100644 --- a/test/core/security/verify_jwt.c +++ b/test/core/security/verify_jwt.c @@ -59,7 +59,7 @@ static void print_usage_and_exit(gpr_cmdline *cl, const char *argv0) { exit(1); } -static void on_jwt_verification_done(void *user_data, +static void on_jwt_verification_done(grpc_exec_ctx *exec_ctx, void *user_data, grpc_jwt_verifier_status status, grpc_jwt_claims *claims) { synchronizer *sync = user_data; @@ -72,7 +72,7 @@ static void on_jwt_verification_done(void *user_data, grpc_json_dump_to_string((grpc_json *)grpc_jwt_claims_json(claims), 2); printf("Claims: \n\n%s\n", claims_str); gpr_free(claims_str); - grpc_jwt_claims_destroy(claims); + grpc_jwt_claims_destroy(exec_ctx, claims); } else { GPR_ASSERT(claims == NULL); fprintf(stderr, "Verification failed with error %s\n", diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index 28ff0642ccffbf8bc99946e9008d8dcd1d18707a..bf6d85252a97ebdeafecb88ee81dc8caa4ab9847 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -37,6 +37,7 @@ #include <grpc/support/alloc.h> #include <grpc/support/string_util.h> +#include "src/core/lib/iomgr/sockaddr.h" typedef struct grpc_mock_endpoint { grpc_endpoint base; @@ -105,6 +106,8 @@ static grpc_resource_user *me_get_resource_user(grpc_endpoint *ep) { return m->resource_user; } +static int me_get_fd(grpc_endpoint *ep) { return -1; } + static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; } static const grpc_endpoint_vtable vtable = { @@ -117,6 +120,7 @@ static const grpc_endpoint_vtable vtable = { me_destroy, me_get_resource_user, me_get_peer, + me_get_fd, }; grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(grpc_slice slice), diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c index 62d5f1c3db52ca343bda4c5b6ba009fdea2a3cf6..ecffe35e9ed6d89ed0029237155b1a727cf4f4c8 100644 --- a/test/core/util/passthru_endpoint.c +++ b/test/core/util/passthru_endpoint.c @@ -37,6 +37,7 @@ #include <grpc/support/alloc.h> #include <grpc/support/string_util.h> +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/slice/slice_internal.h" @@ -148,6 +149,8 @@ static char *me_get_peer(grpc_endpoint *ep) { return gpr_strdup("fake:mock_endpoint"); } +static int me_get_fd(grpc_endpoint *ep) { return -1; } + static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; } static grpc_resource_user *me_get_resource_user(grpc_endpoint *ep) { @@ -165,6 +168,7 @@ static const grpc_endpoint_vtable vtable = { me_destroy, me_get_resource_user, me_get_peer, + me_get_fd, }; static void half_init(half *m, passthru_endpoint *parent, diff --git a/test/cpp/common/channel_arguments_test.cc b/test/cpp/common/channel_arguments_test.cc index 342f6a53396e204b6d3a5dba4f825d8ab25990d9..60d3215265f075b1a72e45a19acea901092a54f1 100644 --- a/test/cpp/common/channel_arguments_test.cc +++ b/test/cpp/common/channel_arguments_test.cc @@ -35,11 +35,56 @@ #include <grpc++/grpc++.h> #include <grpc/grpc.h> +#include <grpc/support/useful.h> #include <gtest/gtest.h> +#include "src/core/lib/iomgr/socket_mutator.h" namespace grpc { namespace testing { +namespace { + +// A simple grpc_socket_mutator to be used to test SetSocketMutator +class TestSocketMutator : public grpc_socket_mutator { + public: + TestSocketMutator(); + + bool MutateFd(int fd) { + // Do nothing on the fd + return true; + } +}; + +// +// C API for TestSocketMutator +// + +bool test_mutator_mutate_fd(int fd, grpc_socket_mutator* mutator) { + TestSocketMutator* tsm = (TestSocketMutator*)mutator; + return tsm->MutateFd(fd); +} + +int test_mutator_compare(grpc_socket_mutator* a, grpc_socket_mutator* b) { + return GPR_ICMP(a, b); +} + +void test_mutator_destroy(grpc_socket_mutator* mutator) { + TestSocketMutator* tsm = (TestSocketMutator*)mutator; + delete tsm; +} + +grpc_socket_mutator_vtable test_mutator_vtable = { + test_mutator_mutate_fd, test_mutator_compare, test_mutator_destroy}; + +// +// TestSocketMutator implementation +// + +TestSocketMutator::TestSocketMutator() { + grpc_socket_mutator_init(this, &test_mutator_vtable); +} +} + class ChannelArgumentsTest : public ::testing::Test { protected: ChannelArgumentsTest() @@ -166,6 +211,26 @@ TEST_F(ChannelArgumentsTest, SetPointer) { EXPECT_TRUE(HasArg(arg0)); } +TEST_F(ChannelArgumentsTest, SetSocketMutator) { + VerifyDefaultChannelArgs(); + grpc_arg arg0, arg1; + TestSocketMutator* mutator0 = new TestSocketMutator(); + TestSocketMutator* mutator1 = new TestSocketMutator(); + arg0 = grpc_socket_mutator_to_arg(mutator0); + arg1 = grpc_socket_mutator_to_arg(mutator1); + + channel_args_.SetSocketMutator(mutator0); + EXPECT_TRUE(HasArg(arg0)); + + channel_args_.SetSocketMutator(mutator1); + EXPECT_TRUE(HasArg(arg1)); + // arg0 is replaced by arg1 + EXPECT_FALSE(HasArg(arg0)); + + // arg0 is destroyed by grpc_socket_mutator_to_arg(mutator1) + arg1.value.pointer.vtable->destroy(arg1.value.pointer.p); +} + TEST_F(ChannelArgumentsTest, SetUserAgentPrefix) { VerifyDefaultChannelArgs(); grpc::string prefix("prefix"); diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index 3845582d5db22e06617cb35bd76f7f5a2e24c935..8e385d100c16f37b770e120149e8a6401c64ff19 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -352,15 +352,13 @@ void ServerWait(Server* server, int* notify) { } TEST_P(AsyncEnd2endTest, WaitAndShutdownTest) { int notify = 0; - std::thread* wait_thread = - new std::thread(&ServerWait, server_.get(), ¬ify); + std::thread wait_thread(&ServerWait, server_.get(), ¬ify); ResetStub(); SendRpc(1); EXPECT_EQ(0, notify); server_->Shutdown(); - wait_thread->join(); + wait_thread.join(); EXPECT_EQ(1, notify); - delete wait_thread; } TEST_P(AsyncEnd2endTest, ShutdownThenWait) { @@ -991,7 +989,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { expected_server_cq_result = false; } - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; auto verif = Verifier(GetParam().disable_blocking); @@ -1027,7 +1025,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { } } - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; } @@ -1112,7 +1110,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { expected_cq_result = false; } - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; auto verif = Verifier(GetParam().disable_blocking); @@ -1150,7 +1148,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { } } - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; } @@ -1252,7 +1250,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { expected_cq_result = false; } - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; auto verif = Verifier(GetParam().disable_blocking); @@ -1332,7 +1330,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { EXPECT_EQ(verif.Next(cq_.get(), ignore_cq_result), 8); } - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; } diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index 4b8749884f8fe793c7764aa667307b0663365009..9bb892c694bbd809b97eb80e51627b91f2dbea60 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -656,25 +656,23 @@ TEST_P(End2endTest, SimpleRpcWithCustomeUserAgentPrefix) { TEST_P(End2endTest, MultipleRpcsWithVariedBinaryMetadataValue) { ResetStub(); - std::vector<std::thread*> threads; + std::vector<std::thread> threads; for (int i = 0; i < 10; ++i) { - threads.push_back(new std::thread(SendRpc, stub_.get(), 10, true)); + threads.emplace_back(SendRpc, stub_.get(), 10, true); } for (int i = 0; i < 10; ++i) { - threads[i]->join(); - delete threads[i]; + threads[i].join(); } } TEST_P(End2endTest, MultipleRpcs) { ResetStub(); - std::vector<std::thread*> threads; + std::vector<std::thread> threads; for (int i = 0; i < 10; ++i) { - threads.push_back(new std::thread(SendRpc, stub_.get(), 10, false)); + threads.emplace_back(SendRpc, stub_.get(), 10, false); } for (int i = 0; i < 10; ++i) { - threads[i]->join(); - delete threads[i]; + threads[i].join(); } } @@ -1058,13 +1056,12 @@ TEST_P(ProxyEnd2endTest, SimpleRpcWithEmptyMessages) { TEST_P(ProxyEnd2endTest, MultipleRpcs) { ResetStub(); - std::vector<std::thread*> threads; + std::vector<std::thread> threads; for (int i = 0; i < 10; ++i) { - threads.push_back(new std::thread(SendRpc, stub_.get(), 10, false)); + threads.emplace_back(SendRpc, stub_.get(), 10, false); } for (int i = 0; i < 10; ++i) { - threads[i]->join(); - delete threads[i]; + threads[i].join(); } } diff --git a/test/cpp/end2end/test_service_impl.cc b/test/cpp/end2end/test_service_impl.cc index 2de344efd586c27e040095595ddd30698a9e05f8..001047778d7d5c312d94d3d6c10d1d9e3c81459e 100644 --- a/test/cpp/end2end/test_service_impl.cc +++ b/test/cpp/end2end/test_service_impl.cc @@ -194,7 +194,7 @@ Status TestServiceImpl::RequestStream(ServerContext* context, return Status::CANCELLED; } - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; if (server_try_cancel == CANCEL_DURING_PROCESSING) { server_try_cancel_thd = new std::thread(&TestServiceImpl::ServerTryCancel, this, context); @@ -212,7 +212,7 @@ Status TestServiceImpl::RequestStream(ServerContext* context, } gpr_log(GPR_INFO, "Read: %d messages", num_msgs_read); - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; return Status::CANCELLED; @@ -248,7 +248,7 @@ Status TestServiceImpl::ResponseStream(ServerContext* context, } EchoResponse response; - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; if (server_try_cancel == CANCEL_DURING_PROCESSING) { server_try_cancel_thd = new std::thread(&TestServiceImpl::ServerTryCancel, this, context); @@ -259,7 +259,7 @@ Status TestServiceImpl::ResponseStream(ServerContext* context, writer->Write(response); } - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; return Status::CANCELLED; @@ -295,7 +295,7 @@ Status TestServiceImpl::BidiStream( return Status::CANCELLED; } - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; if (server_try_cancel == CANCEL_DURING_PROCESSING) { server_try_cancel_thd = new std::thread(&TestServiceImpl::ServerTryCancel, this, context); @@ -307,7 +307,7 @@ Status TestServiceImpl::BidiStream( stream->Write(response); } - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; return Status::CANCELLED; diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc index fe5a219eed73e63a60f8f37472a1285c33f47ca0..d353f9894b3896540576487f868a3327adbe5624 100644 --- a/test/cpp/end2end/thread_stress_test.cc +++ b/test/cpp/end2end/thread_stress_test.cc @@ -232,19 +232,19 @@ class CommonStressTestSyncServer : public CommonStressTest<TestServiceImpl> { class CommonStressTestAsyncServer : public CommonStressTest<grpc::testing::EchoTestService::AsyncService> { public: + CommonStressTestAsyncServer() : contexts_(kNumAsyncServerThreads * 100) {} void SetUp() override { shutting_down_ = false; ServerBuilder builder; SetUpStart(&builder, &service_); cq_ = builder.AddCompletionQueue(); SetUpEnd(&builder); - contexts_ = new Context[kNumAsyncServerThreads * 100]; for (int i = 0; i < kNumAsyncServerThreads * 100; i++) { RefreshContext(i); } for (int i = 0; i < kNumAsyncServerThreads; i++) { - server_threads_.push_back( - new std::thread(&CommonStressTestAsyncServer::ProcessRpcs, this)); + server_threads_.emplace_back(&CommonStressTestAsyncServer::ProcessRpcs, + this); } } void TearDown() override { @@ -256,8 +256,7 @@ class CommonStressTestAsyncServer } for (int i = 0; i < kNumAsyncServerThreads; i++) { - server_threads_[i]->join(); - delete server_threads_[i]; + server_threads_[i].join(); } void* ignored_tag; @@ -265,7 +264,6 @@ class CommonStressTestAsyncServer while (cq_->Next(&ignored_tag, &ignored_ok)) ; TearDownEnd(); - delete[] contexts_; } private: @@ -311,12 +309,13 @@ class CommonStressTestAsyncServer response_writer; EchoRequest recv_request; enum { READY, DONE } state; - } * contexts_; + }; + std::vector<Context> contexts_; ::grpc::testing::EchoTestService::AsyncService service_; std::unique_ptr<ServerCompletionQueue> cq_; bool shutting_down_; std::mutex mu_; - std::vector<std::thread*> server_threads_; + std::vector<std::thread> server_threads_; }; template <class Common> @@ -353,14 +352,12 @@ typedef ::testing::Types<CommonStressTestSyncServer, TYPED_TEST_CASE(End2endTest, CommonTypes); TYPED_TEST(End2endTest, ThreadStress) { this->common_.ResetStub(); - std::vector<std::thread*> threads; + std::vector<std::thread> threads; for (int i = 0; i < kNumThreads; ++i) { - threads.push_back( - new std::thread(SendRpc, this->common_.GetStub(), kNumRpcs)); + threads.emplace_back(SendRpc, this->common_.GetStub(), kNumRpcs); } for (int i = 0; i < kNumThreads; ++i) { - threads[i]->join(); - delete threads[i]; + threads[i].join(); } } @@ -442,26 +439,24 @@ class AsyncClientEnd2endTest : public ::testing::Test { TYPED_TEST_CASE(AsyncClientEnd2endTest, CommonTypes); TYPED_TEST(AsyncClientEnd2endTest, ThreadStress) { this->common_.ResetStub(); - std::vector<std::thread *> send_threads, completion_threads; + std::vector<std::thread> send_threads, completion_threads; for (int i = 0; i < kNumAsyncReceiveThreads; ++i) { - completion_threads.push_back(new std::thread( + completion_threads.emplace_back( &AsyncClientEnd2endTest_ThreadStress_Test<TypeParam>::AsyncCompleteRpc, - this)); + this); } for (int i = 0; i < kNumAsyncSendThreads; ++i) { - send_threads.push_back(new std::thread( + send_threads.emplace_back( &AsyncClientEnd2endTest_ThreadStress_Test<TypeParam>::AsyncSendRpc, - this, kNumRpcs)); + this, kNumRpcs); } for (int i = 0; i < kNumAsyncSendThreads; ++i) { - send_threads[i]->join(); - delete send_threads[i]; + send_threads[i].join(); } this->Wait(); for (int i = 0; i < kNumAsyncReceiveThreads; ++i) { - completion_threads[i]->join(); - delete completion_threads[i]; + completion_threads[i].join(); } } diff --git a/test/cpp/microbenchmarks/bm_fullstack.cc b/test/cpp/microbenchmarks/bm_fullstack.cc new file mode 100644 index 0000000000000000000000000000000000000000..2b6dd3219ce34e379d5f0e8023514d7adda51a2f --- /dev/null +++ b/test/cpp/microbenchmarks/bm_fullstack.cc @@ -0,0 +1,439 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* Benchmark gRPC end2end in various configurations */ + +#include <sstream> + +#include <grpc++/channel.h> +#include <grpc++/create_channel.h> +#include <grpc++/impl/grpc_library.h> +#include <grpc++/security/credentials.h> +#include <grpc++/security/server_credentials.h> +#include <grpc++/server.h> +#include <grpc++/server_builder.h> +#include <grpc/support/log.h> + +extern "C" { +#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" +#include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/iomgr/endpoint.h" +#include "src/core/lib/iomgr/endpoint_pair.h" +#include "src/core/lib/iomgr/exec_ctx.h" +#include "src/core/lib/iomgr/tcp_posix.h" +#include "src/core/lib/surface/channel.h" +#include "src/core/lib/surface/completion_queue.h" +#include "src/core/lib/surface/server.h" +#include "test/core/util/passthru_endpoint.h" +#include "test/core/util/port.h" +} +#include "src/cpp/client/create_channel_internal.h" +#include "src/proto/grpc/testing/echo.grpc.pb.h" +#include "third_party/google_benchmark/include/benchmark/benchmark.h" + +namespace grpc { +namespace testing { + +static class InitializeStuff { + public: + InitializeStuff() { + init_lib_.init(); + rq_ = grpc_resource_quota_create("bm"); + } + + grpc_resource_quota* rq() { return rq_; } + + private: + internal::GrpcLibrary init_lib_; + grpc_resource_quota* rq_; +} initialize_stuff; + +/******************************************************************************* + * FIXTURES + */ + +class FullstackFixture { + public: + FullstackFixture(Service* service, const grpc::string& address) { + ServerBuilder b; + b.AddListeningPort(address, InsecureServerCredentials()); + cq_ = b.AddCompletionQueue(true); + b.RegisterService(service); + server_ = b.BuildAndStart(); + channel_ = CreateChannel(address, InsecureChannelCredentials()); + } + + virtual ~FullstackFixture() { + server_->Shutdown(); + cq_->Shutdown(); + void* tag; + bool ok; + while (cq_->Next(&tag, &ok)) { + } + } + + ServerCompletionQueue* cq() { return cq_.get(); } + std::shared_ptr<Channel> channel() { return channel_; } + + private: + std::unique_ptr<Server> server_; + std::unique_ptr<ServerCompletionQueue> cq_; + std::shared_ptr<Channel> channel_; +}; + +class TCP : public FullstackFixture { + public: + TCP(Service* service) : FullstackFixture(service, MakeAddress()) {} + + private: + static grpc::string MakeAddress() { + int port = grpc_pick_unused_port_or_die(); + std::stringstream addr; + addr << "localhost:" << port; + return addr.str(); + } +}; + +class UDS : public FullstackFixture { + public: + UDS(Service* service) : FullstackFixture(service, "unix:bm_fullstack") {} +}; + +class EndpointPairFixture { + public: + EndpointPairFixture(Service* service, grpc_endpoint_pair endpoints) { + ServerBuilder b; + cq_ = b.AddCompletionQueue(true); + b.RegisterService(service); + server_ = b.BuildAndStart(); + + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + + /* add server endpoint to server_ */ + { + const grpc_channel_args* server_args = + grpc_server_get_channel_args(server_->c_server()); + grpc_transport* transport = grpc_create_chttp2_transport( + &exec_ctx, server_args, endpoints.server, 0 /* is_client */); + + grpc_pollset** pollsets; + size_t num_pollsets = 0; + grpc_server_get_pollsets(server_->c_server(), &pollsets, &num_pollsets); + + for (size_t i = 0; i < num_pollsets; i++) { + grpc_endpoint_add_to_pollset(&exec_ctx, endpoints.server, pollsets[i]); + } + + grpc_server_setup_transport(&exec_ctx, server_->c_server(), transport, + NULL, server_args); + grpc_chttp2_transport_start_reading(&exec_ctx, transport, NULL); + } + + /* create channel */ + { + ChannelArguments args; + args.SetString(GRPC_ARG_DEFAULT_AUTHORITY, "test.authority"); + + grpc_channel_args c_args = args.c_channel_args(); + grpc_transport* transport = + grpc_create_chttp2_transport(&exec_ctx, &c_args, endpoints.client, 1); + GPR_ASSERT(transport); + grpc_channel* channel = grpc_channel_create( + &exec_ctx, "target", &c_args, GRPC_CLIENT_DIRECT_CHANNEL, transport); + grpc_chttp2_transport_start_reading(&exec_ctx, transport, NULL); + + channel_ = CreateChannelInternal("", channel); + } + + grpc_exec_ctx_finish(&exec_ctx); + } + + virtual ~EndpointPairFixture() { + server_->Shutdown(); + cq_->Shutdown(); + void* tag; + bool ok; + while (cq_->Next(&tag, &ok)) { + } + } + + ServerCompletionQueue* cq() { return cq_.get(); } + std::shared_ptr<Channel> channel() { return channel_; } + + private: + std::unique_ptr<Server> server_; + std::unique_ptr<ServerCompletionQueue> cq_; + std::shared_ptr<Channel> channel_; +}; + +class SockPair : public EndpointPairFixture { + public: + SockPair(Service* service) + : EndpointPairFixture(service, grpc_iomgr_create_endpoint_pair( + "test", initialize_stuff.rq(), 8192)) { + } +}; + +class InProcessCHTTP2 : public EndpointPairFixture { + public: + InProcessCHTTP2(Service* service) + : EndpointPairFixture(service, MakeEndpoints()) {} + + private: + grpc_endpoint_pair MakeEndpoints() { + grpc_endpoint_pair p; + grpc_passthru_endpoint_create(&p.client, &p.server, initialize_stuff.rq()); + return p; + } +}; + +/******************************************************************************* + * CONTEXT MUTATORS + */ + +static const int kPregenerateKeyCount = 10000000; + +template <class F> +auto MakeVector(size_t length, F f) -> std::vector<decltype(f())> { + std::vector<decltype(f())> out; + out.reserve(length); + for (size_t i = 0; i < length; i++) { + out.push_back(f()); + } + return out; +} + +class NoOpMutator { + public: + template <class ContextType> + NoOpMutator(ContextType* context) {} +}; + +template <int length> +class RandomBinaryMetadata { + public: + static const grpc::string& Key() { return kKey; } + + static const grpc::string& Value() { + return kValues[rand() % kValues.size()]; + } + + private: + static const grpc::string kKey; + static const std::vector<grpc::string> kValues; + + static grpc::string GenerateOneString() { + grpc::string s; + s.reserve(length + 1); + for (int i = 0; i < length; i++) { + s += (char)rand(); + } + return s; + } +}; + +template <int length> +const grpc::string RandomBinaryMetadata<length>::kKey = "foo-bin"; + +template <int length> +const std::vector<grpc::string> RandomBinaryMetadata<length>::kValues = + MakeVector(kPregenerateKeyCount, GenerateOneString); + +template <int length> +class RandomAsciiMetadata { + public: + static const grpc::string& Key() { return kKey; } + + static const grpc::string& Value() { + return kValues[rand() % kValues.size()]; + } + + private: + static const grpc::string kKey; + static const std::vector<grpc::string> kValues; + + static grpc::string GenerateOneString() { + grpc::string s; + s.reserve(length + 1); + for (int i = 0; i < length; i++) { + s += (char)(rand() % 26 + 'a'); + } + return s; + } +}; + +template <int length> +const grpc::string RandomAsciiMetadata<length>::kKey = "foo"; + +template <int length> +const std::vector<grpc::string> RandomAsciiMetadata<length>::kValues = + MakeVector(kPregenerateKeyCount, GenerateOneString); + +template <class Generator, int kNumKeys> +class Client_AddMetadata : public NoOpMutator { + public: + Client_AddMetadata(ClientContext* context) : NoOpMutator(context) { + for (int i = 0; i < kNumKeys; i++) { + context->AddMetadata(Generator::Key(), Generator::Value()); + } + } +}; + +template <class Generator, int kNumKeys> +class Server_AddInitialMetadata : public NoOpMutator { + public: + Server_AddInitialMetadata(ServerContext* context) : NoOpMutator(context) { + for (int i = 0; i < kNumKeys; i++) { + context->AddInitialMetadata(Generator::Key(), Generator::Value()); + } + } +}; + +/******************************************************************************* + * BENCHMARKING KERNELS + */ + +static void* tag(intptr_t x) { return reinterpret_cast<void*>(x); } + +template <class Fixture, class ClientContextMutator, class ServerContextMutator> +static void BM_UnaryPingPong(benchmark::State& state) { + EchoTestService::AsyncService service; + std::unique_ptr<Fixture> fixture(new Fixture(&service)); + EchoRequest send_request; + EchoResponse send_response; + EchoResponse recv_response; + Status recv_status; + struct ServerEnv { + ServerContext ctx; + EchoRequest recv_request; + grpc::ServerAsyncResponseWriter<EchoResponse> response_writer; + ServerEnv() : response_writer(&ctx) {} + }; + uint8_t server_env_buffer[2 * sizeof(ServerEnv)]; + ServerEnv* server_env[2] = { + reinterpret_cast<ServerEnv*>(server_env_buffer), + reinterpret_cast<ServerEnv*>(server_env_buffer + sizeof(ServerEnv))}; + new (server_env[0]) ServerEnv; + new (server_env[1]) ServerEnv; + service.RequestEcho(&server_env[0]->ctx, &server_env[0]->recv_request, + &server_env[0]->response_writer, fixture->cq(), + fixture->cq(), tag(0)); + service.RequestEcho(&server_env[1]->ctx, &server_env[1]->recv_request, + &server_env[1]->response_writer, fixture->cq(), + fixture->cq(), tag(1)); + std::unique_ptr<EchoTestService::Stub> stub( + EchoTestService::NewStub(fixture->channel())); + while (state.KeepRunning()) { + ClientContext cli_ctx; + ClientContextMutator cli_ctx_mut(&cli_ctx); + std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader( + stub->AsyncEcho(&cli_ctx, send_request, fixture->cq())); + void* t; + bool ok; + GPR_ASSERT(fixture->cq()->Next(&t, &ok)); + GPR_ASSERT(ok); + GPR_ASSERT(t == tag(0) || t == tag(1)); + intptr_t slot = reinterpret_cast<intptr_t>(t); + ServerEnv* senv = server_env[slot]; + ServerContextMutator svr_ctx_mut(&senv->ctx); + senv->response_writer.Finish(send_response, Status::OK, tag(3)); + response_reader->Finish(&recv_response, &recv_status, tag(4)); + for (int i = (1 << 3) | (1 << 4); i != 0;) { + GPR_ASSERT(fixture->cq()->Next(&t, &ok)); + GPR_ASSERT(ok); + int tagnum = (int)reinterpret_cast<intptr_t>(t); + GPR_ASSERT(i & (1 << tagnum)); + i -= 1 << tagnum; + } + GPR_ASSERT(recv_status.ok()); + + senv->~ServerEnv(); + senv = new (senv) ServerEnv(); + service.RequestEcho(&senv->ctx, &senv->recv_request, &senv->response_writer, + fixture->cq(), fixture->cq(), tag(slot)); + } + fixture.reset(); + server_env[0]->~ServerEnv(); + server_env[1]->~ServerEnv(); +} + +/******************************************************************************* + * CONFIGURATIONS + */ + +BENCHMARK_TEMPLATE(BM_UnaryPingPong, TCP, NoOpMutator, NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, UDS, NoOpMutator, NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, SockPair, NoOpMutator, NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator, NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, + Client_AddMetadata<RandomBinaryMetadata<10>, 1>, + NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, + Client_AddMetadata<RandomBinaryMetadata<31>, 1>, + NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, + Client_AddMetadata<RandomBinaryMetadata<100>, 1>, + NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, + Client_AddMetadata<RandomBinaryMetadata<10>, 2>, + NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, + Client_AddMetadata<RandomBinaryMetadata<31>, 2>, + NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, + Client_AddMetadata<RandomBinaryMetadata<100>, 2>, + NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator, + Server_AddInitialMetadata<RandomBinaryMetadata<10>, 1>); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator, + Server_AddInitialMetadata<RandomBinaryMetadata<31>, 1>); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator, + Server_AddInitialMetadata<RandomBinaryMetadata<100>, 1>); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, + Client_AddMetadata<RandomAsciiMetadata<10>, 1>, NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, + Client_AddMetadata<RandomAsciiMetadata<31>, 1>, NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, + Client_AddMetadata<RandomAsciiMetadata<100>, 1>, + NoOpMutator); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator, + Server_AddInitialMetadata<RandomAsciiMetadata<10>, 1>); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator, + Server_AddInitialMetadata<RandomAsciiMetadata<31>, 1>); +BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator, + Server_AddInitialMetadata<RandomAsciiMetadata<100>, 1>); + +} // namespace testing +} // namespace grpc + +BENCHMARK_MAIN(); diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h index 3a0c359b4cd4f5dfca6744ddd1e965c0cc37828b..fdd78ebb899d2626278e4263674a6acbb8f978f4 100644 --- a/test/cpp/qps/client.h +++ b/test/cpp/qps/client.h @@ -163,10 +163,9 @@ class Client { MaybeStartRequests(); - // avoid std::vector for old compilers that expect a copy constructor if (reset) { - Histogram* to_merge = new Histogram[threads_.size()]; - StatusHistogram* to_merge_status = new StatusHistogram[threads_.size()]; + std::vector<Histogram> to_merge(threads_.size()); + std::vector<StatusHistogram> to_merge_status(threads_.size()); for (size_t i = 0; i < threads_.size(); i++) { threads_[i]->BeginSwap(&to_merge[i], &to_merge_status[i]); @@ -177,8 +176,6 @@ class Client { latencies.Merge(to_merge[i]); MergeStatusHistogram(to_merge_status[i], &statuses); } - delete[] to_merge; - delete[] to_merge_status; timer_result = timer->Mark(); } else { // merge snapshots of each thread histogram diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc index 2ec6a5a23bc4c624597b5d70f12fdc564ab6e907..4032039ea1064d5919295985c2933b4df28de2c4 100644 --- a/test/cpp/qps/client_async.cc +++ b/test/cpp/qps/client_async.cc @@ -177,7 +177,6 @@ class AsyncClient : public ClientImpl<StubType, RequestType> { shutdown_state_.emplace_back(new PerThreadShutdownState()); } - using namespace std::placeholders; int t = 0; for (int ch = 0; ch < config.client_channels(); ch++) { for (int i = 0; i < config.outstanding_rpcs_per_channel(); i++) { diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc index a88a24d89cc8b08ce7b334575eff9d6fe82f314e..b1e61865e731cbadcfbb8d7eec08d623c6a694ec 100644 --- a/test/cpp/qps/client_sync.cc +++ b/test/cpp/qps/client_sync.cc @@ -138,10 +138,9 @@ class SynchronousUnaryClient final : public SynchronousClient { class SynchronousStreamingClient final : public SynchronousClient { public: SynchronousStreamingClient(const ClientConfig& config) - : SynchronousClient(config) { - context_ = new grpc::ClientContext[num_threads_]; - stream_ = new std::unique_ptr< - grpc::ClientReaderWriter<SimpleRequest, SimpleResponse>>[num_threads_]; + : SynchronousClient(config), + context_(num_threads_), + stream_(num_threads_) { for (size_t thread_idx = 0; thread_idx < num_threads_; thread_idx++) { auto* stub = channels_[thread_idx % channels_.size()].get_stub(); stream_[thread_idx] = stub->StreamingCall(&context_[thread_idx]); @@ -161,8 +160,6 @@ class SynchronousStreamingClient final : public SynchronousClient { } } } - delete[] stream_; - delete[] context_; } bool ThreadFunc(HistogramEntry* entry, size_t thread_idx) override { @@ -182,8 +179,9 @@ class SynchronousStreamingClient final : public SynchronousClient { private: // These are both conceptually std::vector but cannot be for old compilers // that expect contained classes to support copy constructors - grpc::ClientContext* context_; - std::unique_ptr<grpc::ClientReaderWriter<SimpleRequest, SimpleResponse>>* + std::vector<grpc::ClientContext> context_; + std::vector< + std::unique_ptr<grpc::ClientReaderWriter<SimpleRequest, SimpleResponse>>> stream_; }; diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index cf3372c3cf1105be7ed902d48c53002d0d8b82c9..ea0b38e8ad040dda84c8e6d068ee2a1259229519 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -192,30 +192,6 @@ static void postprocess_scenario_result(ScenarioResult* result) { } } -// Namespace for classes and functions used only in RunScenario -// Using this rather than local definitions to workaround gcc-4.4 limitations -// regarding using templates without linkage -namespace runsc { - -// ClientContext allocator -static ClientContext* AllocContext(list<ClientContext>* contexts) { - contexts->emplace_back(); - auto context = &contexts->back(); - context->set_wait_for_ready(true); - return context; -} - -struct ServerData { - unique_ptr<WorkerService::Stub> stub; - unique_ptr<ClientReaderWriter<ServerArgs, ServerStatus>> stream; -}; - -struct ClientData { - unique_ptr<WorkerService::Stub> stub; - unique_ptr<ClientReaderWriter<ClientArgs, ClientStatus>> stream; -}; -} // namespace runsc - std::unique_ptr<ScenarioResult> RunScenario( const ClientConfig& initial_client_config, size_t num_clients, const ServerConfig& initial_server_config, size_t num_servers, @@ -225,6 +201,12 @@ std::unique_ptr<ScenarioResult> RunScenario( // ClientContext allocations (all are destroyed at scope exit) list<ClientContext> contexts; + auto alloc_context = [](list<ClientContext>* contexts) { + contexts->emplace_back(); + auto context = &contexts->back(); + context->set_wait_for_ready(true); + return context; + }; // To be added to the result, containing the final configuration used for // client and config (including host, etc.) @@ -277,10 +259,11 @@ std::unique_ptr<ScenarioResult> RunScenario( workers.resize(num_clients + num_servers); // Start servers - using runsc::ServerData; - // servers is array rather than std::vector to avoid gcc-4.4 issues - // where class contained in std::vector must have a copy constructor - auto* servers = new ServerData[num_servers]; + struct ServerData { + unique_ptr<WorkerService::Stub> stub; + unique_ptr<ClientReaderWriter<ServerArgs, ServerStatus>> stream; + }; + std::vector<ServerData> servers(num_servers); for (size_t i = 0; i < num_servers; i++) { gpr_log(GPR_INFO, "Starting server on %s (worker #%" PRIuPTR ")", workers[i].c_str(), i); @@ -324,8 +307,7 @@ std::unique_ptr<ScenarioResult> RunScenario( ServerArgs args; *args.mutable_setup() = server_config; - servers[i].stream = - servers[i].stub->RunServer(runsc::AllocContext(&contexts)); + servers[i].stream = servers[i].stub->RunServer(alloc_context(&contexts)); if (!servers[i].stream->Write(args)) { gpr_log(GPR_ERROR, "Could not write args to server %zu", i); } @@ -343,10 +325,11 @@ std::unique_ptr<ScenarioResult> RunScenario( // Targets are all set by now result_client_config = client_config; // Start clients - using runsc::ClientData; - // clients is array rather than std::vector to avoid gcc-4.4 issues - // where class contained in std::vector must have a copy constructor - auto* clients = new ClientData[num_clients]; + struct ClientData { + unique_ptr<WorkerService::Stub> stub; + unique_ptr<ClientReaderWriter<ClientArgs, ClientStatus>> stream; + }; + std::vector<ClientData> clients(num_clients); size_t channels_allocated = 0; for (size_t i = 0; i < num_clients; i++) { const auto& worker = workers[i + num_servers]; @@ -395,8 +378,7 @@ std::unique_ptr<ScenarioResult> RunScenario( ClientArgs args; *args.mutable_setup() = per_client_config; - clients[i].stream = - clients[i].stub->RunClient(runsc::AllocContext(&contexts)); + clients[i].stream = clients[i].stub->RunClient(alloc_context(&contexts)); if (!clients[i].stream->Write(args)) { gpr_log(GPR_ERROR, "Could not write args to client %zu", i); } @@ -516,7 +498,6 @@ std::unique_ptr<ScenarioResult> RunScenario( s.error_message().c_str()); } } - delete[] clients; merged_latencies.FillProto(result->mutable_latencies()); for (std::unordered_map<int, int64_t>::iterator it = merged_statuses.begin(); @@ -559,8 +540,6 @@ std::unique_ptr<ScenarioResult> RunScenario( } } - delete[] servers; - postprocess_scenario_result(result.get()); return result; } diff --git a/test/cpp/util/config_grpc_cli.h b/test/cpp/util/config_grpc_cli.h index ea8231aa26db67c16dd34d90931bdcbed8958386..ac1e3044b7731f785e5c0a28afabfcf21ac58d58 100644 --- a/test/cpp/util/config_grpc_cli.h +++ b/test/cpp/util/config_grpc_cli.h @@ -77,7 +77,7 @@ namespace compiler { typedef GRPC_CUSTOM_DISKSOURCETREE DiskSourceTree; typedef GRPC_CUSTOM_IMPORTER Importer; typedef GRPC_CUSTOM_MULTIFILEERRORCOLLECTOR MultiFileErrorCollector; -} // namespace importer +} // namespace compiler } // namespace protobuf } // namespace grpc diff --git a/test/cpp/util/grpc_tool_test.cc b/test/cpp/util/grpc_tool_test.cc index 5ab054d04a18f5833e7ae0326da07b439a4350d8..1ff8172306f69c9e57ae2623285d345c0359194e 100644 --- a/test/cpp/util/grpc_tool_test.cc +++ b/test/cpp/util/grpc_tool_test.cc @@ -112,8 +112,6 @@ size_t ArraySize(T& a) { static_cast<size_t>(!(sizeof(a) % sizeof(*(a))))); } -} // namespame - class TestServiceImpl : public ::grpc::testing::EchoTestService::Service { public: Status Echo(ServerContext* context, const EchoRequest* request, @@ -132,6 +130,8 @@ class TestServiceImpl : public ::grpc::testing::EchoTestService::Service { } }; +} // namespace + class GrpcToolTest : public ::testing::Test { protected: GrpcToolTest() {} diff --git a/tools/distrib/python/grpcio_tools/grpc/tools/command.py b/tools/distrib/python/grpcio_tools/grpc/tools/command.py index 25200998357362019d1ad7a9d02593bf6963a4ca..424fd904113465d7011b036979224c166331dbf0 100644 --- a/tools/distrib/python/grpcio_tools/grpc/tools/command.py +++ b/tools/distrib/python/grpcio_tools/grpc/tools/command.py @@ -28,6 +28,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import os +import pkg_resources import sys import setuptools @@ -43,10 +44,14 @@ def build_package_protos(package_root): if filename.endswith('.proto'): proto_files.append(os.path.abspath(os.path.join(root, filename))) + well_known_protos_include = pkg_resources.resource_filename( + 'grpc.tools', '_proto') + for proto_file in proto_files: command = [ 'grpc.tools.protoc', '--proto_path={}'.format(inclusion_root), + '--proto_path={}'.format(well_known_protos_include), '--python_out={}'.format(inclusion_root), '--grpc_python_out={}'.format(inclusion_root), ] + [proto_file] diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 25ec70e203b13c62a6b9d54118653590660246f3..6c8020d2031949618002bec7345d360c7dbd5ee0 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -812,7 +812,6 @@ src/core/lib/iomgr/endpoint.h \ src/core/lib/iomgr/endpoint_pair.h \ src/core/lib/iomgr/error.h \ src/core/lib/iomgr/ev_epoll_linux.h \ -src/core/lib/iomgr/ev_poll_and_epoll_posix.h \ src/core/lib/iomgr/ev_poll_posix.h \ src/core/lib/iomgr/ev_posix.h \ src/core/lib/iomgr/exec_ctx.h \ @@ -836,6 +835,7 @@ src/core/lib/iomgr/sockaddr.h \ src/core/lib/iomgr/sockaddr_posix.h \ src/core/lib/iomgr/sockaddr_utils.h \ src/core/lib/iomgr/sockaddr_windows.h \ +src/core/lib/iomgr/socket_mutator.h \ src/core/lib/iomgr/socket_utils.h \ src/core/lib/iomgr/socket_utils_posix.h \ src/core/lib/iomgr/socket_windows.h \ @@ -991,7 +991,6 @@ src/core/lib/iomgr/endpoint_pair_uv.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ src/core/lib/iomgr/error.c \ src/core/lib/iomgr/ev_epoll_linux.c \ -src/core/lib/iomgr/ev_poll_and_epoll_posix.c \ src/core/lib/iomgr/ev_poll_posix.c \ src/core/lib/iomgr/ev_posix.c \ src/core/lib/iomgr/exec_ctx.c \ @@ -1013,6 +1012,7 @@ src/core/lib/iomgr/resolve_address_uv.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/resource_quota.c \ src/core/lib/iomgr/sockaddr_utils.c \ +src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ diff --git a/tools/fuzzer/runners/ssl_server_fuzzer.sh b/tools/fuzzer/runners/ssl_server_fuzzer.sh new file mode 100644 index 0000000000000000000000000000000000000000..ce5396580e27a154f3e24ed3c3a0b7a903fd0d3d --- /dev/null +++ b/tools/fuzzer/runners/ssl_server_fuzzer.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +flags="-max_total_time=$runtime -artifact_prefix=fuzzer_output/ -max_len=2048 -timeout=120" + + +if [ "$jobs" != "1" ] +then + flags="-jobs=$jobs -workers=$jobs $flags" +fi + +if [ "$config" == "asan-trace-cmp" ] +then + flags="-use_traces=1 $flags" +fi + +bins/$config/ssl_server_fuzzer $flags fuzzer_output test/core/security/corpus/ssl_server_corpus diff --git a/tools/jenkins/run_full_performance.sh b/tools/jenkins/run_full_performance.sh index 7631db8844b01a8dfbdd5beeee56ab5cf0e9e26e..4c4bddb8550bfe73791c5ee9b68840f672bbcd7b 100755 --- a/tools/jenkins/run_full_performance.sh +++ b/tools/jenkins/run_full_performance.sh @@ -36,7 +36,7 @@ cd $(dirname $0)/../.. # run 8core client vs 8core server tools/run_tests/run_performance_tests.py \ - -l c++ csharp node ruby java python go \ + -l c++ csharp node ruby java python go node_express \ --netperf \ --category scalable \ --bq_result_table performance_test.performance_experiment \ diff --git a/tools/lsan_suppressions.txt b/tools/lsan_suppressions.txt index d672cb6cae506cfcfa5de48250f950c28f7c2506..6639903acefc648a148f6a29e090ad3d990f7189 100644 --- a/tools/lsan_suppressions.txt +++ b/tools/lsan_suppressions.txt @@ -1,3 +1,5 @@ # this is busted in BoringSSL leak:CRYPTO_set_thread_local leak:err_get_state +leak:ERR_add_error_dataf +leak:err_add_error_vdata diff --git a/tools/run_tests/build_stats_schema_no_matrix.json b/tools/run_tests/build_stats_schema_no_matrix.json index 42650e30241cacb5671d6f9fe8a7237995678941..eeb067d7a51fb878a69e18e7b17073312e62c46f 100644 --- a/tools/run_tests/build_stats_schema_no_matrix.json +++ b/tools/run_tests/build_stats_schema_no_matrix.json @@ -24,6 +24,11 @@ "type": "INTEGER", "mode": "NULLABLE" }, + { + "name": "no_report_files_found", + "type": "BOOLEAN", + "mode": "NULLABLE" + }, { "name": "error", "type": "RECORD", diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index 4e4c16642bab61de73396498081bc9208fbc4060..c3c5ece36283d3d6999a1ba6a1b9fdb44fda148d 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -688,46 +688,17 @@ class NodeExpressLanguage: return 700 def scenarios(self): - # TODO(jtattermusch): make this scenario work - #yield _ping_pong_scenario( - # 'node_generic_async_streaming_ping_pong', rpc_type='STREAMING', - # client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', - # use_generic_payload=True) - - # TODO(jtattermusch): make this scenario work - #yield _ping_pong_scenario( - # 'node_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', - # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER') - yield _ping_pong_scenario( - 'node_protobuf_unary_ping_pong', rpc_type='UNARY', + 'node_express_json_unary_ping_pong', rpc_type='UNARY', client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', categories=[SCALABLE, SMOKETEST]) yield _ping_pong_scenario( - 'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', + 'node_express_json_async_unary_qps_unconstrained', rpc_type='UNARY', client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', unconstrained_client='async', categories=[SCALABLE, SMOKETEST]) - # TODO(jtattermusch): make this scenario work - #yield _ping_pong_scenario( - # 'node_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING', - # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', - # unconstrained_client='async') - - # TODO(jtattermusch): make this scenario work - #yield _ping_pong_scenario( - # 'node_to_cpp_protobuf_async_unary_ping_pong', rpc_type='UNARY', - # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', - # server_language='c++', server_core_limit=1, async_server_threads=1) - - # TODO(jtattermusch): make this scenario work - #yield _ping_pong_scenario( - # 'node_to_cpp_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', - # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', - # server_language='c++', server_core_limit=1, async_server_threads=1) - def __str__(self): return 'node_express' diff --git a/tools/run_tests/run_build_statistics.py b/tools/run_tests/run_build_statistics.py index 32f7bc01e8ad94977cd49855a77fa153453042c6..654cf95a38c51a126035fca8eec69d4599066681 100755 --- a/tools/run_tests/run_build_statistics.py +++ b/tools/run_tests/run_build_statistics.py @@ -47,13 +47,32 @@ sys.path.append(gcp_utils_dir) import big_query_utils -_HAS_MATRIX=True _PROJECT_ID = 'grpc-testing' _HAS_MATRIX = True -_BUILDS = {'gRPC_master': _HAS_MATRIX, - 'gRPC_interop_master': not _HAS_MATRIX, - 'gRPC_pull_requests': _HAS_MATRIX, +_BUILDS = {'gRPC_interop_master': not _HAS_MATRIX, + 'gRPC_master_linux': not _HAS_MATRIX, + 'gRPC_master_macos': not _HAS_MATRIX, + 'gRPC_master_windows': not _HAS_MATRIX, + 'gRPC_performance_master': not _HAS_MATRIX, + 'gRPC_portability_master_linux': not _HAS_MATRIX, + 'gRPC_portability_master_windows': not _HAS_MATRIX, + 'gRPC_master_asanitizer_c': not _HAS_MATRIX, + 'gRPC_master_asanitizer_cpp': not _HAS_MATRIX, + 'gRPC_master_msan_c': not _HAS_MATRIX, + 'gRPC_master_tsanitizer_c': not _HAS_MATRIX, + 'gRPC_master_tsan_cpp': not _HAS_MATRIX, 'gRPC_interop_pull_requests': not _HAS_MATRIX, + 'gRPC_performance_pull_requests': not _HAS_MATRIX, + 'gRPC_portability_pull_requests_linux': not _HAS_MATRIX, + 'gRPC_portability_pr_win': not _HAS_MATRIX, + 'gRPC_pull_requests_linux': not _HAS_MATRIX, + 'gRPC_pull_requests_macos': not _HAS_MATRIX, + 'gRPC_pr_win': not _HAS_MATRIX, + 'gRPC_pull_requests_asan_c': not _HAS_MATRIX, + 'gRPC_pull_requests_asan_cpp': not _HAS_MATRIX, + 'gRPC_pull_requests_msan_c': not _HAS_MATRIX, + 'gRPC_pull_requests_tsan_c': not _HAS_MATRIX, + 'gRPC_pull_requests_tsan_cpp': not _HAS_MATRIX, } _URL_BASE = 'https://grpc-testing.appspot.com/job' @@ -83,6 +102,7 @@ _KNOWN_ERRORS = [ ('tests.bins/asan/h2_proxy_test streaming_error_response ' 'GRPC_POLL_STRATEGY=legacy'), ] +_NO_REPORT_FILES_FOUND_ERROR = 'No test report files were found. Configuration error?' _UNKNOWN_ERROR = 'Unknown error' _DATASET_ID = 'build_statistics' @@ -101,6 +121,10 @@ def _scrape_for_known_errors(html): return error_list, known_error_count +def _no_report_files_found(html): + return _NO_REPORT_FILES_FOUND_ERROR in html + + def _get_last_processed_buildnumber(build_name): query = 'SELECT max(build_number) FROM [%s:%s.%s];' % ( _PROJECT_ID, _DATASET_ID, build_name) @@ -141,6 +165,7 @@ def _process_build(json_url, console_url): failure_count = test_result['failCount'] build_result['pass_count'] = test_result['passCount'] build_result['failure_count'] = failure_count + build_result['no_report_files_found'] = _no_report_files_found(html) if failure_count > 0: error_list, known_error_count = _scrape_for_known_errors(html) unknown_error_count = failure_count - known_error_count diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 8f043f9bcc548199ab79fac2d3402aac249c63c0..fe8ad5f6ad3f238e58a0a79d5892d8f76a5ce8a4 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -69,7 +69,7 @@ _FORCE_ENVIRON_FOR_WRAPPERS = { _POLLING_STRATEGIES = { - 'linux': ['epoll', 'poll', 'poll-cv', 'legacy'] + 'linux': ['epoll', 'poll', 'poll-cv'] } diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py index bda0c6c218e0b79145857690c20c7758fe445794..e147cf387de1e64bfd2cc5b351e0fbe28b02cc8a 100755 --- a/tools/run_tests/run_tests_matrix.py +++ b/tools/run_tests/run_tests_matrix.py @@ -311,7 +311,9 @@ if __name__ == "__main__": print('No tests will be skipped.') else: print('These tests will be skipped:') - skipped_jobs = [job for job in jobs if job not in relevant_jobs] + skipped_jobs = list(set(jobs) - set(relevant_jobs)) + # Sort by shortnames to make printing of skipped tests consistent + skipped_jobs.sort(key=lambda job: job.shortname) for job in list(skipped_jobs): print(' %s' % job.shortname) jobs = relevant_jobs diff --git a/tools/run_tests/sanity/core_banned_functions.py b/tools/run_tests/sanity/core_banned_functions.py index a3d4d6337e22e5e78c4b68c7547de122020ab892..cf88c42d46a257f557c662005f4f5d6e54f3d870 100755 --- a/tools/run_tests/sanity/core_banned_functions.py +++ b/tools/run_tests/sanity/core_banned_functions.py @@ -7,12 +7,12 @@ os.chdir(os.path.join(os.path.dirname(sys.argv[0]), '../../..')) # map of banned function signature to whitelist BANNED_EXCEPT = { - 'grpc_resource_quota_ref(': ('src/core/lib/iomgr/resource_quota.c'), - 'grpc_resource_quota_unref(': ('src/core/lib/iomgr/resource_quota.c'), - 'grpc_slice_buffer_destroy(': ('src/core/lib/slice/slice_buffer.c'), - 'grpc_slice_buffer_reset_and_unref(': ('src/core/lib/slice/slice_buffer.c'), - 'grpc_slice_ref(': ('src/core/lib/slice/slice.c'), - 'grpc_slice_unref(': ('src/core/lib/slice/slice.c'), + 'grpc_resource_quota_ref(': ['src/core/lib/iomgr/resource_quota.c'], + 'grpc_resource_quota_unref(': ['src/core/lib/iomgr/resource_quota.c'], + 'grpc_slice_buffer_destroy(': ['src/core/lib/slice/slice_buffer.c'], + 'grpc_slice_buffer_reset_and_unref(': ['src/core/lib/slice/slice_buffer.c'], + 'grpc_slice_ref(': ['src/core/lib/slice/slice.c'], + 'grpc_slice_unref(': ['src/core/lib/slice/slice.c'], } errors = 0 @@ -29,4 +29,3 @@ for root, dirs, files in os.walk('src/core'): errors += 1 assert errors == 0 - diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index a3c20913f7fe69e986b1b0419f208862a36afc0d..0386587a2bbe1e7a487ad86092bd8f9bc7856103 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -1932,6 +1932,23 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "ssl_server_fuzzer", + "src": [ + "test/core/security/ssl_server_fuzzer.c" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", @@ -2244,6 +2261,26 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "google_benchmark", + "gpr", + "gpr_test_util", + "grpc", + "grpc++", + "grpc++_test_util", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c++", + "name": "bm_fullstack", + "src": [ + "test/cpp/microbenchmarks/bm_fullstack.cc" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", @@ -4838,6 +4875,24 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "src": [ + "test/core/security/ssl_server_fuzzer.c", + "test/core/util/one_corpus_entry_fuzzer.c" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", @@ -6275,6 +6330,7 @@ "test/core/end2end/tests/empty_batch.c", "test/core/end2end/tests/filter_call_init_fails.c", "test/core/end2end/tests/filter_causes_close.c", + "test/core/end2end/tests/filter_latency.c", "test/core/end2end/tests/graceful_server_shutdown.c", "test/core/end2end/tests/high_initial_seqno.c", "test/core/end2end/tests/hpack_size.c", @@ -6343,6 +6399,7 @@ "test/core/end2end/tests/empty_batch.c", "test/core/end2end/tests/filter_call_init_fails.c", "test/core/end2end/tests/filter_causes_close.c", + "test/core/end2end/tests/filter_latency.c", "test/core/end2end/tests/graceful_server_shutdown.c", "test/core/end2end/tests/high_initial_seqno.c", "test/core/end2end/tests/hpack_size.c", @@ -6638,7 +6695,6 @@ "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/error.h", "src/core/lib/iomgr/ev_epoll_linux.h", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.h", "src/core/lib/iomgr/exec_ctx.h", @@ -6662,6 +6718,7 @@ "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", @@ -6773,8 +6830,6 @@ "src/core/lib/iomgr/error.h", "src/core/lib/iomgr/ev_epoll_linux.c", "src/core/lib/iomgr/ev_epoll_linux.h", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.c", - "src/core/lib/iomgr/ev_poll_and_epoll_posix.h", "src/core/lib/iomgr/ev_poll_posix.c", "src/core/lib/iomgr/ev_poll_posix.h", "src/core/lib/iomgr/ev_posix.c", @@ -6819,6 +6874,8 @@ "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.c", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils.h", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 366e9443576f1dc073a153ce46039a5026e9b3ba..7df7b18e3a1765becddea6cf4ba543367118b518 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -2389,6 +2389,28 @@ "windows" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": false, + "language": "c++", + "name": "bm_fullstack", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, { "args": [], "ci_platforms": [ @@ -5368,6 +5390,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_census_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -6428,6 +6473,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_compress_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -7471,6 +7539,28 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_fakesec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -8431,6 +8521,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_fd_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -9445,6 +9558,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_full_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -10435,6 +10571,25 @@ "linux" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_full+pipe_test", + "platforms": [ + "linux" + ] + }, { "args": [ "graceful_server_shutdown" @@ -11379,6 +11534,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_full+trace_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -12408,6 +12586,30 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_http_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -13497,6 +13699,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_load_reporting_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -14572,6 +14797,30 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_oauth2_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -15630,14 +15879,14 @@ }, { "args": [ - "graceful_server_shutdown" + "filter_latency" ], "ci_platforms": [ "windows", "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [ "uv" @@ -15654,14 +15903,14 @@ }, { "args": [ - "high_initial_seqno" + "graceful_server_shutdown" ], "ci_platforms": [ "windows", "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "exclude_iomgrs": [ "uv" @@ -15678,7 +15927,7 @@ }, { "args": [ - "idempotent_request" + "high_initial_seqno" ], "ci_platforms": [ "windows", @@ -15702,7 +15951,7 @@ }, { "args": [ - "invoke_large_request" + "idempotent_request" ], "ci_platforms": [ "windows", @@ -15726,7 +15975,7 @@ }, { "args": [ - "large_metadata" + "invoke_large_request" ], "ci_platforms": [ "windows", @@ -15750,7 +15999,7 @@ }, { "args": [ - "load_reporting_hook" + "large_metadata" ], "ci_platforms": [ "windows", @@ -15774,7 +16023,7 @@ }, { "args": [ - "max_message_length" + "load_reporting_hook" ], "ci_platforms": [ "windows", @@ -15798,7 +16047,31 @@ }, { "args": [ - "negative_deadline" + "max_message_length" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "negative_deadline" ], "ci_platforms": [ "windows", @@ -16540,6 +16813,30 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -17524,6 +17821,30 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair+trace_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -18464,6 +18785,32 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [ + "msan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_1byte_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -19533,6 +19880,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -20593,6 +20963,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_cert_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -21620,6 +22013,30 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_ssl_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -22564,6 +22981,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_uds_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -23601,6 +24041,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_census_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -24638,6 +25101,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_compress_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -25606,14 +26092,14 @@ }, { "args": [ - "graceful_server_shutdown" + "filter_latency" ], "ci_platforms": [ "linux", "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [ "uv" @@ -25629,14 +26115,14 @@ }, { "args": [ - "high_initial_seqno" + "graceful_server_shutdown" ], "ci_platforms": [ "linux", "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "exclude_iomgrs": [ "uv" @@ -25652,7 +26138,7 @@ }, { "args": [ - "hpack_size" + "high_initial_seqno" ], "ci_platforms": [ "linux", @@ -25675,7 +26161,7 @@ }, { "args": [ - "idempotent_request" + "hpack_size" ], "ci_platforms": [ "linux", @@ -25698,7 +26184,7 @@ }, { "args": [ - "invoke_large_request" + "idempotent_request" ], "ci_platforms": [ "linux", @@ -25721,7 +26207,7 @@ }, { "args": [ - "large_metadata" + "invoke_large_request" ], "ci_platforms": [ "linux", @@ -25744,7 +26230,7 @@ }, { "args": [ - "load_reporting_hook" + "large_metadata" ], "ci_platforms": [ "linux", @@ -25767,7 +26253,7 @@ }, { "args": [ - "max_concurrent_streams" + "load_reporting_hook" ], "ci_platforms": [ "linux", @@ -25790,7 +26276,7 @@ }, { "args": [ - "max_message_length" + "max_concurrent_streams" ], "ci_platforms": [ "linux", @@ -25813,7 +26299,7 @@ }, { "args": [ - "negative_deadline" + "max_message_length" ], "ci_platforms": [ "linux", @@ -25836,7 +26322,7 @@ }, { "args": [ - "network_status_change" + "negative_deadline" ], "ci_platforms": [ "linux", @@ -25859,7 +26345,7 @@ }, { "args": [ - "no_logging" + "network_status_change" ], "ci_platforms": [ "linux", @@ -25882,7 +26368,30 @@ }, { "args": [ - "no_op" + "no_logging" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_fd_nosec_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "no_op" ], "ci_platforms": [ "linux", @@ -26595,6 +27104,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_full_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -27566,6 +28098,25 @@ "linux" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_full+pipe_nosec_test", + "platforms": [ + "linux" + ] + }, { "args": [ "graceful_server_shutdown" @@ -28487,6 +29038,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_full+trace_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -29492,6 +30066,30 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_http_proxy_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -30558,6 +31156,29 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_load_reporting_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -31561,6 +32182,30 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_proxy_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -32449,6 +33094,30 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -33409,6 +34078,30 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair+trace_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -34323,6 +35016,32 @@ "posix" ] }, + { + "args": [ + "filter_latency" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [ + "msan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_1byte_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "graceful_server_shutdown" @@ -35346,14 +36065,14 @@ }, { "args": [ - "graceful_server_shutdown" + "filter_latency" ], "ci_platforms": [ "linux", "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [ "uv" @@ -35369,14 +36088,14 @@ }, { "args": [ - "high_initial_seqno" + "graceful_server_shutdown" ], "ci_platforms": [ "linux", "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "exclude_iomgrs": [ "uv" @@ -35392,7 +36111,7 @@ }, { "args": [ - "hpack_size" + "high_initial_seqno" ], "ci_platforms": [ "linux", @@ -35415,7 +36134,7 @@ }, { "args": [ - "idempotent_request" + "hpack_size" ], "ci_platforms": [ "linux", @@ -35438,7 +36157,7 @@ }, { "args": [ - "invoke_large_request" + "idempotent_request" ], "ci_platforms": [ "linux", @@ -35461,7 +36180,7 @@ }, { "args": [ - "large_metadata" + "invoke_large_request" ], "ci_platforms": [ "linux", @@ -35484,7 +36203,7 @@ }, { "args": [ - "load_reporting_hook" + "large_metadata" ], "ci_platforms": [ "linux", @@ -35507,7 +36226,7 @@ }, { "args": [ - "max_concurrent_streams" + "load_reporting_hook" ], "ci_platforms": [ "linux", @@ -35530,7 +36249,7 @@ }, { "args": [ - "max_message_length" + "max_concurrent_streams" ], "ci_platforms": [ "linux", @@ -35553,7 +36272,7 @@ }, { "args": [ - "negative_deadline" + "max_message_length" ], "ci_platforms": [ "linux", @@ -35576,7 +36295,7 @@ }, { "args": [ - "network_status_change" + "negative_deadline" ], "ci_platforms": [ "linux", @@ -35599,7 +36318,7 @@ }, { "args": [ - "no_logging" + "network_status_change" ], "ci_platforms": [ "linux", @@ -35622,7 +36341,7 @@ }, { "args": [ - "no_op" + "no_logging" ], "ci_platforms": [ "linux", @@ -35645,7 +36364,7 @@ }, { "args": [ - "payload" + "no_op" ], "ci_platforms": [ "linux", @@ -35668,7 +36387,30 @@ }, { "args": [ - "ping" + "payload" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_uds_nosec_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "ping" ], "ci_platforms": [ "linux", @@ -121603,7 +122345,2185 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/25ab638f.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/25ab638f.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/26048c58bd5f2a94843f6fd1e4ab0be04b232636" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/26870785fd0564f552af4e0ca418738a85b21086" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2701d1669c2996c097a74c5255d569615357b916" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/27ac2ae2.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2814d70c.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/282b6585.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/29a8346696d6f0962072714b9626966c81dcef0c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2a688fd507072e1cfa2e3bc58652a7cd82dface3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2abe64b96e5e72adcf2dcc43444a69d0fb664b66" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2ad6cedd32cd646ba8e25226c7c13a107c1d6447" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2b14c6e618ec95754ea7e24fe6bc5a3a97df6897" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2b40aa21723c7e67e92e74a3083df008461d591c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2bf69fe6b40734cc3f0abdd765757809b14b0b88" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2c4c7e2ed6d977ec119b040b328ad09808909a70" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2c6660ba.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2cc6d1f3ee8933518e91b8410781fa6e105b3a15" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2e4805c3.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2f20e2decd09b6f211a5469c67efbada355e6c04" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2f3b1cd6780fe475f76f17e9e36541963d993165" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/2fb017cd4c34f4af183d03c4a219d2bb36ee2dd6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/30bba77d0f420c4f454011476f3c94e31c50c161" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3224e6cd.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/326ec4d5.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3292129aa7f6eba86b70fff64408f18fff895c12" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/32b11997.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/32cecacca27b249bd764f852168036c5f962bd16" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/330ad4b6.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/33b4cf1ac251f0ba0c014005ef8207afe1dea623" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/33e2ecd5c9bbc1f1dcab29d00195e0ab6d04642d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/340b032d39e2b212828a2bd1a97e2b6b81dcd41b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/34bba9e4.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/374262a5acf9cde1f480e7b7254c788e1936a4de" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/37ec9df8.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/38df7e63181cbd045e5af9dbee463360c8254618" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/395aea4fcfea081fc0d2733fff2d14405439fa72" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/39ea47bb.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3aa82376296ab5a33f2921d7705b75b78b683c2d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3b09bf453c6f93983c24c4d5481e55d66213f93a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3ca5da2f.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3d7ef8c7b05f26e914c479dedb1bef5e378d2d94" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3dc665f93db294b9ccb8fcec94bcc2a91f3a04e7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3de41f3f.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3e2077a4fd2def7b11e618d46245d0aa85824317" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3e3ae35a.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3e787760.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3efcff3d4ca529a89061c05ef9e8035f36d564b1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3f3069cf26f761366f947e025f7049254d555e7f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3fd914fc88fbf1a8804c6715100793d27fefd21d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/3ff171516486f77dda57bec1f757da1691547b9c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/404e234751b01dd0b51f9e7610f787253b074528" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/407607d2.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/40af8d589c76d7912bec06c2ae1f2466065018e7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4123bd764c04385191342ea64918408140313714" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/418f392319c44d06a018ce4c62569d527829177a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/41b31ef0.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/422708b4.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/422fa704.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4271fbb36e03cee79b21a4a5a65f37ceef58a8cd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/42b0afca.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/43fc6abab9840be5ee614211f17395b5966f6070" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/44516839d35af9ccaf8a2c62f3ce6a723482445e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/44f342a6.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4558ddeb.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/459c0bf6.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/468cf8bf3e31e1013c7c6d2288baac47ff90aa63" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/49cb33cbb60f041e8e99dd718993acd2c3354416" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4aa883d0.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4b7bcb4ae6c0222a1a24d1fb1a5d96519750ca5e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4c412cc1a775cea041fa270483d610afb72f463b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4d55d5ae.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4d982c41efad2242f8c06630c23c68146153b47b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4db3d4075ed27f2a2311f85dd1d6df028cc5d083" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4eb269c3.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4ecfe1be695df0d2489dddb52da8bcdeb6ed779d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4f96a5fba4d11401eb22d4b1e365fbbb2d684f24" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4f97bd97ab5dc6b4c0f62f8459be8a9593dc83b3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/4ff50e49865768323f94116bd98d2314455273cc" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/508def44e4d60f237f18a40d7058e58a752a74e1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/51a1abd1.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/52b5478161de7b2eba0f7bfbc29aea985c8d9ee7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/52ecfedca3b2b26e6999b6afc846f3dbd5d35130" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/53d18398c0d484de00afd8d583fe802d55d4da44" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/53de507f.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/540ada69.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/5413b531fe06923ddf2c9e3eb958769374bc2445" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/5429f0da.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/5435005f.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/546367bfdd2b9464fbfe5d74f55d8cd220accbab" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/54aca6c103dbdf019a2bf45506786c095e470de1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/54d0fc6c.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/552199651d942e7220141a93ec33dd8256210a18" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/55af20415ead0ddd417f37fa91a4c767b749ee34" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/55f6fb1a.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/5780565e.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/57918260.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/5841d898d2cd804f2d6373538e341dfba8a4dfab" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/58b88a24.bin" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/59743fe120be6ae1aed1c02230ee1bb460f621ee" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/597fdab5.bin" ], "ci_platforms": [ "linux" @@ -121625,7 +124545,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/26048c58bd5f2a94843f6fd1e4ab0be04b232636" + "test/core/end2end/fuzzers/server_fuzzer_corpus/59ce7091c00075943d79e857c01ad1af5f38c78e" ], "ci_platforms": [ "linux" @@ -121647,7 +124567,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/26870785fd0564f552af4e0ca418738a85b21086" + "test/core/end2end/fuzzers/server_fuzzer_corpus/59d0b24d1acd01c749fb4bd6802a5f4dd003ce75" ], "ci_platforms": [ "linux" @@ -121669,7 +124589,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2701d1669c2996c097a74c5255d569615357b916" + "test/core/end2end/fuzzers/server_fuzzer_corpus/59dcfde4.bin" ], "ci_platforms": [ "linux" @@ -121691,7 +124611,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/27ac2ae2.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/5ac92c4a7fb476393f8275fe4b79a2b13e3bcad9" ], "ci_platforms": [ "linux" @@ -121713,7 +124633,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2814d70c.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/5d43ac923d7607a16e3d7bf8b838f52622871251" ], "ci_platforms": [ "linux" @@ -121735,7 +124655,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/282b6585.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/5d817877.bin" ], "ci_platforms": [ "linux" @@ -121757,7 +124677,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/29a8346696d6f0962072714b9626966c81dcef0c" + "test/core/end2end/fuzzers/server_fuzzer_corpus/5db8b96291c7ee12141eafc925be845c4f5ea069" ], "ci_platforms": [ "linux" @@ -121779,7 +124699,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2a688fd507072e1cfa2e3bc58652a7cd82dface3" + "test/core/end2end/fuzzers/server_fuzzer_corpus/5e2508e15c79fbe9c2e6c1a393b490356a17efbc" ], "ci_platforms": [ "linux" @@ -121801,7 +124721,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2abe64b96e5e72adcf2dcc43444a69d0fb664b66" + "test/core/end2end/fuzzers/server_fuzzer_corpus/5f758756.bin" ], "ci_platforms": [ "linux" @@ -121823,7 +124743,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2ad6cedd32cd646ba8e25226c7c13a107c1d6447" + "test/core/end2end/fuzzers/server_fuzzer_corpus/5f820fa8d44229219d0b7c4724e3e40a2ace97f4" ], "ci_platforms": [ "linux" @@ -121845,7 +124765,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2b14c6e618ec95754ea7e24fe6bc5a3a97df6897" + "test/core/end2end/fuzzers/server_fuzzer_corpus/609706c57e848ea58d7ca14fe6cc253322f3e8ce" ], "ci_platforms": [ "linux" @@ -121867,7 +124787,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2b40aa21723c7e67e92e74a3083df008461d591c" + "test/core/end2end/fuzzers/server_fuzzer_corpus/61e798bdd49b339983fea4ccfe18efe44afbd69b" ], "ci_platforms": [ "linux" @@ -121889,7 +124809,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2bf69fe6b40734cc3f0abdd765757809b14b0b88" + "test/core/end2end/fuzzers/server_fuzzer_corpus/62d05f336176a10a2c339c04d818f23b6e9a2637" ], "ci_platforms": [ "linux" @@ -121911,7 +124831,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2c4c7e2ed6d977ec119b040b328ad09808909a70" + "test/core/end2end/fuzzers/server_fuzzer_corpus/6499e2db.bin" ], "ci_platforms": [ "linux" @@ -121933,7 +124853,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2c6660ba.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/64cdbb31d5eda779d07885fa7881812db7800c05" ], "ci_platforms": [ "linux" @@ -121955,7 +124875,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2cc6d1f3ee8933518e91b8410781fa6e105b3a15" + "test/core/end2end/fuzzers/server_fuzzer_corpus/65077d2946cfb822cf92c9dfc44517a34589f277" ], "ci_platforms": [ "linux" @@ -121977,7 +124897,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2e4805c3.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/65099066.bin" ], "ci_platforms": [ "linux" @@ -121999,7 +124919,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2f20e2decd09b6f211a5469c67efbada355e6c04" + "test/core/end2end/fuzzers/server_fuzzer_corpus/652bfdce.bin" ], "ci_platforms": [ "linux" @@ -122021,7 +124941,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2f3b1cd6780fe475f76f17e9e36541963d993165" + "test/core/end2end/fuzzers/server_fuzzer_corpus/65d5ae42e6acb429459a1e1a5fb35f09c0f95de2" ], "ci_platforms": [ "linux" @@ -122043,7 +124963,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/2fb017cd4c34f4af183d03c4a219d2bb36ee2dd6" + "test/core/end2end/fuzzers/server_fuzzer_corpus/65fd6cb3058ee0baae854cc7859b7c0c1e1c1166" ], "ci_platforms": [ "linux" @@ -122065,7 +124985,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/30bba77d0f420c4f454011476f3c94e31c50c161" + "test/core/end2end/fuzzers/server_fuzzer_corpus/6652f7be83a876214affc3f230040757f7db4ea8" ], "ci_platforms": [ "linux" @@ -122087,7 +125007,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3224e6cd.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/67b04816.bin" ], "ci_platforms": [ "linux" @@ -122109,7 +125029,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/326ec4d5.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/67ebf074c7f928c4fe32fef44e5c958cf441c93c" ], "ci_platforms": [ "linux" @@ -122131,7 +125051,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3292129aa7f6eba86b70fff64408f18fff895c12" + "test/core/end2end/fuzzers/server_fuzzer_corpus/68f564fd8064233897ff704b5955b33a2e29293a" ], "ci_platforms": [ "linux" @@ -122153,7 +125073,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/32b11997.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/69891e9f.bin" ], "ci_platforms": [ "linux" @@ -122175,7 +125095,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/32cecacca27b249bd764f852168036c5f962bd16" + "test/core/end2end/fuzzers/server_fuzzer_corpus/6c5bb78b51cf5006c92258292de19550985c00ba" ], "ci_platforms": [ "linux" @@ -122197,7 +125117,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/330ad4b6.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/6db42d0c5471ac697d82e882c01867b73f71c71f" ], "ci_platforms": [ "linux" @@ -122219,7 +125139,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/33b4cf1ac251f0ba0c014005ef8207afe1dea623" + "test/core/end2end/fuzzers/server_fuzzer_corpus/6dc4455c.bin" ], "ci_platforms": [ "linux" @@ -122241,7 +125161,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/33e2ecd5c9bbc1f1dcab29d00195e0ab6d04642d" + "test/core/end2end/fuzzers/server_fuzzer_corpus/6e050e98.bin" ], "ci_platforms": [ "linux" @@ -122263,7 +125183,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/340b032d39e2b212828a2bd1a97e2b6b81dcd41b" + "test/core/end2end/fuzzers/server_fuzzer_corpus/6f3bd9f33ca05bebe3811f7b3ae6ed112e1e45b9" ], "ci_platforms": [ "linux" @@ -122285,7 +125205,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/34bba9e4.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/6f9d75e1af7ae7010d32872da888a582a25fddb4" ], "ci_platforms": [ "linux" @@ -122307,7 +125227,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/374262a5acf9cde1f480e7b7254c788e1936a4de" + "test/core/end2end/fuzzers/server_fuzzer_corpus/70ebe7f32c63ca8940017eb83e6db4d8b39ee03c" ], "ci_platforms": [ "linux" @@ -122329,7 +125249,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/37ec9df8.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/712300b98afdb5f0d15c657c13cea76841164b13" ], "ci_platforms": [ "linux" @@ -122351,7 +125271,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/38df7e63181cbd045e5af9dbee463360c8254618" + "test/core/end2end/fuzzers/server_fuzzer_corpus/71ab07577909ca4b766f8ea0c6b8ec2bc395fc66" ], "ci_platforms": [ "linux" @@ -122373,7 +125293,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/395aea4fcfea081fc0d2733fff2d14405439fa72" + "test/core/end2end/fuzzers/server_fuzzer_corpus/72296cf9e1052ced4b60e2053aba9f1a569144e9" ], "ci_platforms": [ "linux" @@ -122395,7 +125315,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/39ea47bb.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/7342b3febb07521e39abdf4ee976d16199d51239" ], "ci_platforms": [ "linux" @@ -122417,7 +125337,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3aa82376296ab5a33f2921d7705b75b78b683c2d" + "test/core/end2end/fuzzers/server_fuzzer_corpus/746715fe.bin" ], "ci_platforms": [ "linux" @@ -122439,7 +125359,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3b09bf453c6f93983c24c4d5481e55d66213f93a" + "test/core/end2end/fuzzers/server_fuzzer_corpus/76294f12a5974e9f87d8f092d0df5429cf6c0466" ], "ci_platforms": [ "linux" @@ -122461,7 +125381,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3ca5da2f.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/769f5d079151d1b5cab388c47a74f3c297c18d58" ], "ci_platforms": [ "linux" @@ -122483,7 +125403,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3d7ef8c7b05f26e914c479dedb1bef5e378d2d94" + "test/core/end2end/fuzzers/server_fuzzer_corpus/7839f12a8410a73d66e191cb5183d36d09a375e8" ], "ci_platforms": [ "linux" @@ -122505,7 +125425,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3dc665f93db294b9ccb8fcec94bcc2a91f3a04e7" + "test/core/end2end/fuzzers/server_fuzzer_corpus/7a946bf3cd91b63001f2cf3f40c515c747f2ecde" ], "ci_platforms": [ "linux" @@ -122527,7 +125447,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3de41f3f.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/7b453adcb9c4bf31dbc448ff32c2bc90ebcbdf0f" ], "ci_platforms": [ "linux" @@ -122549,7 +125469,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3e2077a4fd2def7b11e618d46245d0aa85824317" + "test/core/end2end/fuzzers/server_fuzzer_corpus/7d25c28298fb4d0fe41209d0d14307e4aa67c59e" ], "ci_platforms": [ "linux" @@ -122571,7 +125491,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3e3ae35a.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/7ddfac7d7845b424bf670070781ca6ff8586c63b" ], "ci_platforms": [ "linux" @@ -122593,7 +125513,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3e787760.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/7f15bbce.bin" ], "ci_platforms": [ "linux" @@ -122615,7 +125535,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3efcff3d4ca529a89061c05ef9e8035f36d564b1" + "test/core/end2end/fuzzers/server_fuzzer_corpus/7ffd05db.bin" ], "ci_platforms": [ "linux" @@ -122637,7 +125557,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3f3069cf26f761366f947e025f7049254d555e7f" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8138b18a9a743659befc2f2b23d23cb9c3086a09" ], "ci_platforms": [ "linux" @@ -122659,7 +125579,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3fd914fc88fbf1a8804c6715100793d27fefd21d" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8164d3c4af043c47cfd6966873bccd2353d072bf" ], "ci_platforms": [ "linux" @@ -122681,7 +125601,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/3ff171516486f77dda57bec1f757da1691547b9c" + "test/core/end2end/fuzzers/server_fuzzer_corpus/81fb19dfcb3c3a18fd9e7c177356479503e75e6f" ], "ci_platforms": [ "linux" @@ -122703,7 +125623,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/404e234751b01dd0b51f9e7610f787253b074528" + "test/core/end2end/fuzzers/server_fuzzer_corpus/82dda42ddde662192ebaa96788945b7673bb486b" ], "ci_platforms": [ "linux" @@ -122725,7 +125645,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/407607d2.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/830e3f794c53f7b284eb5c635b2943db9ee9aaee" ], "ci_platforms": [ "linux" @@ -122747,7 +125667,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/40af8d589c76d7912bec06c2ae1f2466065018e7" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8338ebee.bin" ], "ci_platforms": [ "linux" @@ -122769,7 +125689,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4123bd764c04385191342ea64918408140313714" + "test/core/end2end/fuzzers/server_fuzzer_corpus/84a3c6cf853ff318ae163231ce295171a59d5871" ], "ci_platforms": [ "linux" @@ -122791,7 +125711,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/418f392319c44d06a018ce4c62569d527829177a" + "test/core/end2end/fuzzers/server_fuzzer_corpus/86478f200fa3602b9859597fd1ae56a04027d7e9" ], "ci_platforms": [ "linux" @@ -122813,7 +125733,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/41b31ef0.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8694fdefd4ed3d3fdb30fe1d7595f6ea6f5f5054" ], "ci_platforms": [ "linux" @@ -122835,7 +125755,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/422708b4.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/86a19d13cc65790696299c819cac17b14e337647" ], "ci_platforms": [ "linux" @@ -122857,7 +125777,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/422fa704.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/86e6dbf2.bin" ], "ci_platforms": [ "linux" @@ -122879,7 +125799,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4271fbb36e03cee79b21a4a5a65f37ceef58a8cd" + "test/core/end2end/fuzzers/server_fuzzer_corpus/87155c97c3fc6276f7b8f13b50a50e2307b2d397" ], "ci_platforms": [ "linux" @@ -122901,7 +125821,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/42b0afca.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/87e6640111fb02fa4cda7db9c1d51432b3b06212" ], "ci_platforms": [ "linux" @@ -122923,7 +125843,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/43fc6abab9840be5ee614211f17395b5966f6070" + "test/core/end2end/fuzzers/server_fuzzer_corpus/88017b0894db1e6f4e3a6640ffe2876d31a54723" ], "ci_platforms": [ "linux" @@ -122945,7 +125865,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/44516839d35af9ccaf8a2c62f3ce6a723482445e" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8846918f967dd6513040c6d382fcd68ff7099873" ], "ci_platforms": [ "linux" @@ -122967,7 +125887,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/44f342a6.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/885fe25a0b441ef46ab176b88771c133e530cb73" ], "ci_platforms": [ "linux" @@ -122989,7 +125909,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4558ddeb.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/88e1329b.bin" ], "ci_platforms": [ "linux" @@ -123011,7 +125931,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/459c0bf6.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/89cd90fb47bb9eb289e8126b26021ee00d572d95" ], "ci_platforms": [ "linux" @@ -123033,7 +125953,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/468cf8bf3e31e1013c7c6d2288baac47ff90aa63" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8b186384.bin" ], "ci_platforms": [ "linux" @@ -123055,7 +125975,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/49cb33cbb60f041e8e99dd718993acd2c3354416" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8c04817a75fddd71f13779f2ad5b994f45c333a2" ], "ci_platforms": [ "linux" @@ -123077,7 +125997,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4aa883d0.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8c72c3f35e9b9fd168ad9024c953a703f33ae3c1" ], "ci_platforms": [ "linux" @@ -123099,7 +126019,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4b7bcb4ae6c0222a1a24d1fb1a5d96519750ca5e" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8c760938a2a72fa92b27e00e05005e2e4c429359" ], "ci_platforms": [ "linux" @@ -123121,7 +126041,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4c412cc1a775cea041fa270483d610afb72f463b" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8da521d9.bin" ], "ci_platforms": [ "linux" @@ -123143,7 +126063,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4d55d5ae.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8de81717.bin" ], "ci_platforms": [ "linux" @@ -123165,7 +126085,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4d982c41efad2242f8c06630c23c68146153b47b" + "test/core/end2end/fuzzers/server_fuzzer_corpus/8ec00f45afb097066f47d0bad256a8b856b1efe8" ], "ci_platforms": [ "linux" @@ -123187,7 +126107,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4db3d4075ed27f2a2311f85dd1d6df028cc5d083" + "test/core/end2end/fuzzers/server_fuzzer_corpus/90224b8e.bin" ], "ci_platforms": [ "linux" @@ -123209,7 +126129,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4eb269c3.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/90240c7c.bin" ], "ci_platforms": [ "linux" @@ -123231,7 +126151,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4ecfe1be695df0d2489dddb52da8bcdeb6ed779d" + "test/core/end2end/fuzzers/server_fuzzer_corpus/9099ac4e83f6460c80b5557c87f653e4c65aa091" ], "ci_platforms": [ "linux" @@ -123253,7 +126173,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4f96a5fba4d11401eb22d4b1e365fbbb2d684f24" + "test/core/end2end/fuzzers/server_fuzzer_corpus/914ed07570b6441365a3636d05850f7316c7f2a8" ], "ci_platforms": [ "linux" @@ -123275,7 +126195,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4f97bd97ab5dc6b4c0f62f8459be8a9593dc83b3" + "test/core/end2end/fuzzers/server_fuzzer_corpus/916b825da0ffc46fdb6120b1044e98ae158fce70" ], "ci_platforms": [ "linux" @@ -123297,7 +126217,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/4ff50e49865768323f94116bd98d2314455273cc" + "test/core/end2end/fuzzers/server_fuzzer_corpus/925011abb99fd56bb0f425ae5e0d92e6d341f804" ], "ci_platforms": [ "linux" @@ -123319,7 +126239,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/508def44e4d60f237f18a40d7058e58a752a74e1" + "test/core/end2end/fuzzers/server_fuzzer_corpus/93beeba2.bin" ], "ci_platforms": [ "linux" @@ -123341,7 +126261,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/51a1abd1.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/93c3ffcb7e3bcb5ed7e37a5b3dfb97b43ca42718" ], "ci_platforms": [ "linux" @@ -123363,7 +126283,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/52b5478161de7b2eba0f7bfbc29aea985c8d9ee7" + "test/core/end2end/fuzzers/server_fuzzer_corpus/9540d3ad3fa75bfb95c0d57cefd737611c7069a5" ], "ci_platforms": [ "linux" @@ -123385,7 +126305,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/52ecfedca3b2b26e6999b6afc846f3dbd5d35130" + "test/core/end2end/fuzzers/server_fuzzer_corpus/954337ef.bin" ], "ci_platforms": [ "linux" @@ -123407,7 +126327,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/53d18398c0d484de00afd8d583fe802d55d4da44" + "test/core/end2end/fuzzers/server_fuzzer_corpus/95d25ba2e190fafa2b3ca1e1c467b9ef64868962" ], "ci_platforms": [ "linux" @@ -123429,7 +126349,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/53de507f.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/9764015f89a0b7a59f3b5359b0a037b38d6e39d7" ], "ci_platforms": [ "linux" @@ -123451,7 +126371,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/540ada69.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/97aed4bd.bin" ], "ci_platforms": [ "linux" @@ -123473,7 +126393,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5413b531fe06923ddf2c9e3eb958769374bc2445" + "test/core/end2end/fuzzers/server_fuzzer_corpus/984886f71bcbb9e5c224ca15165d5c21d9daf13e" ], "ci_platforms": [ "linux" @@ -123495,7 +126415,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5429f0da.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/986c9ca7db83b2cddbae2a0db2dca87f52277074" ], "ci_platforms": [ "linux" @@ -123517,7 +126437,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5435005f.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/9953eb28aa1ed661612a4710a9d16a15de4ae353" ], "ci_platforms": [ "linux" @@ -123539,7 +126459,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/546367bfdd2b9464fbfe5d74f55d8cd220accbab" + "test/core/end2end/fuzzers/server_fuzzer_corpus/99a1acc96512c1155f91afa378e2345726d307c3" ], "ci_platforms": [ "linux" @@ -123561,7 +126481,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/54aca6c103dbdf019a2bf45506786c095e470de1" + "test/core/end2end/fuzzers/server_fuzzer_corpus/9a176b6f7e0dc5f681a1788d8954f76fabd08cad" ], "ci_platforms": [ "linux" @@ -123583,7 +126503,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/54d0fc6c.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/9a6963b0d0fcb0e91a31748c47c6f0e1e842fea9" ], "ci_platforms": [ "linux" @@ -123605,7 +126525,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/552199651d942e7220141a93ec33dd8256210a18" + "test/core/end2end/fuzzers/server_fuzzer_corpus/9bf7553a.bin" ], "ci_platforms": [ "linux" @@ -123627,7 +126547,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/55af20415ead0ddd417f37fa91a4c767b749ee34" + "test/core/end2end/fuzzers/server_fuzzer_corpus/9d2d18fce18c790035d8f67ed798703bdda0a949" ], "ci_platforms": [ "linux" @@ -123649,7 +126569,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/55f6fb1a.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/9d7b307bf4ef07f46b2c99311b4486bf40884b1a" ], "ci_platforms": [ "linux" @@ -123671,7 +126591,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5780565e.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a112d484b70e778835fcd478fd651828720791e5" ], "ci_platforms": [ "linux" @@ -123693,7 +126613,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/57918260.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a24bf2dc.bin" ], "ci_platforms": [ "linux" @@ -123715,7 +126635,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5841d898d2cd804f2d6373538e341dfba8a4dfab" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a32be0653ccc65463445b4aaf24a7a1164d5c642" ], "ci_platforms": [ "linux" @@ -123737,7 +126657,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/58b88a24.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a357658d.bin" ], "ci_platforms": [ "linux" @@ -123759,7 +126679,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/59743fe120be6ae1aed1c02230ee1bb460f621ee" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a3a2b1af.bin" ], "ci_platforms": [ "linux" @@ -123781,7 +126701,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/597fdab5.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a5348197.bin" ], "ci_platforms": [ "linux" @@ -123803,7 +126723,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/59ce7091c00075943d79e857c01ad1af5f38c78e" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a5b529754606b96a8c801615ac12a1f6ee5c3f54" ], "ci_platforms": [ "linux" @@ -123825,7 +126745,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/59d0b24d1acd01c749fb4bd6802a5f4dd003ce75" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a5cc3762cb2b2cac316c60ddee794016057fb4ff" ], "ci_platforms": [ "linux" @@ -123847,7 +126767,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/59dcfde4.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a5ccb8f124d8ddb5350b90bc0d6b96db280cb7c9" ], "ci_platforms": [ "linux" @@ -123869,7 +126789,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5ac92c4a7fb476393f8275fe4b79a2b13e3bcad9" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a7e64803.bin" ], "ci_platforms": [ "linux" @@ -123891,7 +126811,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5d43ac923d7607a16e3d7bf8b838f52622871251" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a7fac1265a384fe9e45a9ee3d708b79c4e80505e" ], "ci_platforms": [ "linux" @@ -123913,7 +126833,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5d817877.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a8b4049240b53947a8bc76cadf8d4ff9a802c783" ], "ci_platforms": [ "linux" @@ -123935,7 +126855,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5db8b96291c7ee12141eafc925be845c4f5ea069" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a8d229374635fa6f2a75ca1669892e1bc244e719" ], "ci_platforms": [ "linux" @@ -123957,7 +126877,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5e2508e15c79fbe9c2e6c1a393b490356a17efbc" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a8f2345b2c949e9e32a434c99accf771f405eb65" ], "ci_platforms": [ "linux" @@ -123979,7 +126899,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5f758756.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a9463428cdc47d37efb6e3c5633d1e5e78911f16" ], "ci_platforms": [ "linux" @@ -124001,7 +126921,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/5f820fa8d44229219d0b7c4724e3e40a2ace97f4" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a9966f7181d08f6a9ff8158736ad77a285d743a6" ], "ci_platforms": [ "linux" @@ -124023,7 +126943,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/609706c57e848ea58d7ca14fe6cc253322f3e8ce" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a9e22d93.bin" ], "ci_platforms": [ "linux" @@ -124045,7 +126965,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/61e798bdd49b339983fea4ccfe18efe44afbd69b" + "test/core/end2end/fuzzers/server_fuzzer_corpus/a9fc296cc61d020bc9afbdd0e7e5e3031e884176" ], "ci_platforms": [ "linux" @@ -124067,7 +126987,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/62d05f336176a10a2c339c04d818f23b6e9a2637" + "test/core/end2end/fuzzers/server_fuzzer_corpus/aa3c8974.bin" ], "ci_platforms": [ "linux" @@ -124089,7 +127009,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/6499e2db.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/aa825693.bin" ], "ci_platforms": [ "linux" @@ -124111,7 +127031,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/64cdbb31d5eda779d07885fa7881812db7800c05" + "test/core/end2end/fuzzers/server_fuzzer_corpus/aa8729d7.bin" ], "ci_platforms": [ "linux" @@ -124133,7 +127053,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/65077d2946cfb822cf92c9dfc44517a34589f277" + "test/core/end2end/fuzzers/server_fuzzer_corpus/aaafca90a7f59184f3d768a1d6f9093e8f737b8a" ], "ci_platforms": [ "linux" @@ -124155,7 +127075,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/65099066.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/aaf049720c707d4e14e47e7eb31d6a2dda60e66a" ], "ci_platforms": [ "linux" @@ -124177,7 +127097,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/652bfdce.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/ab41d96d82d2dd3f41cd495c53ea031d7979b47a" ], "ci_platforms": [ "linux" @@ -124199,7 +127119,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/65d5ae42e6acb429459a1e1a5fb35f09c0f95de2" + "test/core/end2end/fuzzers/server_fuzzer_corpus/ad810f7f.bin" ], "ci_platforms": [ "linux" @@ -124221,7 +127141,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/65fd6cb3058ee0baae854cc7859b7c0c1e1c1166" + "test/core/end2end/fuzzers/server_fuzzer_corpus/aedefcd9bd7fc10b7bf60372da54c43e953523bd" ], "ci_platforms": [ "linux" @@ -124243,7 +127163,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/6652f7be83a876214affc3f230040757f7db4ea8" + "test/core/end2end/fuzzers/server_fuzzer_corpus/aefcbc29f2caea5038cda4dbc927cdadd9b844c4" ], "ci_platforms": [ "linux" @@ -124265,7 +127185,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/67b04816.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/b06ce623.bin" ], "ci_platforms": [ "linux" @@ -124287,7 +127207,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/67ebf074c7f928c4fe32fef44e5c958cf441c93c" + "test/core/end2end/fuzzers/server_fuzzer_corpus/b1128694.bin" ], "ci_platforms": [ "linux" @@ -124309,7 +127229,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/68f564fd8064233897ff704b5955b33a2e29293a" + "test/core/end2end/fuzzers/server_fuzzer_corpus/b220d23a13d98d4815b1f7a3e4fe7dd8672b1c83" ], "ci_platforms": [ "linux" @@ -124331,7 +127251,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/69891e9f.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/b28959dd.bin" ], "ci_platforms": [ "linux" @@ -124353,7 +127273,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/6c5bb78b51cf5006c92258292de19550985c00ba" + "test/core/end2end/fuzzers/server_fuzzer_corpus/b431df13.bin" ], "ci_platforms": [ "linux" @@ -124375,7 +127295,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/6db42d0c5471ac697d82e882c01867b73f71c71f" + "test/core/end2end/fuzzers/server_fuzzer_corpus/b5acaa52.bin" ], "ci_platforms": [ "linux" @@ -124397,7 +127317,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/6dc4455c.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/b7ce4a4f6eea20c0b83d9f7fa8406a0730ee0040" ], "ci_platforms": [ "linux" @@ -124419,7 +127339,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/6e050e98.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/b829143b.bin" ], "ci_platforms": [ "linux" @@ -124441,7 +127361,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/6f3bd9f33ca05bebe3811f7b3ae6ed112e1e45b9" + "test/core/end2end/fuzzers/server_fuzzer_corpus/b887097732b9c30719f6c7ea7a7cbac531512a31" ], "ci_platforms": [ "linux" @@ -124463,7 +127383,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/6f9d75e1af7ae7010d32872da888a582a25fddb4" + "test/core/end2end/fuzzers/server_fuzzer_corpus/b924c842.bin" ], "ci_platforms": [ "linux" @@ -124485,7 +127405,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/70ebe7f32c63ca8940017eb83e6db4d8b39ee03c" + "test/core/end2end/fuzzers/server_fuzzer_corpus/bad4f467.bin" ], "ci_platforms": [ "linux" @@ -124507,7 +127427,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/712300b98afdb5f0d15c657c13cea76841164b13" + "test/core/end2end/fuzzers/server_fuzzer_corpus/bc9545cebdcb3af82406a5f0c1b286d28f9d4f5a" ], "ci_platforms": [ "linux" @@ -124529,7 +127449,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/71ab07577909ca4b766f8ea0c6b8ec2bc395fc66" + "test/core/end2end/fuzzers/server_fuzzer_corpus/bd63e44a3b004e7ed471c2367c3efae2c58a676d" ], "ci_platforms": [ "linux" @@ -124551,7 +127471,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/72296cf9e1052ced4b60e2053aba9f1a569144e9" + "test/core/end2end/fuzzers/server_fuzzer_corpus/be9b6e78.bin" ], "ci_platforms": [ "linux" @@ -124573,7 +127493,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/7342b3febb07521e39abdf4ee976d16199d51239" + "test/core/end2end/fuzzers/server_fuzzer_corpus/bf5e21c32becb5839deeb81e9174cf6478a25473" ], "ci_platforms": [ "linux" @@ -124595,7 +127515,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/746715fe.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/bfb55acd5b66521eb5bd8ce6b57b3b6895883675" ], "ci_platforms": [ "linux" @@ -124617,7 +127537,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/76294f12a5974e9f87d8f092d0df5429cf6c0466" + "test/core/end2end/fuzzers/server_fuzzer_corpus/bfcbffa9.bin" ], "ci_platforms": [ "linux" @@ -124639,7 +127559,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/769f5d079151d1b5cab388c47a74f3c297c18d58" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c004455e9d60bc2fff094e79cd0b38507023e018" ], "ci_platforms": [ "linux" @@ -124661,7 +127581,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/7839f12a8410a73d66e191cb5183d36d09a375e8" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c039ac9a5a570f8fd9064df9320890b885edf9c3" ], "ci_platforms": [ "linux" @@ -124683,7 +127603,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/7a946bf3cd91b63001f2cf3f40c515c747f2ecde" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c1188b44.bin" ], "ci_platforms": [ "linux" @@ -124705,7 +127625,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/7b453adcb9c4bf31dbc448ff32c2bc90ebcbdf0f" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c12835aa9f3513d3f7179ee4f9976292713f7cb9" ], "ci_platforms": [ "linux" @@ -124727,7 +127647,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/7d25c28298fb4d0fe41209d0d14307e4aa67c59e" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c13188118af1634061b6a3947b81618891aeb6a3" ], "ci_platforms": [ "linux" @@ -124749,7 +127669,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/7ddfac7d7845b424bf670070781ca6ff8586c63b" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c2d2aa1977b17d6e38f906968aa756e98dd09ffa" ], "ci_platforms": [ "linux" @@ -124771,7 +127691,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/7f15bbce.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c35968bf.bin" ], "ci_platforms": [ "linux" @@ -124793,7 +127713,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/7ffd05db.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c43d97f2.bin" ], "ci_platforms": [ "linux" @@ -124815,7 +127735,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8138b18a9a743659befc2f2b23d23cb9c3086a09" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c4534867.bin" ], "ci_platforms": [ "linux" @@ -124837,7 +127757,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8164d3c4af043c47cfd6966873bccd2353d072bf" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c4a71cdd29759b51f9cc54175ad69c44b4ab6eb6" ], "ci_platforms": [ "linux" @@ -124859,7 +127779,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/81fb19dfcb3c3a18fd9e7c177356479503e75e6f" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c4e4c7572e005e18d56eac407033da058737a5ab" ], "ci_platforms": [ "linux" @@ -124881,7 +127801,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/82dda42ddde662192ebaa96788945b7673bb486b" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c559f565.bin" ], "ci_platforms": [ "linux" @@ -124903,7 +127823,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/830e3f794c53f7b284eb5c635b2943db9ee9aaee" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c56fada76f5c198232201a608072a1a63e3d3785" ], "ci_platforms": [ "linux" @@ -124925,7 +127845,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8338ebee.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c5ff50ae447ac7a0c8fb3363b2458824d405e64c" ], "ci_platforms": [ "linux" @@ -124947,7 +127867,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/84a3c6cf853ff318ae163231ce295171a59d5871" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c66e84d1.bin" ], "ci_platforms": [ "linux" @@ -124969,7 +127889,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/86478f200fa3602b9859597fd1ae56a04027d7e9" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c6a1d2cc8935808b6e317a69baec1c3cb87cac94" ], "ci_platforms": [ "linux" @@ -124991,7 +127911,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8694fdefd4ed3d3fdb30fe1d7595f6ea6f5f5054" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c7c44b98faa21c8f0645a818a65b60d956d15952" ], "ci_platforms": [ "linux" @@ -125013,7 +127933,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/86a19d13cc65790696299c819cac17b14e337647" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c8073f5f41970fab4738215e42ec97a4383855e5" ], "ci_platforms": [ "linux" @@ -125035,7 +127955,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/86e6dbf2.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c81dec02.bin" ], "ci_platforms": [ "linux" @@ -125057,7 +127977,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/87155c97c3fc6276f7b8f13b50a50e2307b2d397" + "test/core/end2end/fuzzers/server_fuzzer_corpus/c8812dc8a1ab1592a2d7b71300e1a0a5da6a6382" ], "ci_platforms": [ "linux" @@ -125079,7 +127999,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/87e6640111fb02fa4cda7db9c1d51432b3b06212" + "test/core/end2end/fuzzers/server_fuzzer_corpus/ca843c66c4c4807ccb1615b472c79bc459e5c6cb" ], "ci_platforms": [ "linux" @@ -125101,7 +128021,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/88017b0894db1e6f4e3a6640ffe2876d31a54723" + "test/core/end2end/fuzzers/server_fuzzer_corpus/cbb04be69714f81f5cd09e36e8ea4e69ea73d618" ], "ci_platforms": [ "linux" @@ -125123,7 +128043,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8846918f967dd6513040c6d382fcd68ff7099873" + "test/core/end2end/fuzzers/server_fuzzer_corpus/cc97ece92b72cc2a4d045e16c0e2f2021bc014f8" ], "ci_platforms": [ "linux" @@ -125145,7 +128065,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/885fe25a0b441ef46ab176b88771c133e530cb73" + "test/core/end2end/fuzzers/server_fuzzer_corpus/cca29902.bin" ], "ci_platforms": [ "linux" @@ -125167,7 +128087,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/88e1329b.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/cdba6c45.bin" ], "ci_platforms": [ "linux" @@ -125189,7 +128109,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/89cd90fb47bb9eb289e8126b26021ee00d572d95" + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-0f4b135c0242669ce425d2662168e9440f8a628d" ], "ci_platforms": [ "linux" @@ -125211,7 +128131,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8b186384.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-239cc27a23827ea53b60ccbaee0ecc64dad2bff0" ], "ci_platforms": [ "linux" @@ -125233,7 +128153,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8c04817a75fddd71f13779f2ad5b994f45c333a2" + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-41ab0e868e84612275f77118f9e832bc94ff45c5" ], "ci_platforms": [ "linux" @@ -125255,7 +128175,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8c72c3f35e9b9fd168ad9024c953a703f33ae3c1" + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-7af5da2a8da23d197d9336e32da72c9ff64c15b3" ], "ci_platforms": [ "linux" @@ -125277,7 +128197,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8c760938a2a72fa92b27e00e05005e2e4c429359" + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-7e121dd3be057176369bea160d873040b32a03dc" ], "ci_platforms": [ "linux" @@ -125299,7 +128219,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8da521d9.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-c1f66840627e3bfdedf2e4c225bc4de0c267ed37" ], "ci_platforms": [ "linux" @@ -125321,7 +128241,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8de81717.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-ccf36bef9318fe6d5e5e1560c5485cdc87d0a701" ], "ci_platforms": [ "linux" @@ -125343,7 +128263,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/8ec00f45afb097066f47d0bad256a8b856b1efe8" + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-dae0f07934a527989f23f06e630710ff6ca8c809" ], "ci_platforms": [ "linux" @@ -125365,7 +128285,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/90224b8e.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-e097bf07afa8e55d7dd5f5df3569e34903ccf9a7" ], "ci_platforms": [ "linux" @@ -125387,7 +128307,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/90240c7c.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-e34b0a9a428001cb4094a9ebca76329f578811a4" ], "ci_platforms": [ "linux" @@ -125409,7 +128329,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/9099ac4e83f6460c80b5557c87f653e4c65aa091" + "test/core/end2end/fuzzers/server_fuzzer_corpus/d0f7eebc.bin" ], "ci_platforms": [ "linux" @@ -125431,7 +128351,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/914ed07570b6441365a3636d05850f7316c7f2a8" + "test/core/end2end/fuzzers/server_fuzzer_corpus/d2031009d3783fcf083963fa30bb493f7f935541" ], "ci_platforms": [ "linux" @@ -125453,7 +128373,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/916b825da0ffc46fdb6120b1044e98ae158fce70" + "test/core/end2end/fuzzers/server_fuzzer_corpus/d28155c6c92642c61dfb097f7b2eb1d6ced272c0" ], "ci_platforms": [ "linux" @@ -125475,7 +128395,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/925011abb99fd56bb0f425ae5e0d92e6d341f804" + "test/core/end2end/fuzzers/server_fuzzer_corpus/d44d94764e1761cb7278ffe5cb17871abab7ed89" ], "ci_platforms": [ "linux" @@ -125497,7 +128417,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/93beeba2.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/d6979f0f.bin" ], "ci_platforms": [ "linux" @@ -125519,7 +128439,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/93c3ffcb7e3bcb5ed7e37a5b3dfb97b43ca42718" + "test/core/end2end/fuzzers/server_fuzzer_corpus/d6bed9cc3c10338a8c5f41064ff8bec0bbc267ce" ], "ci_platforms": [ "linux" @@ -125541,7 +128461,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/9540d3ad3fa75bfb95c0d57cefd737611c7069a5" + "test/core/end2end/fuzzers/server_fuzzer_corpus/d8a1d141a9e3876b71c7decbe6e3affccf6de397" ], "ci_platforms": [ "linux" @@ -125563,7 +128483,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/954337ef.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/d9074e68.bin" ], "ci_platforms": [ "linux" @@ -125585,7 +128505,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/95d25ba2e190fafa2b3ca1e1c467b9ef64868962" + "test/core/end2end/fuzzers/server_fuzzer_corpus/d95556cac07e720909aaf2ac09d876106420463f" ], "ci_platforms": [ "linux" @@ -125607,7 +128527,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/9764015f89a0b7a59f3b5359b0a037b38d6e39d7" + "test/core/end2end/fuzzers/server_fuzzer_corpus/d96da249094db51ea92b1413907abfd27a4f2426" ], "ci_platforms": [ "linux" @@ -125629,7 +128549,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/97aed4bd.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/da7e44a9.bin" ], "ci_platforms": [ "linux" @@ -125651,7 +128571,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/984886f71bcbb9e5c224ca15165d5c21d9daf13e" + "test/core/end2end/fuzzers/server_fuzzer_corpus/dab172ff.bin" ], "ci_platforms": [ "linux" @@ -125673,7 +128593,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/986c9ca7db83b2cddbae2a0db2dca87f52277074" + "test/core/end2end/fuzzers/server_fuzzer_corpus/dad922e2daf84cf039f50cf8636eaa9dbd01ff83" ], "ci_platforms": [ "linux" @@ -125695,7 +128615,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/9953eb28aa1ed661612a4710a9d16a15de4ae353" + "test/core/end2end/fuzzers/server_fuzzer_corpus/db33559d4afb4c32e68525c000fde16a4c3300f5" ], "ci_platforms": [ "linux" @@ -125717,7 +128637,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/99a1acc96512c1155f91afa378e2345726d307c3" + "test/core/end2end/fuzzers/server_fuzzer_corpus/dcabac1ef8b197ef39b188bcf5dc470f9749e903" ], "ci_platforms": [ "linux" @@ -125739,7 +128659,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/9a176b6f7e0dc5f681a1788d8954f76fabd08cad" + "test/core/end2end/fuzzers/server_fuzzer_corpus/dda9643679f8c8b796e64232a7d153e447d64991" ], "ci_platforms": [ "linux" @@ -125761,7 +128681,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/9a6963b0d0fcb0e91a31748c47c6f0e1e842fea9" + "test/core/end2end/fuzzers/server_fuzzer_corpus/df5d3cf5f05eab65ef9d385e263780ae73c42b19" ], "ci_platforms": [ "linux" @@ -125783,7 +128703,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/9bf7553a.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/df80b527a003e47a26099088a283228ec62a61c7" ], "ci_platforms": [ "linux" @@ -125805,7 +128725,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/9d2d18fce18c790035d8f67ed798703bdda0a949" + "test/core/end2end/fuzzers/server_fuzzer_corpus/e0d9a9a7.bin" ], "ci_platforms": [ "linux" @@ -125827,7 +128747,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/9d7b307bf4ef07f46b2c99311b4486bf40884b1a" + "test/core/end2end/fuzzers/server_fuzzer_corpus/e2652fbb.bin" ], "ci_platforms": [ "linux" @@ -125849,7 +128769,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a112d484b70e778835fcd478fd651828720791e5" + "test/core/end2end/fuzzers/server_fuzzer_corpus/e2c954e1.bin" ], "ci_platforms": [ "linux" @@ -125871,7 +128791,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a24bf2dc.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/e3bab014.bin" ], "ci_platforms": [ "linux" @@ -125893,7 +128813,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a32be0653ccc65463445b4aaf24a7a1164d5c642" + "test/core/end2end/fuzzers/server_fuzzer_corpus/e7ad0c4b7d0f289c90a3988309e9e03b78f7eea3" ], "ci_platforms": [ "linux" @@ -125915,7 +128835,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a357658d.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/e7b08e36420fa107f0aee652e62158af85a4ef15" ], "ci_platforms": [ "linux" @@ -125937,7 +128857,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a3a2b1af.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/e96ad9c17795e52edc810a08d4fc61fe8790002a" ], "ci_platforms": [ "linux" @@ -125959,7 +128879,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a5348197.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/e9bbe2fe47b7b9c2683e7f17f4a33625c6ffbd8c" ], "ci_platforms": [ "linux" @@ -125981,7 +128901,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a5b529754606b96a8c801615ac12a1f6ee5c3f54" + "test/core/end2end/fuzzers/server_fuzzer_corpus/e9d96662.bin" ], "ci_platforms": [ "linux" @@ -126003,7 +128923,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a5cc3762cb2b2cac316c60ddee794016057fb4ff" + "test/core/end2end/fuzzers/server_fuzzer_corpus/eb66106b.bin" ], "ci_platforms": [ "linux" @@ -126025,7 +128945,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a5ccb8f124d8ddb5350b90bc0d6b96db280cb7c9" + "test/core/end2end/fuzzers/server_fuzzer_corpus/eba8472a.bin" ], "ci_platforms": [ "linux" @@ -126047,7 +128967,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a7e64803.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/ec4949487fa84f0cead39521b51f837af9dc784a" ], "ci_platforms": [ "linux" @@ -126069,7 +128989,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a7fac1265a384fe9e45a9ee3d708b79c4e80505e" + "test/core/end2end/fuzzers/server_fuzzer_corpus/ed8da77f.bin" ], "ci_platforms": [ "linux" @@ -126091,7 +129011,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a8b4049240b53947a8bc76cadf8d4ff9a802c783" + "test/core/end2end/fuzzers/server_fuzzer_corpus/ee64e1ba4897bfd7c6baa1fb72d4c5f83b5654e4" ], "ci_platforms": [ "linux" @@ -126113,7 +129033,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a8d229374635fa6f2a75ca1669892e1bc244e719" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f0387dfdd6b8c925d958113e669ec4a1897034b4" ], "ci_platforms": [ "linux" @@ -126135,7 +129055,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a8f2345b2c949e9e32a434c99accf771f405eb65" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f1121b952e75463cc71137683dc2528f9cbc19b7" ], "ci_platforms": [ "linux" @@ -126157,7 +129077,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a9463428cdc47d37efb6e3c5633d1e5e78911f16" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f3220426.bin" ], "ci_platforms": [ "linux" @@ -126179,7 +129099,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a9966f7181d08f6a9ff8158736ad77a285d743a6" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f3a092425c89f49b50469d522c99abbdb1b6dedf" ], "ci_platforms": [ "linux" @@ -126201,7 +129121,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a9e22d93.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f3d084cf20b92a5f026fe7cc6e5af49bde28693d" ], "ci_platforms": [ "linux" @@ -126223,7 +129143,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/a9fc296cc61d020bc9afbdd0e7e5e3031e884176" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f4024b01.bin" ], "ci_platforms": [ "linux" @@ -126245,7 +129165,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/aa3c8974.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f541d27e.bin" ], "ci_platforms": [ "linux" @@ -126267,7 +129187,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/aa825693.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f5424a9d7bd14317b6de7b15587df28bfde8362d" ], "ci_platforms": [ "linux" @@ -126289,7 +129209,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/aa8729d7.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f5c877c4.bin" ], "ci_platforms": [ "linux" @@ -126311,7 +129231,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/aaafca90a7f59184f3d768a1d6f9093e8f737b8a" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f5f0615030439dda162e8862b6bbd09f81f14d81" ], "ci_platforms": [ "linux" @@ -126333,7 +129253,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/aaf049720c707d4e14e47e7eb31d6a2dda60e66a" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f74b9428.bin" ], "ci_platforms": [ "linux" @@ -126355,7 +129275,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/ab41d96d82d2dd3f41cd495c53ea031d7979b47a" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f7bf0d7bb0dd6e1866ccef9fafc3cb295db2f07f" ], "ci_platforms": [ "linux" @@ -126377,7 +129297,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/ad810f7f.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f826100f.bin" ], "ci_platforms": [ "linux" @@ -126399,7 +129319,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/aedefcd9bd7fc10b7bf60372da54c43e953523bd" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f88ffb7f3066f2706cfcd9be077595e07834cc15" ], "ci_platforms": [ "linux" @@ -126421,7 +129341,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/aefcbc29f2caea5038cda4dbc927cdadd9b844c4" + "test/core/end2end/fuzzers/server_fuzzer_corpus/f8b46e92c7ceb4c2f2cdcb3452a6d8c58768eaa2" ], "ci_platforms": [ "linux" @@ -126443,7 +129363,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/b06ce623.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fa202a5f51cd49f8ea5af60c5f403f797c01c504" ], "ci_platforms": [ "linux" @@ -126465,7 +129385,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/b1128694.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fa36b4280d9e28edd81c5e4d192d1a5c2765e5e4" ], "ci_platforms": [ "linux" @@ -126487,7 +129407,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/b220d23a13d98d4815b1f7a3e4fe7dd8672b1c83" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fb3b0d80.bin" ], "ci_platforms": [ "linux" @@ -126509,7 +129429,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/b28959dd.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fb84edfa9e8cbddba26a7184e7fdc219bde556c0" ], "ci_platforms": [ "linux" @@ -126531,7 +129451,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/b431df13.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fd14bea45ecaf13af0053900edb2f17b71a0bf09" ], "ci_platforms": [ "linux" @@ -126553,7 +129473,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/b5acaa52.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fd26e0a6.bin" ], "ci_platforms": [ "linux" @@ -126575,7 +129495,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/b7ce4a4f6eea20c0b83d9f7fa8406a0730ee0040" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fd943e69304dffebf47e1e40b0849e12abeee287" ], "ci_platforms": [ "linux" @@ -126597,7 +129517,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/b829143b.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fdf67df81857577361d319e76559c5e85a257b07" ], "ci_platforms": [ "linux" @@ -126619,7 +129539,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/b887097732b9c30719f6c7ea7a7cbac531512a31" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fe17c07ffbaa67f1165938d2578038637b93cf57" ], "ci_platforms": [ "linux" @@ -126641,7 +129561,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/b924c842.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fe1957b9bc7c6bf9d8b6089c422d72a0f444da6e" ], "ci_platforms": [ "linux" @@ -126663,7 +129583,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/bad4f467.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fe66893c.bin" ], "ci_platforms": [ "linux" @@ -126685,7 +129605,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/bc9545cebdcb3af82406a5f0c1b286d28f9d4f5a" + "test/core/end2end/fuzzers/server_fuzzer_corpus/fe69ddfa5827dd560bb0b5d4da7d982273f17ef9" ], "ci_platforms": [ "linux" @@ -126707,7 +129627,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/bd63e44a3b004e7ed471c2367c3efae2c58a676d" + "test/core/end2end/fuzzers/server_fuzzer_corpus/ff227015.bin" ], "ci_platforms": [ "linux" @@ -126729,7 +129649,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/be9b6e78.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/ff898c08.bin" ], "ci_platforms": [ "linux" @@ -126751,7 +129671,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/bf5e21c32becb5839deeb81e9174cf6478a25473" + "test/core/end2end/fuzzers/server_fuzzer_corpus/ff902ef808e01b0b2d167c1c7e8e263d6f561941" ], "ci_platforms": [ "linux" @@ -126773,7 +129693,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/bfb55acd5b66521eb5bd8ce6b57b3b6895883675" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-0292270056246b7a4ccd2e7d0356665cef307ef2" ], "ci_platforms": [ "linux" @@ -126795,7 +129715,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/bfcbffa9.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-082763e16153cb6b8f3f5308cd060e822f475e5a" ], "ci_platforms": [ "linux" @@ -126817,7 +129737,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c004455e9d60bc2fff094e79cd0b38507023e018" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-098ec93ded3a20e6043d11e9cc6066351e257f8e" ], "ci_platforms": [ "linux" @@ -126839,7 +129759,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c039ac9a5a570f8fd9064df9320890b885edf9c3" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-0aa52e00ddd54f8e129430852c2da95650c354b0" ], "ci_platforms": [ "linux" @@ -126861,7 +129781,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c1188b44.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-13501419f349b7855d2e94060bd08b28923d1f37" ], "ci_platforms": [ "linux" @@ -126883,7 +129803,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c12835aa9f3513d3f7179ee4f9976292713f7cb9" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-14862768a1fe076896fd37e2543ddd23192a9e3c" ], "ci_platforms": [ "linux" @@ -126905,7 +129825,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c13188118af1634061b6a3947b81618891aeb6a3" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-1a3ebf8f8bb0b5a0109a5ef44734cc64170377f9" ], "ci_platforms": [ "linux" @@ -126927,7 +129847,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c2d2aa1977b17d6e38f906968aa756e98dd09ffa" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-1ae0ed17a042aab8a3c3199c83a809b0243d1424" ], "ci_platforms": [ "linux" @@ -126949,7 +129869,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c35968bf.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-1b6c4b5c1949adae3efd5e3264bb32a40eea524e" ], "ci_platforms": [ "linux" @@ -126971,7 +129891,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c43d97f2.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-1dc659f500e7bee41a4fee4423ade8332c162cc0" ], "ci_platforms": [ "linux" @@ -126993,7 +129913,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c4534867.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-350b5da741597222c98fe86768432507850317f5" ], "ci_platforms": [ "linux" @@ -127015,7 +129935,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c4a71cdd29759b51f9cc54175ad69c44b4ab6eb6" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-395aea4fcfea081fc0d2733fff2d14405439fa72" ], "ci_platforms": [ "linux" @@ -127037,7 +129957,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c4e4c7572e005e18d56eac407033da058737a5ab" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-3991c873ba814d0cd03a67d25fff0c8fe8713aca" ], "ci_platforms": [ "linux" @@ -127059,7 +129979,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c559f565.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-3cec540a680b108dda1e0a8e0bfb2d44e5a4a4e8" ], "ci_platforms": [ "linux" @@ -127081,7 +130001,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c56fada76f5c198232201a608072a1a63e3d3785" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-45cf8ac5faa9c7b15baf9281e8d7e0b4e103f0e0" ], "ci_platforms": [ "linux" @@ -127103,7 +130023,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c5ff50ae447ac7a0c8fb3363b2458824d405e64c" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-4c6da955e4c101b81a62b2f8e934d94a62ae534b" ], "ci_platforms": [ "linux" @@ -127125,7 +130045,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c66e84d1.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-58f116dfba8d428a01ca596174fca63f4ac523f0" ], "ci_platforms": [ "linux" @@ -127147,7 +130067,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c6a1d2cc8935808b6e317a69baec1c3cb87cac94" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-59f6edc7cf4aeed49b4dc024052db4846d5d7fc8" ], "ci_platforms": [ "linux" @@ -127169,7 +130089,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c7c44b98faa21c8f0645a818a65b60d956d15952" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-60a9f77951c5059616764894e1963d83d478edfe" ], "ci_platforms": [ "linux" @@ -127191,7 +130111,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c8073f5f41970fab4738215e42ec97a4383855e5" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-63ebf780ee6c2003eba622686a4bf94c503ad96e" ], "ci_platforms": [ "linux" @@ -127213,7 +130133,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c81dec02.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-68ed2d33c9d32f73343c097303c3d5a6a3467c83" ], "ci_platforms": [ "linux" @@ -127235,7 +130155,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/c8812dc8a1ab1592a2d7b71300e1a0a5da6a6382" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-6d37c5e6d7efee56319b1316725fdc5aee5a52c3" ], "ci_platforms": [ "linux" @@ -127257,7 +130177,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/ca843c66c4c4807ccb1615b472c79bc459e5c6cb" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-6e980a9d12c392175b5f66683e608626ae983276" ], "ci_platforms": [ "linux" @@ -127279,7 +130199,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/cbb04be69714f81f5cd09e36e8ea4e69ea73d618" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-7233d53f94386b0339b2c2b01ef2d348f5862f1f" ], "ci_platforms": [ "linux" @@ -127301,7 +130221,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/cc97ece92b72cc2a4d045e16c0e2f2021bc014f8" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-7281d9eaed0d20b0b6b5e7709c57e78fefe9c315" ], "ci_platforms": [ "linux" @@ -127323,7 +130243,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/cca29902.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-73e0a41066bc09c8e3fbd0dd7628445bcdaabb4a" ], "ci_platforms": [ "linux" @@ -127345,7 +130265,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/cdba6c45.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-84f22ffca68c6e1590a44aa9f6dd0cef1f680c77" ], "ci_platforms": [ "linux" @@ -127367,7 +130287,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-0f4b135c0242669ce425d2662168e9440f8a628d" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-93cd6b3f9786ee107a0e2d135b40d13f96e652ed" ], "ci_platforms": [ "linux" @@ -127389,7 +130309,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-239cc27a23827ea53b60ccbaee0ecc64dad2bff0" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-97a338fa892093ed5013a76b96b35dd112df3342" ], "ci_platforms": [ "linux" @@ -127411,7 +130331,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-41ab0e868e84612275f77118f9e832bc94ff45c5" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-9a176b6f7e0dc5f681a1788d8954f76fabd08cad" ], "ci_platforms": [ "linux" @@ -127433,7 +130353,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-7af5da2a8da23d197d9336e32da72c9ff64c15b3" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-9de2e92150e54982d4e502b18f374f8cd8fd453b" ], "ci_platforms": [ "linux" @@ -127455,7 +130375,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-7e121dd3be057176369bea160d873040b32a03dc" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-a1b2cfcf0997acb13a32fc5c004f57d9e9bc4275" ], "ci_platforms": [ "linux" @@ -127477,7 +130397,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-c1f66840627e3bfdedf2e4c225bc4de0c267ed37" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-a1ed26e6f82ca0e81e3f415bd8b0b8b520d3927b" ], "ci_platforms": [ "linux" @@ -127499,7 +130419,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-ccf36bef9318fe6d5e5e1560c5485cdc87d0a701" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-a61a28cf78149518466b87e5463ec5c771dc504e" ], "ci_platforms": [ "linux" @@ -127521,7 +130441,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-dae0f07934a527989f23f06e630710ff6ca8c809" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-aa23c18f6badd88a7bec65e8b04f7801ba624ec6" ], "ci_platforms": [ "linux" @@ -127543,7 +130463,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-e097bf07afa8e55d7dd5f5df3569e34903ccf9a7" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-adaac86cf1aa1e98e95240c5f92c3708456c3624" ], "ci_platforms": [ "linux" @@ -127565,7 +130485,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-e34b0a9a428001cb4094a9ebca76329f578811a4" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-b281f018cc919301131cf3ed28449cfbd24b6bbf" ], "ci_platforms": [ "linux" @@ -127587,7 +130507,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/d0f7eebc.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-ba0016a62a8576a57f000b90c364847ef6b12dcc" ], "ci_platforms": [ "linux" @@ -127609,7 +130529,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/d2031009d3783fcf083963fa30bb493f7f935541" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-ba17346b8e46e6a05aaa7342a959a7c5ab0f1471" ], "ci_platforms": [ "linux" @@ -127631,7 +130551,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/d28155c6c92642c61dfb097f7b2eb1d6ced272c0" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-ba2b1fde90cc70d9abae22c4c4cb051aae8aa148" ], "ci_platforms": [ "linux" @@ -127653,7 +130573,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/d44d94764e1761cb7278ffe5cb17871abab7ed89" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-bda43d420a3e5d5228a5f5130207a1f11fc1c81f" ], "ci_platforms": [ "linux" @@ -127675,7 +130595,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/d6979f0f.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-c05c239719a7beeca2c126b7e5ef7251fa615b54" ], "ci_platforms": [ "linux" @@ -127697,7 +130617,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/d6bed9cc3c10338a8c5f41064ff8bec0bbc267ce" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-c151762e5f37e233142059c1b269ce55434cf6a6" ], "ci_platforms": [ "linux" @@ -127719,7 +130639,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/d8a1d141a9e3876b71c7decbe6e3affccf6de397" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-cacd0e0c5f7d4169085735400100da4d36397185" ], "ci_platforms": [ "linux" @@ -127741,7 +130661,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/d9074e68.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-ccafab6afdc6474610023b47bd7b3e1b9ea4647b" ], "ci_platforms": [ "linux" @@ -127763,7 +130683,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/d95556cac07e720909aaf2ac09d876106420463f" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-d3c3cba3897fafec97665411ea1f94a89bb4de7b" ], "ci_platforms": [ "linux" @@ -127785,7 +130705,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/d96da249094db51ea92b1413907abfd27a4f2426" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-d3fcd80cd6f1bb05f5e5084ebb2ee801067863fb" ], "ci_platforms": [ "linux" @@ -127807,7 +130727,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/da7e44a9.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-dc57e96cd02ba32fa4a99c97b6490e9879d30be5" ], "ci_platforms": [ "linux" @@ -127829,7 +130749,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/dab172ff.bin" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-ddfe613d8791b2d377e14fbdffb18b84a89d49b6" ], "ci_platforms": [ "linux" @@ -127851,7 +130771,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/dad922e2daf84cf039f50cf8636eaa9dbd01ff83" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-f412afea6b01aa53da919a41a65ffbf9885f2d65" ], "ci_platforms": [ "linux" @@ -127873,7 +130793,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/db33559d4afb4c32e68525c000fde16a4c3300f5" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-f67be653815f6c2c10eea55c8009e1167ac9c20b" ], "ci_platforms": [ "linux" @@ -127895,7 +130815,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/dcabac1ef8b197ef39b188bcf5dc470f9749e903" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-f6c1042f96e15183dcc13b9658d971cc29426d53" ], "ci_platforms": [ "linux" @@ -127917,7 +130837,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/dda9643679f8c8b796e64232a7d153e447d64991" + "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-f9a2773d6502fd4b1ffa73df3c550b0da63af833" ], "ci_platforms": [ "linux" @@ -127939,7 +130859,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/df5d3cf5f05eab65ef9d385e263780ae73c42b19" + "test/core/security/corpus/ssl_server_corpus/05cda1e986096f42698ee2d86ab0a4a3f6a6690b" ], "ci_platforms": [ "linux" @@ -127953,7 +130873,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -127961,7 +130881,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/df80b527a003e47a26099088a283228ec62a61c7" + "test/core/security/corpus/ssl_server_corpus/0f65ef472e8308561c77ada56afd4de5932d950a" ], "ci_platforms": [ "linux" @@ -127975,7 +130895,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -127983,7 +130903,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/e0d9a9a7.bin" + "test/core/security/corpus/ssl_server_corpus/128915cb83e66a736f8a1833c8901eccb81e0656" ], "ci_platforms": [ "linux" @@ -127997,7 +130917,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128005,7 +130925,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/e2652fbb.bin" + "test/core/security/corpus/ssl_server_corpus/134d3a5e7a1609a583f6282c48ef9b871e0fdc15" ], "ci_platforms": [ "linux" @@ -128019,7 +130939,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128027,7 +130947,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/e2c954e1.bin" + "test/core/security/corpus/ssl_server_corpus/13fccd43a6b52c62851ea24e8be4f8cfe6c0103d" ], "ci_platforms": [ "linux" @@ -128041,7 +130961,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128049,7 +130969,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/e3bab014.bin" + "test/core/security/corpus/ssl_server_corpus/171bc6b14b94c72435d2da2e31e9682f12a3f13c" ], "ci_platforms": [ "linux" @@ -128063,7 +130983,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128071,7 +130991,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/e7ad0c4b7d0f289c90a3988309e9e03b78f7eea3" + "test/core/security/corpus/ssl_server_corpus/17dea38d21e9282ecd062466cf287ecf5b30c1cf" ], "ci_platforms": [ "linux" @@ -128085,7 +131005,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128093,7 +131013,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/e7b08e36420fa107f0aee652e62158af85a4ef15" + "test/core/security/corpus/ssl_server_corpus/1961eb9d4dd4bf21cbcd9c45a17b1d025eb0d200" ], "ci_platforms": [ "linux" @@ -128107,7 +131027,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128115,7 +131035,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/e96ad9c17795e52edc810a08d4fc61fe8790002a" + "test/core/security/corpus/ssl_server_corpus/226ebb5cc16ac42fae3be273de533ac79759ae01" ], "ci_platforms": [ "linux" @@ -128129,7 +131049,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128137,7 +131057,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/e9bbe2fe47b7b9c2683e7f17f4a33625c6ffbd8c" + "test/core/security/corpus/ssl_server_corpus/2333cf428cb1e2976679ac84e64873bf76c6595e" ], "ci_platforms": [ "linux" @@ -128151,7 +131071,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128159,7 +131079,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/e9d96662.bin" + "test/core/security/corpus/ssl_server_corpus/2885553a9e6829265d5f44ea4e24fcf7d6513436" ], "ci_platforms": [ "linux" @@ -128173,7 +131093,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128181,7 +131101,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/eb66106b.bin" + "test/core/security/corpus/ssl_server_corpus/28bce9a7cb21f3232239b9b71ef568137bf801f4" ], "ci_platforms": [ "linux" @@ -128195,7 +131115,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128203,7 +131123,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/eba8472a.bin" + "test/core/security/corpus/ssl_server_corpus/2a0286615be426d1e7fd5894aadf1a503df05a0a" ], "ci_platforms": [ "linux" @@ -128217,7 +131137,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128225,7 +131145,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/ec4949487fa84f0cead39521b51f837af9dc784a" + "test/core/security/corpus/ssl_server_corpus/2b4a1f3ebe223d91c042a5e86aff31e460f6cc3f" ], "ci_platforms": [ "linux" @@ -128239,7 +131159,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128247,7 +131167,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/ed8da77f.bin" + "test/core/security/corpus/ssl_server_corpus/2cfbe809bcf53160ecc0109b2df01a8696a226fd" ], "ci_platforms": [ "linux" @@ -128261,7 +131181,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128269,7 +131189,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/ee64e1ba4897bfd7c6baa1fb72d4c5f83b5654e4" + "test/core/security/corpus/ssl_server_corpus/2f770de96db36ef9a71f7eb09b2e8695ac1f0655" ], "ci_platforms": [ "linux" @@ -128283,7 +131203,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128291,7 +131211,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f0387dfdd6b8c925d958113e669ec4a1897034b4" + "test/core/security/corpus/ssl_server_corpus/30ba8ad171657470b5312232387b7da70c387219" ], "ci_platforms": [ "linux" @@ -128305,7 +131225,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128313,7 +131233,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f1121b952e75463cc71137683dc2528f9cbc19b7" + "test/core/security/corpus/ssl_server_corpus/36548a97a8b847e17a77d1e646c6eb5ec001d84a" ], "ci_platforms": [ "linux" @@ -128327,7 +131247,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128335,7 +131255,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f3220426.bin" + "test/core/security/corpus/ssl_server_corpus/3c442804f73cfe826a609d97c12ef87852742883" ], "ci_platforms": [ "linux" @@ -128349,7 +131269,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128357,7 +131277,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f3a092425c89f49b50469d522c99abbdb1b6dedf" + "test/core/security/corpus/ssl_server_corpus/3dad758011b16a3771376f9af91242953be3e47b" ], "ci_platforms": [ "linux" @@ -128371,7 +131291,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128379,7 +131299,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f3d084cf20b92a5f026fe7cc6e5af49bde28693d" + "test/core/security/corpus/ssl_server_corpus/43b56a1adffaf2c3c994679bf2b6fe6414e13df4" ], "ci_platforms": [ "linux" @@ -128393,7 +131313,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128401,7 +131321,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f4024b01.bin" + "test/core/security/corpus/ssl_server_corpus/4446c60ab89c34e5ccc26bec18d7e7d21fe5aec1" ], "ci_platforms": [ "linux" @@ -128415,7 +131335,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128423,7 +131343,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f541d27e.bin" + "test/core/security/corpus/ssl_server_corpus/44924b3866956d0668ec65750c3663279ac84a36" ], "ci_platforms": [ "linux" @@ -128437,7 +131357,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128445,7 +131365,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f5424a9d7bd14317b6de7b15587df28bfde8362d" + "test/core/security/corpus/ssl_server_corpus/44e4370a4eafde61f8e7dc7e4542e0ad5ecf5253" ], "ci_platforms": [ "linux" @@ -128459,7 +131379,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128467,7 +131387,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f5c877c4.bin" + "test/core/security/corpus/ssl_server_corpus/44fb8c02117ebd75c97e517624c0abc9f9a76aa7" ], "ci_platforms": [ "linux" @@ -128481,7 +131401,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128489,7 +131409,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f5f0615030439dda162e8862b6bbd09f81f14d81" + "test/core/security/corpus/ssl_server_corpus/45d76dd1f0a29fce3f8d289b5177263871eb3f83" ], "ci_platforms": [ "linux" @@ -128503,7 +131423,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128511,7 +131431,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f74b9428.bin" + "test/core/security/corpus/ssl_server_corpus/4fcbf18c4135352539eaf445c26f2f8a5da9b68e" ], "ci_platforms": [ "linux" @@ -128525,7 +131445,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128533,7 +131453,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f7bf0d7bb0dd6e1866ccef9fafc3cb295db2f07f" + "test/core/security/corpus/ssl_server_corpus/508ca86c6f4e6ecc30c252ccf74e78256a893b17" ], "ci_platforms": [ "linux" @@ -128547,7 +131467,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128555,7 +131475,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f826100f.bin" + "test/core/security/corpus/ssl_server_corpus/515d240b860fcd1e77d4a5af291aa4a667d9b609" ], "ci_platforms": [ "linux" @@ -128569,7 +131489,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128577,7 +131497,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f88ffb7f3066f2706cfcd9be077595e07834cc15" + "test/core/security/corpus/ssl_server_corpus/528e9738d5016f01cf59d74f20a8aa3f341ad89e" ], "ci_platforms": [ "linux" @@ -128591,7 +131511,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128599,7 +131519,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/f8b46e92c7ceb4c2f2cdcb3452a6d8c58768eaa2" + "test/core/security/corpus/ssl_server_corpus/54b636a2bb66ccf8247b53ff76a6400e9f1355d0" ], "ci_platforms": [ "linux" @@ -128613,7 +131533,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128621,7 +131541,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fa202a5f51cd49f8ea5af60c5f403f797c01c504" + "test/core/security/corpus/ssl_server_corpus/5cc337c4b33cd703cd354804530f5b72684260d0" ], "ci_platforms": [ "linux" @@ -128635,7 +131555,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128643,7 +131563,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fa36b4280d9e28edd81c5e4d192d1a5c2765e5e4" + "test/core/security/corpus/ssl_server_corpus/5ce3ec59111bf328044e41fcf26b3bc542df527e" ], "ci_platforms": [ "linux" @@ -128657,7 +131577,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128665,7 +131585,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fb3b0d80.bin" + "test/core/security/corpus/ssl_server_corpus/5eaac270339f19cfce4eafa2e69d62adf100ad1c" ], "ci_platforms": [ "linux" @@ -128679,7 +131599,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128687,7 +131607,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fb84edfa9e8cbddba26a7184e7fdc219bde556c0" + "test/core/security/corpus/ssl_server_corpus/6129382083353687a5c3acb3d4274b811227bf3d" ], "ci_platforms": [ "linux" @@ -128701,7 +131621,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128709,7 +131629,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fd14bea45ecaf13af0053900edb2f17b71a0bf09" + "test/core/security/corpus/ssl_server_corpus/616a25f7c4557ef9eb33d4367c6884abc336802d" ], "ci_platforms": [ "linux" @@ -128723,7 +131643,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128731,7 +131651,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fd26e0a6.bin" + "test/core/security/corpus/ssl_server_corpus/6214e558afbfdb8451e49b62619896492f1a8972" ], "ci_platforms": [ "linux" @@ -128745,7 +131665,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128753,7 +131673,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fd943e69304dffebf47e1e40b0849e12abeee287" + "test/core/security/corpus/ssl_server_corpus/6c6a6b2ce74acf8a8b90fc0b268ecc7dc992cd60" ], "ci_platforms": [ "linux" @@ -128767,7 +131687,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128775,7 +131695,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fdf67df81857577361d319e76559c5e85a257b07" + "test/core/security/corpus/ssl_server_corpus/6f72309e1b23b824e9bbb9abf74a014b78be038e" ], "ci_platforms": [ "linux" @@ -128789,7 +131709,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128797,7 +131717,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fe17c07ffbaa67f1165938d2578038637b93cf57" + "test/core/security/corpus/ssl_server_corpus/7137ffad853e4dd76c6d6490f37b36e20de7ede0" ], "ci_platforms": [ "linux" @@ -128811,7 +131731,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128819,7 +131739,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fe1957b9bc7c6bf9d8b6089c422d72a0f444da6e" + "test/core/security/corpus/ssl_server_corpus/71c9356b6b6c5a3a07033d0fa4ed417fa74a77e5" ], "ci_platforms": [ "linux" @@ -128833,7 +131753,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128841,7 +131761,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fe66893c.bin" + "test/core/security/corpus/ssl_server_corpus/7414938799ed61282f41d5fb1474751ca52b2682" ], "ci_platforms": [ "linux" @@ -128855,7 +131775,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128863,7 +131783,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/fe69ddfa5827dd560bb0b5d4da7d982273f17ef9" + "test/core/security/corpus/ssl_server_corpus/75e853eb2ff7e78efb327e114b39baff5a1dd5bb" ], "ci_platforms": [ "linux" @@ -128877,7 +131797,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128885,7 +131805,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/ff227015.bin" + "test/core/security/corpus/ssl_server_corpus/7607c92952b4429e350260d8074c3c460468fd49" ], "ci_platforms": [ "linux" @@ -128899,7 +131819,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128907,7 +131827,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/ff898c08.bin" + "test/core/security/corpus/ssl_server_corpus/7677373c082fee56d8cdde009d9db5b117a4c8de" ], "ci_platforms": [ "linux" @@ -128921,7 +131841,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128929,7 +131849,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/ff902ef808e01b0b2d167c1c7e8e263d6f561941" + "test/core/security/corpus/ssl_server_corpus/76abde5c970743f9fb8bc781e46c431dee2aa104" ], "ci_platforms": [ "linux" @@ -128943,7 +131863,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128951,7 +131871,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-0292270056246b7a4ccd2e7d0356665cef307ef2" + "test/core/security/corpus/ssl_server_corpus/77e0b4e2066853df9d32d475b8788e3d7d19329b" ], "ci_platforms": [ "linux" @@ -128965,7 +131885,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128973,7 +131893,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-082763e16153cb6b8f3f5308cd060e822f475e5a" + "test/core/security/corpus/ssl_server_corpus/78e66840048ddc3c75e0e4abffbb3109af0d750e" ], "ci_platforms": [ "linux" @@ -128987,7 +131907,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -128995,7 +131915,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-098ec93ded3a20e6043d11e9cc6066351e257f8e" + "test/core/security/corpus/ssl_server_corpus/7dc620eb45764390c7b106362fc4922227415407" ], "ci_platforms": [ "linux" @@ -129009,7 +131929,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129017,7 +131937,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-0aa52e00ddd54f8e129430852c2da95650c354b0" + "test/core/security/corpus/ssl_server_corpus/82ca7a52d589e9dbae37ebf1c59fac7ad876eb7c" ], "ci_platforms": [ "linux" @@ -129031,7 +131951,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129039,7 +131959,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-13501419f349b7855d2e94060bd08b28923d1f37" + "test/core/security/corpus/ssl_server_corpus/8997d472f73eec84fea712638abd762818ec92ec" ], "ci_platforms": [ "linux" @@ -129053,7 +131973,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129061,7 +131981,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-14862768a1fe076896fd37e2543ddd23192a9e3c" + "test/core/security/corpus/ssl_server_corpus/933bc3fdc56718d7ac0486c26eecddb6db1c5ba2" ], "ci_platforms": [ "linux" @@ -129075,7 +131995,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129083,7 +132003,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-1a3ebf8f8bb0b5a0109a5ef44734cc64170377f9" + "test/core/security/corpus/ssl_server_corpus/94431bda60ddc175cf86273ddc07cb41ecf45fa1" ], "ci_platforms": [ "linux" @@ -129097,7 +132017,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129105,7 +132025,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-1ae0ed17a042aab8a3c3199c83a809b0243d1424" + "test/core/security/corpus/ssl_server_corpus/94c4272b2bb4fa9178eb4ae7dcf4b796fdcb22ac" ], "ci_platforms": [ "linux" @@ -129119,7 +132039,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129127,7 +132047,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-1b6c4b5c1949adae3efd5e3264bb32a40eea524e" + "test/core/security/corpus/ssl_server_corpus/9551c32a794250fb425005d8faf4bd24475acd41" ], "ci_platforms": [ "linux" @@ -129141,7 +132061,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129149,7 +132069,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-1dc659f500e7bee41a4fee4423ade8332c162cc0" + "test/core/security/corpus/ssl_server_corpus/9677da7c82f18cec3e0ed2e78aadd6e590271a52" ], "ci_platforms": [ "linux" @@ -129163,7 +132083,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129171,7 +132091,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-350b5da741597222c98fe86768432507850317f5" + "test/core/security/corpus/ssl_server_corpus/9c2e6291aff608f3f5307a7c80db6b17107f0575" ], "ci_platforms": [ "linux" @@ -129185,7 +132105,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129193,7 +132113,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-395aea4fcfea081fc0d2733fff2d14405439fa72" + "test/core/security/corpus/ssl_server_corpus/9c39dc04c7414ca0bb64fb942422bebe83ed8e8f" ], "ci_platforms": [ "linux" @@ -129207,7 +132127,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129215,7 +132135,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-3991c873ba814d0cd03a67d25fff0c8fe8713aca" + "test/core/security/corpus/ssl_server_corpus/9cc8547d183a4f2ab7022b36376ca4a6230726c6" ], "ci_platforms": [ "linux" @@ -129229,7 +132149,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129237,7 +132157,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-3cec540a680b108dda1e0a8e0bfb2d44e5a4a4e8" + "test/core/security/corpus/ssl_server_corpus/9e19e5e77789c34f99bbe1e6de198610d6765806" ], "ci_platforms": [ "linux" @@ -129251,7 +132171,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129259,7 +132179,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-45cf8ac5faa9c7b15baf9281e8d7e0b4e103f0e0" + "test/core/security/corpus/ssl_server_corpus/9f0853ccf6912df9fba2d5fc3a1ddece41c377ac" ], "ci_platforms": [ "linux" @@ -129273,7 +132193,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129281,7 +132201,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-4c6da955e4c101b81a62b2f8e934d94a62ae534b" + "test/core/security/corpus/ssl_server_corpus/a6d521e501322f052df5a81ee622e0e4942ddcda" ], "ci_platforms": [ "linux" @@ -129295,7 +132215,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129303,7 +132223,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-58f116dfba8d428a01ca596174fca63f4ac523f0" + "test/core/security/corpus/ssl_server_corpus/a9dc20f09890403be510357a7665a8f0db2468a4" ], "ci_platforms": [ "linux" @@ -129317,7 +132237,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129325,7 +132245,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-59f6edc7cf4aeed49b4dc024052db4846d5d7fc8" + "test/core/security/corpus/ssl_server_corpus/ac1c60970910880558ae7a2ca2e155cfd7772e05" ], "ci_platforms": [ "linux" @@ -129339,7 +132259,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129347,7 +132267,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-60a9f77951c5059616764894e1963d83d478edfe" + "test/core/security/corpus/ssl_server_corpus/afe36d0187a155fc6e4e5c055c0ed0f3802cf696" ], "ci_platforms": [ "linux" @@ -129361,7 +132281,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129369,7 +132289,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-63ebf780ee6c2003eba622686a4bf94c503ad96e" + "test/core/security/corpus/ssl_server_corpus/b12b5fc39edc5407b4a525c414ff6b5e116eee05" ], "ci_platforms": [ "linux" @@ -129383,7 +132303,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129391,7 +132311,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-68ed2d33c9d32f73343c097303c3d5a6a3467c83" + "test/core/security/corpus/ssl_server_corpus/b5b088c6e3a96f88119a940874ab04cb954797ae" ], "ci_platforms": [ "linux" @@ -129405,7 +132325,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129413,7 +132333,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-6d37c5e6d7efee56319b1316725fdc5aee5a52c3" + "test/core/security/corpus/ssl_server_corpus/b65ad77a43ede3394ba714238829860c4ef4bc9f" ], "ci_platforms": [ "linux" @@ -129427,7 +132347,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129435,7 +132355,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-6e980a9d12c392175b5f66683e608626ae983276" + "test/core/security/corpus/ssl_server_corpus/b6f265cad9d47e2ccd17a73a6d309d8898dc5428" ], "ci_platforms": [ "linux" @@ -129449,7 +132369,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129457,7 +132377,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-7233d53f94386b0339b2c2b01ef2d348f5862f1f" + "test/core/security/corpus/ssl_server_corpus/b7ca5868bca7ae7d1952f44ca966218b26fb7207" ], "ci_platforms": [ "linux" @@ -129471,7 +132391,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129479,7 +132399,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-7281d9eaed0d20b0b6b5e7709c57e78fefe9c315" + "test/core/security/corpus/ssl_server_corpus/bd20809eacabadb9bcc77d31e42d3359117b03f2" ], "ci_platforms": [ "linux" @@ -129493,7 +132413,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129501,7 +132421,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-73e0a41066bc09c8e3fbd0dd7628445bcdaabb4a" + "test/core/security/corpus/ssl_server_corpus/c328623c4ce12505a54cf1a7a1606e1db36e870d" ], "ci_platforms": [ "linux" @@ -129515,7 +132435,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129523,7 +132443,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-84f22ffca68c6e1590a44aa9f6dd0cef1f680c77" + "test/core/security/corpus/ssl_server_corpus/c823e8bd5526d9fe7d51319737f51bd18bdd75e8" ], "ci_platforms": [ "linux" @@ -129537,7 +132457,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129545,7 +132465,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-93cd6b3f9786ee107a0e2d135b40d13f96e652ed" + "test/core/security/corpus/ssl_server_corpus/c9394095d86ff36b69d90f7122592bf51cafe7dd" ], "ci_platforms": [ "linux" @@ -129559,7 +132479,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129567,7 +132487,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-97a338fa892093ed5013a76b96b35dd112df3342" + "test/core/security/corpus/ssl_server_corpus/cdbf0d2ae953bec07a67b7152785b548e55f85a4" ], "ci_platforms": [ "linux" @@ -129581,7 +132501,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129589,7 +132509,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-9a176b6f7e0dc5f681a1788d8954f76fabd08cad" + "test/core/security/corpus/ssl_server_corpus/cef06f9c35ee338998703555847d70c26bfc9474" ], "ci_platforms": [ "linux" @@ -129603,7 +132523,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129611,7 +132531,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-9de2e92150e54982d4e502b18f374f8cd8fd453b" + "test/core/security/corpus/ssl_server_corpus/cfb40ab8eb7031e978bed2418cdc2f0b8a8d8ec7" ], "ci_platforms": [ "linux" @@ -129625,7 +132545,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129633,7 +132553,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-a1b2cfcf0997acb13a32fc5c004f57d9e9bc4275" + "test/core/security/corpus/ssl_server_corpus/d30840c3f48f11179ef976ada30477045c6d1e98" ], "ci_platforms": [ "linux" @@ -129647,7 +132567,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129655,7 +132575,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-a1ed26e6f82ca0e81e3f415bd8b0b8b520d3927b" + "test/core/security/corpus/ssl_server_corpus/d5afef69141edc7f4911243cf2deb19c912999cf" ], "ci_platforms": [ "linux" @@ -129669,7 +132589,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129677,7 +132597,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-a61a28cf78149518466b87e5463ec5c771dc504e" + "test/core/security/corpus/ssl_server_corpus/d5cf71396e1a04da1a7ec266957ffd2de29d6a57" ], "ci_platforms": [ "linux" @@ -129691,7 +132611,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129699,7 +132619,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-aa23c18f6badd88a7bec65e8b04f7801ba624ec6" + "test/core/security/corpus/ssl_server_corpus/d6dd8a2b085db5d33ef24b23502293ce1ce906a3" ], "ci_platforms": [ "linux" @@ -129713,7 +132633,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129721,7 +132641,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-adaac86cf1aa1e98e95240c5f92c3708456c3624" + "test/core/security/corpus/ssl_server_corpus/d7676dcd39b7c7cfaac513a98b56fe4ac8ea27d8" ], "ci_platforms": [ "linux" @@ -129735,7 +132655,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129743,7 +132663,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-b281f018cc919301131cf3ed28449cfbd24b6bbf" + "test/core/security/corpus/ssl_server_corpus/d8c9e9ef14abc23b36cb493283ba3e2812d9e537" ], "ci_platforms": [ "linux" @@ -129757,7 +132677,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129765,7 +132685,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-ba0016a62a8576a57f000b90c364847ef6b12dcc" + "test/core/security/corpus/ssl_server_corpus/d9edb0aa5d2fe4af26ac861770c1530a4075f919" ], "ci_platforms": [ "linux" @@ -129779,7 +132699,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129787,7 +132707,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-ba17346b8e46e6a05aaa7342a959a7c5ab0f1471" + "test/core/security/corpus/ssl_server_corpus/da1b52041957334b9ea1371bd2993013118bc82d" ], "ci_platforms": [ "linux" @@ -129801,7 +132721,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129809,7 +132729,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-ba2b1fde90cc70d9abae22c4c4cb051aae8aa148" + "test/core/security/corpus/ssl_server_corpus/dca7861424c8f92d3720de5c4488454cde1c39df" ], "ci_platforms": [ "linux" @@ -129823,7 +132743,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129831,7 +132751,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-bda43d420a3e5d5228a5f5130207a1f11fc1c81f" + "test/core/security/corpus/ssl_server_corpus/df3755e257d024ef8ab08f6d5cefcf28148ea4b1" ], "ci_platforms": [ "linux" @@ -129845,7 +132765,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129853,7 +132773,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-c05c239719a7beeca2c126b7e5ef7251fa615b54" + "test/core/security/corpus/ssl_server_corpus/e360a49faefb87d671edb99e777f528f52cac9ae" ], "ci_platforms": [ "linux" @@ -129867,7 +132787,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129875,7 +132795,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-c151762e5f37e233142059c1b269ce55434cf6a6" + "test/core/security/corpus/ssl_server_corpus/e5e789605744d47e5a5d433bb04db1b413bc91a8" ], "ci_platforms": [ "linux" @@ -129889,7 +132809,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129897,7 +132817,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-cacd0e0c5f7d4169085735400100da4d36397185" + "test/core/security/corpus/ssl_server_corpus/e6e44a6aa0ece409450c85e43d02c57e338ce1da" ], "ci_platforms": [ "linux" @@ -129911,7 +132831,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129919,7 +132839,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-ccafab6afdc6474610023b47bd7b3e1b9ea4647b" + "test/core/security/corpus/ssl_server_corpus/e8ebd49ee98cf57ca7eb35b6e96ef8866270aac6" ], "ci_platforms": [ "linux" @@ -129933,7 +132853,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129941,7 +132861,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-d3c3cba3897fafec97665411ea1f94a89bb4de7b" + "test/core/security/corpus/ssl_server_corpus/ea0645f46ccd233337a8389b6118db5b0289f040" ], "ci_platforms": [ "linux" @@ -129955,7 +132875,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129963,7 +132883,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-d3fcd80cd6f1bb05f5e5084ebb2ee801067863fb" + "test/core/security/corpus/ssl_server_corpus/f6f7687df6b7056d3c819c03c9268e22a956b6b5" ], "ci_platforms": [ "linux" @@ -129977,7 +132897,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -129985,7 +132905,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-dc57e96cd02ba32fa4a99c97b6490e9879d30be5" + "test/core/security/corpus/ssl_server_corpus/f725caa73aa9467c5e934c49780fc409b36b251c" ], "ci_platforms": [ "linux" @@ -129999,7 +132919,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -130007,7 +132927,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-ddfe613d8791b2d377e14fbdffb18b84a89d49b6" + "test/core/security/corpus/ssl_server_corpus/f8d3326a860091edd4d60725f96f429d13f3abe6" ], "ci_platforms": [ "linux" @@ -130021,7 +132941,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -130029,7 +132949,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-f412afea6b01aa53da919a41a65ffbf9885f2d65" + "test/core/security/corpus/ssl_server_corpus/f9261344b4049e90e88b5af784dd29b938c5c838" ], "ci_platforms": [ "linux" @@ -130043,7 +132963,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -130051,7 +132971,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-f67be653815f6c2c10eea55c8009e1167ac9c20b" + "test/core/security/corpus/ssl_server_corpus/f95b97ece3b46815204a8e6d6e94f92ec40a9672" ], "ci_platforms": [ "linux" @@ -130065,7 +132985,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -130073,7 +132993,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-f6c1042f96e15183dcc13b9658d971cc29426d53" + "test/core/security/corpus/ssl_server_corpus/f97db29497e4e3225016a6ced837e20a13622f16" ], "ci_platforms": [ "linux" @@ -130087,7 +133007,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], @@ -130095,7 +133015,7 @@ }, { "args": [ - "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-f9a2773d6502fd4b1ffa73df3c550b0da63af833" + "test/core/security/corpus/ssl_server_corpus/ff1a900b12f19772f9a86bd5f560a754cdb18d1a" ], "ci_platforms": [ "linux" @@ -130109,7 +133029,7 @@ ], "flaky": false, "language": "c", - "name": "server_fuzzer_one_entry", + "name": "ssl_server_fuzzer_one_entry", "platforms": [ "linux" ], diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index f0e061f4a6f4b8696e0a401f29fa022d5f5f27b3..d33579a5f2e8bb23fe9a01e38fc6424447a15c79 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -321,7 +321,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\error.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.h" /> @@ -345,6 +344,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.h" /> @@ -527,8 +527,6 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c"> @@ -571,6 +569,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_common_posix.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_linux.c"> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 8809da125dfbf90f3ae7e4b272a18ed5bb179ffb..b4e8eefe02346e432cc60dd3bff6e77c583735dc 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -76,9 +76,6 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c"> - <Filter>src\core\lib\iomgr</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -142,6 +139,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_common_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -803,9 +803,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h"> - <Filter>src\core\lib\iomgr</Filter> - </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> @@ -875,6 +872,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.h"> + <Filter>src\core\lib\iomgr</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index 2e19a14dd2f05ab2a8270c96d7965bf8aa428e77..79a233a72b3d6fdbceae45bc3678fd863c06c799 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -214,7 +214,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\error.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.h" /> @@ -238,6 +237,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.h" /> @@ -378,8 +378,6 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c"> @@ -422,6 +420,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_common_posix.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_linux.c"> diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index e66da7b571d2fcae04753692f3986f003b6e3a07..1e70d60b242bc06a8566cfa9d08d14c821c21047 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -133,9 +133,6 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c"> - <Filter>src\core\lib\iomgr</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -199,6 +196,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_common_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -599,9 +599,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h"> - <Filter>src\core\lib\iomgr</Filter> - </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> @@ -671,6 +668,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.h"> + <Filter>src\core\lib\iomgr</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 55604c5212650a0efe5d85ec10e31f7fe1410974..bbc3fbd89885f6f5003e6c402a0655598e31b960 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -311,7 +311,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\error.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\exec_ctx.h" /> @@ -335,6 +334,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_windows.h" /> @@ -495,8 +495,6 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_posix.c"> @@ -539,6 +537,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_common_posix.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_linux.c"> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 69c52cc6f129e16bf2089496bbe3ae79ce476c24..0782c54aef367ea02299daf1baa16fa3bc05e7fd 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -79,9 +79,6 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.c"> - <Filter>src\core\lib\iomgr</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -145,6 +142,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_utils.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils_common_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -716,9 +716,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_epoll_linux.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_and_epoll_posix.h"> - <Filter>src\core\lib\iomgr</Filter> - </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\ev_poll_posix.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> @@ -788,6 +785,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\sockaddr_windows.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_mutator.h"> + <Filter>src\core\lib\iomgr</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\socket_utils.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/test/bm_fullstack/bm_fullstack.vcxproj b/vsprojects/vcxproj/test/bm_fullstack/bm_fullstack.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..1ce993e3230786a4a5b358004a69b918da422374 --- /dev/null +++ b/vsprojects/vcxproj/test/bm_fullstack/bm_fullstack.vcxproj @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" /> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{4AAFDA9D-A596-DE6D-8288-A9219D7EBD93}</ProjectGuid> + <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> + <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration"> + <PlatformToolset>v100</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration"> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration"> + <PlatformToolset>v120</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration"> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(SolutionDir)\..\vsprojects\cpptest.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\global.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\protobuf.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)'=='Debug'"> + <TargetName>bm_fullstack</TargetName> + <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> + <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib> + <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> + <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'"> + <TargetName>bm_fullstack</TargetName> + <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> + <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib> + <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> + <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + + <ItemGroup> + <ClCompile Include="$(SolutionDir)\..\test\cpp\microbenchmarks\bm_fullstack.cc"> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\google_benchmark\google_benchmark.vcxproj"> + <Project>{AAD4AEF3-DF1E-7A6D-EC35-233BD1031BF4}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++_test_util\grpc++_test_util.vcxproj"> + <Project>{0BE77741-552A-929B-A497-4EF7ECE17A64}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj"> + <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj"> + <Project>{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj"> + <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj"> + <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj"> + <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> + </ImportGroup> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" /> + </Target> +</Project> + diff --git a/vsprojects/vcxproj/test/bm_fullstack/bm_fullstack.vcxproj.filters b/vsprojects/vcxproj/test/bm_fullstack/bm_fullstack.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..76b29ad3bd5a2b9b710ba18d312c13819e58ba9e --- /dev/null +++ b/vsprojects/vcxproj/test/bm_fullstack/bm_fullstack.vcxproj.filters @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <ClCompile Include="$(SolutionDir)\..\test\cpp\microbenchmarks\bm_fullstack.cc"> + <Filter>test\cpp\microbenchmarks</Filter> + </ClCompile> + </ItemGroup> + + <ItemGroup> + <Filter Include="test"> + <UniqueIdentifier>{a2580d22-fbdd-9841-08c9-3173349c0837}</UniqueIdentifier> + </Filter> + <Filter Include="test\cpp"> + <UniqueIdentifier>{3d07ea20-516b-1ac1-4564-f1f04c929e99}</UniqueIdentifier> + </Filter> + <Filter Include="test\cpp\microbenchmarks"> + <UniqueIdentifier>{c130900b-fb0a-d96a-530e-f837d1a9582e}</UniqueIdentifier> + </Filter> + </ItemGroup> +</Project> + diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj index 954ac21b497d516ee23d6bf923026c1536c3fc56..4fb8f8f4a15d74ea465af9b9e4a3f58c5215657a 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj @@ -187,6 +187,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\filter_causes_close.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\filter_latency.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\graceful_server_shutdown.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\high_initial_seqno.c"> diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters index b2747d25784b90c76607ea9b96592c3e03752a19..ff82a4dd43cc0cd5d4c9933acd72fa9aa1c29e0d 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters @@ -55,6 +55,9 @@ <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\filter_causes_close.c"> <Filter>test\core\end2end\tests</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\filter_latency.c"> + <Filter>test\core\end2end\tests</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\graceful_server_shutdown.c"> <Filter>test\core\end2end\tests</Filter> </ClCompile> diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj index 51b744bc2142d25bb2074b7cb12de82fd7422f37..0b7d7c2e7524e39e19c47dc1d925ddf4e52253f5 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj @@ -189,6 +189,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\filter_causes_close.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\filter_latency.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\graceful_server_shutdown.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\high_initial_seqno.c"> diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters index 33e7098ecf4a9ce5563d641b4945c5dfb5284441..e641930e64a1efa9648e024e5a4a7658bfd848fa 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters @@ -58,6 +58,9 @@ <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\filter_causes_close.c"> <Filter>test\core\end2end\tests</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\filter_latency.c"> + <Filter>test\core\end2end\tests</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\graceful_server_shutdown.c"> <Filter>test\core\end2end\tests</Filter> </ClCompile>