diff options
659 files changed, 23106 insertions, 10688 deletions
@@ -49,7 +49,6 @@ cc_library( "src/core/lib/support/backoff.h", "src/core/lib/support/block_annotate.h", "src/core/lib/support/env.h", - "src/core/lib/support/load_file.h", "src/core/lib/support/murmur_hash.h", "src/core/lib/support/stack_lockfree.h", "src/core/lib/support/string.h", @@ -72,7 +71,6 @@ cc_library( "src/core/lib/support/env_windows.c", "src/core/lib/support/histogram.c", "src/core/lib/support/host_port.c", - "src/core/lib/support/load_file.c", "src/core/lib/support/log.c", "src/core/lib/support/log_android.c", "src/core/lib/support/log_linux.c", @@ -178,6 +176,7 @@ cc_library( "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_pair.h", + "src/core/lib/iomgr/error.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", @@ -187,6 +186,7 @@ cc_library( "src/core/lib/iomgr/iomgr.h", "src/core/lib/iomgr/iomgr_internal.h", "src/core/lib/iomgr/iomgr_posix.h", + "src/core/lib/iomgr/load_file.h", "src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", @@ -274,6 +274,7 @@ cc_library( "src/core/lib/security/transport/handshake.h", "src/core/lib/security/transport/secure_endpoint.h", "src/core/lib/security/transport/security_connector.h", + "src/core/lib/security/transport/tsi_error.h", "src/core/lib/security/util/b64.h", "src/core/lib/security/util/json_util.h", "src/core/lib/tsi/fake_transport_security.h", @@ -326,6 +327,7 @@ cc_library( "src/core/lib/iomgr/endpoint.c", "src/core/lib/iomgr/endpoint_pair_posix.c", "src/core/lib/iomgr/endpoint_pair_windows.c", + "src/core/lib/iomgr/error.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", @@ -335,6 +337,7 @@ cc_library( "src/core/lib/iomgr/iomgr.c", "src/core/lib/iomgr/iomgr_posix.c", "src/core/lib/iomgr/iomgr_windows.c", + "src/core/lib/iomgr/load_file.c", "src/core/lib/iomgr/polling_entity.c", "src/core/lib/iomgr/pollset_set_windows.c", "src/core/lib/iomgr/pollset_windows.c", @@ -437,6 +440,7 @@ cc_library( "src/core/lib/security/transport/secure_endpoint.c", "src/core/lib/security/transport/security_connector.c", "src/core/lib/security/transport/server_auth_filter.c", + "src/core/lib/security/transport/tsi_error.c", "src/core/lib/security/util/b64.c", "src/core/lib/security/util/json_util.c", "src/core/lib/surface/init_secure.c", @@ -556,6 +560,7 @@ cc_library( "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_pair.h", + "src/core/lib/iomgr/error.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", @@ -565,6 +570,7 @@ cc_library( "src/core/lib/iomgr/iomgr.h", "src/core/lib/iomgr/iomgr_internal.h", "src/core/lib/iomgr/iomgr_posix.h", + "src/core/lib/iomgr/load_file.h", "src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", @@ -669,6 +675,7 @@ cc_library( "src/core/lib/security/transport/handshake.h", "src/core/lib/security/transport/secure_endpoint.h", "src/core/lib/security/transport/security_connector.h", + "src/core/lib/security/transport/tsi_error.h", "src/core/lib/security/util/b64.h", "src/core/lib/security/util/json_util.h", "src/core/lib/tsi/fake_transport_security.h", @@ -694,6 +701,7 @@ cc_library( "src/core/lib/iomgr/endpoint.c", "src/core/lib/iomgr/endpoint_pair_posix.c", "src/core/lib/iomgr/endpoint_pair_windows.c", + "src/core/lib/iomgr/error.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", @@ -703,6 +711,7 @@ cc_library( "src/core/lib/iomgr/iomgr.c", "src/core/lib/iomgr/iomgr_posix.c", "src/core/lib/iomgr/iomgr_windows.c", + "src/core/lib/iomgr/load_file.c", "src/core/lib/iomgr/polling_entity.c", "src/core/lib/iomgr/pollset_set_windows.c", "src/core/lib/iomgr/pollset_windows.c", @@ -827,6 +836,7 @@ cc_library( "src/core/lib/security/transport/secure_endpoint.c", "src/core/lib/security/transport/security_connector.c", "src/core/lib/security/transport/server_auth_filter.c", + "src/core/lib/security/transport/tsi_error.c", "src/core/lib/security/util/b64.c", "src/core/lib/security/util/json_util.c", "src/core/lib/surface/init_secure.c", @@ -899,6 +909,7 @@ cc_library( "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_pair.h", + "src/core/lib/iomgr/error.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", @@ -908,6 +919,7 @@ cc_library( "src/core/lib/iomgr/iomgr.h", "src/core/lib/iomgr/iomgr_internal.h", "src/core/lib/iomgr/iomgr_posix.h", + "src/core/lib/iomgr/load_file.h", "src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", @@ -1025,6 +1037,7 @@ cc_library( "src/core/lib/iomgr/endpoint.c", "src/core/lib/iomgr/endpoint_pair_posix.c", "src/core/lib/iomgr/endpoint_pair_windows.c", + "src/core/lib/iomgr/error.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", @@ -1034,6 +1047,7 @@ cc_library( "src/core/lib/iomgr/iomgr.c", "src/core/lib/iomgr/iomgr_posix.c", "src/core/lib/iomgr/iomgr_windows.c", + "src/core/lib/iomgr/load_file.c", "src/core/lib/iomgr/polling_entity.c", "src/core/lib/iomgr/pollset_set_windows.c", "src/core/lib/iomgr/pollset_windows.c", @@ -1203,26 +1217,6 @@ cc_library( cc_library( - name = "grpc_zookeeper", - srcs = [ - "src/core/ext/resolver/zookeeper/zookeeper_resolver.c", - ], - hdrs = [ - "include/grpc/grpc_zookeeper.h", - ], - includes = [ - "include", - ".", - ], - deps = [ - ":gpr", - ":grpc", - ], -) - - - -cc_library( name = "grpc++", srcs = [ "include/grpc++/impl/codegen/core_codegen.h", @@ -1683,7 +1677,6 @@ objc_library( "src/core/lib/support/env_windows.c", "src/core/lib/support/histogram.c", "src/core/lib/support/host_port.c", - "src/core/lib/support/load_file.c", "src/core/lib/support/log.c", "src/core/lib/support/log_android.c", "src/core/lib/support/log_linux.c", @@ -1762,7 +1755,6 @@ objc_library( "src/core/lib/support/backoff.h", "src/core/lib/support/block_annotate.h", "src/core/lib/support/env.h", - "src/core/lib/support/load_file.h", "src/core/lib/support/murmur_hash.h", "src/core/lib/support/stack_lockfree.h", "src/core/lib/support/string.h", @@ -1802,6 +1794,7 @@ objc_library( "src/core/lib/iomgr/endpoint.c", "src/core/lib/iomgr/endpoint_pair_posix.c", "src/core/lib/iomgr/endpoint_pair_windows.c", + "src/core/lib/iomgr/error.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", @@ -1811,6 +1804,7 @@ objc_library( "src/core/lib/iomgr/iomgr.c", "src/core/lib/iomgr/iomgr_posix.c", "src/core/lib/iomgr/iomgr_windows.c", + "src/core/lib/iomgr/load_file.c", "src/core/lib/iomgr/polling_entity.c", "src/core/lib/iomgr/pollset_set_windows.c", "src/core/lib/iomgr/pollset_windows.c", @@ -1913,6 +1907,7 @@ objc_library( "src/core/lib/security/transport/secure_endpoint.c", "src/core/lib/security/transport/security_connector.c", "src/core/lib/security/transport/server_auth_filter.c", + "src/core/lib/security/transport/tsi_error.c", "src/core/lib/security/util/b64.c", "src/core/lib/security/util/json_util.c", "src/core/lib/surface/init_secure.c", @@ -2011,6 +2006,7 @@ objc_library( "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_pair.h", + "src/core/lib/iomgr/error.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", @@ -2020,6 +2016,7 @@ objc_library( "src/core/lib/iomgr/iomgr.h", "src/core/lib/iomgr/iomgr_internal.h", "src/core/lib/iomgr/iomgr_posix.h", + "src/core/lib/iomgr/load_file.h", "src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", @@ -2107,6 +2104,7 @@ objc_library( "src/core/lib/security/transport/handshake.h", "src/core/lib/security/transport/secure_endpoint.h", "src/core/lib/security/transport/security_connector.h", + "src/core/lib/security/transport/tsi_error.h", "src/core/lib/security/util/b64.h", "src/core/lib/security/util/json_util.h", "src/core/lib/tsi/fake_transport_security.h", @@ -920,7 +920,6 @@ gpr_cpu_test: $(BINDIR)/$(CONFIG)/gpr_cpu_test gpr_env_test: $(BINDIR)/$(CONFIG)/gpr_env_test gpr_histogram_test: $(BINDIR)/$(CONFIG)/gpr_histogram_test gpr_host_port_test: $(BINDIR)/$(CONFIG)/gpr_host_port_test -gpr_load_file_test: $(BINDIR)/$(CONFIG)/gpr_load_file_test gpr_log_test: $(BINDIR)/$(CONFIG)/gpr_log_test gpr_slice_buffer_test: $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test gpr_slice_test: $(BINDIR)/$(CONFIG)/gpr_slice_test @@ -949,8 +948,9 @@ grpc_verify_jwt: $(BINDIR)/$(CONFIG)/grpc_verify_jwt hpack_parser_fuzzer_test: $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test hpack_parser_test: $(BINDIR)/$(CONFIG)/hpack_parser_test hpack_table_test: $(BINDIR)/$(CONFIG)/hpack_table_test -http_fuzzer_test: $(BINDIR)/$(CONFIG)/http_fuzzer_test http_parser_test: $(BINDIR)/$(CONFIG)/http_parser_test +http_request_fuzzer_test: $(BINDIR)/$(CONFIG)/http_request_fuzzer_test +http_response_fuzzer_test: $(BINDIR)/$(CONFIG)/http_response_fuzzer_test httpcli_format_request_test: $(BINDIR)/$(CONFIG)/httpcli_format_request_test httpcli_test: $(BINDIR)/$(CONFIG)/httpcli_test httpscli_test: $(BINDIR)/$(CONFIG)/httpscli_test @@ -966,6 +966,7 @@ json_stream_error_test: $(BINDIR)/$(CONFIG)/json_stream_error_test json_test: $(BINDIR)/$(CONFIG)/json_test lame_client_test: $(BINDIR)/$(CONFIG)/lame_client_test lb_policies_test: $(BINDIR)/$(CONFIG)/lb_policies_test +load_file_test: $(BINDIR)/$(CONFIG)/load_file_test low_level_ping_pong_benchmark: $(BINDIR)/$(CONFIG)/low_level_ping_pong_benchmark message_compress_test: $(BINDIR)/$(CONFIG)/message_compress_test mlog_test: $(BINDIR)/$(CONFIG)/mlog_test @@ -977,6 +978,7 @@ no_server_test: $(BINDIR)/$(CONFIG)/no_server_test resolve_address_test: $(BINDIR)/$(CONFIG)/resolve_address_test secure_channel_create_test: $(BINDIR)/$(CONFIG)/secure_channel_create_test secure_endpoint_test: $(BINDIR)/$(CONFIG)/secure_endpoint_test +sequential_connectivity_test: $(BINDIR)/$(CONFIG)/sequential_connectivity_test server_chttp2_test: $(BINDIR)/$(CONFIG)/server_chttp2_test server_fuzzer: $(BINDIR)/$(CONFIG)/server_fuzzer server_test: $(BINDIR)/$(CONFIG)/server_test @@ -1048,7 +1050,6 @@ status_test: $(BINDIR)/$(CONFIG)/status_test streaming_throughput_test: $(BINDIR)/$(CONFIG)/streaming_throughput_test stress_test: $(BINDIR)/$(CONFIG)/stress_test thread_stress_test: $(BINDIR)/$(CONFIG)/thread_stress_test -zookeeper_test: $(BINDIR)/$(CONFIG)/zookeeper_test public_headers_must_be_c89: $(BINDIR)/$(CONFIG)/public_headers_must_be_c89 boringssl_aes_test: $(BINDIR)/$(CONFIG)/boringssl_aes_test boringssl_asn1_test: $(BINDIR)/$(CONFIG)/boringssl_asn1_test @@ -1134,7 +1135,8 @@ h2_uds_nosec_test: $(BINDIR)/$(CONFIG)/h2_uds_nosec_test api_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/api_fuzzer_one_entry client_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry hpack_parser_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry -http_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/http_fuzzer_test_one_entry +http_request_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry +http_response_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry json_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry nanopb_fuzzer_response_test_one_entry: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry nanopb_fuzzer_serverlist_test_one_entry: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry @@ -1180,8 +1182,8 @@ shared_cxx: pc_cxx pc_cxx_unsecure cache.mk $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX) shared_csharp: shared_c $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION).$(SHARED_EXT) ifeq ($(HAS_ZOOKEEPER),true) -static_zookeeper_libs: $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a -shared_zookeeper_libs: $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) +static_zookeeper_libs: +shared_zookeeper_libs: else static_zookeeper_libs: @@ -1211,7 +1213,12 @@ pc_cxx: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++.pc pc_cxx_unsecure: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc +ifeq ($(EMBED_OPENSSL),true) privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_asn1_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_x509_test_lib.a $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a +else +privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_cli_libs.a $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBDIR)/$(CONFIG)/libqps.a +endif + ifeq ($(HAS_ZOOKEEPER),true) privatelibs_zookeeper: @@ -1255,7 +1262,6 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/gpr_env_test \ $(BINDIR)/$(CONFIG)/gpr_histogram_test \ $(BINDIR)/$(CONFIG)/gpr_host_port_test \ - $(BINDIR)/$(CONFIG)/gpr_load_file_test \ $(BINDIR)/$(CONFIG)/gpr_log_test \ $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test \ $(BINDIR)/$(CONFIG)/gpr_slice_test \ @@ -1294,6 +1300,7 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/json_test \ $(BINDIR)/$(CONFIG)/lame_client_test \ $(BINDIR)/$(CONFIG)/lb_policies_test \ + $(BINDIR)/$(CONFIG)/load_file_test \ $(BINDIR)/$(CONFIG)/message_compress_test \ $(BINDIR)/$(CONFIG)/mlog_test \ $(BINDIR)/$(CONFIG)/multiple_server_queues_test \ @@ -1302,6 +1309,7 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/resolve_address_test \ $(BINDIR)/$(CONFIG)/secure_channel_create_test \ $(BINDIR)/$(CONFIG)/secure_endpoint_test \ + $(BINDIR)/$(CONFIG)/sequential_connectivity_test \ $(BINDIR)/$(CONFIG)/server_chttp2_test \ $(BINDIR)/$(CONFIG)/server_test \ $(BINDIR)/$(CONFIG)/set_initial_connect_string_test \ @@ -1369,7 +1377,8 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/api_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry \ - $(BINDIR)/$(CONFIG)/http_fuzzer_test_one_entry \ + $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry \ + $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry \ $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry \ $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry \ $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry \ @@ -1377,6 +1386,7 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry \ +ifeq ($(EMBED_OPENSSL),true) buildtests_cxx: buildtests_zookeeper privatelibs_cxx \ $(BINDIR)/$(CONFIG)/alarm_cpp_test \ $(BINDIR)/$(CONFIG)/async_end2end_test \ @@ -1460,10 +1470,57 @@ buildtests_cxx: buildtests_zookeeper privatelibs_cxx \ $(BINDIR)/$(CONFIG)/boringssl_pqueue_test \ $(BINDIR)/$(CONFIG)/boringssl_ssl_test \ +else +buildtests_cxx: buildtests_zookeeper privatelibs_cxx \ + $(BINDIR)/$(CONFIG)/alarm_cpp_test \ + $(BINDIR)/$(CONFIG)/async_end2end_test \ + $(BINDIR)/$(CONFIG)/auth_property_iterator_test \ + $(BINDIR)/$(CONFIG)/channel_arguments_test \ + $(BINDIR)/$(CONFIG)/cli_call_test \ + $(BINDIR)/$(CONFIG)/client_crash_test \ + $(BINDIR)/$(CONFIG)/client_crash_test_server \ + $(BINDIR)/$(CONFIG)/codegen_test_full \ + $(BINDIR)/$(CONFIG)/codegen_test_minimal \ + $(BINDIR)/$(CONFIG)/credentials_test \ + $(BINDIR)/$(CONFIG)/cxx_byte_buffer_test \ + $(BINDIR)/$(CONFIG)/cxx_slice_test \ + $(BINDIR)/$(CONFIG)/cxx_string_ref_test \ + $(BINDIR)/$(CONFIG)/cxx_time_test \ + $(BINDIR)/$(CONFIG)/end2end_test \ + $(BINDIR)/$(CONFIG)/generic_end2end_test \ + $(BINDIR)/$(CONFIG)/golden_file_test \ + $(BINDIR)/$(CONFIG)/grpc_cli \ + $(BINDIR)/$(CONFIG)/grpclb_api_test \ + $(BINDIR)/$(CONFIG)/hybrid_end2end_test \ + $(BINDIR)/$(CONFIG)/interop_client \ + $(BINDIR)/$(CONFIG)/interop_server \ + $(BINDIR)/$(CONFIG)/interop_test \ + $(BINDIR)/$(CONFIG)/json_run_localhost \ + $(BINDIR)/$(CONFIG)/metrics_client \ + $(BINDIR)/$(CONFIG)/mock_test \ + $(BINDIR)/$(CONFIG)/proto_server_reflection_test \ + $(BINDIR)/$(CONFIG)/qps_interarrival_test \ + $(BINDIR)/$(CONFIG)/qps_json_driver \ + $(BINDIR)/$(CONFIG)/qps_openloop_test \ + $(BINDIR)/$(CONFIG)/qps_worker \ + $(BINDIR)/$(CONFIG)/reconnect_interop_client \ + $(BINDIR)/$(CONFIG)/reconnect_interop_server \ + $(BINDIR)/$(CONFIG)/secure_auth_context_test \ + $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test \ + $(BINDIR)/$(CONFIG)/server_builder_plugin_test \ + $(BINDIR)/$(CONFIG)/server_crash_test \ + $(BINDIR)/$(CONFIG)/server_crash_test_client \ + $(BINDIR)/$(CONFIG)/shutdown_test \ + $(BINDIR)/$(CONFIG)/status_test \ + $(BINDIR)/$(CONFIG)/streaming_throughput_test \ + $(BINDIR)/$(CONFIG)/stress_test \ + $(BINDIR)/$(CONFIG)/thread_stress_test \ + +endif + ifeq ($(HAS_ZOOKEEPER),true) buildtests_zookeeper: privatelibs_zookeeper \ - $(BINDIR)/$(CONFIG)/zookeeper_test \ else buildtests_zookeeper: @@ -1535,8 +1592,6 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/gpr_histogram_test || ( echo test gpr_histogram_test failed ; exit 1 ) $(E) "[RUN] Testing gpr_host_port_test" $(Q) $(BINDIR)/$(CONFIG)/gpr_host_port_test || ( echo test gpr_host_port_test failed ; exit 1 ) - $(E) "[RUN] Testing gpr_load_file_test" - $(Q) $(BINDIR)/$(CONFIG)/gpr_load_file_test || ( echo test gpr_load_file_test failed ; exit 1 ) $(E) "[RUN] Testing gpr_log_test" $(Q) $(BINDIR)/$(CONFIG)/gpr_log_test || ( echo test gpr_log_test failed ; exit 1 ) $(E) "[RUN] Testing gpr_slice_buffer_test" @@ -1603,6 +1658,8 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/json_test || ( echo test json_test failed ; exit 1 ) $(E) "[RUN] Testing lame_client_test" $(Q) $(BINDIR)/$(CONFIG)/lame_client_test || ( echo test lame_client_test failed ; exit 1 ) + $(E) "[RUN] Testing load_file_test" + $(Q) $(BINDIR)/$(CONFIG)/load_file_test || ( echo test load_file_test failed ; exit 1 ) $(E) "[RUN] Testing message_compress_test" $(Q) $(BINDIR)/$(CONFIG)/message_compress_test || ( echo test message_compress_test failed ; exit 1 ) $(E) "[RUN] Testing multiple_server_queues_test" @@ -1617,6 +1674,8 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/secure_channel_create_test || ( echo test secure_channel_create_test failed ; exit 1 ) $(E) "[RUN] Testing secure_endpoint_test" $(Q) $(BINDIR)/$(CONFIG)/secure_endpoint_test || ( echo test secure_endpoint_test failed ; exit 1 ) + $(E) "[RUN] Testing sequential_connectivity_test" + $(Q) $(BINDIR)/$(CONFIG)/sequential_connectivity_test || ( echo test sequential_connectivity_test failed ; exit 1 ) $(E) "[RUN] Testing server_chttp2_test" $(Q) $(BINDIR)/$(CONFIG)/server_chttp2_test || ( echo test server_chttp2_test failed ; exit 1 ) $(E) "[RUN] Testing server_test" @@ -1808,8 +1867,6 @@ ifeq ($(CONFIG),opt) $(E) "[STRIP] Stripping libgrpc_unsecure.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a ifeq ($(HAS_ZOOKEEPER),true) - $(E) "[STRIP] Stripping libgrpc_zookeeper.a" - $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a endif endif @@ -1834,8 +1891,6 @@ ifeq ($(CONFIG),opt) $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION).$(SHARED_EXT)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION).$(SHARED_EXT) ifeq ($(HAS_ZOOKEEPER),true) - $(E) "[STRIP] Stripping $(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT)" - $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) endif endif @@ -1891,12 +1946,12 @@ else $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.pb.cc: src/proto/grpc/lb/v1/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/lb/v1/load_balancer.grpc.pb.cc: src/proto/grpc/lb/v1/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -1906,12 +1961,12 @@ else $(GENDIR)/src/proto/grpc/testing/compiler_test.pb.cc: src/proto/grpc/testing/compiler_test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/compiler_test.grpc.pb.cc: src/proto/grpc/testing/compiler_test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -1921,12 +1976,12 @@ else $(GENDIR)/src/proto/grpc/testing/control.pb.cc: src/proto/grpc/testing/control.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc: src/proto/grpc/testing/control.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.pb.cc $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -1936,12 +1991,12 @@ else $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc: src/proto/grpc/testing/duplicate/echo_duplicate.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc: src/proto/grpc/testing/duplicate/echo_duplicate.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -1951,12 +2006,12 @@ else $(GENDIR)/src/proto/grpc/testing/echo.pb.cc: src/proto/grpc/testing/echo.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc: src/proto/grpc/testing/echo.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -1966,12 +2021,12 @@ else $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc: src/proto/grpc/testing/echo_messages.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc: src/proto/grpc/testing/echo_messages.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -1981,12 +2036,12 @@ else $(GENDIR)/src/proto/grpc/testing/empty.pb.cc: src/proto/grpc/testing/empty.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc: src/proto/grpc/testing/empty.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -1996,12 +2051,12 @@ else $(GENDIR)/src/proto/grpc/testing/messages.pb.cc: src/proto/grpc/testing/messages.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc: src/proto/grpc/testing/messages.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -2011,12 +2066,12 @@ else $(GENDIR)/src/proto/grpc/testing/metrics.pb.cc: src/proto/grpc/testing/metrics.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/metrics.grpc.pb.cc: src/proto/grpc/testing/metrics.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -2026,12 +2081,12 @@ else $(GENDIR)/src/proto/grpc/testing/payloads.pb.cc: src/proto/grpc/testing/payloads.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/payloads.grpc.pb.cc: src/proto/grpc/testing/payloads.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -2041,12 +2096,12 @@ else $(GENDIR)/src/proto/grpc/testing/services.pb.cc: src/proto/grpc/testing/services.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/services.grpc.pb.cc: src/proto/grpc/testing/services.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/control.pb.cc $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -2056,12 +2111,12 @@ else $(GENDIR)/src/proto/grpc/testing/stats.pb.cc: src/proto/grpc/testing/stats.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/stats.grpc.pb.cc: src/proto/grpc/testing/stats.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif ifeq ($(NO_PROTOC),true) @@ -2071,12 +2126,12 @@ else $(GENDIR)/src/proto/grpc/testing/test.pb.cc: src/proto/grpc/testing/test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/src/proto/grpc/testing/test.grpc.pb.cc: src/proto/grpc/testing/test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) $(GENDIR)/src/proto/grpc/testing/empty.pb.cc $(GENDIR)/src/proto/grpc/testing/empty.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.pb.cc $(GENDIR)/src/proto/grpc/testing/messages.grpc.pb.cc $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif @@ -2150,9 +2205,6 @@ install-static_c: static_c strip-static_c install-pkg-config_c $(Q) $(INSTALL) -d $(prefix)/lib $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(prefix)/lib/libgrpc_unsecure.a ifeq ($(HAS_ZOOKEEPER),true) - $(E) "[INSTALL] Installing libgrpc_zookeeper.a" - $(Q) $(INSTALL) -d $(prefix)/lib - $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(prefix)/lib/libgrpc_zookeeper.a endif install-static_cxx: static_cxx strip-static_cxx install-pkg-config_cxx @@ -2206,15 +2258,6 @@ else ifneq ($(SYSTEM),Darwin) $(Q) ln -sf $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION).$(SHARED_EXT) $(prefix)/lib/libgrpc_unsecure.so endif ifeq ($(HAS_ZOOKEEPER),true) - $(E) "[INSTALL] Installing $(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT)" - $(Q) $(INSTALL) -d $(prefix)/lib - $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) $(prefix)/lib/$(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) -ifeq ($(SYSTEM),MINGW32) - $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper-imp.a $(prefix)/lib/libgrpc_zookeeper-imp.a -else ifneq ($(SYSTEM),Darwin) - $(Q) ln -sf $(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) $(prefix)/lib/libgrpc_zookeeper.so.0 - $(Q) ln -sf $(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) $(prefix)/lib/libgrpc_zookeeper.so -endif endif ifneq ($(SYSTEM),MINGW32) ifneq ($(SYSTEM),Darwin) @@ -2364,7 +2407,6 @@ LIBGPR_SRC = \ src/core/lib/support/env_windows.c \ src/core/lib/support/histogram.c \ src/core/lib/support/host_port.c \ - src/core/lib/support/load_file.c \ src/core/lib/support/log.c \ src/core/lib/support/log_android.c \ src/core/lib/support/log_linux.c \ @@ -2521,6 +2563,7 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ + src/core/lib/iomgr/error.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 \ @@ -2530,6 +2573,7 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ src/core/lib/iomgr/iomgr_windows.c \ + src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/polling_entity.c \ src/core/lib/iomgr/pollset_set_windows.c \ src/core/lib/iomgr/pollset_windows.c \ @@ -2632,6 +2676,7 @@ LIBGRPC_SRC = \ src/core/lib/security/transport/secure_endpoint.c \ src/core/lib/security/transport/security_connector.c \ src/core/lib/security/transport/server_auth_filter.c \ + src/core/lib/security/transport/tsi_error.c \ src/core/lib/security/util/b64.c \ src/core/lib/security/util/json_util.c \ src/core/lib/surface/init_secure.c \ @@ -2788,6 +2833,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ + src/core/lib/iomgr/error.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 \ @@ -2797,6 +2843,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ src/core/lib/iomgr/iomgr_windows.c \ + src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/polling_entity.c \ src/core/lib/iomgr/pollset_set_windows.c \ src/core/lib/iomgr/pollset_windows.c \ @@ -2921,6 +2968,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/security/transport/secure_endpoint.c \ src/core/lib/security/transport/security_connector.c \ src/core/lib/security/transport/server_auth_filter.c \ + src/core/lib/security/transport/tsi_error.c \ src/core/lib/security/util/b64.c \ src/core/lib/security/util/json_util.c \ src/core/lib/surface/init_secure.c \ @@ -3124,6 +3172,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ + src/core/lib/iomgr/error.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 \ @@ -3133,6 +3182,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ src/core/lib/iomgr/iomgr_windows.c \ + src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/polling_entity.c \ src/core/lib/iomgr/pollset_set_windows.c \ src/core/lib/iomgr/pollset_windows.c \ @@ -3326,49 +3376,6 @@ ifneq ($(NO_DEPS),true) endif -LIBGRPC_ZOOKEEPER_SRC = \ - src/core/ext/resolver/zookeeper/zookeeper_resolver.c \ - -PUBLIC_HEADERS_C += \ - include/grpc/grpc_zookeeper.h \ - -LIBGRPC_ZOOKEEPER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_ZOOKEEPER_SRC)))) - - -$(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a: $(ZLIB_DEP) $(LIBGRPC_ZOOKEEPER_OBJS) - $(E) "[AR] Creating $@" - $(Q) mkdir -p `dirname $@` - $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a - $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBGRPC_ZOOKEEPER_OBJS) -ifeq ($(SYSTEM),Darwin) - $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a -endif - - - -ifeq ($(SYSTEM),MINGW32) -$(LIBDIR)/$(CONFIG)/grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT): $(LIBGRPC_ZOOKEEPER_OBJS) $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/gpr.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/grpc.$(SHARED_EXT) - $(E) "[LD] Linking $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared grpc_zookeeper.def -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_zookeeper$(SHARED_VERSION).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_zookeeper$(SHARED_VERSION)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) $(LIBGRPC_ZOOKEEPER_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) -lgpr-imp -lgrpc-imp -else -$(LIBDIR)/$(CONFIG)/libgrpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT): $(LIBGRPC_ZOOKEEPER_OBJS) $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT) - $(E) "[LD] Linking $@" - $(Q) mkdir -p `dirname $@` -ifeq ($(SYSTEM),Darwin) - $(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) $(LIBGRPC_ZOOKEEPER_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) -lgpr -lgrpc -lzookeeper_mt -else - $(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_zookeeper.so.0 -o $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) $(LIBGRPC_ZOOKEEPER_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) -lgpr -lgrpc -lzookeeper_mt - $(Q) ln -sf $(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper$(SHARED_VERSION).so.0 - $(Q) ln -sf $(SHARED_PREFIX)grpc_zookeeper$(SHARED_VERSION).$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper$(SHARED_VERSION).so -endif -endif - -ifneq ($(NO_DEPS),true) --include $(LIBGRPC_ZOOKEEPER_OBJS:.o=.dep) -endif - - LIBRECONNECT_SERVER_SRC = \ test/core/util/reconnect_server.c \ @@ -6382,6 +6389,7 @@ LIBEND2END_TESTS_SRC = \ test/core/end2end/tests/simple_delayed_request.c \ test/core/end2end/tests/simple_metadata.c \ test/core/end2end/tests/simple_request.c \ + test/core/end2end/tests/streaming_error_response.c \ test/core/end2end/tests/trailing_metadata.c \ PUBLIC_HEADERS_C += \ @@ -6458,6 +6466,7 @@ LIBEND2END_NOSEC_TESTS_SRC = \ test/core/end2end/tests/simple_delayed_request.c \ test/core/end2end/tests/simple_metadata.c \ test/core/end2end/tests/simple_request.c \ + test/core/end2end/tests/streaming_error_response.c \ test/core/end2end/tests/trailing_metadata.c \ PUBLIC_HEADERS_C += \ @@ -7638,38 +7647,6 @@ endif endif -GPR_LOAD_FILE_TEST_SRC = \ - test/core/support/load_file_test.c \ - -GPR_LOAD_FILE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GPR_LOAD_FILE_TEST_SRC)))) -ifeq ($(NO_SECURE),true) - -# You can't build secure targets if you don't have OpenSSL. - -$(BINDIR)/$(CONFIG)/gpr_load_file_test: openssl_dep_error - -else - - - -$(BINDIR)/$(CONFIG)/gpr_load_file_test: $(GPR_LOAD_FILE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - $(E) "[LD] Linking $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(GPR_LOAD_FILE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/gpr_load_file_test - -endif - -$(OBJDIR)/$(CONFIG)/test/core/support/load_file_test.o: $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - -deps_gpr_load_file_test: $(GPR_LOAD_FILE_TEST_OBJS:.o=.dep) - -ifneq ($(NO_SECURE),true) -ifneq ($(NO_DEPS),true) --include $(GPR_LOAD_FILE_TEST_OBJS:.o=.dep) -endif -endif - - GPR_LOG_TEST_SRC = \ test/core/support/log_test.c \ @@ -8566,66 +8543,98 @@ endif endif -HTTP_FUZZER_TEST_SRC = \ - test/core/http/fuzzer.c \ +HTTP_PARSER_TEST_SRC = \ + test/core/http/parser_test.c \ -HTTP_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_FUZZER_TEST_SRC)))) +HTTP_PARSER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_PARSER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. -$(BINDIR)/$(CONFIG)/http_fuzzer_test: openssl_dep_error +$(BINDIR)/$(CONFIG)/http_parser_test: openssl_dep_error else -$(BINDIR)/$(CONFIG)/http_fuzzer_test: $(HTTP_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(BINDIR)/$(CONFIG)/http_parser_test: $(HTTP_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) $(HTTP_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/http_fuzzer_test + $(Q) $(LD) $(LDFLAGS) $(HTTP_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/http_parser_test endif -$(OBJDIR)/$(CONFIG)/test/core/http/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/http/parser_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a -deps_http_fuzzer_test: $(HTTP_FUZZER_TEST_OBJS:.o=.dep) +deps_http_parser_test: $(HTTP_PARSER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(HTTP_FUZZER_TEST_OBJS:.o=.dep) +-include $(HTTP_PARSER_TEST_OBJS:.o=.dep) endif endif -HTTP_PARSER_TEST_SRC = \ - test/core/http/parser_test.c \ +HTTP_REQUEST_FUZZER_TEST_SRC = \ + test/core/http/request_fuzzer.c \ -HTTP_PARSER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_PARSER_TEST_SRC)))) +HTTP_REQUEST_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_REQUEST_FUZZER_TEST_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. -$(BINDIR)/$(CONFIG)/http_parser_test: openssl_dep_error +$(BINDIR)/$(CONFIG)/http_request_fuzzer_test: openssl_dep_error else -$(BINDIR)/$(CONFIG)/http_parser_test: $(HTTP_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(BINDIR)/$(CONFIG)/http_request_fuzzer_test: $(HTTP_REQUEST_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(HTTP_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/http_parser_test + $(Q) $(LDXX) $(LDFLAGS) $(HTTP_REQUEST_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/http_request_fuzzer_test endif -$(OBJDIR)/$(CONFIG)/test/core/http/parser_test.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/http/request_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a -deps_http_parser_test: $(HTTP_PARSER_TEST_OBJS:.o=.dep) +deps_http_request_fuzzer_test: $(HTTP_REQUEST_FUZZER_TEST_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(HTTP_PARSER_TEST_OBJS:.o=.dep) +-include $(HTTP_REQUEST_FUZZER_TEST_OBJS:.o=.dep) +endif +endif + + +HTTP_RESPONSE_FUZZER_TEST_SRC = \ + test/core/http/response_fuzzer.c \ + +HTTP_RESPONSE_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_RESPONSE_FUZZER_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/http_response_fuzzer_test: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/http_response_fuzzer_test: $(HTTP_RESPONSE_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LDXX) $(LDFLAGS) $(HTTP_RESPONSE_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/http_response_fuzzer_test + +endif + +$(OBJDIR)/$(CONFIG)/test/core/http/response_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_http_response_fuzzer_test: $(HTTP_RESPONSE_FUZZER_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(HTTP_RESPONSE_FUZZER_TEST_OBJS:.o=.dep) endif endif @@ -9110,6 +9119,38 @@ endif endif +LOAD_FILE_TEST_SRC = \ + test/core/iomgr/load_file_test.c \ + +LOAD_FILE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LOAD_FILE_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/load_file_test: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/load_file_test: $(LOAD_FILE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(LOAD_FILE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/load_file_test + +endif + +$(OBJDIR)/$(CONFIG)/test/core/iomgr/load_file_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_load_file_test: $(LOAD_FILE_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(LOAD_FILE_TEST_OBJS:.o=.dep) +endif +endif + + LOW_LEVEL_PING_PONG_BENCHMARK_SRC = \ test/core/network_benchmarks/low_level_ping_pong.c \ @@ -9462,6 +9503,38 @@ endif endif +SEQUENTIAL_CONNECTIVITY_TEST_SRC = \ + test/core/surface/sequential_connectivity_test.c \ + +SEQUENTIAL_CONNECTIVITY_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SEQUENTIAL_CONNECTIVITY_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/sequential_connectivity_test: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/sequential_connectivity_test: $(SEQUENTIAL_CONNECTIVITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(SEQUENTIAL_CONNECTIVITY_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/sequential_connectivity_test + +endif + +$(OBJDIR)/$(CONFIG)/test/core/surface/sequential_connectivity_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_sequential_connectivity_test: $(SEQUENTIAL_CONNECTIVITY_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(SEQUENTIAL_CONNECTIVITY_TEST_OBJS:.o=.dep) +endif +endif + + SERVER_CHTTP2_TEST_SRC = \ test/core/surface/server_chttp2_test.c \ @@ -12273,53 +12346,6 @@ endif endif -ZOOKEEPER_TEST_SRC = \ - $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \ - test/cpp/end2end/zookeeper_test.cc \ - -ZOOKEEPER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ZOOKEEPER_TEST_SRC)))) -ifeq ($(NO_SECURE),true) - -# You can't build secure targets if you don't have OpenSSL. - -$(BINDIR)/$(CONFIG)/zookeeper_test: openssl_dep_error - -else - - - - -ifeq ($(NO_PROTOBUF),true) - -# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+. - -$(BINDIR)/$(CONFIG)/zookeeper_test: protobuf_dep_error - -else - -$(BINDIR)/$(CONFIG)/zookeeper_test: $(PROTOBUF_DEP) $(ZOOKEEPER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.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) $(ZOOKEEPER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a -lzookeeper_mt $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/zookeeper_test - -endif - -endif - -$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - -$(OBJDIR)/$(CONFIG)/test/cpp/end2end/zookeeper_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - -deps_zookeeper_test: $(ZOOKEEPER_TEST_OBJS:.o=.dep) - -ifneq ($(NO_SECURE),true) -ifneq ($(NO_DEPS),true) --include $(ZOOKEEPER_TEST_OBJS:.o=.dep) -endif -endif -$(OBJDIR)/$(CONFIG)/test/cpp/end2end/zookeeper_test.o: $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc - - PUBLIC_HEADERS_MUST_BE_C89_SRC = \ test/core/surface/public_headers_must_be_c89.c \ @@ -14599,37 +14625,72 @@ endif endif -HTTP_FUZZER_TEST_ONE_ENTRY_SRC = \ - test/core/http/fuzzer.c \ +HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_SRC = \ + test/core/http/request_fuzzer.c \ + test/core/util/one_corpus_entry_fuzzer.c \ + +HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry: $(HTTP_REQUEST_FUZZER_TEST_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) $(HTTP_REQUEST_FUZZER_TEST_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)/http_request_fuzzer_test_one_entry + +endif + +$(OBJDIR)/$(CONFIG)/test/core/http/request_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_http_request_fuzzer_test_one_entry: $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) +endif +endif + + +HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_SRC = \ + test/core/http/response_fuzzer.c \ test/core/util/one_corpus_entry_fuzzer.c \ -HTTP_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_FUZZER_TEST_ONE_ENTRY_SRC)))) +HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_SRC)))) ifeq ($(NO_SECURE),true) # You can't build secure targets if you don't have OpenSSL. -$(BINDIR)/$(CONFIG)/http_fuzzer_test_one_entry: openssl_dep_error +$(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry: openssl_dep_error else -$(BINDIR)/$(CONFIG)/http_fuzzer_test_one_entry: $(HTTP_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry: $(HTTP_RESPONSE_FUZZER_TEST_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) $(HTTP_FUZZER_TEST_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)/http_fuzzer_test_one_entry + $(Q) $(LD) $(LDFLAGS) $(HTTP_RESPONSE_FUZZER_TEST_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)/http_response_fuzzer_test_one_entry endif -$(OBJDIR)/$(CONFIG)/test/core/http/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/http/response_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_http_fuzzer_test_one_entry: $(HTTP_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) +deps_http_response_fuzzer_test_one_entry: $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) ifneq ($(NO_SECURE),true) ifneq ($(NO_DEPS),true) --include $(HTTP_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) +-include $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep) endif endif @@ -14843,6 +14904,7 @@ src/core/lib/security/transport/handshake.c: $(OPENSSL_DEP) src/core/lib/security/transport/secure_endpoint.c: $(OPENSSL_DEP) src/core/lib/security/transport/security_connector.c: $(OPENSSL_DEP) src/core/lib/security/transport/server_auth_filter.c: $(OPENSSL_DEP) +src/core/lib/security/transport/tsi_error.c: $(OPENSSL_DEP) src/core/lib/security/util/b64.c: $(OPENSSL_DEP) src/core/lib/security/util/json_util.c: $(OPENSSL_DEP) src/core/lib/surface/init_secure.c: $(OPENSSL_DEP) diff --git a/binding.gyp b/binding.gyp index fc61a9d01f..3150d1083b 100644 --- a/binding.gyp +++ b/binding.gyp @@ -510,7 +510,6 @@ 'src/core/lib/support/env_windows.c', 'src/core/lib/support/histogram.c', 'src/core/lib/support/host_port.c', - 'src/core/lib/support/load_file.c', 'src/core/lib/support/log.c', 'src/core/lib/support/log_android.c', 'src/core/lib/support/log_linux.c', @@ -581,6 +580,7 @@ 'src/core/lib/iomgr/endpoint.c', 'src/core/lib/iomgr/endpoint_pair_posix.c', 'src/core/lib/iomgr/endpoint_pair_windows.c', + 'src/core/lib/iomgr/error.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', @@ -590,6 +590,7 @@ 'src/core/lib/iomgr/iomgr.c', 'src/core/lib/iomgr/iomgr_posix.c', 'src/core/lib/iomgr/iomgr_windows.c', + 'src/core/lib/iomgr/load_file.c', 'src/core/lib/iomgr/polling_entity.c', 'src/core/lib/iomgr/pollset_set_windows.c', 'src/core/lib/iomgr/pollset_windows.c', @@ -692,6 +693,7 @@ 'src/core/lib/security/transport/secure_endpoint.c', 'src/core/lib/security/transport/security_connector.c', 'src/core/lib/security/transport/server_auth_filter.c', + 'src/core/lib/security/transport/tsi_error.c', 'src/core/lib/security/util/b64.c', 'src/core/lib/security/util/json_util.c', 'src/core/lib/surface/init_secure.c', diff --git a/build.yaml b/build.yaml index a83ebc595a..d41f419594 100644 --- a/build.yaml +++ b/build.yaml @@ -70,7 +70,6 @@ filegroups: - src/core/lib/support/backoff.h - src/core/lib/support/block_annotate.h - src/core/lib/support/env.h - - src/core/lib/support/load_file.h - src/core/lib/support/murmur_hash.h - src/core/lib/support/stack_lockfree.h - src/core/lib/support/string.h @@ -94,7 +93,6 @@ filegroups: - src/core/lib/support/env_windows.c - src/core/lib/support/histogram.c - src/core/lib/support/host_port.c - - src/core/lib/support/load_file.c - src/core/lib/support/log.c - src/core/lib/support/log_android.c - src/core/lib/support/log_linux.c @@ -174,6 +172,7 @@ filegroups: - src/core/lib/iomgr/closure.h - src/core/lib/iomgr/endpoint.h - src/core/lib/iomgr/endpoint_pair.h + - src/core/lib/iomgr/error.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 @@ -183,6 +182,7 @@ filegroups: - src/core/lib/iomgr/iomgr.h - src/core/lib/iomgr/iomgr_internal.h - src/core/lib/iomgr/iomgr_posix.h + - src/core/lib/iomgr/load_file.h - src/core/lib/iomgr/polling_entity.h - src/core/lib/iomgr/pollset.h - src/core/lib/iomgr/pollset_set.h @@ -250,6 +250,7 @@ filegroups: - src/core/lib/iomgr/endpoint.c - src/core/lib/iomgr/endpoint_pair_posix.c - src/core/lib/iomgr/endpoint_pair_windows.c + - src/core/lib/iomgr/error.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 @@ -259,6 +260,7 @@ filegroups: - src/core/lib/iomgr/iomgr.c - src/core/lib/iomgr/iomgr_posix.c - src/core/lib/iomgr/iomgr_windows.c + - src/core/lib/iomgr/load_file.c - src/core/lib/iomgr/polling_entity.c - src/core/lib/iomgr/pollset_set_windows.c - src/core/lib/iomgr/pollset_windows.c @@ -442,6 +444,7 @@ filegroups: - src/core/lib/security/transport/handshake.h - src/core/lib/security/transport/secure_endpoint.h - src/core/lib/security/transport/security_connector.h + - src/core/lib/security/transport/tsi_error.h - src/core/lib/security/util/b64.h - src/core/lib/security/util/json_util.h src: @@ -466,6 +469,7 @@ filegroups: - src/core/lib/security/transport/secure_endpoint.c - src/core/lib/security/transport/security_connector.c - src/core/lib/security/transport/server_auth_filter.c + - src/core/lib/security/transport/tsi_error.c - src/core/lib/security/util/b64.c - src/core/lib/security/util/json_util.c - src/core/lib/surface/init_secure.c @@ -897,21 +901,6 @@ libs: generate_plugin_registry: true secure: false vs_project_guid: '{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}' -- name: grpc_zookeeper - build: all - language: c - public_headers: - - include/grpc/grpc_zookeeper.h - src: - - src/core/ext/resolver/zookeeper/zookeeper_resolver.c - deps: - - gpr - - grpc - external_deps: - - zookeeper - platforms: - - linux - secure: false - name: reconnect_server build: private language: c @@ -1456,7 +1445,7 @@ targets: - gpr_test_util - gpr - name: fling_stream_test - cpu_cost: 2 + cpu_cost: 1.5 build: test language: c src: @@ -1471,7 +1460,7 @@ targets: - linux - posix - name: fling_test - cpu_cost: 2 + cpu_cost: 1.5 build: test language: c src: @@ -1570,14 +1559,6 @@ targets: deps: - gpr_test_util - gpr -- name: gpr_load_file_test - build: test - language: c - src: - - test/core/support/load_file_test.c - deps: - - gpr_test_util - - gpr - name: gpr_log_test build: test language: c @@ -1603,7 +1584,7 @@ targets: - gpr_test_util - gpr - name: gpr_stack_lockfree_test - cpu_cost: 10 + cpu_cost: 7 build: test language: c src: @@ -1620,7 +1601,7 @@ targets: - gpr_test_util - gpr - name: gpr_sync_test - cpu_cost: 10 + cpu_cost: 3 build: test language: c src: @@ -1629,7 +1610,7 @@ targets: - gpr_test_util - gpr - name: gpr_thd_test - cpu_cost: 10 + cpu_cost: 1 build: test language: c src: @@ -1849,11 +1830,21 @@ targets: - grpc - gpr_test_util - gpr -- name: http_fuzzer_test +- name: http_parser_test + build: test + language: c + src: + - test/core/http/parser_test.c + deps: + - grpc_test_util + - grpc + - gpr_test_util + - gpr +- name: http_request_fuzzer_test build: fuzzer language: c src: - - test/core/http/fuzzer.c + - test/core/http/request_fuzzer.c deps: - grpc_test_util - grpc @@ -1862,16 +1853,19 @@ targets: corpus_dirs: - test/core/http/corpus maxlen: 2048 -- name: http_parser_test - build: test +- name: http_response_fuzzer_test + build: fuzzer language: c src: - - test/core/http/parser_test.c + - test/core/http/response_fuzzer.c deps: - grpc_test_util - grpc - gpr_test_util - gpr + corpus_dirs: + - test/core/http/corpus + maxlen: 2048 - name: httpcli_format_request_test build: test language: c @@ -1954,6 +1948,7 @@ targets: - gpr_test_util - gpr - name: invalid_call_argument_test + cpu_cost: 0.1 build: test language: c src: @@ -2037,6 +2032,16 @@ targets: - grpc - gpr_test_util - gpr +- name: load_file_test + build: test + language: c + src: + - test/core/iomgr/load_file_test.c + deps: + - grpc_test_util + - grpc + - gpr_test_util + - gpr - name: low_level_ping_pong_benchmark build: benchmark language: c @@ -2157,6 +2162,16 @@ targets: - grpc - gpr_test_util - gpr +- name: sequential_connectivity_test + build: test + language: c + src: + - test/core/surface/sequential_connectivity_test.c + deps: + - grpc_test_util + - grpc + - gpr_test_util + - gpr - name: server_chttp2_test build: test language: c @@ -2253,7 +2268,7 @@ targets: - linux - posix - name: tcp_posix_test - cpu_cost: 0.5 + cpu_cost: 0.2 build: test language: c src: @@ -3104,26 +3119,6 @@ targets: - grpc - gpr_test_util - gpr -- name: zookeeper_test - gtest: true - build: test - run: false - language: c++ - src: - - src/proto/grpc/testing/echo.proto - - test/cpp/end2end/zookeeper_test.cc - deps: - - grpc++_test_util - - grpc_test_util - - grpc++ - - grpc_zookeeper - - grpc - - gpr_test_util - - gpr - external_deps: - - zookeeper - platforms: - - linux - name: public_headers_must_be_c89 build: test language: c89 @@ -51,7 +51,6 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/support/env_windows.c \ src/core/lib/support/histogram.c \ src/core/lib/support/host_port.c \ - src/core/lib/support/load_file.c \ src/core/lib/support/log.c \ src/core/lib/support/log_android.c \ src/core/lib/support/log_linux.c \ @@ -100,6 +99,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ + src/core/lib/iomgr/error.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 \ @@ -109,6 +109,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ src/core/lib/iomgr/iomgr_windows.c \ + src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/polling_entity.c \ src/core/lib/iomgr/pollset_set_windows.c \ src/core/lib/iomgr/pollset_windows.c \ @@ -211,6 +212,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/security/transport/secure_endpoint.c \ src/core/lib/security/transport/security_connector.c \ src/core/lib/security/transport/server_auth_filter.c \ + src/core/lib/security/transport/tsi_error.c \ src/core/lib/security/util/b64.c \ src/core/lib/security/util/json_util.c \ src/core/lib/surface/init_secure.c \ diff --git a/doc/cpp-style-guide.md b/doc/cpp-style-guide.md index 9408c4abd6..0138ceb737 100644 --- a/doc/cpp-style-guide.md +++ b/doc/cpp-style-guide.md @@ -53,6 +53,12 @@ default capture). Other C++ functional features such as (../include/grpc++/impl/codegen/config.h). Instead, pointers should be checked for validity using their implicit conversion to `bool`. In other words, use `if (p)` rather than `if (p != nullptr)` +- Do not initialize global/static pointer variables to `nullptr`. Just let + the compiler implicitly initialize them to `nullptr` (which it will + definitely do). The reason is that `nullptr` is an actual object in + our implementation rather than just a constant pointer value, so + static/global constructors will be called in a potentially + undesirable sequence. - Do not use `final` or `override` as these are not supported by some compilers. Instead use `GRPC_FINAL` and `GRPC_OVERRIDE` . These compile down to the traditional C++ forms for compilers that support diff --git a/examples/python/route_guide/route_guide_server.py b/examples/python/route_guide/route_guide_server.py index 24f948c42c..2d8b33ac17 100644 --- a/examples/python/route_guide/route_guide_server.py +++ b/examples/python/route_guide/route_guide_server.py @@ -51,7 +51,7 @@ def get_distance(start, end): coord_factor = 10000000.0 lat_1 = start.latitude / coord_factor lat_2 = end.latitude / coord_factor - lon_1 = start.latitude / coord_factor + lon_1 = start.longitude / coord_factor lon_2 = end.longitude / coord_factor lat_rad_1 = math.radians(lat_1) lat_rad_2 = math.radians(lat_2) diff --git a/gRPC.podspec b/gRPC.podspec index d3665d5174..ff8373637a 100644 --- a/gRPC.podspec +++ b/gRPC.podspec @@ -68,7 +68,6 @@ Pod::Spec.new do |s| 'src/core/lib/support/backoff.h', 'src/core/lib/support/block_annotate.h', 'src/core/lib/support/env.h', - 'src/core/lib/support/load_file.h', 'src/core/lib/support/murmur_hash.h', 'src/core/lib/support/stack_lockfree.h', 'src/core/lib/support/string.h', @@ -133,7 +132,6 @@ Pod::Spec.new do |s| 'src/core/lib/support/env_windows.c', 'src/core/lib/support/histogram.c', 'src/core/lib/support/host_port.c', - 'src/core/lib/support/load_file.c', 'src/core/lib/support/log.c', 'src/core/lib/support/log_android.c', 'src/core/lib/support/log_linux.c', @@ -181,6 +179,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/closure.h', 'src/core/lib/iomgr/endpoint.h', 'src/core/lib/iomgr/endpoint_pair.h', + 'src/core/lib/iomgr/error.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', @@ -190,6 +189,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/iomgr.h', 'src/core/lib/iomgr/iomgr_internal.h', 'src/core/lib/iomgr/iomgr_posix.h', + 'src/core/lib/iomgr/load_file.h', 'src/core/lib/iomgr/polling_entity.h', 'src/core/lib/iomgr/pollset.h', 'src/core/lib/iomgr/pollset_set.h', @@ -277,6 +277,7 @@ Pod::Spec.new do |s| 'src/core/lib/security/transport/handshake.h', 'src/core/lib/security/transport/secure_endpoint.h', 'src/core/lib/security/transport/security_connector.h', + 'src/core/lib/security/transport/tsi_error.h', 'src/core/lib/security/util/b64.h', 'src/core/lib/security/util/json_util.h', 'src/core/lib/tsi/fake_transport_security.h', @@ -363,6 +364,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/endpoint.c', 'src/core/lib/iomgr/endpoint_pair_posix.c', 'src/core/lib/iomgr/endpoint_pair_windows.c', + 'src/core/lib/iomgr/error.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', @@ -372,6 +374,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/iomgr.c', 'src/core/lib/iomgr/iomgr_posix.c', 'src/core/lib/iomgr/iomgr_windows.c', + 'src/core/lib/iomgr/load_file.c', 'src/core/lib/iomgr/polling_entity.c', 'src/core/lib/iomgr/pollset_set_windows.c', 'src/core/lib/iomgr/pollset_windows.c', @@ -474,6 +477,7 @@ Pod::Spec.new do |s| 'src/core/lib/security/transport/secure_endpoint.c', 'src/core/lib/security/transport/security_connector.c', 'src/core/lib/security/transport/server_auth_filter.c', + 'src/core/lib/security/transport/tsi_error.c', 'src/core/lib/security/util/b64.c', 'src/core/lib/security/util/json_util.c', 'src/core/lib/surface/init_secure.c', @@ -531,7 +535,6 @@ Pod::Spec.new do |s| 'src/core/lib/support/backoff.h', 'src/core/lib/support/block_annotate.h', 'src/core/lib/support/env.h', - 'src/core/lib/support/load_file.h', 'src/core/lib/support/murmur_hash.h', 'src/core/lib/support/stack_lockfree.h', 'src/core/lib/support/string.h', @@ -556,6 +559,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/closure.h', 'src/core/lib/iomgr/endpoint.h', 'src/core/lib/iomgr/endpoint_pair.h', + 'src/core/lib/iomgr/error.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', @@ -565,6 +569,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/iomgr.h', 'src/core/lib/iomgr/iomgr_internal.h', 'src/core/lib/iomgr/iomgr_posix.h', + 'src/core/lib/iomgr/load_file.h', 'src/core/lib/iomgr/polling_entity.h', 'src/core/lib/iomgr/pollset.h', 'src/core/lib/iomgr/pollset_set.h', @@ -652,6 +657,7 @@ Pod::Spec.new do |s| 'src/core/lib/security/transport/handshake.h', 'src/core/lib/security/transport/secure_endpoint.h', 'src/core/lib/security/transport/security_connector.h', + 'src/core/lib/security/transport/tsi_error.h', 'src/core/lib/security/util/b64.h', 'src/core/lib/security/util/json_util.h', 'src/core/lib/tsi/fake_transport_security.h', @@ -222,6 +222,8 @@ EXPORTS gpr_avl_add gpr_avl_remove gpr_avl_get + gpr_avl_maybe_get + gpr_avl_is_empty gpr_cmdline_create gpr_cmdline_add_int gpr_cmdline_add_flag diff --git a/grpc.gemspec b/grpc.gemspec index 9f3ae048a7..184a548591 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -89,7 +89,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/support/backoff.h ) s.files += %w( src/core/lib/support/block_annotate.h ) s.files += %w( src/core/lib/support/env.h ) - s.files += %w( src/core/lib/support/load_file.h ) s.files += %w( src/core/lib/support/murmur_hash.h ) s.files += %w( src/core/lib/support/stack_lockfree.h ) s.files += %w( src/core/lib/support/string.h ) @@ -112,7 +111,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/support/env_windows.c ) s.files += %w( src/core/lib/support/histogram.c ) s.files += %w( src/core/lib/support/host_port.c ) - s.files += %w( src/core/lib/support/load_file.c ) s.files += %w( src/core/lib/support/log.c ) s.files += %w( src/core/lib/support/log_android.c ) s.files += %w( src/core/lib/support/log_linux.c ) @@ -190,6 +188,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/closure.h ) s.files += %w( src/core/lib/iomgr/endpoint.h ) 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_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 ) @@ -199,6 +198,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/iomgr.h ) s.files += %w( src/core/lib/iomgr/iomgr_internal.h ) s.files += %w( src/core/lib/iomgr/iomgr_posix.h ) + s.files += %w( src/core/lib/iomgr/load_file.h ) s.files += %w( src/core/lib/iomgr/polling_entity.h ) s.files += %w( src/core/lib/iomgr/pollset.h ) s.files += %w( src/core/lib/iomgr/pollset_set.h ) @@ -286,6 +286,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/security/transport/handshake.h ) s.files += %w( src/core/lib/security/transport/secure_endpoint.h ) s.files += %w( src/core/lib/security/transport/security_connector.h ) + s.files += %w( src/core/lib/security/transport/tsi_error.h ) s.files += %w( src/core/lib/security/util/b64.h ) s.files += %w( src/core/lib/security/util/json_util.h ) s.files += %w( src/core/lib/tsi/fake_transport_security.h ) @@ -342,6 +343,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/endpoint.c ) s.files += %w( src/core/lib/iomgr/endpoint_pair_posix.c ) 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_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 ) @@ -351,6 +353,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/iomgr.c ) s.files += %w( src/core/lib/iomgr/iomgr_posix.c ) s.files += %w( src/core/lib/iomgr/iomgr_windows.c ) + s.files += %w( src/core/lib/iomgr/load_file.c ) s.files += %w( src/core/lib/iomgr/polling_entity.c ) s.files += %w( src/core/lib/iomgr/pollset_set_windows.c ) s.files += %w( src/core/lib/iomgr/pollset_windows.c ) @@ -453,6 +456,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/security/transport/secure_endpoint.c ) s.files += %w( src/core/lib/security/transport/security_connector.c ) s.files += %w( src/core/lib/security/transport/server_auth_filter.c ) + s.files += %w( src/core/lib/security/transport/tsi_error.c ) s.files += %w( src/core/lib/security/util/b64.c ) s.files += %w( src/core/lib/security/util/json_util.c ) s.files += %w( src/core/lib/surface/init_secure.c ) diff --git a/include/grpc++/ext/proto_server_reflection_plugin.h b/include/grpc++/ext/proto_server_reflection_plugin.h index 517c4737f5..3e54882d41 100644 --- a/include/grpc++/ext/proto_server_reflection_plugin.h +++ b/include/grpc++/ext/proto_server_reflection_plugin.h @@ -56,7 +56,7 @@ class ProtoServerReflectionPlugin : public ::grpc::ServerBuilderPlugin { bool has_sync_methods() const GRPC_OVERRIDE; private: - std::shared_ptr<::grpc::ProtoServerReflection> reflection_service_; + std::shared_ptr<grpc::ProtoServerReflection> reflection_service_; }; // Add proto reflection plugin to ServerBuilder. This function should be called diff --git a/include/grpc++/impl/codegen/call.h b/include/grpc++/impl/codegen/call.h index d720f27a8f..fab85d1517 100644 --- a/include/grpc++/impl/codegen/call.h +++ b/include/grpc++/impl/codegen/call.h @@ -337,7 +337,7 @@ class DeserializeFuncType GRPC_FINAL : public DeserializeFunc { return SerializationTraits<R>::Deserialize(buf, message_, max_message_size); } - ~DeserializeFuncType() override {} + ~DeserializeFuncType() GRPC_OVERRIDE {} private: R* message_; // Not a managed pointer because management is external to this diff --git a/include/grpc++/impl/codegen/config.h b/include/grpc++/impl/codegen/config.h index d782d5f571..0c75438868 100644 --- a/include/grpc++/impl/codegen/config.h +++ b/include/grpc++/impl/codegen/config.h @@ -54,6 +54,7 @@ // nullptr was added in gcc 4.6 #if (__GNUC__ * 100 + __GNUC_MINOR__ < 406) #define GRPC_CXX0X_NO_NULLPTR 1 +#define GRPC_CXX0X_LIMITED_TOSTRING 1 #endif // final and override were added in gcc 4.7 #if (__GNUC__ * 100 + __GNUC_MINOR__ < 407) @@ -78,6 +79,7 @@ #endif #ifdef GRPC_CXX0X_NO_NULLPTR +#include <functional> #include <memory> namespace grpc { const class { @@ -95,6 +97,10 @@ const class { return std::shared_ptr<T>(static_cast<T *>(0)); } operator bool() const { return false; } + template <class F> + operator std::function<F>() const { + return std::function<F>(); + } private: void operator&() const = delete; @@ -111,6 +117,17 @@ namespace grpc { typedef GRPC_CUSTOM_STRING string; +#ifdef GRPC_CXX0X_LIMITED_TOSTRING +inline grpc::string to_string(const int x) { + return std::to_string(static_cast<const long long int>(x)); +} +inline grpc::string to_string(const unsigned int x) { + return std::to_string(static_cast<const long long unsigned int>(x)); +} +#else +using std::to_string; +#endif + } // namespace grpc #endif // GRPCXX_IMPL_CODEGEN_CONFIG_H diff --git a/include/grpc++/impl/codegen/core_codegen.h b/include/grpc++/impl/codegen/core_codegen.h index 656b11e7e7..b0c4c57e66 100644 --- a/include/grpc++/impl/codegen/core_codegen.h +++ b/include/grpc++/impl/codegen/core_codegen.h @@ -42,42 +42,44 @@ namespace grpc { /// Implementation of the core codegen interface. class CoreCodegen : public CoreCodegenInterface { private: - grpc_completion_queue* grpc_completion_queue_create(void* reserved) override; - void grpc_completion_queue_destroy(grpc_completion_queue* cq) override; + grpc_completion_queue* grpc_completion_queue_create(void* reserved) + GRPC_OVERRIDE; + void grpc_completion_queue_destroy(grpc_completion_queue* cq) GRPC_OVERRIDE; grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq, void* tag, gpr_timespec deadline, - void* reserved) override; + void* reserved) GRPC_OVERRIDE; - void* gpr_malloc(size_t size) override; - void gpr_free(void* p) override; + void* gpr_malloc(size_t size) GRPC_OVERRIDE; + void gpr_free(void* p) GRPC_OVERRIDE; - void grpc_byte_buffer_destroy(grpc_byte_buffer* bb) override; + void grpc_byte_buffer_destroy(grpc_byte_buffer* bb) GRPC_OVERRIDE; void grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader, - grpc_byte_buffer* buffer) override; - void grpc_byte_buffer_reader_destroy( - grpc_byte_buffer_reader* reader) override; + grpc_byte_buffer* buffer) GRPC_OVERRIDE; + void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader* reader) + GRPC_OVERRIDE; int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader* reader, - gpr_slice* slice) override; + gpr_slice* slice) GRPC_OVERRIDE; grpc_byte_buffer* grpc_raw_byte_buffer_create(gpr_slice* slice, - size_t nslices) override; + size_t nslices) GRPC_OVERRIDE; - gpr_slice gpr_slice_malloc(size_t length) override; - void gpr_slice_unref(gpr_slice slice) override; - gpr_slice gpr_slice_split_tail(gpr_slice* s, size_t split) override; - void gpr_slice_buffer_add(gpr_slice_buffer* sb, gpr_slice slice) override; - void gpr_slice_buffer_pop(gpr_slice_buffer* sb) override; + gpr_slice gpr_slice_malloc(size_t length) GRPC_OVERRIDE; + void gpr_slice_unref(gpr_slice slice) GRPC_OVERRIDE; + gpr_slice gpr_slice_split_tail(gpr_slice* s, size_t split) GRPC_OVERRIDE; + void gpr_slice_buffer_add(gpr_slice_buffer* sb, + gpr_slice slice) GRPC_OVERRIDE; + void gpr_slice_buffer_pop(gpr_slice_buffer* sb) GRPC_OVERRIDE; - void grpc_metadata_array_init(grpc_metadata_array* array) override; - void grpc_metadata_array_destroy(grpc_metadata_array* array) override; + void grpc_metadata_array_init(grpc_metadata_array* array) GRPC_OVERRIDE; + void grpc_metadata_array_destroy(grpc_metadata_array* array) GRPC_OVERRIDE; - gpr_timespec gpr_inf_future(gpr_clock_type type) override; + gpr_timespec gpr_inf_future(gpr_clock_type type) GRPC_OVERRIDE; - virtual const Status& ok() override; - virtual const Status& cancelled() override; + virtual const Status& ok() GRPC_OVERRIDE; + virtual const Status& cancelled() GRPC_OVERRIDE; - void assert_fail(const char* failed_assertion) override; + void assert_fail(const char* failed_assertion) GRPC_OVERRIDE; }; } // namespace grpc diff --git a/include/grpc++/impl/server_builder_option.h b/include/grpc++/impl/server_builder_option.h index 2b7e89f5e5..bd2018fa6b 100644 --- a/include/grpc++/impl/server_builder_option.h +++ b/include/grpc++/impl/server_builder_option.h @@ -50,8 +50,7 @@ class ServerBuilderOption { virtual void UpdateArguments(ChannelArguments* args) = 0; /// Alter the ServerBuilderPlugin map that will be added into ServerBuilder. virtual void UpdatePlugins( - std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin> >* - plugins) = 0; + std::vector<std::unique_ptr<ServerBuilderPlugin>>* plugins) = 0; }; } // namespace grpc diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h index aa7588d34d..b9c49f0b19 100644 --- a/include/grpc++/server_builder.h +++ b/include/grpc++/server_builder.h @@ -174,7 +174,7 @@ class ServerBuilder { std::vector<Port> ports_; std::vector<ServerCompletionQueue*> cqs_; std::shared_ptr<ServerCredentials> creds_; - std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin>> plugins_; + std::vector<std::unique_ptr<ServerBuilderPlugin>> plugins_; AsyncGenericService* generic_service_; struct { bool is_set; diff --git a/include/grpc/support/avl.h b/include/grpc/support/avl.h index d71592dcbc..f5bf32c719 100644 --- a/include/grpc/support/avl.h +++ b/include/grpc/support/avl.h @@ -88,5 +88,10 @@ GPRAPI gpr_avl gpr_avl_remove(gpr_avl avl, void *key); does not mutate avl. returns NULL if key is not found. */ GPRAPI void *gpr_avl_get(gpr_avl avl, void *key); +/** Return 1 if avl contains key, 0 otherwise; if it has the key, sets *value to + its value*/ +GPRAPI int gpr_avl_maybe_get(gpr_avl avl, void *key, void **value); +/** Return 1 if avl is empty, 0 otherwise */ +GPRAPI int gpr_avl_is_empty(gpr_avl avl); #endif /* GRPC_SUPPORT_AVL_H */ diff --git a/package.xml b/package.xml index b25e42c1c0..67e9bb2c28 100644 --- a/package.xml +++ b/package.xml @@ -96,7 +96,6 @@ <file baseinstalldir="/" name="src/core/lib/support/backoff.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/block_annotate.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/env.h" role="src" /> - <file baseinstalldir="/" name="src/core/lib/support/load_file.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/murmur_hash.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/stack_lockfree.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/string.h" role="src" /> @@ -119,7 +118,6 @@ <file baseinstalldir="/" name="src/core/lib/support/env_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/histogram.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/host_port.c" role="src" /> - <file baseinstalldir="/" name="src/core/lib/support/load_file.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/log.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/log_android.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/log_linux.c" role="src" /> @@ -197,6 +195,7 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/closure.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint.h" role="src" /> <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_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" /> @@ -206,6 +205,7 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_internal.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/lib/iomgr/load_file.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/polling_entity.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set.h" role="src" /> @@ -293,6 +293,7 @@ <file baseinstalldir="/" name="src/core/lib/security/transport/handshake.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/transport/secure_endpoint.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/transport/security_connector.h" role="src" /> + <file baseinstalldir="/" name="src/core/lib/security/transport/tsi_error.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/util/b64.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/util/json_util.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/tsi/fake_transport_security.h" role="src" /> @@ -349,6 +350,7 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/endpoint_pair_posix.c" role="src" /> <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_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" /> @@ -358,6 +360,7 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/lib/iomgr/load_file.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/polling_entity.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_windows.c" role="src" /> @@ -460,6 +463,7 @@ <file baseinstalldir="/" name="src/core/lib/security/transport/secure_endpoint.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/transport/security_connector.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/transport/server_auth_filter.c" role="src" /> + <file baseinstalldir="/" name="src/core/lib/security/transport/tsi_error.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/util/b64.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/util/json_util.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/init_secure.c" role="src" /> @@ -246,7 +246,6 @@ setuptools.setup( ext_modules=CYTHON_EXTENSION_MODULES, packages=list(PACKAGES), package_dir=PACKAGE_DIRECTORIES, - namespace_packages=['grpc'], package_data=PACKAGE_DATA, install_requires=INSTALL_REQUIRES, setup_requires=SETUP_REQUIRES, diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc index e2f127094a..2288ba4163 100644 --- a/src/compiler/cpp_generator.cc +++ b/src/compiler/cpp_generator.cc @@ -73,9 +73,10 @@ void PrintIncludes(Printer *printer, const std::vector<grpc::string>& headers, c vars["l"] = params.use_system_headers ? '<' : '"'; vars["r"] = params.use_system_headers ? '>' : '"'; - if (!params.grpc_search_path.empty()) { - vars["l"] += params.grpc_search_path; - if (params.grpc_search_path.back() != '/') { + auto& s = params.grpc_search_path; + if (!s.empty()) { + vars["l"] += s; + if (s[s.size()-1] != '/') { vars["l"] += '/'; } } diff --git a/src/compiler/generator_helpers.h b/src/compiler/generator_helpers.h index 53391bc41a..9a88c2bfcc 100644 --- a/src/compiler/generator_helpers.h +++ b/src/compiler/generator_helpers.h @@ -253,7 +253,8 @@ inline void GetComment(const grpc::protobuf::FileDescriptor *desc, inline grpc::string GenerateCommentsWithPrefix( const std::vector<grpc::string> &in, const grpc::string &prefix) { std::ostringstream oss; - for (const grpc::string &elem : in) { + for (auto it = in.begin(); it != in.end(); it++) { + const grpc::string& elem = *it; if (elem.empty()) { oss << prefix << "\n"; } else if (elem[0] == ' ') { diff --git a/src/compiler/node_generator.cc b/src/compiler/node_generator.cc index 986b97c26e..1fe090d17a 100644 --- a/src/compiler/node_generator.cc +++ b/src/compiler/node_generator.cc @@ -74,8 +74,16 @@ grpc::string GetJSMessageFilename(const grpc::string& filename) { // Given a filename like foo/bar/baz.proto, returns the root directory // path ../../ -grpc::string GetRootPath(const grpc::string& filename) { - size_t slashes = std::count(filename.begin(), filename.end(), '/'); +grpc::string GetRootPath(const grpc::string& from_filename, + const grpc::string& to_filename) { + if (to_filename.find("google/protobuf") == 0) { + // Well-known types (.proto files in the google/protobuf directory) are + // assumed to come from the 'google-protobuf' npm package. We may want to + // generalize this exception later by letting others put generated code in + // their own npm packages. + return "google-protobuf/"; + } + size_t slashes = std::count(from_filename.begin(), from_filename.end(), '/'); if (slashes == 0) { return "./"; } @@ -90,7 +98,7 @@ grpc::string GetRootPath(const grpc::string& filename) { // from_file, assuming that both paths are relative to the same directory grpc::string GetRelativePath(const grpc::string& from_file, const grpc::string& to_file) { - return GetRootPath(from_file) + to_file; + return GetRootPath(from_file, to_file) + to_file; } /* Finds all message types used in all services in the file, and returns them diff --git a/src/core/ext/census/grpc_filter.c b/src/core/ext/census/grpc_filter.c index 86ec2ae87a..72e4e5427e 100644 --- a/src/core/ext/census/grpc_filter.c +++ b/src/core/ext/census/grpc_filter.c @@ -91,14 +91,14 @@ static void client_start_transport_op(grpc_exec_ctx *exec_ctx, } static void server_on_done_recv(grpc_exec_ctx *exec_ctx, void *ptr, - bool success) { + grpc_error *error) { grpc_call_element *elem = ptr; call_data *calld = elem->call_data; channel_data *chand = elem->channel_data; - if (success) { + if (error == GRPC_ERROR_NONE) { extract_and_annotate_method_tag(calld->recv_initial_metadata, calld, chand); } - calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, success); + calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, error); } static void server_mutate_op(grpc_call_element *elem, diff --git a/src/core/ext/client_config/channel_connectivity.c b/src/core/ext/client_config/channel_connectivity.c index cc60f2485a..20c01a9a7c 100644 --- a/src/core/ext/client_config/channel_connectivity.c +++ b/src/core/ext/client_config/channel_connectivity.c @@ -75,7 +75,6 @@ typedef enum { typedef struct { gpr_mu mu; callback_phase phase; - int success; grpc_closure on_complete; grpc_timer alarm; grpc_connectivity_state state; @@ -122,7 +121,7 @@ static void finished_completion(grpc_exec_ctx *exec_ctx, void *pw, } static void partly_done(grpc_exec_ctx *exec_ctx, state_watcher *w, - int due_to_completion) { + bool due_to_completion, grpc_error *error) { int delete = 0; if (due_to_completion) { @@ -130,14 +129,26 @@ static void partly_done(grpc_exec_ctx *exec_ctx, state_watcher *w, } gpr_mu_lock(&w->mu); + if (due_to_completion) { - w->success = 1; + if (grpc_trace_operation_failures) { + GRPC_LOG_IF_ERROR("watch_completion_error", GRPC_ERROR_REF(error)); + } + GRPC_ERROR_UNREF(error); + error = GRPC_ERROR_NONE; + } else { + if (error == GRPC_ERROR_NONE) { + error = + GRPC_ERROR_CREATE("Timed out waiting for connection state change"); + } else if (error == GRPC_ERROR_CANCELLED) { + error = GRPC_ERROR_NONE; + } } switch (w->phase) { case WAITING: w->phase = CALLING_BACK; - grpc_cq_end_op(exec_ctx, w->cq, w->tag, w->success, finished_completion, - w, &w->completion_storage); + grpc_cq_end_op(exec_ctx, w->cq, w->tag, GRPC_ERROR_REF(error), + finished_completion, w, &w->completion_storage); break; case CALLING_BACK: w->phase = CALLING_BACK_AND_FINISHED; @@ -153,14 +164,18 @@ static void partly_done(grpc_exec_ctx *exec_ctx, state_watcher *w, if (delete) { delete_state_watcher(exec_ctx, w); } + + GRPC_ERROR_UNREF(error); } -static void watch_complete(grpc_exec_ctx *exec_ctx, void *pw, bool success) { - partly_done(exec_ctx, pw, 1); +static void watch_complete(grpc_exec_ctx *exec_ctx, void *pw, + grpc_error *error) { + partly_done(exec_ctx, pw, true, GRPC_ERROR_REF(error)); } -static void timeout_complete(grpc_exec_ctx *exec_ctx, void *pw, bool success) { - partly_done(exec_ctx, pw, 0); +static void timeout_complete(grpc_exec_ctx *exec_ctx, void *pw, + grpc_error *error) { + partly_done(exec_ctx, pw, false, GRPC_ERROR_REF(error)); } void grpc_channel_watch_connectivity_state( @@ -185,7 +200,6 @@ void grpc_channel_watch_connectivity_state( grpc_closure_init(&w->on_complete, watch_complete, w); w->phase = WAITING; w->state = last_observed_state; - w->success = 0; w->cq = cq; w->tag = tag; w->channel = channel; diff --git a/src/core/ext/client_config/client_channel.c b/src/core/ext/client_config/client_channel.c index e297dfa0ef..1d5a7d5224 100644 --- a/src/core/ext/client_config/client_channel.c +++ b/src/core/ext/client_config/client_channel.c @@ -117,6 +117,7 @@ static void watch_lb_policy(grpc_exec_ctx *exec_ctx, channel_data *chand, static void set_channel_connectivity_state_locked(grpc_exec_ctx *exec_ctx, channel_data *chand, grpc_connectivity_state state, + grpc_error *error, const char *reason) { if ((state == GRPC_CHANNEL_TRANSIENT_FAILURE || state == GRPC_CHANNEL_SHUTDOWN) && @@ -127,11 +128,13 @@ static void set_channel_connectivity_state_locked(grpc_exec_ctx *exec_ctx, /* mask= */ GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY, /* check= */ 0); } - grpc_connectivity_state_set(exec_ctx, &chand->state_tracker, state, reason); + grpc_connectivity_state_set(exec_ctx, &chand->state_tracker, state, error, + reason); } -static void on_lb_policy_state_changed_locked( - grpc_exec_ctx *exec_ctx, lb_policy_connectivity_watcher *w) { +static void on_lb_policy_state_changed_locked(grpc_exec_ctx *exec_ctx, + lb_policy_connectivity_watcher *w, + grpc_error *error) { grpc_connectivity_state publish_state = w->state; /* check if the notification is for a stale policy */ if (w->lb_policy != w->chand->lb_policy) return; @@ -143,18 +146,18 @@ static void on_lb_policy_state_changed_locked( w->chand->lb_policy = NULL; } set_channel_connectivity_state_locked(exec_ctx, w->chand, publish_state, - "lb_changed"); + GRPC_ERROR_REF(error), "lb_changed"); if (w->state != GRPC_CHANNEL_SHUTDOWN) { watch_lb_policy(exec_ctx, w->chand, w->lb_policy, w->state); } } static void on_lb_policy_state_changed(grpc_exec_ctx *exec_ctx, void *arg, - bool iomgr_success) { + grpc_error *error) { lb_policy_connectivity_watcher *w = arg; gpr_mu_lock(&w->chand->mu_config); - on_lb_policy_state_changed_locked(exec_ctx, w); + on_lb_policy_state_changed_locked(exec_ctx, w, error); gpr_mu_unlock(&w->chand->mu_config); GRPC_CHANNEL_STACK_UNREF(exec_ctx, w->chand->owning_stack, "watch_lb_policy"); @@ -176,19 +179,22 @@ static void watch_lb_policy(grpc_exec_ctx *exec_ctx, channel_data *chand, } static void cc_on_config_changed(grpc_exec_ctx *exec_ctx, void *arg, - bool iomgr_success) { + grpc_error *error) { channel_data *chand = arg; grpc_lb_policy *lb_policy = NULL; grpc_lb_policy *old_lb_policy; grpc_connectivity_state state = GRPC_CHANNEL_TRANSIENT_FAILURE; int exit_idle = 0; + grpc_error *state_error = GRPC_ERROR_CREATE("No load balancing policy"); if (chand->incoming_configuration != NULL) { lb_policy = grpc_client_config_get_lb_policy(chand->incoming_configuration); if (lb_policy != NULL) { GRPC_LB_POLICY_REF(lb_policy, "channel"); GRPC_LB_POLICY_REF(lb_policy, "config_change"); - state = grpc_lb_policy_check_connectivity(exec_ctx, lb_policy); + GRPC_ERROR_UNREF(state_error); + state = + grpc_lb_policy_check_connectivity(exec_ctx, lb_policy, &state_error); } grpc_client_config_unref(exec_ctx, chand->incoming_configuration); @@ -208,7 +214,9 @@ static void cc_on_config_changed(grpc_exec_ctx *exec_ctx, void *arg, grpc_exec_ctx_enqueue_list(exec_ctx, &chand->waiting_for_config_closures, NULL); } else if (chand->resolver == NULL /* disconnected */) { - grpc_closure_list_fail_all(&chand->waiting_for_config_closures); + grpc_closure_list_fail_all( + &chand->waiting_for_config_closures, + GRPC_ERROR_CREATE_REFERENCING("Channel disconnected", &error, 1)); grpc_exec_ctx_enqueue_list(exec_ctx, &chand->waiting_for_config_closures, NULL); } @@ -218,9 +226,9 @@ static void cc_on_config_changed(grpc_exec_ctx *exec_ctx, void *arg, chand->exit_idle_when_lb_policy_arrives = 0; } - if (iomgr_success && chand->resolver) { - set_channel_connectivity_state_locked(exec_ctx, chand, state, - "new_lb+resolver"); + if (error == GRPC_ERROR_NONE && chand->resolver) { + set_channel_connectivity_state_locked( + exec_ctx, chand, state, GRPC_ERROR_REF(state_error), "new_lb+resolver"); if (lb_policy != NULL) { watch_lb_policy(exec_ctx, chand, lb_policy, state); } @@ -235,8 +243,12 @@ static void cc_on_config_changed(grpc_exec_ctx *exec_ctx, void *arg, GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel"); chand->resolver = NULL; } + grpc_error *refs[] = {error, state_error}; set_channel_connectivity_state_locked( - exec_ctx, chand, GRPC_CHANNEL_SHUTDOWN, "resolver_gone"); + exec_ctx, chand, GRPC_CHANNEL_SHUTDOWN, + GRPC_ERROR_CREATE_REFERENCING("Got config after disconnection", refs, + GPR_ARRAY_SIZE(refs)), + "resolver_gone"); gpr_mu_unlock(&chand->mu_config); } @@ -256,6 +268,7 @@ static void cc_on_config_changed(grpc_exec_ctx *exec_ctx, void *arg, } GRPC_CHANNEL_STACK_UNREF(exec_ctx, chand->owning_stack, "resolver"); + GRPC_ERROR_UNREF(state_error); } static void cc_start_transport_op(grpc_exec_ctx *exec_ctx, @@ -263,7 +276,7 @@ static void cc_start_transport_op(grpc_exec_ctx *exec_ctx, grpc_transport_op *op) { channel_data *chand = elem->channel_data; - grpc_exec_ctx_enqueue(exec_ctx, op->on_consumed, true, NULL); + grpc_exec_ctx_sched(exec_ctx, op->on_consumed, GRPC_ERROR_NONE, NULL); GPR_ASSERT(op->set_accept_stream == false); if (op->bind_pollset != NULL) { @@ -282,7 +295,9 @@ static void cc_start_transport_op(grpc_exec_ctx *exec_ctx, if (op->send_ping != NULL) { if (chand->lb_policy == NULL) { - grpc_exec_ctx_enqueue(exec_ctx, op->send_ping, false, NULL); + grpc_exec_ctx_sched(exec_ctx, op->send_ping, + GRPC_ERROR_CREATE("Ping with no load balancing"), + NULL); } else { grpc_lb_policy_ping_one(exec_ctx, chand->lb_policy, op->send_ping); op->bind_pollset = NULL; @@ -290,24 +305,29 @@ static void cc_start_transport_op(grpc_exec_ctx *exec_ctx, op->send_ping = NULL; } - if (op->disconnect && chand->resolver != NULL) { - set_channel_connectivity_state_locked(exec_ctx, chand, - GRPC_CHANNEL_SHUTDOWN, "disconnect"); - grpc_resolver_shutdown(exec_ctx, chand->resolver); - GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel"); - chand->resolver = NULL; - if (!chand->started_resolving) { - grpc_closure_list_fail_all(&chand->waiting_for_config_closures); - grpc_exec_ctx_enqueue_list(exec_ctx, &chand->waiting_for_config_closures, - NULL); - } - if (chand->lb_policy != NULL) { - grpc_pollset_set_del_pollset_set(exec_ctx, - chand->lb_policy->interested_parties, - chand->interested_parties); - GRPC_LB_POLICY_UNREF(exec_ctx, chand->lb_policy, "channel"); - chand->lb_policy = NULL; + if (op->disconnect_with_error != GRPC_ERROR_NONE) { + if (chand->resolver != NULL) { + set_channel_connectivity_state_locked( + exec_ctx, chand, GRPC_CHANNEL_SHUTDOWN, + GRPC_ERROR_REF(op->disconnect_with_error), "disconnect"); + grpc_resolver_shutdown(exec_ctx, chand->resolver); + GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel"); + chand->resolver = NULL; + if (!chand->started_resolving) { + grpc_closure_list_fail_all(&chand->waiting_for_config_closures, + GRPC_ERROR_REF(op->disconnect_with_error)); + grpc_exec_ctx_enqueue_list(exec_ctx, + &chand->waiting_for_config_closures, NULL); + } + if (chand->lb_policy != NULL) { + grpc_pollset_set_del_pollset_set(exec_ctx, + chand->lb_policy->interested_parties, + chand->interested_parties); + GRPC_LB_POLICY_UNREF(exec_ctx, chand->lb_policy, "channel"); + chand->lb_policy = NULL; + } } + GRPC_ERROR_UNREF(op->disconnect_with_error); } gpr_mu_unlock(&chand->mu_config); } @@ -327,16 +347,17 @@ static int cc_pick_subchannel(grpc_exec_ctx *exec_ctx, void *arg, grpc_connected_subchannel **connected_subchannel, grpc_closure *on_ready); -static void continue_picking(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void continue_picking(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { continue_picking_args *cpa = arg; if (cpa->connected_subchannel == NULL) { /* cancelled, do nothing */ - } else if (!success) { - grpc_exec_ctx_enqueue(exec_ctx, cpa->on_ready, false, NULL); + } else if (error != GRPC_ERROR_NONE) { + grpc_exec_ctx_sched(exec_ctx, cpa->on_ready, GRPC_ERROR_REF(error), NULL); } else if (cc_pick_subchannel(exec_ctx, cpa->elem, cpa->initial_metadata, cpa->initial_metadata_flags, cpa->connected_subchannel, cpa->on_ready)) { - grpc_exec_ctx_enqueue(exec_ctx, cpa->on_ready, true, NULL); + grpc_exec_ctx_sched(exec_ctx, cpa->on_ready, GRPC_ERROR_NONE, NULL); } gpr_free(cpa); } @@ -361,11 +382,12 @@ static int cc_pick_subchannel(grpc_exec_ctx *exec_ctx, void *elemp, connected_subchannel); } for (closure = chand->waiting_for_config_closures.head; closure != NULL; - closure = grpc_closure_next(closure)) { + closure = closure->next_data.next) { cpa = closure->cb_arg; if (cpa->connected_subchannel == connected_subchannel) { cpa->connected_subchannel = NULL; - grpc_exec_ctx_enqueue(exec_ctx, cpa->on_ready, false, NULL); + grpc_exec_ctx_sched(exec_ctx, cpa->on_ready, + GRPC_ERROR_CREATE("Pick cancelled"), NULL); } } gpr_mu_unlock(&chand->mu_config); @@ -397,10 +419,11 @@ static int cc_pick_subchannel(grpc_exec_ctx *exec_ctx, void *elemp, cpa->on_ready = on_ready; cpa->elem = elem; grpc_closure_init(&cpa->closure, continue_picking, cpa); - grpc_closure_list_add(&chand->waiting_for_config_closures, &cpa->closure, - 1); + grpc_closure_list_append(&chand->waiting_for_config_closures, &cpa->closure, + GRPC_ERROR_NONE); } else { - grpc_exec_ctx_enqueue(exec_ctx, on_ready, false, NULL); + grpc_exec_ctx_sched(exec_ctx, on_ready, GRPC_ERROR_CREATE("Disconnected"), + NULL); } gpr_mu_unlock(&chand->mu_config); return 0; @@ -507,7 +530,7 @@ grpc_connectivity_state grpc_client_channel_check_connectivity_state( channel_data *chand = elem->channel_data; grpc_connectivity_state out; gpr_mu_lock(&chand->mu_config); - out = grpc_connectivity_state_check(&chand->state_tracker); + out = grpc_connectivity_state_check(&chand->state_tracker, NULL); if (out == GRPC_CHANNEL_IDLE && try_to_connect) { if (chand->lb_policy != NULL) { grpc_lb_policy_exit_idle(exec_ctx, chand->lb_policy); @@ -534,7 +557,7 @@ typedef struct { } external_connectivity_watcher; static void on_external_watch_complete(grpc_exec_ctx *exec_ctx, void *arg, - bool iomgr_success) { + grpc_error *error) { external_connectivity_watcher *w = arg; grpc_closure *follow_up = w->on_complete; grpc_pollset_set_del_pollset(exec_ctx, w->chand->interested_parties, @@ -542,7 +565,7 @@ static void on_external_watch_complete(grpc_exec_ctx *exec_ctx, void *arg, GRPC_CHANNEL_STACK_UNREF(exec_ctx, w->chand->owning_stack, "external_connectivity_watcher"); gpr_free(w); - follow_up->cb(exec_ctx, follow_up->cb_arg, iomgr_success); + follow_up->cb(exec_ctx, follow_up->cb_arg, error); } void grpc_client_channel_watch_connectivity_state( diff --git a/src/core/ext/client_config/connector.h b/src/core/ext/client_config/connector.h index dd85dfcb7d..ea9d23706e 100644 --- a/src/core/ext/client_config/connector.h +++ b/src/core/ext/client_config/connector.h @@ -64,7 +64,7 @@ typedef struct { grpc_transport *transport; /** channel arguments (to be passed to the filters) */ - const grpc_channel_args *channel_args; + grpc_channel_args *channel_args; } grpc_connect_out_args; struct grpc_connector_vtable { diff --git a/src/core/ext/client_config/lb_policy.c b/src/core/ext/client_config/lb_policy.c index 20535398d6..8b980b2cca 100644 --- a/src/core/ext/client_config/lb_policy.c +++ b/src/core/ext/client_config/lb_policy.c @@ -60,8 +60,9 @@ static gpr_atm ref_mutate(grpc_lb_policy *c, gpr_atm delta, : gpr_atm_no_barrier_fetch_add(&c->ref_pair, delta); #ifdef GRPC_LB_POLICY_REFCOUNT_DEBUG gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, - "LB_POLICY: %p % 12s 0x%08x -> 0x%08x [%s]", c, purpose, old_val, - old_val + delta, reason); + "LB_POLICY: 0x%" PRIxPTR " %12s 0x%" PRIxPTR " -> 0x%" PRIxPTR + " [%s]", + (intptr_t)c, purpose, old_val, old_val + delta, reason); #endif return old_val; } @@ -138,6 +139,8 @@ void grpc_lb_policy_notify_on_state_change(grpc_exec_ctx *exec_ctx, } grpc_connectivity_state grpc_lb_policy_check_connectivity( - grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy) { - return policy->vtable->check_connectivity(exec_ctx, policy); + grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy, + grpc_error **connectivity_error) { + return policy->vtable->check_connectivity(exec_ctx, policy, + connectivity_error); } diff --git a/src/core/ext/client_config/lb_policy.h b/src/core/ext/client_config/lb_policy.h index 56fa11198b..3cfd041d3a 100644 --- a/src/core/ext/client_config/lb_policy.h +++ b/src/core/ext/client_config/lb_policy.h @@ -77,8 +77,9 @@ struct grpc_lb_policy_vtable { void (*exit_idle)(grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy); /** check the current connectivity of the lb_policy */ - grpc_connectivity_state (*check_connectivity)(grpc_exec_ctx *exec_ctx, - grpc_lb_policy *policy); + grpc_connectivity_state (*check_connectivity)( + grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy, + grpc_error **connectivity_error); /** call notify when the connectivity state of a channel changes from *state. Updates *state with the new state of the policy */ @@ -154,6 +155,7 @@ void grpc_lb_policy_notify_on_state_change(grpc_exec_ctx *exec_ctx, grpc_closure *closure); grpc_connectivity_state grpc_lb_policy_check_connectivity( - grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy); + grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy, + grpc_error **connectivity_error); #endif /* GRPC_CORE_EXT_CLIENT_CONFIG_LB_POLICY_H */ diff --git a/src/core/ext/client_config/subchannel.c b/src/core/ext/client_config/subchannel.c index 85183b0564..468067ea57 100644 --- a/src/core/ext/client_config/subchannel.c +++ b/src/core/ext/client_config/subchannel.c @@ -54,7 +54,7 @@ #define STRONG_REF_MASK (~(gpr_atm)((1 << INTERNAL_REF_BITS) - 1)) #define GRPC_SUBCHANNEL_MIN_CONNECT_TIMEOUT_SECONDS 20 -#define GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS 2 +#define GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS 1 #define GRPC_SUBCHANNEL_RECONNECT_BACKOFF_MULTIPLIER 1.6 #define GRPC_SUBCHANNEL_RECONNECT_MAX_BACKOFF_SECONDS 120 #define GRPC_SUBCHANNEL_RECONNECT_JITTER 0.2 @@ -147,7 +147,7 @@ struct grpc_subchannel_call { (((grpc_subchannel_call *)(callstack)) - 1) static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *subchannel, - bool iomgr_success); + grpc_error *error); #ifdef GRPC_STREAM_REFCOUNT_DEBUG #define REF_REASON reason @@ -177,7 +177,7 @@ static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *subchannel, */ static void connection_destroy(grpc_exec_ctx *exec_ctx, void *arg, - bool success) { + grpc_error *error) { grpc_connected_subchannel *c = arg; grpc_channel_stack_destroy(exec_ctx, CHANNEL_STACK_FROM_CONNECTION(c)); gpr_free(c); @@ -200,7 +200,7 @@ void grpc_connected_subchannel_unref(grpc_exec_ctx *exec_ctx, */ static void subchannel_destroy(grpc_exec_ctx *exec_ctx, void *arg, - bool success) { + grpc_error *error) { grpc_subchannel *c = arg; gpr_free((void *)c->filters); grpc_channel_args_destroy(c->args); @@ -290,8 +290,8 @@ void grpc_subchannel_weak_unref(grpc_exec_ctx *exec_ctx, gpr_atm old_refs; old_refs = ref_mutate(c, -(gpr_atm)1, 1 REF_MUTATE_PURPOSE("WEAK_UNREF")); if (old_refs == 1) { - grpc_exec_ctx_enqueue(exec_ctx, grpc_closure_create(subchannel_destroy, c), - true, NULL); + grpc_exec_ctx_sched(exec_ctx, grpc_closure_create(subchannel_destroy, c), + GRPC_ERROR_NONE, NULL); } } @@ -382,7 +382,8 @@ static void continue_connect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) { args.initial_connect_string = c->initial_connect_string; grpc_connectivity_state_set(exec_ctx, &c->state_tracker, - GRPC_CHANNEL_CONNECTING, "state_change"); + GRPC_CHANNEL_CONNECTING, GRPC_ERROR_NONE, + "state_change"); grpc_connector_connect(exec_ctx, c->connector, &args, &c->connecting_result, &c->connected); } @@ -393,16 +394,17 @@ static void start_connect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) { continue_connect(exec_ctx, c); } -grpc_connectivity_state grpc_subchannel_check_connectivity(grpc_subchannel *c) { +grpc_connectivity_state grpc_subchannel_check_connectivity(grpc_subchannel *c, + grpc_error **error) { grpc_connectivity_state state; gpr_mu_lock(&c->mu); - state = grpc_connectivity_state_check(&c->state_tracker); + state = grpc_connectivity_state_check(&c->state_tracker, error); gpr_mu_unlock(&c->mu); return state; } static void on_external_state_watcher_done(grpc_exec_ctx *exec_ctx, void *arg, - bool success) { + grpc_error *error) { external_state_watcher *w = arg; grpc_closure *follow_up = w->notify; if (w->pollset_set != NULL) { @@ -415,7 +417,7 @@ static void on_external_state_watcher_done(grpc_exec_ctx *exec_ctx, void *arg, gpr_mu_unlock(&w->subchannel->mu); GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, w->subchannel, "external_state_watcher"); gpr_free(w); - follow_up->cb(exec_ctx, follow_up->cb_arg, success); + follow_up->cb(exec_ctx, follow_up->cb_arg, error); } void grpc_subchannel_notify_on_state_change( @@ -469,7 +471,7 @@ void grpc_connected_subchannel_process_transport_op( } static void subchannel_on_child_state_changed(grpc_exec_ctx *exec_ctx, void *p, - bool iomgr_success) { + grpc_error *error) { state_watcher *sw = p; grpc_subchannel *c = sw->subchannel; gpr_mu *mu = &c->mu; @@ -477,20 +479,19 @@ static void subchannel_on_child_state_changed(grpc_exec_ctx *exec_ctx, void *p, gpr_mu_lock(mu); /* if we failed just leave this closure */ - if (iomgr_success) { - if (sw->connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) { - /* any errors on a subchannel ==> we're done, create a new one */ - sw->connectivity_state = GRPC_CHANNEL_SHUTDOWN; - } - grpc_connectivity_state_set(exec_ctx, &c->state_tracker, - sw->connectivity_state, "reflect_child"); - if (sw->connectivity_state != GRPC_CHANNEL_SHUTDOWN) { - grpc_connected_subchannel_notify_on_state_change( - exec_ctx, GET_CONNECTED_SUBCHANNEL(c, no_barrier), NULL, - &sw->connectivity_state, &sw->closure); - GRPC_SUBCHANNEL_WEAK_REF(c, "state_watcher"); - sw = NULL; - } + if (sw->connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) { + /* any errors on a subchannel ==> we're done, create a new one */ + sw->connectivity_state = GRPC_CHANNEL_SHUTDOWN; + } + grpc_connectivity_state_set(exec_ctx, &c->state_tracker, + sw->connectivity_state, GRPC_ERROR_REF(error), + "reflect_child"); + if (sw->connectivity_state != GRPC_CHANNEL_SHUTDOWN) { + grpc_connected_subchannel_notify_on_state_change( + exec_ctx, GET_CONNECTED_SUBCHANNEL(c, no_barrier), NULL, + &sw->connectivity_state, &sw->closure); + GRPC_SUBCHANNEL_WEAK_REF(c, "state_watcher"); + sw = NULL; } gpr_mu_unlock(mu); @@ -592,17 +593,20 @@ static void publish_transport_locked(grpc_exec_ctx *exec_ctx, /* signal completion */ grpc_connectivity_state_set(exec_ctx, &c->state_tracker, GRPC_CHANNEL_READY, - "connected"); + GRPC_ERROR_NONE, "connected"); } -static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, bool iomgr_success) { +static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { grpc_subchannel *c = arg; gpr_mu_lock(&c->mu); c->have_alarm = 0; if (c->disconnected) { - iomgr_success = 0; + error = GRPC_ERROR_CREATE_REFERENCING("Disconnected", &error, 1); + } else { + GRPC_ERROR_REF(error); } - if (iomgr_success) { + if (error == GRPC_ERROR_NONE) { + gpr_log(GPR_INFO, "Failed to connect to channel, retrying"); c->next_attempt = gpr_backoff_step(&c->backoff_state, gpr_now(GPR_CLOCK_MONOTONIC)); continue_connect(exec_ctx, c); @@ -611,11 +615,13 @@ static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, bool iomgr_success) { gpr_mu_unlock(&c->mu); GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting"); } + GRPC_ERROR_UNREF(error); } static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg, - bool iomgr_success) { + grpc_error *error) { grpc_subchannel *c = arg; + grpc_channel_args *delete_channel_args = c->connecting_result.channel_args; GRPC_SUBCHANNEL_WEAK_REF(c, "connected"); gpr_mu_lock(&c->mu); @@ -627,13 +633,26 @@ static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg, gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC); GPR_ASSERT(!c->have_alarm); c->have_alarm = 1; - grpc_connectivity_state_set(exec_ctx, &c->state_tracker, - GRPC_CHANNEL_TRANSIENT_FAILURE, - "connect_failed"); + grpc_connectivity_state_set( + exec_ctx, &c->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE, + GRPC_ERROR_CREATE_REFERENCING("Connect Failed", &error, 1), + "connect_failed"); + gpr_timespec time_til_next = gpr_time_sub(c->next_attempt, now); + const char *errmsg = grpc_error_string(error); + gpr_log(GPR_INFO, "Connect failed: %s", errmsg); + if (gpr_time_cmp(time_til_next, gpr_time_0(time_til_next.clock_type)) <= + 0) { + gpr_log(GPR_INFO, "Retry immediately"); + } else { + gpr_log(GPR_INFO, "Retry in %" PRId64 ".%09d seconds", + time_til_next.tv_sec, time_til_next.tv_nsec); + } grpc_timer_init(exec_ctx, &c->alarm, c->next_attempt, on_alarm, c, now); + grpc_error_free_string(errmsg); } gpr_mu_unlock(&c->mu); GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting"); + grpc_channel_args_destroy(delete_channel_args); } /* @@ -641,7 +660,7 @@ static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg, */ static void subchannel_call_destroy(grpc_exec_ctx *exec_ctx, void *call, - bool success) { + grpc_error *error) { grpc_subchannel_call *c = call; GPR_TIMER_BEGIN("grpc_subchannel_call_unref.destroy", 0); grpc_connected_subchannel *connection = c->connection; diff --git a/src/core/ext/client_config/subchannel.h b/src/core/ext/client_config/subchannel.h index 525f854a44..b6d39f5dc5 100644 --- a/src/core/ext/client_config/subchannel.h +++ b/src/core/ext/client_config/subchannel.h @@ -119,7 +119,7 @@ void grpc_connected_subchannel_process_transport_op( /** poll the current connectivity state of a channel */ grpc_connectivity_state grpc_subchannel_check_connectivity( - grpc_subchannel *channel); + grpc_subchannel *channel, grpc_error **error); /** call notify when the connectivity state of a channel changes from *state. Updates *state with the new state of the channel */ diff --git a/src/core/ext/client_config/subchannel_call_holder.c b/src/core/ext/client_config/subchannel_call_holder.c index 3df1f254d6..e31800edd9 100644 --- a/src/core/ext/client_config/subchannel_call_holder.c +++ b/src/core/ext/client_config/subchannel_call_holder.c @@ -43,14 +43,14 @@ #define CANCELLED_CALL ((grpc_subchannel_call *)1) static void subchannel_ready(grpc_exec_ctx *exec_ctx, void *holder, - bool success); + grpc_error *error); static void retry_ops(grpc_exec_ctx *exec_ctx, void *retry_ops_args, - bool success); + grpc_error *error); static void add_waiting_locked(grpc_subchannel_call_holder *holder, grpc_transport_stream_op *op); static void fail_locked(grpc_exec_ctx *exec_ctx, - grpc_subchannel_call_holder *holder); + grpc_subchannel_call_holder *holder, grpc_error *error); static void retry_waiting_locked(grpc_exec_ctx *exec_ctx, grpc_subchannel_call_holder *holder); @@ -91,7 +91,8 @@ void grpc_subchannel_call_holder_perform_op(grpc_exec_ctx *exec_ctx, grpc_subchannel_call *call = GET_CALL(holder); GPR_TIMER_BEGIN("grpc_subchannel_call_holder_perform_op", 0); if (call == CANCELLED_CALL) { - grpc_transport_stream_op_finish_with_failure(exec_ctx, op); + grpc_transport_stream_op_finish_with_failure(exec_ctx, op, + GRPC_ERROR_CANCELLED); GPR_TIMER_END("grpc_subchannel_call_holder_perform_op", 0); return; } @@ -107,7 +108,8 @@ retry: call = GET_CALL(holder); if (call == CANCELLED_CALL) { gpr_mu_unlock(&holder->mu); - grpc_transport_stream_op_finish_with_failure(exec_ctx, op); + grpc_transport_stream_op_finish_with_failure(exec_ctx, op, + GRPC_ERROR_CANCELLED); GPR_TIMER_END("grpc_subchannel_call_holder_perform_op", 0); return; } @@ -124,7 +126,10 @@ retry: } else { switch (holder->creation_phase) { case GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING: - fail_locked(exec_ctx, holder); + fail_locked(exec_ctx, holder, + grpc_error_set_int(GRPC_ERROR_CREATE("Cancelled"), + GRPC_ERROR_INT_GRPC_STATUS, + op->cancel_with_status)); break; case GRPC_SUBCHANNEL_CALL_HOLDER_PICKING_SUBCHANNEL: holder->pick_subchannel(exec_ctx, holder->pick_subchannel_arg, NULL, @@ -132,7 +137,8 @@ retry: break; } gpr_mu_unlock(&holder->mu); - grpc_transport_stream_op_finish_with_failure(exec_ctx, op); + grpc_transport_stream_op_finish_with_failure(exec_ctx, op, + GRPC_ERROR_CANCELLED); GPR_TIMER_END("grpc_subchannel_call_holder_perform_op", 0); return; } @@ -168,7 +174,8 @@ retry: GPR_TIMER_END("grpc_subchannel_call_holder_perform_op", 0); } -static void subchannel_ready(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void subchannel_ready(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { grpc_subchannel_call_holder *holder = arg; gpr_mu_lock(&holder->mu); GPR_ASSERT(holder->creation_phase == @@ -176,10 +183,14 @@ static void subchannel_ready(grpc_exec_ctx *exec_ctx, void *arg, bool success) { holder->creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING; if (holder->connected_subchannel == NULL) { gpr_atm_no_barrier_store(&holder->subchannel_call, 1); - fail_locked(exec_ctx, holder); + fail_locked(exec_ctx, holder, + GRPC_ERROR_CREATE_REFERENCING("Failed to create subchannel", + &error, 1)); } else if (1 == gpr_atm_acq_load(&holder->subchannel_call)) { /* already cancelled before subchannel became ready */ - fail_locked(exec_ctx, holder); + fail_locked(exec_ctx, holder, + GRPC_ERROR_CREATE_REFERENCING( + "Cancelled before creating subchannel", &error, 1)); } else { gpr_atm_rel_store( &holder->subchannel_call, @@ -205,18 +216,18 @@ static void retry_waiting_locked(grpc_exec_ctx *exec_ctx, a->call = GET_CALL(holder); if (a->call == CANCELLED_CALL) { gpr_free(a); - fail_locked(exec_ctx, holder); + fail_locked(exec_ctx, holder, GRPC_ERROR_CANCELLED); return; } holder->waiting_ops = NULL; holder->waiting_ops_count = 0; holder->waiting_ops_capacity = 0; GRPC_SUBCHANNEL_CALL_REF(a->call, "retry_ops"); - grpc_exec_ctx_enqueue(exec_ctx, grpc_closure_create(retry_ops, a), true, - NULL); + grpc_exec_ctx_sched(exec_ctx, grpc_closure_create(retry_ops, a), + GRPC_ERROR_NONE, NULL); } -static void retry_ops(grpc_exec_ctx *exec_ctx, void *args, bool success) { +static void retry_ops(grpc_exec_ctx *exec_ctx, void *args, grpc_error *error) { retry_ops_args *a = args; size_t i; for (i = 0; i < a->nops; i++) { @@ -241,13 +252,15 @@ static void add_waiting_locked(grpc_subchannel_call_holder *holder, } static void fail_locked(grpc_exec_ctx *exec_ctx, - grpc_subchannel_call_holder *holder) { + grpc_subchannel_call_holder *holder, + grpc_error *error) { size_t i; for (i = 0; i < holder->waiting_ops_count; i++) { - grpc_transport_stream_op_finish_with_failure(exec_ctx, - &holder->waiting_ops[i]); + grpc_transport_stream_op_finish_with_failure( + exec_ctx, &holder->waiting_ops[i], GRPC_ERROR_REF(error)); } holder->waiting_ops_count = 0; + GRPC_ERROR_UNREF(error); } char *grpc_subchannel_call_holder_get_peer( 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 cc559eb2da..9decf70692 100644 --- a/src/core/ext/lb_policy/pick_first/pick_first.c +++ b/src/core/ext/lb_policy/pick_first/pick_first.c @@ -103,8 +103,9 @@ static void pf_shutdown(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) { p->shutdown = 1; pp = p->pending_picks; p->pending_picks = NULL; - grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_SHUTDOWN, "shutdown"); + grpc_connectivity_state_set( + exec_ctx, &p->state_tracker, GRPC_CHANNEL_SHUTDOWN, + GRPC_ERROR_CREATE("Channel shutdown"), "shutdown"); /* cancel subscription */ if (selected != NULL) { grpc_connected_subchannel_notify_on_state_change( @@ -120,7 +121,7 @@ static void pf_shutdown(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) { *pp->target = NULL; grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent, p->base.interested_parties); - grpc_exec_ctx_enqueue(exec_ctx, pp->on_complete, true, NULL); + grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, NULL); gpr_free(pp); pp = next; } @@ -139,7 +140,8 @@ static void pf_cancel_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent, p->base.interested_parties); *target = NULL; - grpc_exec_ctx_enqueue(exec_ctx, pp->on_complete, false, NULL); + grpc_exec_ctx_sched(exec_ctx, pp->on_complete, + GRPC_ERROR_CREATE("Pick Cancelled"), NULL); gpr_free(pp); } else { pp->next = p->pending_picks; @@ -164,7 +166,8 @@ static void pf_cancel_picks(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, initial_metadata_flags_eq) { grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent, p->base.interested_parties); - grpc_exec_ctx_enqueue(exec_ctx, pp->on_complete, false, NULL); + grpc_exec_ctx_sched(exec_ctx, pp->on_complete, + GRPC_ERROR_CREATE("Pick Cancelled"), NULL); gpr_free(pp); } else { pp->next = p->pending_picks; @@ -237,7 +240,7 @@ static int pf_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, } static void destroy_subchannels(grpc_exec_ctx *exec_ctx, void *arg, - bool iomgr_success) { + grpc_error *error) { pick_first_lb_policy *p = arg; size_t i; size_t num_subchannels = p->num_subchannels; @@ -258,12 +261,14 @@ static void destroy_subchannels(grpc_exec_ctx *exec_ctx, void *arg, } static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, - bool iomgr_success) { + grpc_error *error) { pick_first_lb_policy *p = arg; grpc_subchannel *selected_subchannel; pending_pick *pp; grpc_connected_subchannel *selected; + GRPC_ERROR_REF(error); + gpr_mu_lock(&p->mu); selected = GET_SELECTED(p); @@ -271,6 +276,7 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, if (p->shutdown) { gpr_mu_unlock(&p->mu); GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, "pick_first_connectivity"); + GRPC_ERROR_UNREF(error); return; } else if (selected != NULL) { if (p->checking_connectivity == GRPC_CHANNEL_TRANSIENT_FAILURE) { @@ -278,7 +284,8 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, p->checking_connectivity = GRPC_CHANNEL_SHUTDOWN; } grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - p->checking_connectivity, "selected_changed"); + p->checking_connectivity, GRPC_ERROR_REF(error), + "selected_changed"); if (p->checking_connectivity != GRPC_CHANNEL_SHUTDOWN) { grpc_connected_subchannel_notify_on_state_change( exec_ctx, selected, p->base.interested_parties, @@ -291,7 +298,8 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, switch (p->checking_connectivity) { case GRPC_CHANNEL_READY: grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_READY, "connecting_ready"); + GRPC_CHANNEL_READY, GRPC_ERROR_NONE, + "connecting_ready"); selected_subchannel = p->subchannels[p->checking_subchannel]; selected = grpc_subchannel_get_connected_subchannel(selected_subchannel); @@ -300,15 +308,16 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, /* drop the pick list: we are connected now */ GRPC_LB_POLICY_WEAK_REF(&p->base, "destroy_subchannels"); gpr_atm_rel_store(&p->selected, (gpr_atm)selected); - grpc_exec_ctx_enqueue( - exec_ctx, grpc_closure_create(destroy_subchannels, p), true, NULL); + grpc_exec_ctx_sched(exec_ctx, + grpc_closure_create(destroy_subchannels, p), + GRPC_ERROR_NONE, NULL); /* update any calls that were waiting for a pick */ while ((pp = p->pending_picks)) { p->pending_picks = pp->next; *pp->target = selected; grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent, p->base.interested_parties); - grpc_exec_ctx_enqueue(exec_ctx, pp->on_complete, true, NULL); + grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, NULL); gpr_free(pp); } grpc_connected_subchannel_notify_on_state_change( @@ -320,12 +329,13 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, (p->checking_subchannel + 1) % p->num_subchannels; if (p->checking_subchannel == 0) { /* only trigger transient failure when we've tried all alternatives */ - grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_TRANSIENT_FAILURE, - "connecting_transient_failure"); + grpc_connectivity_state_set( + exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE, + GRPC_ERROR_REF(error), "connecting_transient_failure"); } + GRPC_ERROR_UNREF(error); p->checking_connectivity = grpc_subchannel_check_connectivity( - p->subchannels[p->checking_subchannel]); + p->subchannels[p->checking_subchannel], &error); if (p->checking_connectivity == GRPC_CHANNEL_TRANSIENT_FAILURE) { grpc_subchannel_notify_on_state_change( exec_ctx, p->subchannels[p->checking_subchannel], @@ -337,9 +347,9 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, break; case GRPC_CHANNEL_CONNECTING: case GRPC_CHANNEL_IDLE: - grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_CONNECTING, - "connecting_changed"); + grpc_connectivity_state_set( + exec_ctx, &p->state_tracker, GRPC_CHANNEL_CONNECTING, + GRPC_ERROR_REF(error), "connecting_changed"); grpc_subchannel_notify_on_state_change( exec_ctx, p->subchannels[p->checking_subchannel], p->base.interested_parties, &p->checking_connectivity, @@ -352,38 +362,45 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, GRPC_SUBCHANNEL_UNREF(exec_ctx, p->subchannels[p->num_subchannels], "pick_first"); if (p->num_subchannels == 0) { - grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_SHUTDOWN, - "no_more_channels"); + grpc_connectivity_state_set( + exec_ctx, &p->state_tracker, GRPC_CHANNEL_SHUTDOWN, + GRPC_ERROR_CREATE_REFERENCING("Pick first exhausted channels", + &error, 1), + "no_more_channels"); while ((pp = p->pending_picks)) { p->pending_picks = pp->next; *pp->target = NULL; - grpc_exec_ctx_enqueue(exec_ctx, pp->on_complete, true, NULL); + grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, + NULL); gpr_free(pp); } GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, "pick_first_connectivity"); } else { - grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_TRANSIENT_FAILURE, - "subchannel_failed"); + grpc_connectivity_state_set( + exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE, + GRPC_ERROR_REF(error), "subchannel_failed"); p->checking_subchannel %= p->num_subchannels; + GRPC_ERROR_UNREF(error); p->checking_connectivity = grpc_subchannel_check_connectivity( - p->subchannels[p->checking_subchannel]); + p->subchannels[p->checking_subchannel], &error); goto loop; } } } gpr_mu_unlock(&p->mu); + + GRPC_ERROR_UNREF(error); } static grpc_connectivity_state pf_check_connectivity(grpc_exec_ctx *exec_ctx, - grpc_lb_policy *pol) { + grpc_lb_policy *pol, + grpc_error **error) { pick_first_lb_policy *p = (pick_first_lb_policy *)pol; grpc_connectivity_state st; gpr_mu_lock(&p->mu); - st = grpc_connectivity_state_check(&p->state_tracker); + st = grpc_connectivity_state_check(&p->state_tracker, error); gpr_mu_unlock(&p->mu); return st; } @@ -406,7 +423,8 @@ static void pf_ping_one(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, if (selected) { grpc_connected_subchannel_ping(exec_ctx, selected, closure); } else { - grpc_exec_ctx_enqueue(exec_ctx, closure, false, NULL); + grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_CREATE("Not connected"), + NULL); } } 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 40dd7c5940..7bcf608ab9 100644 --- a/src/core/ext/lb_policy/round_robin/round_robin.c +++ b/src/core/ext/lb_policy/round_robin/round_robin.c @@ -265,11 +265,13 @@ static void rr_shutdown(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) { while ((pp = p->pending_picks)) { p->pending_picks = pp->next; *pp->target = NULL; - grpc_exec_ctx_enqueue(exec_ctx, pp->on_complete, false, NULL); + grpc_exec_ctx_sched(exec_ctx, pp->on_complete, + GRPC_ERROR_CREATE("Channel Shutdown"), NULL); gpr_free(pp); } - grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_SHUTDOWN, "shutdown"); + grpc_connectivity_state_set( + exec_ctx, &p->state_tracker, GRPC_CHANNEL_SHUTDOWN, + GRPC_ERROR_CREATE("Channel Shutdown"), "shutdown"); for (i = 0; i < p->num_subchannels; i++) { subchannel_data *sd = p->subchannels[i]; grpc_subchannel_notify_on_state_change(exec_ctx, sd->subchannel, NULL, NULL, @@ -291,7 +293,8 @@ static void rr_cancel_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent, p->base.interested_parties); *target = NULL; - grpc_exec_ctx_enqueue(exec_ctx, pp->on_complete, false, NULL); + grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_CANCELLED, + NULL); gpr_free(pp); } else { pp->next = p->pending_picks; @@ -317,7 +320,8 @@ static void rr_cancel_picks(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent, p->base.interested_parties); *pp->target = NULL; - grpc_exec_ctx_enqueue(exec_ctx, pp->on_complete, false, NULL); + grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_CANCELLED, + NULL); gpr_free(pp); } else { pp->next = p->pending_picks; @@ -396,7 +400,7 @@ static int rr_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, } static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, - bool iomgr_success) { + grpc_error *error) { subchannel_data *sd = arg; round_robin_lb_policy *p = sd->policy; pending_pick *pp; @@ -404,6 +408,7 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, int unref = 0; + GRPC_ERROR_REF(error); gpr_mu_lock(&p->mu); if (p->shutdown) { @@ -412,7 +417,8 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, switch (sd->connectivity_state) { case GRPC_CHANNEL_READY: grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_READY, "connecting_ready"); + 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->subchannel); @@ -436,7 +442,7 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, } grpc_polling_entity_del_from_pollset_set(exec_ctx, pp->pollent, p->base.interested_parties); - grpc_exec_ctx_enqueue(exec_ctx, pp->on_complete, true, NULL); + grpc_exec_ctx_sched(exec_ctx, pp->on_complete, GRPC_ERROR_NONE, NULL); gpr_free(pp); } grpc_subchannel_notify_on_state_change( @@ -445,9 +451,9 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, break; case GRPC_CHANNEL_CONNECTING: case GRPC_CHANNEL_IDLE: - grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - sd->connectivity_state, - "connecting_changed"); + 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); @@ -463,9 +469,9 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, 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, - "connecting_transient_failure"); + 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) { @@ -482,19 +488,22 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, unref = 1; if (p->num_subchannels == 0) { - grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_SHUTDOWN, - "no_more_channels"); + 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_enqueue(exec_ctx, pp->on_complete, true, 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, - "subchannel_failed"); + grpc_connectivity_state_set( + exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE, + GRPC_ERROR_REF(error), "subchannel_failed"); } } /* switch */ } /* !unref */ @@ -504,14 +513,17 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, if (unref) { GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, "round_robin_connectivity"); } + + GRPC_ERROR_UNREF(error); } static grpc_connectivity_state rr_check_connectivity(grpc_exec_ctx *exec_ctx, - grpc_lb_policy *pol) { + grpc_lb_policy *pol, + grpc_error **error) { round_robin_lb_policy *p = (round_robin_lb_policy *)pol; grpc_connectivity_state st; gpr_mu_lock(&p->mu); - st = grpc_connectivity_state_check(&p->state_tracker); + st = grpc_connectivity_state_check(&p->state_tracker, error); gpr_mu_unlock(&p->mu); return st; } @@ -539,7 +551,8 @@ static void rr_ping_one(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, grpc_connected_subchannel_ping(exec_ctx, target, closure); } else { gpr_mu_unlock(&p->mu); - grpc_exec_ctx_enqueue(exec_ctx, closure, false, NULL); + grpc_exec_ctx_sched(exec_ctx, closure, + GRPC_ERROR_CREATE("Round Robin not connected"), NULL); } } diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c index 5efc95e0fa..31ac968670 100644 --- a/src/core/ext/resolver/dns/native/dns_resolver.c +++ b/src/core/ext/resolver/dns/native/dns_resolver.c @@ -82,6 +82,9 @@ typedef struct { grpc_timer retry_timer; /** retry backoff state */ gpr_backoff backoff_state; + + /** currently resolving addresses */ + grpc_resolved_addresses *addresses; } dns_resolver; static void dns_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *r); @@ -108,7 +111,8 @@ static void dns_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver) { } if (r->next_completion != NULL) { *r->target_config = NULL; - grpc_exec_ctx_enqueue(exec_ctx, r->next_completion, true, NULL); + grpc_exec_ctx_sched(exec_ctx, r->next_completion, + GRPC_ERROR_CREATE("Resolver Shutdown"), NULL); r->next_completion = NULL; } gpr_mu_unlock(&r->mu); @@ -143,12 +147,12 @@ static void dns_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, } static void dns_on_retry_timer(grpc_exec_ctx *exec_ctx, void *arg, - bool success) { + grpc_error *error) { dns_resolver *r = arg; gpr_mu_lock(&r->mu); r->have_retry_timer = false; - if (success) { + if (error == GRPC_ERROR_NONE) { if (!r->resolving) { dns_start_resolving_locked(exec_ctx, r); } @@ -159,13 +163,14 @@ static void dns_on_retry_timer(grpc_exec_ctx *exec_ctx, void *arg, } static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, - grpc_resolved_addresses *addresses) { + grpc_error *error) { dns_resolver *r = arg; grpc_client_config *config = NULL; grpc_lb_policy *lb_policy; gpr_mu_lock(&r->mu); GPR_ASSERT(r->resolving); r->resolving = 0; + grpc_resolved_addresses *addresses = r->addresses; if (addresses != NULL) { grpc_lb_policy_args lb_policy_args; config = grpc_client_config_create(); @@ -183,12 +188,18 @@ static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC); gpr_timespec next_try = gpr_backoff_step(&r->backoff_state, now); gpr_timespec timeout = gpr_time_sub(next_try, now); - gpr_log(GPR_DEBUG, - "dns resolution failed: retrying in %" PRId64 ".%09d seconds", - timeout.tv_sec, timeout.tv_nsec); + const char *msg = grpc_error_string(error); + gpr_log(GPR_DEBUG, "dns resolution failed: %s", msg); + grpc_error_free_string(msg); GPR_ASSERT(!r->have_retry_timer); r->have_retry_timer = true; GRPC_RESOLVER_REF(&r->base, "retry-timer"); + if (gpr_time_cmp(timeout, gpr_time_0(timeout.clock_type)) <= 0) { + gpr_log(GPR_DEBUG, "retrying in %" PRId64 ".%09d seconds", timeout.tv_sec, + timeout.tv_nsec); + } else { + gpr_log(GPR_DEBUG, "retrying immediately"); + } grpc_timer_init(exec_ctx, &r->retry_timer, next_try, dns_on_retry_timer, r, now); } @@ -208,7 +219,9 @@ static void dns_start_resolving_locked(grpc_exec_ctx *exec_ctx, GRPC_RESOLVER_REF(&r->base, "dns-resolving"); GPR_ASSERT(!r->resolving); r->resolving = 1; - grpc_resolve_address(exec_ctx, r->name, r->default_port, dns_on_resolved, r); + r->addresses = NULL; + grpc_resolve_address(exec_ctx, r->name, r->default_port, + grpc_closure_create(dns_on_resolved, r), &r->addresses); } static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, @@ -219,7 +232,7 @@ static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, if (r->resolved_config) { grpc_client_config_ref(r->resolved_config); } - grpc_exec_ctx_enqueue(exec_ctx, r->next_completion, true, NULL); + grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; r->published_version = r->resolved_version; } diff --git a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c index a4fa9acf22..1f7cce2f43 100644 --- a/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +++ b/src/core/ext/resolver/sockaddr/sockaddr_resolver.c @@ -92,7 +92,7 @@ static void sockaddr_shutdown(grpc_exec_ctx *exec_ctx, gpr_mu_lock(&r->mu); if (r->next_completion != NULL) { *r->target_config = NULL; - grpc_exec_ctx_enqueue(exec_ctx, r->next_completion, true, NULL); + grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; } gpr_mu_unlock(&r->mu); @@ -133,7 +133,7 @@ static void sockaddr_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "sockaddr"); r->published = 1; *r->target_config = cfg; - grpc_exec_ctx_enqueue(exec_ctx, r->next_completion, true, NULL); + grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL); r->next_completion = NULL; } } diff --git a/src/core/ext/resolver/zookeeper/zookeeper_resolver.c b/src/core/ext/resolver/zookeeper/zookeeper_resolver.c deleted file mode 100644 index deb4b9b1ef..0000000000 --- a/src/core/ext/resolver/zookeeper/zookeeper_resolver.c +++ /dev/null @@ -1,513 +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. - * - */ - -#include <string.h> - -#include <grpc/support/alloc.h> -#include <grpc/support/string_util.h> - -#include <grpc/grpc_zookeeper.h> -#include <zookeeper/zookeeper.h> - -#include "src/core/ext/client_config/lb_policy_registry.h" -#include "src/core/ext/client_config/resolver_registry.h" -#include "src/core/lib/iomgr/resolve_address.h" -#include "src/core/lib/json/json.h" -#include "src/core/lib/support/string.h" -#include "src/core/lib/surface/api_trace.h" - -/** Zookeeper session expiration time in milliseconds */ -#define GRPC_ZOOKEEPER_SESSION_TIMEOUT 15000 - -typedef struct { - /** base class: must be first */ - grpc_resolver base; - /** refcount */ - gpr_refcount refs; - /** name to resolve */ - char *name; - /** subchannel factory */ - grpc_client_channel_factory *client_channel_factory; - /** load balancing policy name */ - char *lb_policy_name; - - /** mutex guarding the rest of the state */ - gpr_mu mu; - /** are we currently resolving? */ - int resolving; - /** which version of resolved_config have we published? */ - int published_version; - /** which version of resolved_config is current? */ - int resolved_version; - /** pending next completion, or NULL */ - grpc_closure *next_completion; - /** target config address for next completion */ - grpc_client_config **target_config; - /** current (fully resolved) config */ - grpc_client_config *resolved_config; - - /** zookeeper handle */ - zhandle_t *zookeeper_handle; - /** zookeeper resolved addresses */ - grpc_resolved_addresses *resolved_addrs; - /** total number of addresses to be resolved */ - int resolved_total; - /** number of addresses resolved */ - int resolved_num; -} zookeeper_resolver; - -static void zookeeper_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *r); - -static void zookeeper_start_resolving_locked(zookeeper_resolver *r); -static void zookeeper_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, - zookeeper_resolver *r); - -static void zookeeper_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *r); -static void zookeeper_channel_saw_error(grpc_exec_ctx *exec_ctx, - grpc_resolver *r); -static void zookeeper_next(grpc_exec_ctx *exec_ctx, grpc_resolver *r, - grpc_client_config **target_config, - grpc_closure *on_complete); - -static const grpc_resolver_vtable zookeeper_resolver_vtable = { - zookeeper_destroy, zookeeper_shutdown, zookeeper_channel_saw_error, - zookeeper_next}; - -static void zookeeper_shutdown(grpc_exec_ctx *exec_ctx, - grpc_resolver *resolver) { - zookeeper_resolver *r = (zookeeper_resolver *)resolver; - grpc_closure *call = NULL; - gpr_mu_lock(&r->mu); - if (r->next_completion != NULL) { - *r->target_config = NULL; - call = r->next_completion; - r->next_completion = NULL; - } - zookeeper_close(r->zookeeper_handle); - gpr_mu_unlock(&r->mu); - if (call != NULL) { - call->cb(exec_ctx, call->cb_arg, 1); - } -} - -static void zookeeper_channel_saw_error(grpc_exec_ctx *exec_ctx, - grpc_resolver *resolver) { - zookeeper_resolver *r = (zookeeper_resolver *)resolver; - gpr_mu_lock(&r->mu); - if (r->resolving == 0) { - zookeeper_start_resolving_locked(r); - } - gpr_mu_unlock(&r->mu); -} - -static void zookeeper_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, - grpc_client_config **target_config, - grpc_closure *on_complete) { - zookeeper_resolver *r = (zookeeper_resolver *)resolver; - gpr_mu_lock(&r->mu); - GPR_ASSERT(r->next_completion == NULL); - r->next_completion = on_complete; - r->target_config = target_config; - if (r->resolved_version == 0 && r->resolving == 0) { - zookeeper_start_resolving_locked(r); - } else { - zookeeper_maybe_finish_next_locked(exec_ctx, r); - } - gpr_mu_unlock(&r->mu); -} - -/** Zookeeper global watcher for connection management - TODO: better connection management besides logs */ -static void zookeeper_global_watcher(zhandle_t *zookeeper_handle, int type, - int state, const char *path, - void *watcher_ctx) { - if (type == ZOO_SESSION_EVENT) { - if (state == ZOO_EXPIRED_SESSION_STATE) { - gpr_log(GPR_ERROR, "Zookeeper session expired"); - } else if (state == ZOO_AUTH_FAILED_STATE) { - gpr_log(GPR_ERROR, "Zookeeper authentication failed"); - } - } -} - -/** Zookeeper watcher triggered by changes to watched nodes - Once triggered, it tries to resolve again to get updated addresses */ -static void zookeeper_watcher(zhandle_t *zookeeper_handle, int type, int state, - const char *path, void *watcher_ctx) { - if (watcher_ctx != NULL) { - zookeeper_resolver *r = (zookeeper_resolver *)watcher_ctx; - if (state == ZOO_CONNECTED_STATE) { - gpr_mu_lock(&r->mu); - if (r->resolving == 0) { - zookeeper_start_resolving_locked(r); - } - gpr_mu_unlock(&r->mu); - } - } -} - -/** Callback function after getting all resolved addresses - Creates a subchannel for each address */ -static void zookeeper_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, - grpc_resolved_addresses *addresses) { - zookeeper_resolver *r = arg; - grpc_client_config *config = NULL; - grpc_lb_policy *lb_policy; - - if (addresses != NULL) { - grpc_lb_policy_args lb_policy_args; - config = grpc_client_config_create(); - lb_policy_args.addresses = addresses; - lb_policy_args.client_channel_factory = r->client_channel_factory; - lb_policy = - grpc_lb_policy_create(exec_ctx, r->lb_policy_name, &lb_policy_args); - - if (lb_policy != NULL) { - grpc_client_config_set_lb_policy(config, lb_policy); - GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "construction"); - } - grpc_resolved_addresses_destroy(addresses); - } - gpr_mu_lock(&r->mu); - GPR_ASSERT(r->resolving == 1); - r->resolving = 0; - if (r->resolved_config != NULL) { - grpc_client_config_unref(exec_ctx, r->resolved_config); - } - r->resolved_config = config; - r->resolved_version++; - zookeeper_maybe_finish_next_locked(exec_ctx, r); - gpr_mu_unlock(&r->mu); - - GRPC_RESOLVER_UNREF(exec_ctx, &r->base, "zookeeper-resolving"); -} - -/** Callback function for each DNS resolved address */ -static void zookeeper_dns_resolved(grpc_exec_ctx *exec_ctx, void *arg, - grpc_resolved_addresses *addresses) { - size_t i; - zookeeper_resolver *r = arg; - int resolve_done = 0; - - gpr_mu_lock(&r->mu); - r->resolved_num++; - r->resolved_addrs->addrs = - gpr_realloc(r->resolved_addrs->addrs, - sizeof(grpc_resolved_address) * - (r->resolved_addrs->naddrs + addresses->naddrs)); - for (i = 0; i < addresses->naddrs; i++) { - memcpy(r->resolved_addrs->addrs[i + r->resolved_addrs->naddrs].addr, - addresses->addrs[i].addr, addresses->addrs[i].len); - r->resolved_addrs->addrs[i + r->resolved_addrs->naddrs].len = - addresses->addrs[i].len; - } - - r->resolved_addrs->naddrs += addresses->naddrs; - grpc_resolved_addresses_destroy(addresses); - - /** Wait for all addresses to be resolved */ - resolve_done = (r->resolved_num == r->resolved_total); - gpr_mu_unlock(&r->mu); - if (resolve_done) { - zookeeper_on_resolved(exec_ctx, r, r->resolved_addrs); - } -} - -/** Parses JSON format address of a zookeeper node */ -static char *zookeeper_parse_address(const char *value, size_t value_len) { - grpc_json *json; - grpc_json *cur; - const char *host; - const char *port; - char *buffer; - char *address = NULL; - - buffer = gpr_malloc(value_len); - memcpy(buffer, value, value_len); - json = grpc_json_parse_string_with_len(buffer, value_len); - if (json != NULL) { - host = NULL; - port = NULL; - for (cur = json->child; cur != NULL; cur = cur->next) { - if (!strcmp(cur->key, "host")) { - host = cur->value; - if (port != NULL) { - break; - } - } else if (!strcmp(cur->key, "port")) { - port = cur->value; - if (host != NULL) { - break; - } - } - } - if (host != NULL && port != NULL) { - gpr_asprintf(&address, "%s:%s", host, port); - } - grpc_json_destroy(json); - } - gpr_free(buffer); - - return address; -} - -static void zookeeper_get_children_node_completion(int rc, const char *value, - int value_len, - const struct Stat *stat, - const void *arg) { - char *address = NULL; - zookeeper_resolver *r = (zookeeper_resolver *)arg; - int resolve_done = 0; - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - - if (rc != 0) { - gpr_log(GPR_ERROR, "Error in getting a child node of %s", r->name); - grpc_exec_ctx_finish(&exec_ctx); - return; - } - - address = zookeeper_parse_address(value, (size_t)value_len); - if (address != NULL) { - /** Further resolves address by DNS */ - grpc_resolve_address(&exec_ctx, address, NULL, zookeeper_dns_resolved, r); - gpr_free(address); - } else { - gpr_log(GPR_ERROR, "Error in resolving a child node of %s", r->name); - gpr_mu_lock(&r->mu); - r->resolved_total--; - resolve_done = (r->resolved_num == r->resolved_total); - gpr_mu_unlock(&r->mu); - if (resolve_done) { - zookeeper_on_resolved(&exec_ctx, r, r->resolved_addrs); - } - } - - grpc_exec_ctx_finish(&exec_ctx); -} - -static void zookeeper_get_children_completion( - int rc, const struct String_vector *children, const void *arg) { - char *path; - int status; - int i; - zookeeper_resolver *r = (zookeeper_resolver *)arg; - - if (rc != 0) { - gpr_log(GPR_ERROR, "Error in getting zookeeper children of %s", r->name); - return; - } - - if (children->count == 0) { - gpr_log(GPR_ERROR, "Error in resolving zookeeper address %s", r->name); - return; - } - - r->resolved_addrs = gpr_malloc(sizeof(grpc_resolved_addresses)); - r->resolved_addrs->addrs = NULL; - r->resolved_addrs->naddrs = 0; - r->resolved_total = children->count; - - /** TODO: Replace expensive heap allocation with stack - if we can get maximum length of zookeeper path */ - for (i = 0; i < children->count; i++) { - gpr_asprintf(&path, "%s/%s", r->name, children->data[i]); - status = zoo_awget(r->zookeeper_handle, path, zookeeper_watcher, r, - zookeeper_get_children_node_completion, r); - gpr_free(path); - if (status != 0) { - gpr_log(GPR_ERROR, "Error in getting zookeeper node %s", path); - } - } -} - -static void zookeeper_get_node_completion(int rc, const char *value, - int value_len, - const struct Stat *stat, - const void *arg) { - int status; - char *address = NULL; - zookeeper_resolver *r = (zookeeper_resolver *)arg; - r->resolved_addrs = NULL; - r->resolved_total = 0; - r->resolved_num = 0; - - if (rc != 0) { - gpr_log(GPR_ERROR, "Error in getting zookeeper node %s", r->name); - return; - } - - /** If zookeeper node of path r->name does not have address - (i.e. service node), get its children */ - address = zookeeper_parse_address(value, (size_t)value_len); - if (address != NULL) { - r->resolved_addrs = gpr_malloc(sizeof(grpc_resolved_addresses)); - r->resolved_addrs->addrs = NULL; - r->resolved_addrs->naddrs = 0; - r->resolved_total = 1; - /** Further resolves address by DNS */ - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resolve_address(&exec_ctx, address, NULL, zookeeper_dns_resolved, r); - gpr_free(address); - grpc_exec_ctx_finish(&exec_ctx); - return; - } - - status = zoo_awget_children(r->zookeeper_handle, r->name, zookeeper_watcher, - r, zookeeper_get_children_completion, r); - if (status != 0) { - gpr_log(GPR_ERROR, "Error in getting zookeeper children of %s", r->name); - } -} - -static void zookeeper_resolve_address(zookeeper_resolver *r) { - int status; - status = zoo_awget(r->zookeeper_handle, r->name, zookeeper_watcher, r, - zookeeper_get_node_completion, r); - if (status != 0) { - gpr_log(GPR_ERROR, "Error in getting zookeeper node %s", r->name); - } -} - -static void zookeeper_start_resolving_locked(zookeeper_resolver *r) { - GRPC_RESOLVER_REF(&r->base, "zookeeper-resolving"); - GPR_ASSERT(r->resolving == 0); - r->resolving = 1; - zookeeper_resolve_address(r); -} - -static void zookeeper_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, - zookeeper_resolver *r) { - if (r->next_completion != NULL && - r->resolved_version != r->published_version) { - *r->target_config = r->resolved_config; - if (r->resolved_config != NULL) { - grpc_client_config_ref(r->resolved_config); - } - grpc_exec_ctx_enqueue(exec_ctx, r->next_completion, true, NULL); - r->next_completion = NULL; - r->published_version = r->resolved_version; - } -} - -static void zookeeper_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) { - zookeeper_resolver *r = (zookeeper_resolver *)gr; - gpr_mu_destroy(&r->mu); - if (r->resolved_config != NULL) { - grpc_client_config_unref(exec_ctx, r->resolved_config); - } - grpc_client_channel_factory_unref(exec_ctx, r->client_channel_factory); - gpr_free(r->name); - gpr_free(r->lb_policy_name); - gpr_free(r); -} - -static grpc_resolver *zookeeper_create(grpc_resolver_args *args, - const char *lb_policy_name) { - zookeeper_resolver *r; - size_t length; - char *path = args->uri->path; - - if (0 == strcmp(args->uri->authority, "")) { - gpr_log(GPR_ERROR, "No authority specified in zookeeper uri"); - return NULL; - } - - /** Removes the trailing slash if exists */ - length = strlen(path); - if (length > 1 && path[length - 1] == '/') { - path[length - 1] = 0; - } - - r = gpr_malloc(sizeof(zookeeper_resolver)); - memset(r, 0, sizeof(*r)); - gpr_ref_init(&r->refs, 1); - gpr_mu_init(&r->mu); - grpc_resolver_init(&r->base, &zookeeper_resolver_vtable); - r->name = gpr_strdup(path); - - r->client_channel_factory = args->client_channel_factory; - grpc_client_channel_factory_ref(r->client_channel_factory); - - r->lb_policy_name = gpr_strdup(lb_policy_name); - - /** Initializes zookeeper client */ - zoo_set_debug_level(ZOO_LOG_LEVEL_WARN); - r->zookeeper_handle = - zookeeper_init(args->uri->authority, zookeeper_global_watcher, - GRPC_ZOOKEEPER_SESSION_TIMEOUT, 0, 0, 0); - if (r->zookeeper_handle == NULL) { - gpr_log(GPR_ERROR, "Unable to connect to zookeeper server"); - return NULL; - } - - return &r->base; -} - -/* - * FACTORY - */ - -static void zookeeper_factory_ref(grpc_resolver_factory *factory) {} - -static void zookeeper_factory_unref(grpc_resolver_factory *factory) {} - -static char *zookeeper_factory_get_default_hostname( - grpc_resolver_factory *factory, grpc_uri *uri) { - return NULL; -} - -static grpc_resolver *zookeeper_factory_create_resolver( - grpc_resolver_factory *factory, grpc_resolver_args *args) { - return zookeeper_create(args, "pick_first"); -} - -static const grpc_resolver_factory_vtable zookeeper_factory_vtable = { - zookeeper_factory_ref, zookeeper_factory_unref, - zookeeper_factory_create_resolver, zookeeper_factory_get_default_hostname, - "zookeeper"}; - -static grpc_resolver_factory zookeeper_resolver_factory = { - &zookeeper_factory_vtable}; - -static grpc_resolver_factory *zookeeper_resolver_factory_create() { - return &zookeeper_resolver_factory; -} - -static void zookeeper_plugin_init() { - grpc_register_resolver_type(zookeeper_resolver_factory_create()); -} - -void grpc_zookeeper_register() { - GRPC_API_TRACE("grpc_zookeeper_register(void)", 0, ()); - grpc_register_plugin(zookeeper_plugin_init, NULL); -} diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c index c5d3d8d9cc..85f9efb3b6 100644 --- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c +++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c @@ -79,11 +79,11 @@ static void connector_unref(grpc_exec_ctx *exec_ctx, grpc_connector *con) { } static void on_initial_connect_string_sent(grpc_exec_ctx *exec_ctx, void *arg, - bool success) { + grpc_error *error) { connector_unref(exec_ctx, arg); } -static void connected(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void connected(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { connector *c = arg; grpc_closure *notify; grpc_endpoint *tcp = c->tcp; @@ -103,13 +103,13 @@ static void connected(grpc_exec_ctx *exec_ctx, void *arg, bool success) { grpc_chttp2_transport_start_reading(exec_ctx, c->result->transport, NULL, 0); GPR_ASSERT(c->result->transport); - c->result->channel_args = c->args.channel_args; + c->result->channel_args = grpc_channel_args_copy(c->args.channel_args); } else { memset(c->result, 0, sizeof(*c->result)); } notify = c->notify; c->notify = NULL; - notify->cb(exec_ctx, notify->cb_arg, 1); + grpc_exec_ctx_sched(exec_ctx, notify, GRPC_ERROR_REF(error), NULL); } static void connector_shutdown(grpc_exec_ctx *exec_ctx, grpc_connector *con) {} diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c index a262306085..721ba82d8f 100644 --- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c @@ -90,7 +90,6 @@ static void on_secure_handshake_done(grpc_exec_ctx *exec_ctx, void *arg, grpc_auth_context *auth_context) { connector *c = arg; grpc_closure *notify; - grpc_channel_args *args_copy = NULL; gpr_mu_lock(&c->mu); if (c->connecting_endpoint == NULL) { memset(c->result, 0, sizeof(*c->result)); @@ -109,26 +108,23 @@ static void on_secure_handshake_done(grpc_exec_ctx *exec_ctx, void *arg, grpc_chttp2_transport_start_reading(exec_ctx, c->result->transport, NULL, 0); auth_context_arg = grpc_auth_context_to_arg(auth_context); - args_copy = grpc_channel_args_copy_and_add(c->args.channel_args, - &auth_context_arg, 1); - c->result->channel_args = args_copy; + c->result->channel_args = grpc_channel_args_copy_and_add( + c->args.channel_args, &auth_context_arg, 1); } notify = c->notify; c->notify = NULL; - /* look at c->args which are connector args. */ - notify->cb(exec_ctx, notify->cb_arg, 1); - if (args_copy != NULL) grpc_channel_args_destroy(args_copy); + grpc_exec_ctx_sched(exec_ctx, notify, GRPC_ERROR_NONE, NULL); } static void on_initial_connect_string_sent(grpc_exec_ctx *exec_ctx, void *arg, - bool success) { + grpc_error *error) { connector *c = arg; - grpc_channel_security_connector_do_handshake(exec_ctx, c->security_connector, - c->connecting_endpoint, - on_secure_handshake_done, c); + grpc_channel_security_connector_do_handshake( + exec_ctx, c->security_connector, c->connecting_endpoint, c->args.deadline, + on_secure_handshake_done, c); } -static void connected(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void connected(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { connector *c = arg; grpc_closure *notify; grpc_endpoint *tcp = c->newly_connecting_endpoint; @@ -147,13 +143,14 @@ static void connected(grpc_exec_ctx *exec_ctx, void *arg, bool success) { &c->initial_string_sent); } else { grpc_channel_security_connector_do_handshake( - exec_ctx, c->security_connector, tcp, on_secure_handshake_done, c); + exec_ctx, c->security_connector, tcp, c->args.deadline, + on_secure_handshake_done, c); } } else { memset(c->result, 0, sizeof(*c->result)); notify = c->notify; c->notify = NULL; - notify->cb(exec_ctx, notify->cb_arg, 1); + grpc_exec_ctx_sched(exec_ctx, notify, GRPC_ERROR_REF(error), NULL); } } @@ -175,7 +172,6 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, grpc_closure *notify) { connector *c = (connector *)con; GPR_ASSERT(c->notify == NULL); - GPR_ASSERT(notify->cb); c->notify = notify; c->args = *args; c->result = result; diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c index c95dd20d1d..9bae3a94f9 100644 --- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c @@ -35,6 +35,7 @@ #include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> #include <grpc/support/useful.h> #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" #include "src/core/lib/channel/http_server_filter.h" @@ -74,34 +75,40 @@ static void destroy(grpc_exec_ctx *exec_ctx, grpc_server *server, void *tcpp, grpc_closure *destroy_done) { grpc_tcp_server *tcp = tcpp; grpc_tcp_server_unref(exec_ctx, tcp); - grpc_exec_ctx_enqueue(exec_ctx, destroy_done, true, NULL); + grpc_exec_ctx_sched(exec_ctx, destroy_done, GRPC_ERROR_NONE, NULL); } int grpc_server_add_insecure_http2_port(grpc_server *server, const char *addr) { grpc_resolved_addresses *resolved = NULL; grpc_tcp_server *tcp = NULL; size_t i; - unsigned count = 0; + size_t count = 0; int port_num = -1; int port_temp; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_error *err = GRPC_ERROR_NONE; GRPC_API_TRACE("grpc_server_add_insecure_http2_port(server=%p, addr=%s)", 2, (server, addr)); - resolved = grpc_blocking_resolve_address(addr, "http"); - if (!resolved) { + grpc_error **errors = NULL; + err = grpc_blocking_resolve_address(addr, "https", &resolved); + if (err != GRPC_ERROR_NONE) { goto error; } - tcp = grpc_tcp_server_create(NULL); - GPR_ASSERT(tcp); + err = grpc_tcp_server_create(NULL, &tcp); + if (err != GRPC_ERROR_NONE) { + goto error; + } - for (i = 0; i < resolved->naddrs; i++) { - port_temp = grpc_tcp_server_add_port( + const size_t naddrs = resolved->naddrs; + errors = gpr_malloc(sizeof(*errors) * naddrs); + for (i = 0; i < naddrs; i++) { + errors[i] = grpc_tcp_server_add_port( tcp, (struct sockaddr *)&resolved->addrs[i].addr, - resolved->addrs[i].len); - if (port_temp > 0) { + resolved->addrs[i].len, &port_temp); + if (errors[i] == GRPC_ERROR_NONE) { if (port_num == -1) { port_num = port_temp; } else { @@ -111,14 +118,24 @@ int grpc_server_add_insecure_http2_port(grpc_server *server, const char *addr) { } } if (count == 0) { - gpr_log(GPR_ERROR, "No address added out of total %" PRIuPTR " resolved", - resolved->naddrs); + char *msg; + gpr_asprintf(&msg, "No address added out of total %" PRIuPTR " resolved", + naddrs); + err = GRPC_ERROR_CREATE_REFERENCING(msg, errors, naddrs); + gpr_free(msg); goto error; - } - if (count != resolved->naddrs) { - gpr_log(GPR_ERROR, - "Only %d addresses added out of total %" PRIuPTR " resolved", count, - resolved->naddrs); + } else if (count != naddrs) { + char *msg; + gpr_asprintf(&msg, "Only %" PRIuPTR + " addresses added out of total %" PRIuPTR " resolved", + count, naddrs); + err = GRPC_ERROR_CREATE_REFERENCING(msg, errors, naddrs); + gpr_free(msg); + + const char *warning_message = grpc_error_string(err); + gpr_log(GPR_INFO, "WARNING: %s", warning_message); + grpc_error_free_string(warning_message); + /* we managed to bind some addresses: continue */ } grpc_resolved_addresses_destroy(resolved); @@ -128,6 +145,7 @@ int grpc_server_add_insecure_http2_port(grpc_server *server, const char *addr) { /* Error path: cleanup and return */ error: + GPR_ASSERT(err != GRPC_ERROR_NONE); if (resolved) { grpc_resolved_addresses_destroy(resolved); } @@ -136,7 +154,18 @@ error: } port_num = 0; + const char *msg = grpc_error_string(err); + gpr_log(GPR_ERROR, "%s", msg); + grpc_error_free_string(msg); + GRPC_ERROR_UNREF(err); + done: grpc_exec_ctx_finish(&exec_ctx); + if (errors != NULL) { + for (i = 0; i < naddrs; i++) { + GRPC_ERROR_UNREF(errors[i]); + } + } + gpr_free(errors); return port_num; } diff --git a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c index e3437e5ed3..ead8a4d566 100644 --- a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +++ b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c @@ -37,6 +37,7 @@ #include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> #include <grpc/support/sync.h> #include <grpc/support/useful.h> #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" @@ -128,9 +129,11 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *statep, grpc_endpoint *tcp, state->state = statep; state_ref(state->state); state->accepting_pollset = accepting_pollset; - grpc_server_security_connector_do_handshake(exec_ctx, state->state->sc, - acceptor, tcp, - on_secure_handshake_done, state); + grpc_server_security_connector_do_handshake( + exec_ctx, state->state->sc, acceptor, tcp, + gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), + gpr_time_from_seconds(120, GPR_TIMESPAN)), + on_secure_handshake_done, state); } /* Server callback: start listening on our ports */ @@ -141,11 +144,12 @@ static void start(grpc_exec_ctx *exec_ctx, grpc_server *server, void *statep, on_accept, state); } -static void destroy_done(grpc_exec_ctx *exec_ctx, void *statep, bool success) { +static void destroy_done(grpc_exec_ctx *exec_ctx, void *statep, + grpc_error *error) { server_secure_state *state = statep; if (state->destroy_callback != NULL) { state->destroy_callback->cb(exec_ctx, state->destroy_callback->cb_arg, - success); + GRPC_ERROR_REF(error)); } grpc_server_security_connector_shutdown(exec_ctx, state->sc); state_unref(state); @@ -171,12 +175,14 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr, grpc_tcp_server *tcp = NULL; server_secure_state *state = NULL; size_t i; - unsigned count = 0; + size_t count = 0; int port_num = -1; int port_temp; grpc_security_status status = GRPC_SECURITY_ERROR; grpc_server_security_connector *sc = NULL; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_error *err = GRPC_ERROR_NONE; + grpc_error **errors = NULL; GRPC_API_TRACE( "grpc_server_add_secure_http2_port(" @@ -184,26 +190,34 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr, 3, (server, addr, creds)); /* create security context */ - if (creds == NULL) goto error; + if (creds == NULL) { + err = GRPC_ERROR_CREATE( + "No credentials specified for secure server port (creds==NULL)"); + goto error; + } status = grpc_server_credentials_create_security_connector(creds, &sc); if (status != GRPC_SECURITY_OK) { - gpr_log(GPR_ERROR, - "Unable to create secure server with credentials of type %s.", - creds->type); + char *msg; + gpr_asprintf(&msg, + "Unable to create secure server with credentials of type %s.", + creds->type); + err = grpc_error_set_int(GRPC_ERROR_CREATE(msg), + GRPC_ERROR_INT_SECURITY_STATUS, status); + gpr_free(msg); goto error; } sc->channel_args = grpc_server_get_channel_args(server); /* resolve address */ - resolved = grpc_blocking_resolve_address(addr, "https"); - if (!resolved) { + err = grpc_blocking_resolve_address(addr, "https", &resolved); + if (err != GRPC_ERROR_NONE) { goto error; } state = gpr_malloc(sizeof(*state)); memset(state, 0, sizeof(*state)); grpc_closure_init(&state->destroy_closure, destroy_done, state); - tcp = grpc_tcp_server_create(&state->destroy_closure); - if (!tcp) { + err = grpc_tcp_server_create(&state->destroy_closure, &tcp); + if (err != GRPC_ERROR_NONE) { goto error; } @@ -215,11 +229,12 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr, gpr_mu_init(&state->mu); gpr_ref_init(&state->refcount, 1); + errors = gpr_malloc(sizeof(*errors) * resolved->naddrs); for (i = 0; i < resolved->naddrs; i++) { - port_temp = grpc_tcp_server_add_port( + errors[i] = grpc_tcp_server_add_port( tcp, (struct sockaddr *)&resolved->addrs[i].addr, - resolved->addrs[i].len); - if (port_temp > 0) { + resolved->addrs[i].len, &port_temp); + if (errors[i] == GRPC_ERROR_NONE) { if (port_num == -1) { port_num = port_temp; } else { @@ -229,16 +244,31 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr, } } if (count == 0) { - gpr_log(GPR_ERROR, "No address added out of total %" PRIuPTR " resolved", - resolved->naddrs); + char *msg; + gpr_asprintf(&msg, "No address added out of total %" PRIuPTR " resolved", + resolved->naddrs); + err = GRPC_ERROR_CREATE_REFERENCING(msg, errors, resolved->naddrs); + gpr_free(msg); goto error; + } else if (count != resolved->naddrs) { + char *msg; + gpr_asprintf(&msg, "Only %" PRIuPTR + " addresses added out of total %" PRIuPTR " resolved", + count, resolved->naddrs); + err = GRPC_ERROR_CREATE_REFERENCING(msg, errors, resolved->naddrs); + gpr_free(msg); + + const char *warning_message = grpc_error_string(err); + gpr_log(GPR_INFO, "WARNING: %s", warning_message); + grpc_error_free_string(warning_message); + /* we managed to bind some addresses: continue */ + } else { + for (i = 0; i < resolved->naddrs; i++) { + GRPC_ERROR_UNREF(errors[i]); + } } - if (count != resolved->naddrs) { - gpr_log(GPR_ERROR, - "Only %d addresses added out of total %" PRIuPTR " resolved", count, - resolved->naddrs); - /* if it's an error, don't we want to goto error; here ? */ - } + gpr_free(errors); + errors = NULL; grpc_resolved_addresses_destroy(resolved); /* Register with the server only upon success */ @@ -249,6 +279,13 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr, /* Error path: cleanup and return */ error: + GPR_ASSERT(err != GRPC_ERROR_NONE); + if (errors != NULL) { + for (i = 0; i < resolved->naddrs; i++) { + GRPC_ERROR_UNREF(errors[i]); + } + gpr_free(errors); + } if (resolved) { grpc_resolved_addresses_destroy(resolved); } @@ -263,5 +300,9 @@ error: } } grpc_exec_ctx_finish(&exec_ctx); + const char *msg = grpc_error_string(err); + GRPC_ERROR_UNREF(err); + gpr_log(GPR_ERROR, "%s", msg); + grpc_error_free_string(msg); return 0; } diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 6e8640f1b3..9c99ff883a 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -85,19 +85,17 @@ int grpc_flowctl_trace = 0; static const grpc_transport_vtable vtable; /* forward declarations of various callbacks that we'll build closures around */ -static void writing_action(grpc_exec_ctx *exec_ctx, void *t, - bool iomgr_success_ignored); -static void reading_action(grpc_exec_ctx *exec_ctx, void *t, - bool iomgr_success_ignored); -static void parsing_action(grpc_exec_ctx *exec_ctx, void *t, - bool iomgr_success_ignored); +static void writing_action(grpc_exec_ctx *exec_ctx, void *t, grpc_error *error); +static void reading_action(grpc_exec_ctx *exec_ctx, void *t, grpc_error *error); +static void parsing_action(grpc_exec_ctx *exec_ctx, void *t, grpc_error *error); /** Set a transport level setting, and push it to our peer */ static void push_setting(grpc_chttp2_transport *t, grpc_chttp2_setting_id id, uint32_t value); /** Start disconnection chain */ -static void drop_connection(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t); +static void drop_connection(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, + grpc_error *error); /** Perform a transport_op */ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, @@ -135,7 +133,7 @@ static void finish_global_actions(grpc_exec_ctx *exec_ctx, static void connectivity_state_set( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global, - grpc_connectivity_state state, const char *reason); + grpc_connectivity_state state, grpc_error *error, const char *reason); static void check_read_ops(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global); @@ -149,7 +147,9 @@ static void incoming_byte_stream_destroy_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s, void *byte_stream); static void fail_pending_writes(grpc_exec_ctx *exec_ctx, - grpc_chttp2_stream_global *stream_global); + grpc_chttp2_transport_global *transport_global, + grpc_chttp2_stream_global *stream_global, + grpc_error *error); /******************************************************************************* * CONSTRUCTION/DESTRUCTION/REFCOUNTING @@ -194,7 +194,8 @@ static void destruct_transport(grpc_exec_ctx *exec_ctx, and maybe they hold resources that need to be freed */ while (t->global.pings.next != &t->global.pings) { grpc_chttp2_outstanding_ping *ping = t->global.pings.next; - grpc_exec_ctx_enqueue(exec_ctx, ping->on_recv, false, NULL); + grpc_exec_ctx_sched(exec_ctx, ping->on_recv, + GRPC_ERROR_CREATE("Transport closed"), NULL); ping->next->prev = ping->prev; ping->prev->next = ping->next; gpr_free(ping); @@ -263,6 +264,7 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, t->parsing.is_client = is_client; t->parsing.deframe_state = is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0; + t->parsing.is_first_frame = true; t->writing.is_client = is_client; t->optional_drop_message = gpr_empty_slice(); grpc_connectivity_state_init( @@ -409,7 +411,7 @@ static void destroy_transport_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s_ignored, void *arg_ignored) { t->destroying = 1; - drop_connection(exec_ctx, t); + drop_connection(exec_ctx, t, GRPC_ERROR_CREATE("Transport destroyed")); } static void destroy_transport(grpc_exec_ctx *exec_ctx, grpc_transport *gt) { @@ -445,12 +447,11 @@ static void destroy_endpoint(grpc_exec_ctx *exec_ctx, static void close_transport_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, - grpc_chttp2_stream *s_ignored, - void *arg_ignored) { + grpc_error *error) { if (!t->closed) { t->closed = 1; connectivity_state_set(exec_ctx, &t->global, GRPC_CHANNEL_SHUTDOWN, - "close_transport"); + GRPC_ERROR_REF(error), "close_transport"); if (t->ep) { allow_endpoint_shutdown_locked(exec_ctx, t); } @@ -463,6 +464,7 @@ static void close_transport_locked(grpc_exec_ctx *exec_ctx, GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2_writing"); } } + GRPC_ERROR_UNREF(error); } #ifdef GRPC_STREAM_REFCOUNT_DEBUG @@ -551,7 +553,9 @@ static void destroy_stream_locked(grpc_exec_ctx *exec_ctx, s->global.id == 0); GPR_ASSERT(!s->global.in_stream_map); if (grpc_chttp2_unregister_stream(t, s) && t->global.sent_goaway) { - close_transport_locked(exec_ctx, t, NULL, NULL); + close_transport_locked( + exec_ctx, t, + GRPC_ERROR_CREATE("Last stream closed after sending goaway")); } if (!t->executor.parsing_active && s->global.id) { GPR_ASSERT(grpc_chttp2_stream_map_find(&t->parsing_stream_map, @@ -640,12 +644,11 @@ static void finish_global_actions(grpc_exec_ctx *exec_ctx, for (;;) { if (!t->executor.writing_active && !t->closed && - grpc_chttp2_unlocking_check_writes(exec_ctx, &t->global, &t->writing, - t->executor.parsing_active)) { + grpc_chttp2_unlocking_check_writes(exec_ctx, &t->global, &t->writing)) { t->executor.writing_active = 1; REF_TRANSPORT(t, "writing"); prevent_endpoint_shutdown(t); - grpc_exec_ctx_enqueue(exec_ctx, &t->writing_action, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &t->writing_action, GRPC_ERROR_NONE, NULL); } check_read_ops(exec_ctx, &t->global); @@ -756,12 +759,12 @@ static void terminate_writing_with_lock(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s_ignored, void *a) { - bool success = (bool)(uintptr_t)a; + grpc_error *error = a; allow_endpoint_shutdown_locked(exec_ctx, t); - if (!success) { - drop_connection(exec_ctx, t); + if (error != GRPC_ERROR_NONE) { + drop_connection(exec_ctx, t, GRPC_ERROR_REF(error)); } grpc_chttp2_cleanup_writing(exec_ctx, &t->global, &t->writing); @@ -769,7 +772,8 @@ static void terminate_writing_with_lock(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream_global *stream_global; while (grpc_chttp2_list_pop_closed_waiting_for_writing(&t->global, &stream_global)) { - fail_pending_writes(exec_ctx, stream_global); + fail_pending_writes(exec_ctx, &t->global, stream_global, + GRPC_ERROR_REF(error)); GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "finish_writes"); } @@ -782,18 +786,18 @@ static void terminate_writing_with_lock(grpc_exec_ctx *exec_ctx, } UNREF_TRANSPORT(exec_ctx, t, "writing"); + GRPC_ERROR_UNREF(error); } void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx, - void *transport_writing, bool success) { + void *transport_writing, grpc_error *error) { grpc_chttp2_transport *t = TRANSPORT_FROM_WRITING(transport_writing); - grpc_chttp2_run_with_global_lock(exec_ctx, t, NULL, - terminate_writing_with_lock, - (void *)(uintptr_t)success, 0); + grpc_chttp2_run_with_global_lock( + exec_ctx, t, NULL, terminate_writing_with_lock, GRPC_ERROR_REF(error), 0); } static void writing_action(grpc_exec_ctx *exec_ctx, void *gt, - bool iomgr_success_ignored) { + grpc_error *error) { grpc_chttp2_transport *t = gt; GPR_TIMER_BEGIN("writing_action", 0); grpc_chttp2_perform_writes(exec_ctx, &t->writing, t->ep); @@ -806,13 +810,19 @@ void grpc_chttp2_add_incoming_goaway( char *msg = gpr_dump_slice(goaway_text, GPR_DUMP_HEX | GPR_DUMP_ASCII); GRPC_CHTTP2_IF_TRACING( gpr_log(GPR_DEBUG, "got goaway [%d]: %s", goaway_error, msg)); - gpr_free(msg); gpr_slice_unref(goaway_text); transport_global->seen_goaway = 1; /* lie: use transient failure from the transport to indicate goaway has been * received */ - connectivity_state_set(exec_ctx, transport_global, - GRPC_CHANNEL_TRANSIENT_FAILURE, "got_goaway"); + connectivity_state_set( + exec_ctx, transport_global, GRPC_CHANNEL_TRANSIENT_FAILURE, + grpc_error_set_str( + grpc_error_set_int(GRPC_ERROR_CREATE("GOAWAY received"), + GRPC_ERROR_INT_HTTP2_ERROR, + (intptr_t)goaway_error), + GRPC_ERROR_STR_RAW_BYTES, msg), + "got_goaway"); + gpr_free(msg); } static void maybe_start_some_streams( @@ -841,9 +851,9 @@ static void maybe_start_some_streams( transport_global->next_stream_id += 2; if (transport_global->next_stream_id >= MAX_CLIENT_STREAM_ID) { - connectivity_state_set(exec_ctx, transport_global, - GRPC_CHANNEL_TRANSIENT_FAILURE, - "no_more_stream_ids"); + connectivity_state_set( + exec_ctx, transport_global, GRPC_CHANNEL_TRANSIENT_FAILURE, + GRPC_ERROR_CREATE("Stream IDs exhausted"), "no_more_stream_ids"); } stream_global->outgoing_window = @@ -871,34 +881,40 @@ static void maybe_start_some_streams( } #define CLOSURE_BARRIER_STATS_BIT (1 << 0) -#define CLOSURE_BARRIER_FAILURE_BIT (1 << 1) #define CLOSURE_BARRIER_FIRST_REF_BIT (1 << 16) static grpc_closure *add_closure_barrier(grpc_closure *closure) { - closure->final_data += CLOSURE_BARRIER_FIRST_REF_BIT; + closure->next_data.scratch += CLOSURE_BARRIER_FIRST_REF_BIT; return closure; } -void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx, - grpc_chttp2_stream_global *stream_global, - grpc_closure **pclosure, int success) { +void grpc_chttp2_complete_closure_step( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global, + grpc_chttp2_stream_global *stream_global, grpc_closure **pclosure, + grpc_error *error) { grpc_closure *closure = *pclosure; if (closure == NULL) { + GRPC_ERROR_UNREF(error); return; } - closure->final_data -= CLOSURE_BARRIER_FIRST_REF_BIT; - if (!success) { - closure->final_data |= CLOSURE_BARRIER_FAILURE_BIT; + closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT; + if (error != GRPC_ERROR_NONE) { + if (closure->error == GRPC_ERROR_NONE) { + closure->error = + GRPC_ERROR_CREATE("Error in HTTP transport completing operation"); + closure->error = grpc_error_set_str( + closure->error, GRPC_ERROR_STR_TARGET_ADDRESS, + TRANSPORT_FROM_GLOBAL(transport_global)->peer_string); + } + closure->error = grpc_error_add_child(closure->error, error); } - if (closure->final_data < CLOSURE_BARRIER_FIRST_REF_BIT) { - if (closure->final_data & CLOSURE_BARRIER_STATS_BIT) { + if (closure->next_data.scratch < CLOSURE_BARRIER_FIRST_REF_BIT) { + if (closure->next_data.scratch & CLOSURE_BARRIER_STATS_BIT) { grpc_transport_move_stats(&stream_global->stats, stream_global->collecting_stats); stream_global->collecting_stats = NULL; } - grpc_exec_ctx_enqueue( - exec_ctx, closure, - (closure->final_data & CLOSURE_BARRIER_FAILURE_BIT) == 0, NULL); + grpc_exec_ctx_sched(exec_ctx, closure, closure->error, NULL); } *pclosure = NULL; } @@ -916,7 +932,7 @@ static int contains_non_ok_status( return 0; } -static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, bool success) {} +static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {} static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, @@ -933,12 +949,13 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, } /* use final_data as a barrier until enqueue time; the inital counter is dropped at the end of this function */ - on_complete->final_data = CLOSURE_BARRIER_FIRST_REF_BIT; + on_complete->next_data.scratch = CLOSURE_BARRIER_FIRST_REF_BIT; + on_complete->error = GRPC_ERROR_NONE; if (op->collect_stats != NULL) { GPR_ASSERT(stream_global->collecting_stats == NULL); stream_global->collecting_stats = op->collect_stats; - on_complete->final_data |= CLOSURE_BARRIER_STATS_BIT; + on_complete->next_data.scratch |= CLOSURE_BARRIER_STATS_BIT; } if (op->cancel_with_status != GRPC_STATUS_OK) { @@ -985,8 +1002,10 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, } } else { grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, - &stream_global->send_initial_metadata_finished, 0); + exec_ctx, transport_global, stream_global, + &stream_global->send_initial_metadata_finished, + GRPC_ERROR_CREATE( + "Attempt to send initial metadata after stream was closed")); } } } @@ -997,7 +1016,9 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, stream_global->send_message_finished = add_closure_barrier(on_complete); if (stream_global->write_closed) { grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, &stream_global->send_message_finished, 0); + exec_ctx, transport_global, stream_global, + &stream_global->send_message_finished, + GRPC_ERROR_CREATE("Attempt to send message after stream was closed")); } else { stream_global->send_message = op->send_message; if (stream_global->id != 0) { @@ -1031,9 +1052,12 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, } if (stream_global->write_closed) { grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, + exec_ctx, transport_global, stream_global, &stream_global->send_trailing_metadata_finished, - grpc_metadata_batch_is_empty(op->send_trailing_metadata)); + grpc_metadata_batch_is_empty(op->send_trailing_metadata) + ? GRPC_ERROR_NONE + : GRPC_ERROR_CREATE("Attempt to send trailing metadata after " + "stream was closed")); } else if (stream_global->id != 0) { /* TODO(ctiller): check if there's flow control for any outstanding bytes before going writable */ @@ -1069,10 +1093,12 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, stream_global->recv_trailing_metadata_finished = add_closure_barrier(on_complete); stream_global->recv_trailing_metadata = op->recv_trailing_metadata; + stream_global->final_metadata_requested = true; grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); } - grpc_chttp2_complete_closure_step(exec_ctx, stream_global, &on_complete, 1); + grpc_chttp2_complete_closure_step(exec_ctx, transport_global, stream_global, + &on_complete, GRPC_ERROR_NONE); GPR_TIMER_END("perform_stream_op_locked", 0); } @@ -1109,7 +1135,7 @@ static void ack_ping_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, for (ping = transport_global->pings.next; ping != &transport_global->pings; ping = ping->next) { if (0 == memcmp(opaque_8bytes, ping->id, 8)) { - grpc_exec_ctx_enqueue(exec_ctx, ping->on_recv, true, NULL); + grpc_exec_ctx_sched(exec_ctx, ping->on_recv, GRPC_ERROR_NONE, NULL); ping->next->prev = ping->prev; ping->prev->next = ping->next; gpr_free(ping); @@ -1131,7 +1157,7 @@ static void perform_transport_op_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s_unused, void *stream_op) { grpc_transport_op *op = stream_op; - bool close_transport = op->disconnect; + grpc_error *close_transport = op->disconnect_with_error; /* If there's a set_accept_stream ensure that we're not parsing to avoid changing things out from underneath */ @@ -1142,7 +1168,7 @@ static void perform_transport_op_locked(grpc_exec_ctx *exec_ctx, return; } - grpc_exec_ctx_enqueue(exec_ctx, op->on_consumed, true, NULL); + grpc_exec_ctx_sched(exec_ctx, op->on_consumed, GRPC_ERROR_NONE, NULL); if (op->on_connectivity_state_change != NULL) { grpc_connectivity_state_notify_on_state_change( @@ -1156,7 +1182,9 @@ static void perform_transport_op_locked(grpc_exec_ctx *exec_ctx, t->global.last_incoming_stream_id, (uint32_t)grpc_chttp2_grpc_status_to_http2_error(op->goaway_status), gpr_slice_ref(*op->goaway_message), &t->global.qbuf); - close_transport = !grpc_chttp2_has_streams(t); + close_transport = grpc_chttp2_has_streams(t) + ? GRPC_ERROR_NONE + : GRPC_ERROR_CREATE("GOAWAY sent"); } if (op->set_accept_stream) { @@ -1177,8 +1205,8 @@ static void perform_transport_op_locked(grpc_exec_ctx *exec_ctx, send_ping_locked(t, op->send_ping); } - if (close_transport) { - close_transport_locked(exec_ctx, t, NULL, NULL); + if (close_transport != GRPC_ERROR_NONE) { + close_transport_locked(exec_ctx, t, close_transport); } } @@ -1214,12 +1242,13 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer_publish( &stream_global->received_initial_metadata, stream_global->recv_initial_metadata); - grpc_exec_ctx_enqueue( - exec_ctx, stream_global->recv_initial_metadata_ready, true, NULL); + grpc_exec_ctx_sched(exec_ctx, stream_global->recv_initial_metadata_ready, + GRPC_ERROR_NONE, NULL); stream_global->recv_initial_metadata_ready = NULL; } if (stream_global->recv_message_ready != NULL) { - while (stream_global->seen_error && + while (stream_global->final_metadata_requested && + stream_global->seen_error && (bs = grpc_chttp2_incoming_frame_queue_pop( &stream_global->incoming_frames)) != NULL) { incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs); @@ -1228,13 +1257,13 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx, *stream_global->recv_message = grpc_chttp2_incoming_frame_queue_pop( &stream_global->incoming_frames); GPR_ASSERT(*stream_global->recv_message != NULL); - grpc_exec_ctx_enqueue(exec_ctx, stream_global->recv_message_ready, true, - NULL); + grpc_exec_ctx_sched(exec_ctx, stream_global->recv_message_ready, + GRPC_ERROR_NONE, NULL); stream_global->recv_message_ready = NULL; } else if (stream_global->published_trailing_metadata) { *stream_global->recv_message = NULL; - grpc_exec_ctx_enqueue(exec_ctx, stream_global->recv_message_ready, true, - NULL); + grpc_exec_ctx_sched(exec_ctx, stream_global->recv_message_ready, + GRPC_ERROR_NONE, NULL); stream_global->recv_message_ready = NULL; } } @@ -1255,8 +1284,8 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx, &stream_global->received_trailing_metadata, stream_global->recv_trailing_metadata); grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, - &stream_global->recv_trailing_metadata_finished, 1); + exec_ctx, transport_global, stream_global, + &stream_global->recv_trailing_metadata_finished, GRPC_ERROR_NONE); } } } @@ -1272,7 +1301,7 @@ static void decrement_active_streams_locked( } static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, - uint32_t id) { + uint32_t id, grpc_error *error) { size_t new_stream_count; grpc_chttp2_stream *s = grpc_chttp2_stream_map_delete(&t->parsing_stream_map, id); @@ -1287,12 +1316,15 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, } if (s->parsing.data_parser.parsing_frame != NULL) { grpc_chttp2_incoming_byte_stream_finished( - exec_ctx, s->parsing.data_parser.parsing_frame, 0, 0); + exec_ctx, s->parsing.data_parser.parsing_frame, + GRPC_ERROR_CREATE_REFERENCING("Stream removed", &error, 1), 0); s->parsing.data_parser.parsing_frame = NULL; } if (grpc_chttp2_unregister_stream(t, s) && t->global.sent_goaway) { - close_transport_locked(exec_ctx, t, NULL, NULL); + close_transport_locked( + exec_ctx, t, + GRPC_ERROR_CREATE("Last stream closed after sending GOAWAY")); } if (grpc_chttp2_list_remove_writable_stream(&t->global, &s->global)) { GRPC_CHTTP2_STREAM_UNREF(exec_ctx, &s->global, "chttp2_writing"); @@ -1305,6 +1337,7 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, t->global.concurrent_stream_count = (uint32_t)new_stream_count; maybe_start_some_streams(exec_ctx, &t->global); } + GRPC_ERROR_UNREF(error); } static void cancel_from_api(grpc_exec_ctx *exec_ctx, @@ -1332,8 +1365,10 @@ static void cancel_from_api(grpc_exec_ctx *exec_ctx, stream_global->seen_error = true; grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); } - grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, 1, - 1); + grpc_chttp2_mark_stream_closed( + exec_ctx, transport_global, stream_global, 1, 1, + grpc_error_set_int(GRPC_ERROR_CREATE("Cancelled"), + GRPC_ERROR_INT_GRPC_STATUS, status)); } void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, @@ -1374,23 +1409,27 @@ void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, } static void fail_pending_writes(grpc_exec_ctx *exec_ctx, - grpc_chttp2_stream_global *stream_global) { + grpc_chttp2_transport_global *transport_global, + grpc_chttp2_stream_global *stream_global, + grpc_error *error) { grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, &stream_global->send_initial_metadata_finished, - 0); + exec_ctx, transport_global, stream_global, + &stream_global->send_initial_metadata_finished, GRPC_ERROR_REF(error)); grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, &stream_global->send_trailing_metadata_finished, - 0); - grpc_chttp2_complete_closure_step(exec_ctx, stream_global, - &stream_global->send_message_finished, 0); + exec_ctx, transport_global, stream_global, + &stream_global->send_trailing_metadata_finished, GRPC_ERROR_REF(error)); + grpc_chttp2_complete_closure_step(exec_ctx, transport_global, stream_global, + &stream_global->send_message_finished, + error); } void grpc_chttp2_mark_stream_closed( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global, - grpc_chttp2_stream_global *stream_global, int close_reads, - int close_writes) { + grpc_chttp2_stream_global *stream_global, int close_reads, int close_writes, + grpc_error *error) { if (stream_global->read_closed && stream_global->write_closed) { /* already closed */ + GRPC_ERROR_UNREF(error); return; } grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); @@ -1407,7 +1446,8 @@ void grpc_chttp2_mark_stream_closed( grpc_chttp2_list_add_closed_waiting_for_writing(transport_global, stream_global); } else { - fail_pending_writes(exec_ctx, stream_global); + fail_pending_writes(exec_ctx, transport_global, stream_global, + GRPC_ERROR_REF(error)); } } if (stream_global->read_closed && stream_global->write_closed) { @@ -1418,11 +1458,12 @@ void grpc_chttp2_mark_stream_closed( } else { if (stream_global->id != 0) { remove_stream(exec_ctx, TRANSPORT_FROM_GLOBAL(transport_global), - stream_global->id); + stream_global->id, GRPC_ERROR_REF(error)); } GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2"); } } + GRPC_ERROR_UNREF(error); } static void close_from_api(grpc_exec_ctx *exec_ctx, @@ -1529,8 +1570,16 @@ static void close_from_api(grpc_exec_ctx *exec_ctx, grpc_chttp2_fake_status(exec_ctx, transport_global, stream_global, status, optional_message); + grpc_error *err = GRPC_ERROR_CREATE("Stream closed"); + err = grpc_error_set_int(err, GRPC_ERROR_INT_GRPC_STATUS, status); + if (optional_message) { + char *str = + gpr_dump_slice(*optional_message, GPR_DUMP_HEX | GPR_DUMP_ASCII); + err = grpc_error_set_str(err, GRPC_ERROR_STR_GRPC_MESSAGE, str); + gpr_free(str); + } grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, 1, - 1); + 1, err); } static void cancel_stream_cb(grpc_chttp2_transport_global *transport_global, @@ -1549,8 +1598,9 @@ static void end_all_the_calls(grpc_exec_ctx *exec_ctx, grpc_chttp2_for_all_streams(&t->global, exec_ctx, cancel_stream_cb); } -static void drop_connection(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) { - close_transport_locked(exec_ctx, t, NULL, NULL); +static void drop_connection(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, + grpc_error *error) { + close_transport_locked(exec_ctx, t, error); end_all_the_calls(exec_ctx, t); } @@ -1581,20 +1631,22 @@ static void update_global_window(void *args, uint32_t id, void *stream) { static void reading_action_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s_unused, void *arg); -static void parsing_action(grpc_exec_ctx *exec_ctx, void *arg, bool success); +static void parsing_action(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error); static void post_reading_action_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s_unused, void *arg); static void post_parse_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s_unused, void *arg); -static void reading_action(grpc_exec_ctx *exec_ctx, void *tp, bool success) { +static void reading_action(grpc_exec_ctx *exec_ctx, void *tp, + grpc_error *error) { /* Control flow: reading_action_locked -> (parse_unlocked -> post_parse_locked)? -> post_reading_action_locked */ grpc_chttp2_run_with_global_lock(exec_ctx, tp, NULL, reading_action_locked, - (void *)(uintptr_t)success, 0); + GRPC_ERROR_REF(error), 0); } static void reading_action_locked(grpc_exec_ctx *exec_ctx, @@ -1602,7 +1654,7 @@ static void reading_action_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s_unused, void *arg) { grpc_chttp2_transport_global *transport_global = &t->global; grpc_chttp2_transport_parsing *transport_parsing = &t->parsing; - bool success = (bool)(uintptr_t)arg; + grpc_error *error = arg; GPR_ASSERT(!t->executor.parsing_active); if (!t->closed) { @@ -1611,48 +1663,54 @@ static void reading_action_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream_map_move_into(&t->new_stream_map, &t->parsing_stream_map); grpc_chttp2_prepare_to_read(transport_global, transport_parsing); - grpc_exec_ctx_enqueue(exec_ctx, &t->parsing_action, success, NULL); + grpc_exec_ctx_sched(exec_ctx, &t->parsing_action, error, NULL); } else { post_reading_action_locked(exec_ctx, t, s_unused, arg); } } -static bool try_http_parsing(grpc_exec_ctx *exec_ctx, - grpc_chttp2_transport *t) { +static grpc_error *try_http_parsing(grpc_exec_ctx *exec_ctx, + grpc_chttp2_transport *t) { grpc_http_parser parser; size_t i = 0; - bool success = false; + grpc_error *error = GRPC_ERROR_NONE; + grpc_http_response response; + memset(&response, 0, sizeof(response)); - grpc_http_parser_init(&parser); + grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response); - for (; i < t->read_buffer.count && - grpc_http_parser_parse(&parser, t->read_buffer.slices[i]); - i++) - ; - if (grpc_http_parser_eof(&parser) && parser.type == GRPC_HTTP_RESPONSE) { - success = true; - GRPC_CHTTP2_IF_TRACING(gpr_log( - GPR_DEBUG, "Trying to connect an http1.x server, received status:%d", - parser.http.response.status)); + grpc_error *parse_error = GRPC_ERROR_NONE; + for (; i < t->read_buffer.count && parse_error == GRPC_ERROR_NONE; i++) { + parse_error = grpc_http_parser_parse(&parser, t->read_buffer.slices[i]); + } + if (parse_error == GRPC_ERROR_NONE && + (parse_error = grpc_http_parser_eof(&parser)) == GRPC_ERROR_NONE) { + error = grpc_error_set_int( + GRPC_ERROR_CREATE("Trying to connect an http1.x server"), + GRPC_ERROR_INT_HTTP_STATUS, response.status); } + GRPC_ERROR_UNREF(parse_error); grpc_http_parser_destroy(&parser); - return success; + grpc_http_response_destroy(&response); + return error; } -static void parsing_action(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void parsing_action(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { grpc_chttp2_transport *t = arg; GPR_TIMER_BEGIN("reading_action.parse", 0); size_t i = 0; - for (; i < t->read_buffer.count && - grpc_chttp2_perform_read(exec_ctx, &t->parsing, - t->read_buffer.slices[i]); - i++) - ; + grpc_error *errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE, + GRPC_ERROR_NONE}; + for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) { + errors[1] = grpc_chttp2_perform_read(exec_ctx, &t->parsing, + t->read_buffer.slices[i]); + }; if (i != t->read_buffer.count) { - success = false; gpr_slice_unref(t->optional_drop_message); - if (try_http_parsing(exec_ctx, t)) { + errors[2] = try_http_parsing(exec_ctx, t); + if (errors[2] != GRPC_ERROR_NONE) { t->optional_drop_message = gpr_slice_from_copied_string( "Connection dropped: received http1.x response"); } else { @@ -1660,9 +1718,18 @@ static void parsing_action(grpc_exec_ctx *exec_ctx, void *arg, bool success) { "Connection dropped: received unparseable response"); } } + grpc_error *err = + errors[0] == GRPC_ERROR_NONE && errors[1] == GRPC_ERROR_NONE && + errors[2] == GRPC_ERROR_NONE + ? GRPC_ERROR_NONE + : GRPC_ERROR_CREATE_REFERENCING("Failed parsing HTTP/2", errors, + GPR_ARRAY_SIZE(errors)); + for (i = 0; i < GPR_ARRAY_SIZE(errors); i++) { + GRPC_ERROR_UNREF(errors[i]); + } GPR_TIMER_END("reading_action.parse", 0); - grpc_chttp2_run_with_global_lock(exec_ctx, t, NULL, post_parse_locked, - (void *)(uintptr_t)success, 0); + grpc_chttp2_run_with_global_lock(exec_ctx, t, NULL, post_parse_locked, err, + 0); } static void post_parse_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, @@ -1699,7 +1766,8 @@ static void post_parse_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, GPR_ASSERT(stream_global->in_stream_map); GPR_ASSERT(stream_global->write_closed); GPR_ASSERT(stream_global->read_closed); - remove_stream(exec_ctx, t, stream_global->id); + remove_stream(exec_ctx, t, stream_global->id, + GRPC_ERROR_CREATE("Stream removed")); GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2"); } @@ -1710,10 +1778,13 @@ static void post_reading_action_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s_unused, void *arg) { - bool success = (bool)(uintptr_t)arg; + grpc_error *error = arg; bool keep_reading = false; - if (!success || t->closed) { - drop_connection(exec_ctx, t); + if (error == GRPC_ERROR_NONE && t->closed) { + error = GRPC_ERROR_CREATE("Transport closed"); + } + if (error != GRPC_ERROR_NONE) { + drop_connection(exec_ctx, t, GRPC_ERROR_REF(error)); t->endpoint_reading = 0; if (!t->executor.writing_active && t->ep) { grpc_endpoint_destroy(exec_ctx, t->ep); @@ -1735,6 +1806,8 @@ static void post_reading_action_locked(grpc_exec_ctx *exec_ctx, } else { UNREF_TRANSPORT(exec_ctx, t, "reading_action"); } + + GRPC_LOG_IF_ERROR("close_transport", error); } /******************************************************************************* @@ -1743,13 +1816,13 @@ static void post_reading_action_locked(grpc_exec_ctx *exec_ctx, static void connectivity_state_set( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global, - grpc_connectivity_state state, const char *reason) { + grpc_connectivity_state state, grpc_error *error, const char *reason) { GRPC_CHTTP2_IF_TRACING( gpr_log(GPR_DEBUG, "set connectivity_state=%d", state)); grpc_connectivity_state_set( exec_ctx, &TRANSPORT_FROM_GLOBAL(transport_global)->channel_callback.state_tracker, - state, reason); + state, error, reason); } /******************************************************************************* @@ -1795,6 +1868,7 @@ static void set_pollset_set(grpc_exec_ctx *exec_ctx, grpc_transport *gt, static void incoming_byte_stream_unref(grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs) { if (gpr_unref(&bs->refs)) { + GRPC_ERROR_UNREF(bs->error); gpr_slice_buffer_destroy(&bs->slices); gpr_free(bs); } @@ -1863,9 +1937,10 @@ static void incoming_byte_stream_next_locked(grpc_exec_ctx *exec_ctx, } if (bs->slices.count > 0) { *arg->slice = gpr_slice_buffer_take_first(&bs->slices); - grpc_exec_ctx_enqueue(exec_ctx, arg->on_complete, true, NULL); - } else if (bs->failed) { - grpc_exec_ctx_enqueue(exec_ctx, arg->on_complete, false, NULL); + grpc_exec_ctx_sched(exec_ctx, arg->on_complete, GRPC_ERROR_NONE, NULL); + } else if (bs->error != GRPC_ERROR_NONE) { + grpc_exec_ctx_sched(exec_ctx, arg->on_complete, GRPC_ERROR_REF(bs->error), + NULL); } else { bs->on_next = arg->on_complete; bs->next = arg->slice; @@ -1922,7 +1997,7 @@ static void incoming_byte_stream_push_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs = arg->byte_stream; if (bs->on_next != NULL) { *bs->next = arg->slice; - grpc_exec_ctx_enqueue(exec_ctx, bs->on_next, true, NULL); + grpc_exec_ctx_sched(exec_ctx, bs->on_next, GRPC_ERROR_NONE, NULL); bs->on_next = NULL; } else { gpr_slice_buffer_add(&bs->slices, arg->slice); @@ -1940,13 +2015,30 @@ void grpc_chttp2_incoming_byte_stream_push(grpc_exec_ctx *exec_ctx, sizeof(arg)); } +typedef struct { + grpc_chttp2_incoming_byte_stream *bs; + grpc_error *error; +} bs_fail_args; + +static bs_fail_args *make_bs_fail_args(grpc_chttp2_incoming_byte_stream *bs, + grpc_error *error) { + bs_fail_args *a = gpr_malloc(sizeof(*a)); + a->bs = bs; + a->error = error; + return a; +} + static void incoming_byte_stream_finished_failed_locked( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s, void *argp) { - grpc_chttp2_incoming_byte_stream *bs = argp; - grpc_exec_ctx_enqueue(exec_ctx, bs->on_next, false, NULL); + bs_fail_args *a = argp; + grpc_chttp2_incoming_byte_stream *bs = a->bs; + grpc_error *error = a->error; + gpr_free(a); + grpc_exec_ctx_sched(exec_ctx, bs->on_next, GRPC_ERROR_REF(error), NULL); bs->on_next = NULL; - bs->failed = 1; + GRPC_ERROR_UNREF(bs->error); + bs->error = error; incoming_byte_stream_unref(exec_ctx, bs); } @@ -1959,25 +2051,26 @@ static void incoming_byte_stream_finished_ok_locked(grpc_exec_ctx *exec_ctx, } void grpc_chttp2_incoming_byte_stream_finished( - grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs, int success, - int from_parsing_thread) { + grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs, + grpc_error *error, int from_parsing_thread) { if (from_parsing_thread) { - if (success) { + if (error == GRPC_ERROR_NONE) { grpc_chttp2_run_with_global_lock(exec_ctx, bs->transport, bs->stream, incoming_byte_stream_finished_ok_locked, bs, 0); } else { - incoming_byte_stream_finished_ok_locked(exec_ctx, bs->transport, - bs->stream, bs); - } - } else { - if (success) { grpc_chttp2_run_with_global_lock( exec_ctx, bs->transport, bs->stream, - incoming_byte_stream_finished_failed_locked, bs, 0); + incoming_byte_stream_finished_failed_locked, + make_bs_fail_args(bs, error), 0); + } + } else { + if (error == GRPC_ERROR_NONE) { + incoming_byte_stream_finished_ok_locked(exec_ctx, bs->transport, + bs->stream, bs); } else { - incoming_byte_stream_finished_failed_locked(exec_ctx, bs->transport, - bs->stream, bs); + incoming_byte_stream_finished_failed_locked( + exec_ctx, bs->transport, bs->stream, make_bs_fail_args(bs, error)); } } } @@ -2000,7 +2093,7 @@ grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create( gpr_slice_buffer_init(&incoming_byte_stream->slices); incoming_byte_stream->on_next = NULL; incoming_byte_stream->is_tail = 1; - incoming_byte_stream->failed = 0; + incoming_byte_stream->error = GRPC_ERROR_NONE; if (add_to_queue->head == NULL) { add_to_queue->head = incoming_byte_stream; } else { @@ -2141,5 +2234,5 @@ void grpc_chttp2_transport_start_reading(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t = (grpc_chttp2_transport *)transport; REF_TRANSPORT(t, "reading_action"); /* matches unref inside reading_action */ gpr_slice_buffer_addn(&t->read_buffer, slices, nslices); - reading_action(exec_ctx, t, 1); + reading_action(exec_ctx, t, GRPC_ERROR_NONE); } diff --git a/src/core/ext/transport/chttp2/transport/frame.h b/src/core/ext/transport/chttp2/transport/frame.h index 5c72d91c2a..7776609367 100644 --- a/src/core/ext/transport/chttp2/transport/frame.h +++ b/src/core/ext/transport/chttp2/transport/frame.h @@ -37,13 +37,7 @@ #include <grpc/support/port_platform.h> #include <grpc/support/slice.h> -/* Common definitions for frame handling in the chttp2 transport */ - -typedef enum { - GRPC_CHTTP2_PARSE_OK, - GRPC_CHTTP2_STREAM_ERROR, - GRPC_CHTTP2_CONNECTION_ERROR -} grpc_chttp2_parse_error; +#include "src/core/lib/iomgr/error.h" /* defined in internal.h */ typedef struct grpc_chttp2_stream_parsing grpc_chttp2_stream_parsing; diff --git a/src/core/ext/transport/chttp2/transport/frame_data.c b/src/core/ext/transport/chttp2/transport/frame_data.c index 3a6d80e0a3..9046fbc453 100644 --- a/src/core/ext/transport/chttp2/transport/frame_data.c +++ b/src/core/ext/transport/chttp2/transport/frame_data.c @@ -37,24 +37,25 @@ #include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> #include <grpc/support/useful.h> #include "src/core/ext/transport/chttp2/transport/internal.h" #include "src/core/lib/support/string.h" #include "src/core/lib/transport/transport.h" -grpc_chttp2_parse_error grpc_chttp2_data_parser_init( - grpc_chttp2_data_parser *parser) { +grpc_error *grpc_chttp2_data_parser_init(grpc_chttp2_data_parser *parser) { parser->state = GRPC_CHTTP2_DATA_FH_0; parser->parsing_frame = NULL; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } void grpc_chttp2_data_parser_destroy(grpc_exec_ctx *exec_ctx, grpc_chttp2_data_parser *parser) { grpc_byte_stream *bs; if (parser->parsing_frame) { - grpc_chttp2_incoming_byte_stream_finished(exec_ctx, parser->parsing_frame, - 0, 1); + grpc_chttp2_incoming_byte_stream_finished( + exec_ctx, parser->parsing_frame, GRPC_ERROR_CREATE("Parser destroyed"), + 1); } while ( (bs = grpc_chttp2_incoming_frame_queue_pop(&parser->incoming_frames))) { @@ -62,11 +63,16 @@ void grpc_chttp2_data_parser_destroy(grpc_exec_ctx *exec_ctx, } } -grpc_chttp2_parse_error grpc_chttp2_data_parser_begin_frame( - grpc_chttp2_data_parser *parser, uint8_t flags) { +grpc_error *grpc_chttp2_data_parser_begin_frame(grpc_chttp2_data_parser *parser, + uint8_t flags, + uint32_t stream_id) { if (flags & ~GRPC_CHTTP2_DATA_FLAG_END_STREAM) { - gpr_log(GPR_ERROR, "unsupported data flags: 0x%02x", flags); - return GRPC_CHTTP2_STREAM_ERROR; + char *msg; + gpr_asprintf(&msg, "unsupported data flags: 0x%02x", flags); + grpc_error *err = grpc_error_set_int( + GRPC_ERROR_CREATE(msg), GRPC_ERROR_INT_STREAM_ID, (intptr_t)stream_id); + gpr_free(msg); + return err; } if (flags & GRPC_CHTTP2_DATA_FLAG_END_STREAM) { @@ -75,7 +81,7 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_begin_frame( parser->is_last_frame = 0; } - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } void grpc_chttp2_incoming_frame_queue_merge( @@ -139,7 +145,7 @@ void grpc_chttp2_encode_data(uint32_t id, gpr_slice_buffer *inbuf, stats->data_bytes += write_bytes; } -grpc_chttp2_parse_error grpc_chttp2_data_parser_parse( +grpc_error *grpc_chttp2_data_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) { @@ -149,19 +155,20 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_parse( grpc_chttp2_data_parser *p = parser; uint32_t message_flags; grpc_chttp2_incoming_byte_stream *incoming_byte_stream; + char *msg; if (is_last && p->is_last_frame) { stream_parsing->received_close = 1; } if (cur == end) { - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } switch (p->state) { case GRPC_CHTTP2_DATA_ERROR: p->state = GRPC_CHTTP2_DATA_ERROR; - return GRPC_CHTTP2_STREAM_ERROR; + return GRPC_ERROR_REF(p->error); fh_0: case GRPC_CHTTP2_DATA_FH_0: stream_parsing->stats.incoming.framing_bytes++; @@ -174,13 +181,23 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_parse( p->is_frame_compressed = 1; /* GPR_TRUE */ break; default: - gpr_log(GPR_ERROR, "Bad GRPC frame type 0x%02x", p->frame_type); + gpr_asprintf(&msg, "Bad GRPC frame type 0x%02x", p->frame_type); + p->error = GRPC_ERROR_CREATE(msg); + p->error = grpc_error_set_int(p->error, GRPC_ERROR_INT_STREAM_ID, + (intptr_t)stream_parsing->id); + gpr_free(msg); + msg = gpr_dump_slice(slice, GPR_DUMP_HEX | GPR_DUMP_ASCII); + p->error = + grpc_error_set_str(p->error, GRPC_ERROR_STR_RAW_BYTES, msg); + gpr_free(msg); + p->error = + grpc_error_set_int(p->error, GRPC_ERROR_INT_OFFSET, cur - beg); p->state = GRPC_CHTTP2_DATA_ERROR; - return GRPC_CHTTP2_STREAM_ERROR; + return GRPC_ERROR_REF(p->error); } if (++cur == end) { p->state = GRPC_CHTTP2_DATA_FH_1; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_CHTTP2_DATA_FH_1: @@ -188,7 +205,7 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_parse( p->frame_size = ((uint32_t)*cur) << 24; if (++cur == end) { p->state = GRPC_CHTTP2_DATA_FH_2; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_CHTTP2_DATA_FH_2: @@ -196,7 +213,7 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_parse( p->frame_size |= ((uint32_t)*cur) << 16; if (++cur == end) { p->state = GRPC_CHTTP2_DATA_FH_3; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_CHTTP2_DATA_FH_3: @@ -204,7 +221,7 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_parse( p->frame_size |= ((uint32_t)*cur) << 8; if (++cur == end) { p->state = GRPC_CHTTP2_DATA_FH_4; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_CHTTP2_DATA_FH_4: @@ -225,7 +242,7 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_parse( grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing); if (cur == end) { - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } uint32_t remaining = (uint32_t)(end - cur); if (remaining == p->frame_size) { @@ -233,19 +250,19 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_parse( grpc_chttp2_incoming_byte_stream_push( exec_ctx, p->parsing_frame, gpr_slice_sub(slice, (size_t)(cur - beg), (size_t)(end - beg))); - grpc_chttp2_incoming_byte_stream_finished(exec_ctx, p->parsing_frame, 1, - 1); + grpc_chttp2_incoming_byte_stream_finished(exec_ctx, p->parsing_frame, + GRPC_ERROR_NONE, 1); p->parsing_frame = NULL; p->state = GRPC_CHTTP2_DATA_FH_0; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } else if (remaining > p->frame_size) { stream_parsing->stats.incoming.data_bytes += p->frame_size; grpc_chttp2_incoming_byte_stream_push( exec_ctx, p->parsing_frame, gpr_slice_sub(slice, (size_t)(cur - beg), (size_t)(cur + p->frame_size - beg))); - grpc_chttp2_incoming_byte_stream_finished(exec_ctx, p->parsing_frame, 1, - 1); + grpc_chttp2_incoming_byte_stream_finished(exec_ctx, p->parsing_frame, + GRPC_ERROR_NONE, 1); p->parsing_frame = NULL; cur += p->frame_size; goto fh_0; /* loop */ @@ -256,9 +273,9 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_parse( gpr_slice_sub(slice, (size_t)(cur - beg), (size_t)(end - beg))); p->frame_size -= remaining; stream_parsing->stats.incoming.data_bytes += remaining; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } } - GPR_UNREACHABLE_CODE(return GRPC_CHTTP2_CONNECTION_ERROR); + GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); } diff --git a/src/core/ext/transport/chttp2/transport/frame_data.h b/src/core/ext/transport/chttp2/transport/frame_data.h index af71f483a2..a21a7942b9 100644 --- a/src/core/ext/transport/chttp2/transport/frame_data.h +++ b/src/core/ext/transport/chttp2/transport/frame_data.h @@ -66,6 +66,7 @@ typedef struct { uint8_t is_last_frame; uint8_t frame_type; uint32_t frame_size; + grpc_error *error; int is_frame_compressed; grpc_chttp2_incoming_frame_queue incoming_frames; @@ -79,19 +80,19 @@ grpc_byte_stream *grpc_chttp2_incoming_frame_queue_pop( grpc_chttp2_incoming_frame_queue *q); /* initialize per-stream state for data frame parsing */ -grpc_chttp2_parse_error grpc_chttp2_data_parser_init( - grpc_chttp2_data_parser *parser); +grpc_error *grpc_chttp2_data_parser_init(grpc_chttp2_data_parser *parser); void grpc_chttp2_data_parser_destroy(grpc_exec_ctx *exec_ctx, grpc_chttp2_data_parser *parser); /* start processing a new data frame */ -grpc_chttp2_parse_error grpc_chttp2_data_parser_begin_frame( - grpc_chttp2_data_parser *parser, uint8_t flags); +grpc_error *grpc_chttp2_data_parser_begin_frame(grpc_chttp2_data_parser *parser, + uint8_t flags, + uint32_t stream_id); /* handle a slice of a data frame - is_last indicates the last slice of a frame */ -grpc_chttp2_parse_error grpc_chttp2_data_parser_parse( +grpc_error *grpc_chttp2_data_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last); diff --git a/src/core/ext/transport/chttp2/transport/frame_goaway.c b/src/core/ext/transport/chttp2/transport/frame_goaway.c index 827e7a6977..299e27ad70 100644 --- a/src/core/ext/transport/chttp2/transport/frame_goaway.c +++ b/src/core/ext/transport/chttp2/transport/frame_goaway.c @@ -38,6 +38,7 @@ #include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> void grpc_chttp2_goaway_parser_init(grpc_chttp2_goaway_parser *p) { p->debug_data = NULL; @@ -47,11 +48,15 @@ void grpc_chttp2_goaway_parser_destroy(grpc_chttp2_goaway_parser *p) { gpr_free(p->debug_data); } -grpc_chttp2_parse_error grpc_chttp2_goaway_parser_begin_frame( - grpc_chttp2_goaway_parser *p, uint32_t length, uint8_t flags) { +grpc_error *grpc_chttp2_goaway_parser_begin_frame(grpc_chttp2_goaway_parser *p, + uint32_t length, + uint8_t flags) { if (length < 8) { - gpr_log(GPR_ERROR, "goaway frame too short (%d bytes)", length); - return GRPC_CHTTP2_CONNECTION_ERROR; + char *msg; + gpr_asprintf(&msg, "goaway frame too short (%d bytes)", length); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } gpr_free(p->debug_data); @@ -59,10 +64,10 @@ grpc_chttp2_parse_error grpc_chttp2_goaway_parser_begin_frame( p->debug_data = gpr_malloc(p->debug_length); p->debug_pos = 0; p->state = GRPC_CHTTP2_GOAWAY_LSI0; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } -grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( +grpc_error *grpc_chttp2_goaway_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) { @@ -75,7 +80,7 @@ grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( case GRPC_CHTTP2_GOAWAY_LSI0: if (cur == end) { p->state = GRPC_CHTTP2_GOAWAY_LSI0; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } p->last_stream_id = ((uint32_t)*cur) << 24; ++cur; @@ -83,7 +88,7 @@ grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( case GRPC_CHTTP2_GOAWAY_LSI1: if (cur == end) { p->state = GRPC_CHTTP2_GOAWAY_LSI1; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } p->last_stream_id |= ((uint32_t)*cur) << 16; ++cur; @@ -91,7 +96,7 @@ grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( case GRPC_CHTTP2_GOAWAY_LSI2: if (cur == end) { p->state = GRPC_CHTTP2_GOAWAY_LSI2; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } p->last_stream_id |= ((uint32_t)*cur) << 8; ++cur; @@ -99,7 +104,7 @@ grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( case GRPC_CHTTP2_GOAWAY_LSI3: if (cur == end) { p->state = GRPC_CHTTP2_GOAWAY_LSI3; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } p->last_stream_id |= ((uint32_t)*cur); ++cur; @@ -107,7 +112,7 @@ grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( case GRPC_CHTTP2_GOAWAY_ERR0: if (cur == end) { p->state = GRPC_CHTTP2_GOAWAY_ERR0; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } p->error_code = ((uint32_t)*cur) << 24; ++cur; @@ -115,7 +120,7 @@ grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( case GRPC_CHTTP2_GOAWAY_ERR1: if (cur == end) { p->state = GRPC_CHTTP2_GOAWAY_ERR1; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } p->error_code |= ((uint32_t)*cur) << 16; ++cur; @@ -123,7 +128,7 @@ grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( case GRPC_CHTTP2_GOAWAY_ERR2: if (cur == end) { p->state = GRPC_CHTTP2_GOAWAY_ERR2; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } p->error_code |= ((uint32_t)*cur) << 8; ++cur; @@ -131,7 +136,7 @@ grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( case GRPC_CHTTP2_GOAWAY_ERR3: if (cur == end) { p->state = GRPC_CHTTP2_GOAWAY_ERR3; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } p->error_code |= ((uint32_t)*cur); ++cur; @@ -151,9 +156,9 @@ grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( gpr_slice_new(p->debug_data, p->debug_length, gpr_free); p->debug_data = NULL; } - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } - GPR_UNREACHABLE_CODE(return GRPC_CHTTP2_CONNECTION_ERROR); + GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); } void grpc_chttp2_goaway_append(uint32_t last_stream_id, uint32_t error_code, diff --git a/src/core/ext/transport/chttp2/transport/frame_goaway.h b/src/core/ext/transport/chttp2/transport/frame_goaway.h index 7c38b26a39..eb4303405a 100644 --- a/src/core/ext/transport/chttp2/transport/frame_goaway.h +++ b/src/core/ext/transport/chttp2/transport/frame_goaway.h @@ -63,9 +63,9 @@ typedef struct { void grpc_chttp2_goaway_parser_init(grpc_chttp2_goaway_parser *p); void grpc_chttp2_goaway_parser_destroy(grpc_chttp2_goaway_parser *p); -grpc_chttp2_parse_error grpc_chttp2_goaway_parser_begin_frame( +grpc_error *grpc_chttp2_goaway_parser_begin_frame( grpc_chttp2_goaway_parser *parser, uint32_t length, uint8_t flags); -grpc_chttp2_parse_error grpc_chttp2_goaway_parser_parse( +grpc_error *grpc_chttp2_goaway_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last); diff --git a/src/core/ext/transport/chttp2/transport/frame_ping.c b/src/core/ext/transport/chttp2/transport/frame_ping.c index 7e1815f0fe..1f814ab1bd 100644 --- a/src/core/ext/transport/chttp2/transport/frame_ping.c +++ b/src/core/ext/transport/chttp2/transport/frame_ping.c @@ -38,6 +38,7 @@ #include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> gpr_slice grpc_chttp2_ping_create(uint8_t ack, uint8_t *opaque_8bytes) { gpr_slice slice = gpr_slice_malloc(9 + 8); @@ -57,18 +58,22 @@ gpr_slice grpc_chttp2_ping_create(uint8_t ack, uint8_t *opaque_8bytes) { return slice; } -grpc_chttp2_parse_error grpc_chttp2_ping_parser_begin_frame( - grpc_chttp2_ping_parser *parser, uint32_t length, uint8_t flags) { +grpc_error *grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser *parser, + uint32_t length, + uint8_t flags) { if (flags & 0xfe || length != 8) { - gpr_log(GPR_ERROR, "invalid ping: length=%d, flags=%02x", length, flags); - return GRPC_CHTTP2_CONNECTION_ERROR; + char *msg; + gpr_asprintf(&msg, "invalid ping: length=%d, flags=%02x", length, flags); + grpc_error *error = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return error; } parser->byte = 0; parser->is_ack = flags; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } -grpc_chttp2_parse_error grpc_chttp2_ping_parser_parse( +grpc_error *grpc_chttp2_ping_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) { @@ -93,5 +98,5 @@ grpc_chttp2_parse_error grpc_chttp2_ping_parser_parse( } } - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } diff --git a/src/core/ext/transport/chttp2/transport/frame_ping.h b/src/core/ext/transport/chttp2/transport/frame_ping.h index 4f7fcc1305..5a8723421c 100644 --- a/src/core/ext/transport/chttp2/transport/frame_ping.h +++ b/src/core/ext/transport/chttp2/transport/frame_ping.h @@ -46,9 +46,9 @@ typedef struct { gpr_slice grpc_chttp2_ping_create(uint8_t ack, uint8_t *opaque_8bytes); -grpc_chttp2_parse_error grpc_chttp2_ping_parser_begin_frame( - grpc_chttp2_ping_parser *parser, uint32_t length, uint8_t flags); -grpc_chttp2_parse_error grpc_chttp2_ping_parser_parse( +grpc_error *grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser *parser, + uint32_t length, uint8_t flags); +grpc_error *grpc_chttp2_ping_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last); diff --git a/src/core/ext/transport/chttp2/transport/frame_rst_stream.c b/src/core/ext/transport/chttp2/transport/frame_rst_stream.c index 7f01105e3e..e3a3c9e4a7 100644 --- a/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +++ b/src/core/ext/transport/chttp2/transport/frame_rst_stream.c @@ -34,7 +34,9 @@ #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h" #include "src/core/ext/transport/chttp2/transport/internal.h" +#include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> #include "src/core/ext/transport/chttp2/transport/frame.h" @@ -67,18 +69,21 @@ gpr_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code, return slice; } -grpc_chttp2_parse_error grpc_chttp2_rst_stream_parser_begin_frame( +grpc_error *grpc_chttp2_rst_stream_parser_begin_frame( grpc_chttp2_rst_stream_parser *parser, uint32_t length, uint8_t flags) { if (length != 4) { - gpr_log(GPR_ERROR, "invalid rst_stream: length=%d, flags=%02x", length, - flags); - return GRPC_CHTTP2_CONNECTION_ERROR; + char *msg; + gpr_asprintf(&msg, "invalid rst_stream: length=%d, flags=%02x", length, + flags); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } parser->byte = 0; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } -grpc_chttp2_parse_error grpc_chttp2_rst_stream_parser_parse( +grpc_error *grpc_chttp2_rst_stream_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) { @@ -97,12 +102,15 @@ grpc_chttp2_parse_error grpc_chttp2_rst_stream_parser_parse( if (p->byte == 4) { GPR_ASSERT(is_last); stream_parsing->received_close = 1; - stream_parsing->saw_rst_stream = 1; - stream_parsing->rst_stream_reason = (((uint32_t)p->reason_bytes[0]) << 24) | - (((uint32_t)p->reason_bytes[1]) << 16) | - (((uint32_t)p->reason_bytes[2]) << 8) | - (((uint32_t)p->reason_bytes[3])); + if (stream_parsing->forced_close_error == GRPC_ERROR_NONE) { + stream_parsing->forced_close_error = grpc_error_set_int( + GRPC_ERROR_CREATE("RST_STREAM"), GRPC_ERROR_INT_HTTP2_ERROR, + (intptr_t)((((uint32_t)p->reason_bytes[0]) << 24) | + (((uint32_t)p->reason_bytes[1]) << 16) | + (((uint32_t)p->reason_bytes[2]) << 8) | + (((uint32_t)p->reason_bytes[3])))); + } } - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } diff --git a/src/core/ext/transport/chttp2/transport/frame_rst_stream.h b/src/core/ext/transport/chttp2/transport/frame_rst_stream.h index 9c1e756a94..11cf94f3ea 100644 --- a/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +++ b/src/core/ext/transport/chttp2/transport/frame_rst_stream.h @@ -47,9 +47,9 @@ typedef struct { gpr_slice grpc_chttp2_rst_stream_create(uint32_t stream_id, uint32_t code, grpc_transport_one_way_stats *stats); -grpc_chttp2_parse_error grpc_chttp2_rst_stream_parser_begin_frame( +grpc_error *grpc_chttp2_rst_stream_parser_begin_frame( grpc_chttp2_rst_stream_parser *parser, uint32_t length, uint8_t flags); -grpc_chttp2_parse_error grpc_chttp2_rst_stream_parser_parse( +grpc_error *grpc_chttp2_rst_stream_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last); diff --git a/src/core/ext/transport/chttp2/transport/frame_settings.c b/src/core/ext/transport/chttp2/transport/frame_settings.c index a3c1e15f35..04b96c4cd9 100644 --- a/src/core/ext/transport/chttp2/transport/frame_settings.c +++ b/src/core/ext/transport/chttp2/transport/frame_settings.c @@ -36,7 +36,9 @@ #include <string.h> +#include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> #include <grpc/support/useful.h> #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" @@ -118,7 +120,7 @@ gpr_slice grpc_chttp2_settings_ack_create(void) { return output; } -grpc_chttp2_parse_error grpc_chttp2_settings_parser_begin_frame( +grpc_error *grpc_chttp2_settings_parser_begin_frame( grpc_chttp2_settings_parser *parser, uint32_t length, uint8_t flags, uint32_t *settings) { parser->target_settings = settings; @@ -129,31 +131,29 @@ grpc_chttp2_parse_error grpc_chttp2_settings_parser_begin_frame( if (flags == GRPC_CHTTP2_FLAG_ACK) { parser->is_ack = 1; if (length != 0) { - gpr_log(GPR_ERROR, "non-empty settings ack frame received"); - return GRPC_CHTTP2_CONNECTION_ERROR; + return GRPC_ERROR_CREATE("non-empty settings ack frame received"); } - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } else if (flags != 0) { - gpr_log(GPR_ERROR, "invalid flags on settings frame"); - return GRPC_CHTTP2_CONNECTION_ERROR; + return GRPC_ERROR_CREATE("invalid flags on settings frame"); } else if (length % 6 != 0) { - gpr_log(GPR_ERROR, "settings frames must be a multiple of six bytes"); - return GRPC_CHTTP2_CONNECTION_ERROR; + return GRPC_ERROR_CREATE("settings frames must be a multiple of six bytes"); } else { - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } } -grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse( +grpc_error *grpc_chttp2_settings_parser_parse( grpc_exec_ctx *exec_ctx, void *p, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) { grpc_chttp2_settings_parser *parser = p; const uint8_t *cur = GPR_SLICE_START_PTR(slice); const uint8_t *end = GPR_SLICE_END_PTR(slice); + char *msg; if (parser->is_ack) { - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } for (;;) { @@ -168,7 +168,7 @@ grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse( gpr_slice_buffer_add(&transport_parsing->qbuf, grpc_chttp2_settings_ack_create()); } - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } parser->id = (uint16_t)(((uint16_t)*cur) << 8); cur++; @@ -176,7 +176,7 @@ grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse( case GRPC_CHTTP2_SPS_ID1: if (cur == end) { parser->state = GRPC_CHTTP2_SPS_ID1; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } parser->id = (uint16_t)(parser->id | (*cur)); cur++; @@ -184,7 +184,7 @@ grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse( case GRPC_CHTTP2_SPS_VAL0: if (cur == end) { parser->state = GRPC_CHTTP2_SPS_VAL0; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } parser->value = ((uint32_t)*cur) << 24; cur++; @@ -192,7 +192,7 @@ grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse( case GRPC_CHTTP2_SPS_VAL1: if (cur == end) { parser->state = GRPC_CHTTP2_SPS_VAL1; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } parser->value |= ((uint32_t)*cur) << 16; cur++; @@ -200,7 +200,7 @@ grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse( case GRPC_CHTTP2_SPS_VAL2: if (cur == end) { parser->state = GRPC_CHTTP2_SPS_VAL2; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } parser->value |= ((uint32_t)*cur) << 8; cur++; @@ -208,7 +208,7 @@ grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse( case GRPC_CHTTP2_SPS_VAL3: if (cur == end) { parser->state = GRPC_CHTTP2_SPS_VAL3; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } else { parser->state = GRPC_CHTTP2_SPS_ID0; } @@ -229,9 +229,11 @@ grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse( transport_parsing->last_incoming_stream_id, sp->error_value, gpr_slice_from_static_string("HTTP2 settings error"), &transport_parsing->qbuf); - gpr_log(GPR_ERROR, "invalid value %u passed for %s", - parser->value, sp->name); - return GRPC_CHTTP2_CONNECTION_ERROR; + gpr_asprintf(&msg, "invalid value %u passed for %s", + parser->value, sp->name); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } } if (parser->id == GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE && @@ -249,7 +251,7 @@ grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse( transport_parsing->is_client ? "CLI" : "SVR", parser->id, parser->value); } - } else { + } else if (grpc_http_trace) { gpr_log(GPR_ERROR, "CHTTP2: Ignoring unknown setting %d (value %d)", parser->id, parser->value); } diff --git a/src/core/ext/transport/chttp2/transport/frame_settings.h b/src/core/ext/transport/chttp2/transport/frame_settings.h index d9e30f1ed0..f654c598c8 100644 --- a/src/core/ext/transport/chttp2/transport/frame_settings.h +++ b/src/core/ext/transport/chttp2/transport/frame_settings.h @@ -92,10 +92,10 @@ gpr_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new, /* Create an ack settings frame */ gpr_slice grpc_chttp2_settings_ack_create(void); -grpc_chttp2_parse_error grpc_chttp2_settings_parser_begin_frame( +grpc_error *grpc_chttp2_settings_parser_begin_frame( grpc_chttp2_settings_parser *parser, uint32_t length, uint8_t flags, uint32_t *settings); -grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse( +grpc_error *grpc_chttp2_settings_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last); diff --git a/src/core/ext/transport/chttp2/transport/frame_window_update.c b/src/core/ext/transport/chttp2/transport/frame_window_update.c index 90243418bd..3cf848fd5c 100644 --- a/src/core/ext/transport/chttp2/transport/frame_window_update.c +++ b/src/core/ext/transport/chttp2/transport/frame_window_update.c @@ -34,7 +34,9 @@ #include "src/core/ext/transport/chttp2/transport/frame_window_update.h" #include "src/core/ext/transport/chttp2/transport/internal.h" +#include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> gpr_slice grpc_chttp2_window_update_create( uint32_t id, uint32_t window_update, grpc_transport_one_way_stats *stats) { @@ -62,19 +64,22 @@ gpr_slice grpc_chttp2_window_update_create( return slice; } -grpc_chttp2_parse_error grpc_chttp2_window_update_parser_begin_frame( +grpc_error *grpc_chttp2_window_update_parser_begin_frame( grpc_chttp2_window_update_parser *parser, uint32_t length, uint8_t flags) { if (flags || length != 4) { - gpr_log(GPR_ERROR, "invalid window update: length=%d, flags=%02x", length, - flags); - return GRPC_CHTTP2_CONNECTION_ERROR; + char *msg; + gpr_asprintf(&msg, "invalid window update: length=%d, flags=%02x", length, + flags); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } parser->byte = 0; parser->amount = 0; - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } -grpc_chttp2_parse_error grpc_chttp2_window_update_parser_parse( +grpc_error *grpc_chttp2_window_update_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) { @@ -96,8 +101,11 @@ grpc_chttp2_parse_error grpc_chttp2_window_update_parser_parse( if (p->byte == 4) { uint32_t received_update = p->amount; if (received_update == 0 || (received_update & 0x80000000u)) { - gpr_log(GPR_ERROR, "invalid window update bytes: %d", p->amount); - return GRPC_CHTTP2_CONNECTION_ERROR; + char *msg; + gpr_asprintf(&msg, "invalid window update bytes: %d", p->amount); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } GPR_ASSERT(is_last); @@ -115,5 +123,5 @@ grpc_chttp2_parse_error grpc_chttp2_window_update_parser_parse( } } - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } diff --git a/src/core/ext/transport/chttp2/transport/frame_window_update.h b/src/core/ext/transport/chttp2/transport/frame_window_update.h index d6e87b9329..1bcbbf9247 100644 --- a/src/core/ext/transport/chttp2/transport/frame_window_update.h +++ b/src/core/ext/transport/chttp2/transport/frame_window_update.h @@ -48,9 +48,9 @@ typedef struct { gpr_slice grpc_chttp2_window_update_create(uint32_t id, uint32_t window_delta, grpc_transport_one_way_stats *stats); -grpc_chttp2_parse_error grpc_chttp2_window_update_parser_begin_frame( +grpc_error *grpc_chttp2_window_update_parser_begin_frame( grpc_chttp2_window_update_parser *parser, uint32_t length, uint8_t flags); -grpc_chttp2_parse_error grpc_chttp2_window_update_parser_parse( +grpc_error *grpc_chttp2_window_update_parser_parse( grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last); diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.c b/src/core/ext/transport/chttp2/transport/hpack_parser.c index ed45bc9cb3..522455f7dc 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_parser.c +++ b/src/core/ext/transport/chttp2/transport/hpack_parser.c @@ -46,6 +46,7 @@ #include <grpc/support/alloc.h> #include <grpc/support/log.h> #include <grpc/support/port_platform.h> +#include <grpc/support/string_util.h> #include <grpc/support/useful.h> #include "src/core/ext/transport/chttp2/transport/bin_encoder.h" @@ -77,63 +78,70 @@ typedef enum { a set of indirect jumps, and so not waste stack space. */ /* forward declarations for parsing states */ -static int parse_begin(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); - -static int parse_string_prefix(grpc_chttp2_hpack_parser *p, const uint8_t *cur, +static grpc_error *parse_begin(grpc_chttp2_hpack_parser *p, const uint8_t *cur, const uint8_t *end); -static int parse_key_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_value_string_with_indexed_key(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, - const uint8_t *end); -static int parse_value_string_with_literal_key(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, - const uint8_t *end); - -static int parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_value5up(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); - -static int parse_indexed_field(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_indexed_field_x(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end); -static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end); -static int parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end); -static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end); -static int parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end); -static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end); -static int parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end); -static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end); -static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p, const uint8_t *cur, +static grpc_error *parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end, grpc_error *error); +static grpc_error *still_parse_error(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); +static grpc_error *parse_illegal_op(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); + +static grpc_error *parse_string_prefix(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); +static grpc_error *parse_key_string(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); +static grpc_error *parse_value_string_with_indexed_key( + grpc_chttp2_hpack_parser *p, const uint8_t *cur, const uint8_t *end); +static grpc_error *parse_value_string_with_literal_key( + grpc_chttp2_hpack_parser *p, const uint8_t *cur, const uint8_t *end); + +static grpc_error *parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur, const uint8_t *end); +static grpc_error *parse_value5up(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); + +static grpc_error *parse_indexed_field(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); +static grpc_error *parse_indexed_field_x(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_lithdr_incidx(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); +static grpc_error *parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_lithdr_notidx(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); +static grpc_error *parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); +static grpc_error *parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end); +static grpc_error *parse_max_tbl_size(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); +static grpc_error *parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end); /* we translate the first byte of a hpack field into one of these decoding cases, then use a lookup table to jump directly to the appropriate parser. @@ -631,19 +639,18 @@ static const uint8_t inverse_base64[256] = { }; /* emission helpers */ -static int on_hdr(grpc_chttp2_hpack_parser *p, grpc_mdelem *md, - int add_to_table) { +static grpc_error *on_hdr(grpc_chttp2_hpack_parser *p, grpc_mdelem *md, + int add_to_table) { if (add_to_table) { - if (!grpc_chttp2_hptbl_add(&p->table, md)) { - return 0; - } + grpc_error *err = grpc_chttp2_hptbl_add(&p->table, md); + if (err != GRPC_ERROR_NONE) return err; } if (p->on_header == NULL) { GRPC_MDELEM_UNREF(md); - return 0; + return GRPC_ERROR_CREATE("on_header callback not set"); } p->on_header(p->on_header_user_data, md); - return 1; + return GRPC_ERROR_NONE; } static grpc_mdstr *take_string(grpc_chttp2_hpack_parser *p, @@ -654,70 +661,70 @@ static grpc_mdstr *take_string(grpc_chttp2_hpack_parser *p, } /* jump to the next state */ -static int parse_next(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_next(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end) { p->state = *p->next_state++; return p->state(p, cur, end); } /* begin parsing a header: all functionality is encoded into lookup tables above */ -static int parse_begin(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_begin(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end) { if (cur == end) { p->state = parse_begin; - return 1; + return GRPC_ERROR_NONE; } return first_byte_action[first_byte_lut[*cur]](p, cur, end); } /* stream dependency and prioritization data: we just skip it */ -static int parse_stream_weight(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_stream_weight(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { if (cur == end) { p->state = parse_stream_weight; - return 1; + return GRPC_ERROR_NONE; } return p->after_prioritization(p, cur + 1, end); } -static int parse_stream_dep3(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_stream_dep3(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { if (cur == end) { p->state = parse_stream_dep3; - return 1; + return GRPC_ERROR_NONE; } return parse_stream_weight(p, cur + 1, end); } -static int parse_stream_dep2(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_stream_dep2(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { if (cur == end) { p->state = parse_stream_dep2; - return 1; + return GRPC_ERROR_NONE; } return parse_stream_dep3(p, cur + 1, end); } -static int parse_stream_dep1(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_stream_dep1(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { if (cur == end) { p->state = parse_stream_dep1; - return 1; + return GRPC_ERROR_NONE; } return parse_stream_dep2(p, cur + 1, end); } -static int parse_stream_dep0(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_stream_dep0(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { if (cur == end) { p->state = parse_stream_dep0; - return 1; + return GRPC_ERROR_NONE; } return parse_stream_dep1(p, cur + 1, end); @@ -725,30 +732,34 @@ static int parse_stream_dep0(grpc_chttp2_hpack_parser *p, const uint8_t *cur, /* emit an indexed field; for now just logs it to console; jumps to begin the next field on completion */ -static int finish_indexed_field(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *finish_indexed_field(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index); if (md == NULL) { - if (grpc_http_trace) { - gpr_log(GPR_ERROR, "Invalid HPACK index received: %d", p->index); - } - return 0; + return grpc_error_set_int( + grpc_error_set_int(GRPC_ERROR_CREATE("Invalid HPACK index received"), + GRPC_ERROR_INT_INDEX, (intptr_t)p->index), + GRPC_ERROR_INT_SIZE, (intptr_t)p->table.num_ents); } GRPC_MDELEM_REF(md); - return on_hdr(p, md, 0) && parse_begin(p, cur, end); + grpc_error *err = on_hdr(p, md, 0); + if (err != GRPC_ERROR_NONE) return err; + return parse_begin(p, cur, end); } /* parse an indexed field with index < 127 */ -static int parse_indexed_field(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_indexed_field(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { p->dynamic_table_update_allowed = 0; p->index = (*cur) & 0x7f; return finish_indexed_field(p, cur + 1, end); } /* parse an indexed field with index >= 127 */ -static int parse_indexed_field_x(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end) { +static grpc_error *parse_indexed_field_x(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { finish_indexed_field}; p->dynamic_table_update_allowed = 0; @@ -760,28 +771,34 @@ static int parse_indexed_field_x(grpc_chttp2_hpack_parser *p, /* finish a literal header with incremental indexing: just log, and jump to ' begin */ -static int finish_lithdr_incidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *finish_lithdr_incidx(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index); GPR_ASSERT(md != NULL); /* handled in string parsing */ - return on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key), - take_string(p, &p->value)), - 1) && - parse_begin(p, cur, end); + grpc_error *err = + on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key), + take_string(p, &p->value)), + 1); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + return parse_begin(p, cur, end); } /* finish a literal header with incremental indexing with no index */ -static int finish_lithdr_incidx_v(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end) { - return on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key), - take_string(p, &p->value)), - 1) && - parse_begin(p, cur, end); +static grpc_error *finish_lithdr_incidx_v(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { + grpc_error *err = + on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key), + take_string(p, &p->value)), + 1); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + return parse_begin(p, cur, end); } /* parse a literal header with incremental indexing; index < 63 */ -static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_lithdr_incidx(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { parse_value_string_with_indexed_key, finish_lithdr_incidx}; p->dynamic_table_update_allowed = 0; @@ -791,8 +808,9 @@ static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, } /* parse a literal header with incremental indexing; index >= 63 */ -static int parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end) { +static grpc_error *parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { parse_string_prefix, parse_value_string_with_indexed_key, finish_lithdr_incidx}; @@ -804,8 +822,9 @@ static int parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p, } /* parse a literal header with incremental indexing; index = 0 */ -static int parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end) { +static grpc_error *parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { parse_key_string, parse_string_prefix, parse_value_string_with_literal_key, finish_lithdr_incidx_v}; @@ -815,28 +834,34 @@ static int parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p, } /* finish a literal header without incremental indexing */ -static int finish_lithdr_notidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *finish_lithdr_notidx(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index); GPR_ASSERT(md != NULL); /* handled in string parsing */ - return on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key), - take_string(p, &p->value)), - 0) && - parse_begin(p, cur, end); + grpc_error *err = + on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key), + take_string(p, &p->value)), + 0); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + return parse_begin(p, cur, end); } /* finish a literal header without incremental indexing with index = 0 */ -static int finish_lithdr_notidx_v(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end) { - return on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key), - take_string(p, &p->value)), - 0) && - parse_begin(p, cur, end); +static grpc_error *finish_lithdr_notidx_v(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { + grpc_error *err = + on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key), + take_string(p, &p->value)), + 0); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + return parse_begin(p, cur, end); } /* parse a literal header without incremental indexing; index < 15 */ -static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_lithdr_notidx(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { parse_value_string_with_indexed_key, finish_lithdr_notidx}; p->dynamic_table_update_allowed = 0; @@ -846,8 +871,9 @@ static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, } /* parse a literal header without incremental indexing; index >= 15 */ -static int parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end) { +static grpc_error *parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { parse_string_prefix, parse_value_string_with_indexed_key, finish_lithdr_notidx}; @@ -859,8 +885,9 @@ static int parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p, } /* parse a literal header without incremental indexing; index == 0 */ -static int parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end) { +static grpc_error *parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { parse_key_string, parse_string_prefix, parse_value_string_with_literal_key, finish_lithdr_notidx_v}; @@ -870,28 +897,34 @@ static int parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p, } /* finish a literal header that is never indexed */ -static int finish_lithdr_nvridx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *finish_lithdr_nvridx(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index); GPR_ASSERT(md != NULL); /* handled in string parsing */ - return on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key), - take_string(p, &p->value)), - 0) && - parse_begin(p, cur, end); + grpc_error *err = + on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key), + take_string(p, &p->value)), + 0); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + return parse_begin(p, cur, end); } /* finish a literal header that is never indexed with an extra value */ -static int finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end) { - return on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key), - take_string(p, &p->value)), - 0) && - parse_begin(p, cur, end); +static grpc_error *finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { + grpc_error *err = + on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key), + take_string(p, &p->value)), + 0); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + return parse_begin(p, cur, end); } /* parse a literal header that is never indexed; index < 15 */ -static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { parse_value_string_with_indexed_key, finish_lithdr_nvridx}; p->dynamic_table_update_allowed = 0; @@ -901,8 +934,9 @@ static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p, const uint8_t *cur, } /* parse a literal header that is never indexed; index >= 15 */ -static int parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end) { +static grpc_error *parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { parse_string_prefix, parse_value_string_with_indexed_key, finish_lithdr_nvridx}; @@ -914,8 +948,9 @@ static int parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p, } /* parse a literal header that is never indexed; index == 0 */ -static int parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, const uint8_t *end) { +static grpc_error *parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { parse_key_string, parse_string_prefix, parse_value_string_with_literal_key, finish_lithdr_nvridx_v}; @@ -925,20 +960,25 @@ static int parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p, } /* finish parsing a max table size change */ -static int finish_max_tbl_size(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *finish_max_tbl_size(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { if (grpc_http_trace) { gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", p->index); } - return grpc_chttp2_hptbl_set_current_table_size(&p->table, p->index) && - parse_begin(p, cur, end); + grpc_error *err = + grpc_chttp2_hptbl_set_current_table_size(&p->table, p->index); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + return parse_begin(p, cur, end); } /* parse a max table size change, max size < 15 */ -static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_max_tbl_size(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { if (p->dynamic_table_update_allowed == 0) { - return 0; + return parse_error( + p, cur, end, + GRPC_ERROR_CREATE( + "More than two max table size changes in a single frame")); } p->dynamic_table_update_allowed--; p->index = (*cur) & 0x1f; @@ -946,12 +986,16 @@ static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const uint8_t *cur, } /* parse a max table size change, max size >= 15 */ -static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, + const uint8_t *end) { static const grpc_chttp2_hpack_parser_state and_then[] = { finish_max_tbl_size}; if (p->dynamic_table_update_allowed == 0) { - return 0; + return parse_error( + p, cur, end, + GRPC_ERROR_CREATE( + "More than two max table size changes in a single frame")); } p->dynamic_table_update_allowed--; p->next_state = and_then; @@ -961,28 +1005,38 @@ static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p, const uint8_t *cur, } /* a parse error: jam the parse state into parse_error, and return error */ -static int parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { - p->state = parse_error; - return 0; +static grpc_error *parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end, grpc_error *err) { + GPR_ASSERT(err != GRPC_ERROR_NONE); + if (p->last_error == GRPC_ERROR_NONE) { + p->last_error = GRPC_ERROR_REF(err); + } + p->state = still_parse_error; + return err; +} + +static grpc_error *still_parse_error(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { + return GRPC_ERROR_REF(p->last_error); } -static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_illegal_op(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { GPR_ASSERT(cur != end); - if (grpc_http_trace) { - gpr_log(GPR_DEBUG, "Illegal hpack op code %d", *cur); - } - return parse_error(p, cur, end); + char *msg; + gpr_asprintf(&msg, "Illegal hpack op code %d", *cur); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return parse_error(p, cur, end, err); } /* parse the 1st byte of a varint into p->parsing.value no overflow is possible */ -static int parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end) { if (cur == end) { p->state = parse_value0; - return 1; + return GRPC_ERROR_NONE; } *p->parsing.value += (*cur) & 0x7f; @@ -996,11 +1050,11 @@ static int parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur, /* parse the 2nd byte of a varint into p->parsing.value no overflow is possible */ -static int parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end) { if (cur == end) { p->state = parse_value1; - return 1; + return GRPC_ERROR_NONE; } *p->parsing.value += (((uint32_t)*cur) & 0x7f) << 7; @@ -1014,11 +1068,11 @@ static int parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur, /* parse the 3rd byte of a varint into p->parsing.value no overflow is possible */ -static int parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end) { if (cur == end) { p->state = parse_value2; - return 1; + return GRPC_ERROR_NONE; } *p->parsing.value += (((uint32_t)*cur) & 0x7f) << 14; @@ -1032,11 +1086,11 @@ static int parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur, /* parse the 4th byte of a varint into p->parsing.value no overflow is possible */ -static int parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end) { if (cur == end) { p->state = parse_value3; - return 1; + return GRPC_ERROR_NONE; } *p->parsing.value += (((uint32_t)*cur) & 0x7f) << 21; @@ -1050,15 +1104,16 @@ static int parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur, /* parse the 5th byte of a varint into p->parsing.value depending on the byte, we may overflow, and care must be taken */ -static int parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end) { uint8_t c; uint32_t cur_value; uint32_t add_value; + char *msg; if (cur == end) { p->state = parse_value4; - return 1; + return GRPC_ERROR_NONE; } c = (*cur) & 0x7f; @@ -1081,48 +1136,49 @@ static int parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur, } error: - if (grpc_http_trace) { - gpr_log(GPR_ERROR, - "integer overflow in hpack integer decoding: have 0x%08x, " - "got byte 0x%02x on byte 5", - *p->parsing.value, *cur); - } - return parse_error(p, cur, end); + gpr_asprintf(&msg, + "integer overflow in hpack integer decoding: have 0x%08x, " + "got byte 0x%02x on byte 5", + *p->parsing.value, *cur); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return parse_error(p, cur, end, err); } /* parse any trailing bytes in a varint: it's possible to append an arbitrary number of 0x80's and not affect the value - a zero will terminate - and anything else will overflow */ -static int parse_value5up(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_value5up(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { while (cur != end && *cur == 0x80) { ++cur; } if (cur == end) { p->state = parse_value5up; - return 1; + return GRPC_ERROR_NONE; } if (*cur == 0) { return parse_next(p, cur + 1, end); } - if (grpc_http_trace) { - gpr_log(GPR_ERROR, - "integer overflow in hpack integer decoding: have 0x%08x, " - "got byte 0x%02x sometime after byte 5", - *p->parsing.value, *cur); - } - return parse_error(p, cur, end); + char *msg; + gpr_asprintf(&msg, + "integer overflow in hpack integer decoding: have 0x%08x, " + "got byte 0x%02x sometime after byte 5", + *p->parsing.value, *cur); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return parse_error(p, cur, end, err); } /* parse a string prefix */ -static int parse_string_prefix(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_string_prefix(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { if (cur == end) { p->state = parse_string_prefix; - return 1; + return GRPC_ERROR_NONE; } p->strlen = (*cur) & 0x7f; @@ -1149,25 +1205,26 @@ static void append_bytes(grpc_chttp2_hpack_parser_string *str, str->length += (uint32_t)length; } -static int append_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *append_string(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { grpc_chttp2_hpack_parser_string *str = p->parsing.str; uint32_t bits; uint8_t decoded[3]; switch ((binary_state)p->binary) { case NOT_BINARY: append_bytes(str, cur, (size_t)(end - cur)); - return 1; + return GRPC_ERROR_NONE; b64_byte0: case B64_BYTE0: if (cur == end) { p->binary = B64_BYTE0; - return 1; + return GRPC_ERROR_NONE; } bits = inverse_base64[*cur]; ++cur; if (bits == 255) - return 0; + return parse_error(p, cur, end, + GRPC_ERROR_CREATE("Illegal base64 character")); else if (bits == 64) goto b64_byte0; p->base64_buffer = bits << 18; @@ -1176,12 +1233,13 @@ static int append_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, case B64_BYTE1: if (cur == end) { p->binary = B64_BYTE1; - return 1; + return GRPC_ERROR_NONE; } bits = inverse_base64[*cur]; ++cur; if (bits == 255) - return 0; + return parse_error(p, cur, end, + GRPC_ERROR_CREATE("Illegal base64 character")); else if (bits == 64) goto b64_byte1; p->base64_buffer |= bits << 12; @@ -1190,12 +1248,13 @@ static int append_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, case B64_BYTE2: if (cur == end) { p->binary = B64_BYTE2; - return 1; + return GRPC_ERROR_NONE; } bits = inverse_base64[*cur]; ++cur; if (bits == 255) - return 0; + return parse_error(p, cur, end, + GRPC_ERROR_CREATE("Illegal base64 character")); else if (bits == 64) goto b64_byte2; p->base64_buffer |= bits << 6; @@ -1204,12 +1263,13 @@ static int append_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, case B64_BYTE3: if (cur == end) { p->binary = B64_BYTE3; - return 1; + return GRPC_ERROR_NONE; } bits = inverse_base64[*cur]; ++cur; if (bits == 255) - return 0; + return parse_error(p, cur, end, + GRPC_ERROR_CREATE("Illegal base64 character")); else if (bits == 64) goto b64_byte3; p->base64_buffer |= bits; @@ -1220,11 +1280,13 @@ static int append_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, append_bytes(str, decoded, 3); goto b64_byte0; } - GPR_UNREACHABLE_CODE(return 1); + GPR_UNREACHABLE_CODE(return parse_error( + p, cur, end, GRPC_ERROR_CREATE("Should never reach here"))); } /* append a null terminator to a string */ -static int finish_str(grpc_chttp2_hpack_parser *p) { +static grpc_error *finish_str(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end) { uint8_t terminator = 0; uint8_t decoded[2]; uint32_t bits; @@ -1235,14 +1297,18 @@ static int finish_str(grpc_chttp2_hpack_parser *p) { case B64_BYTE0: break; case B64_BYTE1: - gpr_log(GPR_ERROR, "illegal base64 encoding"); - return 0; /* illegal encoding */ + return parse_error( + p, cur, end, + GRPC_ERROR_CREATE("illegal base64 encoding")); /* illegal encoding */ case B64_BYTE2: bits = p->base64_buffer; if (bits & 0xffff) { - gpr_log(GPR_ERROR, "trailing bits in base64 encoding: 0x%04x", - bits & 0xffff); - return 0; + char *msg; + gpr_asprintf(&msg, "trailing bits in base64 encoding: 0x%04x", + bits & 0xffff); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return parse_error(p, cur, end, err); } decoded[0] = (uint8_t)(bits >> 16); append_bytes(str, decoded, 1); @@ -1250,9 +1316,12 @@ static int finish_str(grpc_chttp2_hpack_parser *p) { case B64_BYTE3: bits = p->base64_buffer; if (bits & 0xff) { - gpr_log(GPR_ERROR, "trailing bits in base64 encoding: 0x%02x", - bits & 0xff); - return 0; + char *msg; + gpr_asprintf(&msg, "trailing bits in base64 encoding: 0x%02x", + bits & 0xff); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return parse_error(p, cur, end, err); } decoded[0] = (uint8_t)(bits >> 16); decoded[1] = (uint8_t)(bits >> 8); @@ -1261,38 +1330,42 @@ static int finish_str(grpc_chttp2_hpack_parser *p) { } append_bytes(str, &terminator, 1); p->parsing.str->length--; /* don't actually count the null terminator */ - return 1; + return GRPC_ERROR_NONE; } /* decode a nibble from a huffman encoded stream */ -static int huff_nibble(grpc_chttp2_hpack_parser *p, uint8_t nibble) { +static grpc_error *huff_nibble(grpc_chttp2_hpack_parser *p, uint8_t nibble) { int16_t emit = emit_sub_tbl[16 * emit_tbl[p->huff_state] + nibble]; int16_t next = next_sub_tbl[16 * next_tbl[p->huff_state] + nibble]; if (emit != -1) { if (emit >= 0 && emit < 256) { uint8_t c = (uint8_t)emit; - if (!append_string(p, &c, (&c) + 1)) return 0; + grpc_error *err = append_string(p, &c, (&c) + 1); + if (err != GRPC_ERROR_NONE) return err; } else { assert(emit == 256); } } p->huff_state = next; - return 1; + return GRPC_ERROR_NONE; } /* decode full bytes from a huffman encoded stream */ -static int add_huff_bytes(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *add_huff_bytes(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { for (; cur != end; ++cur) { - if (!huff_nibble(p, *cur >> 4) || !huff_nibble(p, *cur & 0xf)) return 0; + grpc_error *err = huff_nibble(p, *cur >> 4); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + err = huff_nibble(p, *cur & 0xf); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); } - return 1; + return GRPC_ERROR_NONE; } /* decode some string bytes based on the current decoding mode (huffman or not) */ -static int add_str_bytes(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *add_str_bytes(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { if (p->huff) { return add_huff_bytes(p, cur, end); } else { @@ -1301,26 +1374,31 @@ static int add_str_bytes(grpc_chttp2_hpack_parser *p, const uint8_t *cur, } /* parse a string - tries to do large chunks at a time */ -static int parse_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, + const uint8_t *end) { size_t remaining = p->strlen - p->strgot; size_t given = (size_t)(end - cur); if (remaining <= given) { - return add_str_bytes(p, cur, cur + remaining) && finish_str(p) && - parse_next(p, cur + remaining, end); + grpc_error *err = add_str_bytes(p, cur, cur + remaining); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + err = finish_str(p, cur + remaining, end); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + return parse_next(p, cur + remaining, end); } else { - if (!add_str_bytes(p, cur, cur + given)) return 0; + grpc_error *err = add_str_bytes(p, cur, cur + given); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); GPR_ASSERT(given <= UINT32_MAX - p->strgot); p->strgot += (uint32_t)given; p->state = parse_string; - return 1; + return GRPC_ERROR_NONE; } } /* begin parsing a string - performs setup, calls parse_string */ -static int begin_parse_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end, uint8_t binary, - grpc_chttp2_hpack_parser_string *str) { +static grpc_error *begin_parse_string(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end, + uint8_t binary, + grpc_chttp2_hpack_parser_string *str) { p->strgot = 0; str->length = 0; p->parsing.str = str; @@ -1330,58 +1408,50 @@ static int begin_parse_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, } /* parse the key string */ -static int parse_key_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_key_string(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end) { return begin_parse_string(p, cur, end, NOT_BINARY, &p->key); } /* check if a key represents a binary header or not */ -typedef enum { BINARY_HEADER, PLAINTEXT_HEADER, ERROR_HEADER } is_binary_header; -static is_binary_header is_binary_literal_header(grpc_chttp2_hpack_parser *p) { - return grpc_is_binary_header(p->key.str, p->key.length) ? BINARY_HEADER - : PLAINTEXT_HEADER; +static bool is_binary_literal_header(grpc_chttp2_hpack_parser *p) { + return grpc_is_binary_header(p->key.str, p->key.length); } -static is_binary_header is_binary_indexed_header(grpc_chttp2_hpack_parser *p) { +static grpc_error *is_binary_indexed_header(grpc_chttp2_hpack_parser *p, + bool *is) { grpc_mdelem *elem = grpc_chttp2_hptbl_lookup(&p->table, p->index); if (!elem) { - if (grpc_http_trace) { - gpr_log(GPR_ERROR, "Invalid HPACK index received: %d", p->index); - } - return ERROR_HEADER; + return grpc_error_set_int( + grpc_error_set_int(GRPC_ERROR_CREATE("Invalid HPACK index received"), + GRPC_ERROR_INT_INDEX, (intptr_t)p->index), + GRPC_ERROR_INT_SIZE, (intptr_t)p->table.num_ents); } - return grpc_is_binary_header( - (const char *)GPR_SLICE_START_PTR(elem->key->slice), - GPR_SLICE_LENGTH(elem->key->slice)) - ? BINARY_HEADER - : PLAINTEXT_HEADER; + *is = + grpc_is_binary_header((const char *)GPR_SLICE_START_PTR(elem->key->slice), + GPR_SLICE_LENGTH(elem->key->slice)); + return GRPC_ERROR_NONE; } /* parse the value string */ -static int parse_value_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur, - const uint8_t *end, is_binary_header type) { - switch (type) { - case BINARY_HEADER: - return begin_parse_string(p, cur, end, B64_BYTE0, &p->value); - case PLAINTEXT_HEADER: - return begin_parse_string(p, cur, end, NOT_BINARY, &p->value); - case ERROR_HEADER: - return 0; - } - /* Add code to prevent return without value error */ - GPR_UNREACHABLE_CODE(return 0); +static grpc_error *parse_value_string(grpc_chttp2_hpack_parser *p, + const uint8_t *cur, const uint8_t *end, + bool is_binary) { + return begin_parse_string(p, cur, end, is_binary ? B64_BYTE0 : NOT_BINARY, + &p->value); } -static int parse_value_string_with_indexed_key(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, - const uint8_t *end) { - return parse_value_string(p, cur, end, is_binary_indexed_header(p)); +static grpc_error *parse_value_string_with_indexed_key( + grpc_chttp2_hpack_parser *p, const uint8_t *cur, const uint8_t *end) { + bool is_binary = false; + grpc_error *err = is_binary_indexed_header(p, &is_binary); + if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err); + return parse_value_string(p, cur, end, is_binary); } -static int parse_value_string_with_literal_key(grpc_chttp2_hpack_parser *p, - const uint8_t *cur, - const uint8_t *end) { +static grpc_error *parse_value_string_with_literal_key( + grpc_chttp2_hpack_parser *p, const uint8_t *cur, const uint8_t *end) { return parse_value_string(p, cur, end, is_binary_literal_header(p)); } @@ -1398,6 +1468,7 @@ void grpc_chttp2_hpack_parser_init(grpc_chttp2_hpack_parser *p) { p->value.capacity = 0; p->value.length = 0; p->dynamic_table_update_allowed = 2; + p->last_error = GRPC_ERROR_NONE; grpc_chttp2_hptbl_init(&p->table); } @@ -1408,12 +1479,14 @@ void grpc_chttp2_hpack_parser_set_has_priority(grpc_chttp2_hpack_parser *p) { void grpc_chttp2_hpack_parser_destroy(grpc_chttp2_hpack_parser *p) { grpc_chttp2_hptbl_destroy(&p->table); + GRPC_ERROR_UNREF(p->last_error); gpr_free(p->key.str); gpr_free(p->value.str); } -int grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser *p, - const uint8_t *beg, const uint8_t *end) { +grpc_error *grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser *p, + const uint8_t *beg, + const uint8_t *end) { /* TODO(ctiller): limit the distance of end from beg, and perform multiple steps in the event of a large chunk of data to limit stack space usage when no tail call optimization is @@ -1421,7 +1494,7 @@ int grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser *p, return p->state(p, beg, end); } -grpc_chttp2_parse_error grpc_chttp2_header_parser_parse( +grpc_error *grpc_chttp2_header_parser_parse( grpc_exec_ctx *exec_ctx, void *hpack_parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) { @@ -1430,17 +1503,17 @@ grpc_chttp2_parse_error grpc_chttp2_header_parser_parse( if (stream_parsing != NULL) { stream_parsing->stats.incoming.header_bytes += GPR_SLICE_LENGTH(slice); } - if (!grpc_chttp2_hpack_parser_parse(parser, GPR_SLICE_START_PTR(slice), - GPR_SLICE_END_PTR(slice))) { + grpc_error *error = grpc_chttp2_hpack_parser_parse( + parser, GPR_SLICE_START_PTR(slice), GPR_SLICE_END_PTR(slice)); + if (error != GRPC_ERROR_NONE) { GPR_TIMER_END("grpc_chttp2_hpack_parser_parse", 0); - return GRPC_CHTTP2_CONNECTION_ERROR; + return error; } if (is_last) { if (parser->is_boundary && parser->state != parse_begin) { - gpr_log(GPR_ERROR, - "end of header frame not aligned with a hpack record boundary"); GPR_TIMER_END("grpc_chttp2_hpack_parser_parse", 0); - return GRPC_CHTTP2_CONNECTION_ERROR; + return GRPC_ERROR_CREATE( + "end of header frame not aligned with a hpack record boundary"); } /* need to check for null stream: this can occur if we receive an invalid stream id on a header */ @@ -1448,8 +1521,7 @@ grpc_chttp2_parse_error grpc_chttp2_header_parser_parse( if (parser->is_boundary) { if (stream_parsing->header_frames_received == GPR_ARRAY_SIZE(stream_parsing->got_metadata_on_parse)) { - gpr_log(GPR_ERROR, "too many trailer frames"); - return GRPC_CHTTP2_CONNECTION_ERROR; + return GRPC_ERROR_CREATE("Too many trailer frames"); } stream_parsing ->got_metadata_on_parse[stream_parsing->header_frames_received] = 1; @@ -1468,5 +1540,5 @@ grpc_chttp2_parse_error grpc_chttp2_header_parser_parse( parser->dynamic_table_update_allowed = 2; } GPR_TIMER_END("grpc_chttp2_hpack_parser_parse", 0); - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.h b/src/core/ext/transport/chttp2/transport/hpack_parser.h index 855d6c5d52..78eb38db5e 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_parser.h +++ b/src/core/ext/transport/chttp2/transport/hpack_parser.h @@ -44,9 +44,8 @@ typedef struct grpc_chttp2_hpack_parser grpc_chttp2_hpack_parser; -typedef int (*grpc_chttp2_hpack_parser_state)(grpc_chttp2_hpack_parser *p, - const uint8_t *beg, - const uint8_t *end); +typedef grpc_error *(*grpc_chttp2_hpack_parser_state)( + grpc_chttp2_hpack_parser *p, const uint8_t *beg, const uint8_t *end); typedef struct { char *str; @@ -59,6 +58,8 @@ struct grpc_chttp2_hpack_parser { void (*on_header)(void *user_data, grpc_mdelem *md); void *on_header_user_data; + grpc_error *last_error; + /* current parse state - or a function that implements it */ grpc_chttp2_hpack_parser_state state; /* future states dependent on the opening op code */ @@ -103,12 +104,13 @@ void grpc_chttp2_hpack_parser_destroy(grpc_chttp2_hpack_parser *p); void grpc_chttp2_hpack_parser_set_has_priority(grpc_chttp2_hpack_parser *p); /* returns 1 on success, 0 on error */ -int grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser *p, - const uint8_t *beg, const uint8_t *end); +grpc_error *grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser *p, + const uint8_t *beg, + const uint8_t *end); /* wraps grpc_chttp2_hpack_parser_parse to provide a frame level parser for the transport */ -grpc_chttp2_parse_error grpc_chttp2_header_parser_parse( +grpc_error *grpc_chttp2_header_parser_parse( grpc_exec_ctx *exec_ctx, void *hpack_parser, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last); diff --git a/src/core/ext/transport/chttp2/transport/hpack_table.c b/src/core/ext/transport/chttp2/transport/hpack_table.c index 295f31c44f..2b73ec969e 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_table.c +++ b/src/core/ext/transport/chttp2/transport/hpack_table.c @@ -38,6 +38,7 @@ #include <grpc/support/alloc.h> #include <grpc/support/log.h> +#include <grpc/support/string_util.h> #include "src/core/lib/support/murmur_hash.h" @@ -262,18 +263,19 @@ void grpc_chttp2_hptbl_set_max_bytes(grpc_chttp2_hptbl *tbl, tbl->max_bytes = max_bytes; } -int grpc_chttp2_hptbl_set_current_table_size(grpc_chttp2_hptbl *tbl, - uint32_t bytes) { +grpc_error *grpc_chttp2_hptbl_set_current_table_size(grpc_chttp2_hptbl *tbl, + uint32_t bytes) { if (tbl->current_table_bytes == bytes) { - return 1; + return GRPC_ERROR_NONE; } if (bytes > tbl->max_bytes) { - if (grpc_http_trace) { - gpr_log(GPR_ERROR, - "Attempt to make hpack table %d bytes when max is %d bytes", - bytes, tbl->max_bytes); - } - return 0; + char *msg; + gpr_asprintf(&msg, + "Attempt to make hpack table %d bytes when max is %d bytes", + bytes, tbl->max_bytes); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } if (grpc_http_trace) { gpr_log(GPR_DEBUG, "Update hpack parser table size to %d", bytes); @@ -291,23 +293,25 @@ int grpc_chttp2_hptbl_set_current_table_size(grpc_chttp2_hptbl *tbl, rebuild_ents(tbl, new_cap); } } - return 1; + return GRPC_ERROR_NONE; } -int grpc_chttp2_hptbl_add(grpc_chttp2_hptbl *tbl, grpc_mdelem *md) { +grpc_error *grpc_chttp2_hptbl_add(grpc_chttp2_hptbl *tbl, grpc_mdelem *md) { /* determine how many bytes of buffer this entry represents */ size_t elem_bytes = GPR_SLICE_LENGTH(md->key->slice) + GPR_SLICE_LENGTH(md->value->slice) + GRPC_CHTTP2_HPACK_ENTRY_OVERHEAD; if (tbl->current_table_bytes > tbl->max_bytes) { - if (grpc_http_trace) { - gpr_log(GPR_ERROR, - "HPACK max table size reduced to %d but not reflected by hpack " - "stream (still at %d)", - tbl->max_bytes, tbl->current_table_bytes); - } - return 0; + char *msg; + gpr_asprintf( + &msg, + "HPACK max table size reduced to %d but not reflected by hpack " + "stream (still at %d)", + tbl->max_bytes, tbl->current_table_bytes); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } /* we can't add elements bigger than the max table size */ @@ -324,7 +328,7 @@ int grpc_chttp2_hptbl_add(grpc_chttp2_hptbl *tbl, grpc_mdelem *md) { while (tbl->num_ents) { evict1(tbl); } - return 1; + return GRPC_ERROR_NONE; } /* evict entries to ensure no overflow */ @@ -339,7 +343,7 @@ int grpc_chttp2_hptbl_add(grpc_chttp2_hptbl *tbl, grpc_mdelem *md) { /* update accounting values */ tbl->num_ents++; tbl->mem_used += (uint32_t)elem_bytes; - return 1; + return GRPC_ERROR_NONE; } grpc_chttp2_hptbl_find_result grpc_chttp2_hptbl_find( diff --git a/src/core/ext/transport/chttp2/transport/hpack_table.h b/src/core/ext/transport/chttp2/transport/hpack_table.h index 074fea36d8..45bd9255bf 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_table.h +++ b/src/core/ext/transport/chttp2/transport/hpack_table.h @@ -36,6 +36,7 @@ #include <grpc/support/port_platform.h> #include <grpc/support/slice.h> +#include "src/core/lib/iomgr/error.h" #include "src/core/lib/transport/metadata.h" /* HPACK header table */ @@ -87,15 +88,15 @@ void grpc_chttp2_hptbl_init(grpc_chttp2_hptbl *tbl); void grpc_chttp2_hptbl_destroy(grpc_chttp2_hptbl *tbl); void grpc_chttp2_hptbl_set_max_bytes(grpc_chttp2_hptbl *tbl, uint32_t max_bytes); -int grpc_chttp2_hptbl_set_current_table_size(grpc_chttp2_hptbl *tbl, - uint32_t bytes); +grpc_error *grpc_chttp2_hptbl_set_current_table_size(grpc_chttp2_hptbl *tbl, + uint32_t bytes); /* lookup a table entry based on its hpack index */ grpc_mdelem *grpc_chttp2_hptbl_lookup(const grpc_chttp2_hptbl *tbl, uint32_t index); /* add a table entry to the index */ -int grpc_chttp2_hptbl_add(grpc_chttp2_hptbl *tbl, - grpc_mdelem *md) GRPC_MUST_USE_RESULT; +grpc_error *grpc_chttp2_hptbl_add(grpc_chttp2_hptbl *tbl, + grpc_mdelem *md) GRPC_MUST_USE_RESULT; /* Find a key/value pair in the table... returns the index in the table of the most similar entry, or 0 if the value was not found */ typedef struct { diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h index 7f3339a620..d63170e350 100644 --- a/src/core/ext/transport/chttp2/transport/internal.h +++ b/src/core/ext/transport/chttp2/transport/internal.h @@ -156,7 +156,7 @@ struct grpc_chttp2_incoming_byte_stream { grpc_byte_stream base; gpr_refcount refs; struct grpc_chttp2_incoming_byte_stream *next_message; - int failed; + grpc_error *error; grpc_chttp2_transport *transport; grpc_chttp2_stream *stream; @@ -265,6 +265,7 @@ struct grpc_chttp2_transport_parsing { uint8_t incoming_frame_type; uint8_t incoming_frame_flags; uint8_t header_eof; + bool is_first_frame; uint32_t expect_continuation_stream_id; uint32_t incoming_frame_size; uint32_t incoming_stream_id; @@ -275,10 +276,10 @@ struct grpc_chttp2_transport_parsing { /* active parser */ void *parser_data; grpc_chttp2_stream_parsing *incoming_stream; - grpc_chttp2_parse_error (*parser)( - grpc_exec_ctx *exec_ctx, void *parser_user_data, - grpc_chttp2_transport_parsing *transport_parsing, - grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last); + grpc_error *(*parser)(grpc_exec_ctx *exec_ctx, void *parser_user_data, + grpc_chttp2_transport_parsing *transport_parsing, + grpc_chttp2_stream_parsing *stream_parsing, + gpr_slice slice, int is_last); /* received settings */ uint32_t settings[GRPC_CHTTP2_NUM_SETTINGS]; @@ -440,6 +441,7 @@ typedef struct { bool published_initial_metadata; bool published_trailing_metadata; + bool final_metadata_requested; grpc_chttp2_incoming_metadata_buffer received_initial_metadata; grpc_chttp2_incoming_metadata_buffer received_trailing_metadata; @@ -471,12 +473,12 @@ typedef struct { } grpc_chttp2_stream_writing; struct grpc_chttp2_stream_parsing { + /** saw some stream level error */ + grpc_error *forced_close_error; /** HTTP2 stream id for this stream, or zero if one has not been assigned */ uint32_t id; /** has this stream received a close */ uint8_t received_close; - /** saw a rst_stream */ - uint8_t saw_rst_stream; /** how many header frames have we received? */ uint8_t header_frames_received; /** which metadata did we get (on this parse) */ @@ -488,8 +490,6 @@ struct grpc_chttp2_stream_parsing { int64_t incoming_window; /** parsing state for data frames */ grpc_chttp2_data_parser data_parser; - /** reason give to rst_stream */ - uint32_t rst_stream_reason; /** amount of window given */ int64_t outgoing_window; /** number of bytes received - reset at end of parse thread execution */ @@ -526,13 +526,12 @@ struct grpc_chttp2_stream { are required, and schedule them if so */ int grpc_chttp2_unlocking_check_writes(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *global, - grpc_chttp2_transport_writing *writing, - int is_parsing); + grpc_chttp2_transport_writing *writing); void grpc_chttp2_perform_writes( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing, grpc_endpoint *endpoint); void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx, - void *transport_writing, bool success); + void *transport_writing, grpc_error *error); void grpc_chttp2_cleanup_writing(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *global, grpc_chttp2_transport_writing *writing); @@ -541,9 +540,9 @@ void grpc_chttp2_prepare_to_read(grpc_chttp2_transport_global *global, grpc_chttp2_transport_parsing *parsing); /** Process one slice of incoming data; return 1 if the connection is still viable after reading, or 0 if the connection should be torn down */ -int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, - grpc_chttp2_transport_parsing *transport_parsing, - gpr_slice slice); +grpc_error *grpc_chttp2_perform_read( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing, + gpr_slice slice); void grpc_chttp2_publish_reads(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *global, grpc_chttp2_transport_parsing *parsing); @@ -673,9 +672,10 @@ void grpc_chttp2_for_all_streams( void grpc_chttp2_parsing_become_skip_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing); -void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx, - grpc_chttp2_stream_global *stream_global, - grpc_closure **pclosure, int success); +void grpc_chttp2_complete_closure_step( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global, + grpc_chttp2_stream_global *stream_global, grpc_closure **pclosure, + grpc_error *error); void grpc_chttp2_run_with_global_lock(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *transport, @@ -778,8 +778,8 @@ void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, grpc_status_code status, gpr_slice *details); void grpc_chttp2_mark_stream_closed( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global, - grpc_chttp2_stream_global *stream_global, int close_reads, - int close_writes); + grpc_chttp2_stream_global *stream_global, int close_reads, int close_writes, + grpc_error *error); void grpc_chttp2_start_writing(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global); @@ -811,8 +811,8 @@ void grpc_chttp2_incoming_byte_stream_push(grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs, gpr_slice slice); void grpc_chttp2_incoming_byte_stream_finished( - grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs, int success, - int from_parsing_thread); + grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs, + grpc_error *error, int from_parsing_thread); void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *parsing, diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c index 3c74258352..991d7729af 100644 --- a/src/core/ext/transport/chttp2/transport/parsing.c +++ b/src/core/ext/transport/chttp2/transport/parsing.c @@ -49,30 +49,30 @@ ((grpc_chttp2_transport *)((char *)(tp)-offsetof(grpc_chttp2_transport, \ parsing))) -static int init_frame_parser(grpc_exec_ctx *exec_ctx, - grpc_chttp2_transport_parsing *transport_parsing); -static int init_header_frame_parser( +static grpc_error *init_frame_parser( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing); +static grpc_error *init_header_frame_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing, int is_continuation); -static int init_data_frame_parser( +static grpc_error *init_data_frame_parser( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing); +static grpc_error *init_rst_stream_parser( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing); +static grpc_error *init_settings_frame_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing); -static int init_rst_stream_parser( +static grpc_error *init_window_update_frame_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing); -static int init_settings_frame_parser( +static grpc_error *init_ping_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing); -static int init_window_update_frame_parser( +static grpc_error *init_goaway_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing); -static int init_ping_parser(grpc_exec_ctx *exec_ctx, - grpc_chttp2_transport_parsing *transport_parsing); -static int init_goaway_parser(grpc_exec_ctx *exec_ctx, - grpc_chttp2_transport_parsing *transport_parsing); -static int init_skip_frame_parser( +static grpc_error *init_skip_frame_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing, int is_header); -static int parse_frame_slice(grpc_exec_ctx *exec_ctx, - grpc_chttp2_transport_parsing *transport_parsing, - gpr_slice slice, int is_last); +static grpc_error *parse_frame_slice( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing, + gpr_slice slice, int is_last); void grpc_chttp2_prepare_to_read( grpc_chttp2_transport_global *transport_global, @@ -230,38 +230,42 @@ void grpc_chttp2_publish_reads( grpc_chttp2_list_add_check_read_ops(transport_global, stream_global); } - if (stream_parsing->saw_rst_stream) { - if (stream_parsing->rst_stream_reason != GRPC_CHTTP2_NO_ERROR) { - grpc_status_code status_code = grpc_chttp2_http2_error_to_grpc_status( - (grpc_chttp2_error_code)stream_parsing->rst_stream_reason); - char *status_details; - gpr_slice slice_details; - gpr_asprintf(&status_details, "Received RST_STREAM err=%d", - stream_parsing->rst_stream_reason); - slice_details = gpr_slice_from_copied_string(status_details); - gpr_free(status_details); + if (stream_parsing->forced_close_error != GRPC_ERROR_NONE) { + intptr_t reason; + bool has_reason = grpc_error_get_int(stream_parsing->forced_close_error, + GRPC_ERROR_INT_HTTP2_ERROR, &reason); + if (has_reason && reason != GRPC_CHTTP2_NO_ERROR) { + grpc_status_code status_code = + has_reason ? grpc_chttp2_http2_error_to_grpc_status( + (grpc_chttp2_error_code)reason) + : GRPC_STATUS_INTERNAL; + const char *status_details = + grpc_error_string(stream_parsing->forced_close_error); + gpr_slice slice_details = gpr_slice_from_copied_string(status_details); + grpc_error_free_string(status_details); grpc_chttp2_fake_status(exec_ctx, transport_global, stream_global, status_code, &slice_details); } grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, - 1, 1); + 1, 1, stream_parsing->forced_close_error); } if (stream_parsing->received_close) { grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, - 1, 0); + 1, 0, GRPC_ERROR_NONE); } } } -int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, - grpc_chttp2_transport_parsing *transport_parsing, - gpr_slice slice) { +grpc_error *grpc_chttp2_perform_read( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing, + gpr_slice slice) { uint8_t *beg = GPR_SLICE_START_PTR(slice); uint8_t *end = GPR_SLICE_END_PTR(slice); uint8_t *cur = beg; + grpc_error *err; - if (cur == end) return 1; + if (cur == end) return GRPC_ERROR_NONE; switch (transport_parsing->deframe_state) { case GRPC_DTS_CLIENT_PREFIX_0: @@ -291,21 +295,25 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, while (cur != end && transport_parsing->deframe_state != GRPC_DTS_FH_0) { if (*cur != GRPC_CHTTP2_CLIENT_CONNECT_STRING[transport_parsing ->deframe_state]) { - gpr_log(GPR_INFO, - "Connect string mismatch: expected '%c' (%d) got '%c' (%d) " - "at byte %d", - GRPC_CHTTP2_CLIENT_CONNECT_STRING[transport_parsing - ->deframe_state], - (int)(uint8_t)GRPC_CHTTP2_CLIENT_CONNECT_STRING - [transport_parsing->deframe_state], - *cur, (int)*cur, transport_parsing->deframe_state); - return 0; + char *msg; + gpr_asprintf( + &msg, + "Connect string mismatch: expected '%c' (%d) got '%c' (%d) " + "at byte %d", + GRPC_CHTTP2_CLIENT_CONNECT_STRING[transport_parsing + ->deframe_state], + (int)(uint8_t)GRPC_CHTTP2_CLIENT_CONNECT_STRING + [transport_parsing->deframe_state], + *cur, (int)*cur, transport_parsing->deframe_state); + err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } ++cur; ++transport_parsing->deframe_state; } if (cur == end) { - return 1; + return GRPC_ERROR_NONE; } /* fallthrough */ dts_fh_0: @@ -314,7 +322,7 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, transport_parsing->incoming_frame_size = ((uint32_t)*cur) << 16; if (++cur == end) { transport_parsing->deframe_state = GRPC_DTS_FH_1; - return 1; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_DTS_FH_1: @@ -322,7 +330,7 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, transport_parsing->incoming_frame_size |= ((uint32_t)*cur) << 8; if (++cur == end) { transport_parsing->deframe_state = GRPC_DTS_FH_2; - return 1; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_DTS_FH_2: @@ -330,7 +338,7 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, transport_parsing->incoming_frame_size |= *cur; if (++cur == end) { transport_parsing->deframe_state = GRPC_DTS_FH_3; - return 1; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_DTS_FH_3: @@ -338,7 +346,7 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, transport_parsing->incoming_frame_type = *cur; if (++cur == end) { transport_parsing->deframe_state = GRPC_DTS_FH_4; - return 1; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_DTS_FH_4: @@ -346,7 +354,7 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, transport_parsing->incoming_frame_flags = *cur; if (++cur == end) { transport_parsing->deframe_state = GRPC_DTS_FH_5; - return 1; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_DTS_FH_5: @@ -354,7 +362,7 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, transport_parsing->incoming_stream_id = (((uint32_t)*cur) & 0x7f) << 24; if (++cur == end) { transport_parsing->deframe_state = GRPC_DTS_FH_6; - return 1; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_DTS_FH_6: @@ -362,7 +370,7 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, transport_parsing->incoming_stream_id |= ((uint32_t)*cur) << 16; if (++cur == end) { transport_parsing->deframe_state = GRPC_DTS_FH_7; - return 1; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_DTS_FH_7: @@ -370,15 +378,16 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, transport_parsing->incoming_stream_id |= ((uint32_t)*cur) << 8; if (++cur == end) { transport_parsing->deframe_state = GRPC_DTS_FH_8; - return 1; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_DTS_FH_8: GPR_ASSERT(cur < end); transport_parsing->incoming_stream_id |= ((uint32_t)*cur); transport_parsing->deframe_state = GRPC_DTS_FRAME; - if (!init_frame_parser(exec_ctx, transport_parsing)) { - return 0; + err = init_frame_parser(exec_ctx, transport_parsing); + if (err != GRPC_ERROR_NONE) { + return err; } if (transport_parsing->incoming_stream_id != 0 && transport_parsing->incoming_stream_id > @@ -387,62 +396,69 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, transport_parsing->incoming_stream_id; } if (transport_parsing->incoming_frame_size == 0) { - if (!parse_frame_slice(exec_ctx, transport_parsing, gpr_empty_slice(), - 1)) { - return 0; + err = parse_frame_slice(exec_ctx, transport_parsing, gpr_empty_slice(), + 1); + if (err != GRPC_ERROR_NONE) { + return err; } transport_parsing->incoming_stream = NULL; if (++cur == end) { transport_parsing->deframe_state = GRPC_DTS_FH_0; - return 1; + return GRPC_ERROR_NONE; } goto dts_fh_0; /* loop */ } else if (transport_parsing->incoming_frame_size > transport_parsing->max_frame_size) { - gpr_log(GPR_DEBUG, "Frame size %d is larger than max frame size %d", - transport_parsing->incoming_frame_size, - transport_parsing->max_frame_size); - return 0; + char *msg; + gpr_asprintf(&msg, "Frame size %d is larger than max frame size %d", + transport_parsing->incoming_frame_size, + transport_parsing->max_frame_size); + err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } if (++cur == end) { - return 1; + return GRPC_ERROR_NONE; } /* fallthrough */ case GRPC_DTS_FRAME: GPR_ASSERT(cur < end); if ((uint32_t)(end - cur) == transport_parsing->incoming_frame_size) { - if (!parse_frame_slice(exec_ctx, transport_parsing, - gpr_slice_sub_no_ref(slice, (size_t)(cur - beg), - (size_t)(end - beg)), - 1)) { - return 0; + err = parse_frame_slice(exec_ctx, transport_parsing, + gpr_slice_sub_no_ref(slice, (size_t)(cur - beg), + (size_t)(end - beg)), + 1); + if (err != GRPC_ERROR_NONE) { + return err; } transport_parsing->deframe_state = GRPC_DTS_FH_0; transport_parsing->incoming_stream = NULL; - return 1; + return GRPC_ERROR_NONE; } else if ((uint32_t)(end - cur) > transport_parsing->incoming_frame_size) { size_t cur_offset = (size_t)(cur - beg); - if (!parse_frame_slice( - exec_ctx, transport_parsing, - gpr_slice_sub_no_ref( - slice, cur_offset, - cur_offset + transport_parsing->incoming_frame_size), - 1)) { - return 0; + err = parse_frame_slice( + exec_ctx, transport_parsing, + gpr_slice_sub_no_ref( + slice, cur_offset, + cur_offset + transport_parsing->incoming_frame_size), + 1); + if (err != GRPC_ERROR_NONE) { + return err; } cur += transport_parsing->incoming_frame_size; transport_parsing->incoming_stream = NULL; goto dts_fh_0; /* loop */ } else { - if (!parse_frame_slice(exec_ctx, transport_parsing, - gpr_slice_sub_no_ref(slice, (size_t)(cur - beg), - (size_t)(end - beg)), - 0)) { - return 0; + err = parse_frame_slice(exec_ctx, transport_parsing, + gpr_slice_sub_no_ref(slice, (size_t)(cur - beg), + (size_t)(end - beg)), + 0); + if (err != GRPC_ERROR_NONE) { + return err; } transport_parsing->incoming_frame_size -= (uint32_t)(end - cur); - return 1; + return GRPC_ERROR_NONE; } GPR_UNREACHABLE_CODE(return 0); } @@ -450,23 +466,41 @@ int grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, GPR_UNREACHABLE_CODE(return 0); } -static int init_frame_parser(grpc_exec_ctx *exec_ctx, - grpc_chttp2_transport_parsing *transport_parsing) { +static grpc_error *init_frame_parser( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) { + if (transport_parsing->is_first_frame && + transport_parsing->incoming_frame_type != GRPC_CHTTP2_FRAME_SETTINGS) { + char *msg; + gpr_asprintf( + &msg, "Expected SETTINGS frame as the first frame, got frame type %d", + transport_parsing->incoming_frame_type); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; + } + transport_parsing->is_first_frame = false; if (transport_parsing->expect_continuation_stream_id != 0) { if (transport_parsing->incoming_frame_type != GRPC_CHTTP2_FRAME_CONTINUATION) { - gpr_log(GPR_ERROR, "Expected CONTINUATION frame, got frame type %02x", - transport_parsing->incoming_frame_type); - return 0; + char *msg; + gpr_asprintf(&msg, "Expected CONTINUATION frame, got frame type %02x", + transport_parsing->incoming_frame_type); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } if (transport_parsing->expect_continuation_stream_id != transport_parsing->incoming_stream_id) { - gpr_log(GPR_ERROR, - "Expected CONTINUATION frame for grpc_chttp2_stream %08x, got " - "grpc_chttp2_stream %08x", - transport_parsing->expect_continuation_stream_id, - transport_parsing->incoming_stream_id); - return 0; + char *msg; + gpr_asprintf( + &msg, + "Expected CONTINUATION frame for grpc_chttp2_stream %08x, got " + "grpc_chttp2_stream %08x", + transport_parsing->expect_continuation_stream_id, + transport_parsing->incoming_stream_id); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } return init_header_frame_parser(exec_ctx, transport_parsing, 1); } @@ -476,8 +510,7 @@ static int init_frame_parser(grpc_exec_ctx *exec_ctx, case GRPC_CHTTP2_FRAME_HEADER: return init_header_frame_parser(exec_ctx, transport_parsing, 0); case GRPC_CHTTP2_FRAME_CONTINUATION: - gpr_log(GPR_ERROR, "Unexpected CONTINUATION frame"); - return 0; + return GRPC_ERROR_CREATE("Unexpected CONTINUATION frame"); case GRPC_CHTTP2_FRAME_RST_STREAM: return init_rst_stream_parser(exec_ctx, transport_parsing); case GRPC_CHTTP2_FRAME_SETTINGS: @@ -489,22 +522,24 @@ static int init_frame_parser(grpc_exec_ctx *exec_ctx, case GRPC_CHTTP2_FRAME_GOAWAY: return init_goaway_parser(exec_ctx, transport_parsing); default: - gpr_log(GPR_ERROR, "Unknown frame type %02x", - transport_parsing->incoming_frame_type); + if (grpc_http_trace) { + gpr_log(GPR_ERROR, "Unknown frame type %02x", + transport_parsing->incoming_frame_type); + } return init_skip_frame_parser(exec_ctx, transport_parsing, 0); } } -static grpc_chttp2_parse_error skip_parser( - grpc_exec_ctx *exec_ctx, void *parser, - grpc_chttp2_transport_parsing *transport_parsing, - grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) { - return GRPC_CHTTP2_PARSE_OK; +static grpc_error *skip_parser(grpc_exec_ctx *exec_ctx, void *parser, + grpc_chttp2_transport_parsing *transport_parsing, + grpc_chttp2_stream_parsing *stream_parsing, + gpr_slice slice, int is_last) { + return GRPC_ERROR_NONE; } static void skip_header(void *tp, grpc_mdelem *md) { GRPC_MDELEM_UNREF(md); } -static int init_skip_frame_parser( +static grpc_error *init_skip_frame_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing, int is_header) { if (is_header) { @@ -519,7 +554,7 @@ static int init_skip_frame_parser( } else { transport_parsing->parser = skip_parser; } - return 1; + return GRPC_ERROR_NONE; } void grpc_chttp2_parsing_become_skip_parser( @@ -529,22 +564,28 @@ void grpc_chttp2_parsing_become_skip_parser( transport_parsing->parser == grpc_chttp2_header_parser_parse); } -static grpc_chttp2_parse_error update_incoming_window( +static grpc_error *update_incoming_window( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing) { uint32_t incoming_frame_size = transport_parsing->incoming_frame_size; if (incoming_frame_size > transport_parsing->incoming_window) { - gpr_log(GPR_ERROR, "frame of size %d overflows incoming window of %" PRId64, - transport_parsing->incoming_frame_size, - transport_parsing->incoming_window); - return GRPC_CHTTP2_CONNECTION_ERROR; + char *msg; + gpr_asprintf(&msg, "frame of size %d overflows incoming window of %" PRId64, + transport_parsing->incoming_frame_size, + transport_parsing->incoming_window); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } if (incoming_frame_size > stream_parsing->incoming_window) { - gpr_log(GPR_ERROR, "frame of size %d overflows incoming window of %" PRId64, - transport_parsing->incoming_frame_size, - stream_parsing->incoming_window); - return GRPC_CHTTP2_CONNECTION_ERROR; + char *msg; + gpr_asprintf(&msg, "frame of size %d overflows incoming window of %" PRId64, + transport_parsing->incoming_frame_size, + stream_parsing->incoming_window); + grpc_error *err = GRPC_ERROR_CREATE(msg); + gpr_free(msg); + return err; } GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("parse", transport_parsing, incoming_window, @@ -555,15 +596,15 @@ static grpc_chttp2_parse_error update_incoming_window( grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing); - return GRPC_CHTTP2_PARSE_OK; + return GRPC_ERROR_NONE; } -static int init_data_frame_parser( +static grpc_error *init_data_frame_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) { grpc_chttp2_stream_parsing *stream_parsing = grpc_chttp2_parsing_lookup_stream(transport_parsing, transport_parsing->incoming_stream_id); - grpc_chttp2_parse_error err = GRPC_CHTTP2_PARSE_OK; + grpc_error *err = GRPC_ERROR_NONE; if (stream_parsing == NULL) { return init_skip_frame_parser(exec_ctx, transport_parsing, 0); } @@ -571,33 +612,32 @@ static int init_data_frame_parser( if (stream_parsing->received_close) { return init_skip_frame_parser(exec_ctx, transport_parsing, 0); } - if (err == GRPC_CHTTP2_PARSE_OK) { + if (err == GRPC_ERROR_NONE) { err = update_incoming_window(exec_ctx, transport_parsing, stream_parsing); } - if (err == GRPC_CHTTP2_PARSE_OK) { + if (err == GRPC_ERROR_NONE) { err = grpc_chttp2_data_parser_begin_frame( - &stream_parsing->data_parser, transport_parsing->incoming_frame_flags); - } - switch (err) { - case GRPC_CHTTP2_PARSE_OK: - transport_parsing->incoming_stream = stream_parsing; - transport_parsing->parser = grpc_chttp2_data_parser_parse; - transport_parsing->parser_data = &stream_parsing->data_parser; - return 1; - case GRPC_CHTTP2_STREAM_ERROR: - stream_parsing->received_close = 1; - stream_parsing->saw_rst_stream = 1; - stream_parsing->rst_stream_reason = GRPC_CHTTP2_PROTOCOL_ERROR; - gpr_slice_buffer_add( - &transport_parsing->qbuf, - grpc_chttp2_rst_stream_create(transport_parsing->incoming_stream_id, - GRPC_CHTTP2_PROTOCOL_ERROR, - &stream_parsing->stats.outgoing)); - return init_skip_frame_parser(exec_ctx, transport_parsing, 0); - case GRPC_CHTTP2_CONNECTION_ERROR: - return 0; + &stream_parsing->data_parser, transport_parsing->incoming_frame_flags, + stream_parsing->id); + } + if (err == GRPC_ERROR_NONE) { + transport_parsing->incoming_stream = stream_parsing; + transport_parsing->parser = grpc_chttp2_data_parser_parse; + transport_parsing->parser_data = &stream_parsing->data_parser; + return GRPC_ERROR_NONE; + } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, NULL)) { + /* handle stream errors by closing the stream */ + stream_parsing->received_close = 1; + stream_parsing->forced_close_error = err; + gpr_slice_buffer_add( + &transport_parsing->qbuf, + grpc_chttp2_rst_stream_create(transport_parsing->incoming_stream_id, + GRPC_CHTTP2_PROTOCOL_ERROR, + &stream_parsing->stats.outgoing)); + return init_skip_frame_parser(exec_ctx, transport_parsing, 0); + } else { + return err; } - GPR_UNREACHABLE_CODE(return 0); } static void free_timeout(void *p) { gpr_free(p); } @@ -713,7 +753,7 @@ static void on_trailing_header(void *tp, grpc_mdelem *md) { GPR_TIMER_END("on_trailing_header", 0); } -static int init_header_frame_parser( +static grpc_error *init_header_frame_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing, int is_continuation) { uint8_t is_eoh = (transport_parsing->incoming_frame_flags & @@ -808,15 +848,16 @@ static int init_header_frame_parser( GRPC_CHTTP2_FLAG_HAS_PRIORITY)) { grpc_chttp2_hpack_parser_set_has_priority(&transport_parsing->hpack_parser); } - return 1; + return GRPC_ERROR_NONE; } -static int init_window_update_frame_parser( +static grpc_error *init_window_update_frame_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) { - int ok = GRPC_CHTTP2_PARSE_OK == grpc_chttp2_window_update_parser_begin_frame( - &transport_parsing->simple.window_update, - transport_parsing->incoming_frame_size, - transport_parsing->incoming_frame_flags); + grpc_error *err = grpc_chttp2_window_update_parser_begin_frame( + &transport_parsing->simple.window_update, + transport_parsing->incoming_frame_size, + transport_parsing->incoming_frame_flags); + if (err != GRPC_ERROR_NONE) return err; if (transport_parsing->incoming_stream_id != 0) { grpc_chttp2_stream_parsing *stream_parsing = transport_parsing->incoming_stream = grpc_chttp2_parsing_lookup_stream( @@ -828,26 +869,27 @@ static int init_window_update_frame_parser( } transport_parsing->parser = grpc_chttp2_window_update_parser_parse; transport_parsing->parser_data = &transport_parsing->simple.window_update; - return ok; + return GRPC_ERROR_NONE; } -static int init_ping_parser(grpc_exec_ctx *exec_ctx, - grpc_chttp2_transport_parsing *transport_parsing) { - int ok = GRPC_CHTTP2_PARSE_OK == grpc_chttp2_ping_parser_begin_frame( - &transport_parsing->simple.ping, - transport_parsing->incoming_frame_size, - transport_parsing->incoming_frame_flags); +static grpc_error *init_ping_parser( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) { + grpc_error *err = grpc_chttp2_ping_parser_begin_frame( + &transport_parsing->simple.ping, transport_parsing->incoming_frame_size, + transport_parsing->incoming_frame_flags); + if (err != GRPC_ERROR_NONE) return err; transport_parsing->parser = grpc_chttp2_ping_parser_parse; transport_parsing->parser_data = &transport_parsing->simple.ping; - return ok; + return GRPC_ERROR_NONE; } -static int init_rst_stream_parser( +static grpc_error *init_rst_stream_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) { - int ok = GRPC_CHTTP2_PARSE_OK == grpc_chttp2_rst_stream_parser_begin_frame( - &transport_parsing->simple.rst_stream, - transport_parsing->incoming_frame_size, - transport_parsing->incoming_frame_flags); + grpc_error *err = grpc_chttp2_rst_stream_parser_begin_frame( + &transport_parsing->simple.rst_stream, + transport_parsing->incoming_frame_size, + transport_parsing->incoming_frame_flags); + if (err != GRPC_ERROR_NONE) return err; grpc_chttp2_stream_parsing *stream_parsing = transport_parsing->incoming_stream = grpc_chttp2_parsing_lookup_stream( transport_parsing, transport_parsing->incoming_stream_id); @@ -857,37 +899,32 @@ static int init_rst_stream_parser( stream_parsing->stats.incoming.framing_bytes += 9; transport_parsing->parser = grpc_chttp2_rst_stream_parser_parse; transport_parsing->parser_data = &transport_parsing->simple.rst_stream; - return ok; + return GRPC_ERROR_NONE; } -static int init_goaway_parser( +static grpc_error *init_goaway_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) { - int ok = GRPC_CHTTP2_PARSE_OK == grpc_chttp2_goaway_parser_begin_frame( - &transport_parsing->goaway_parser, - transport_parsing->incoming_frame_size, - transport_parsing->incoming_frame_flags); + grpc_error *err = grpc_chttp2_goaway_parser_begin_frame( + &transport_parsing->goaway_parser, transport_parsing->incoming_frame_size, + transport_parsing->incoming_frame_flags); + if (err != GRPC_ERROR_NONE) return err; transport_parsing->parser = grpc_chttp2_goaway_parser_parse; transport_parsing->parser_data = &transport_parsing->goaway_parser; - return ok; + return GRPC_ERROR_NONE; } -static int init_settings_frame_parser( +static grpc_error *init_settings_frame_parser( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) { - int ok; - if (transport_parsing->incoming_stream_id != 0) { - gpr_log(GPR_ERROR, "settings frame received for grpc_chttp2_stream %d", - transport_parsing->incoming_stream_id); - return 0; + return GRPC_ERROR_CREATE("Settings frame received for grpc_chttp2_stream"); } - ok = GRPC_CHTTP2_PARSE_OK == grpc_chttp2_settings_parser_begin_frame( - &transport_parsing->simple.settings, - transport_parsing->incoming_frame_size, - transport_parsing->incoming_frame_flags, - transport_parsing->settings); - if (!ok) { - return 0; + grpc_error *err = grpc_chttp2_settings_parser_begin_frame( + &transport_parsing->simple.settings, + transport_parsing->incoming_frame_size, + transport_parsing->incoming_frame_flags, transport_parsing->settings); + if (err != GRPC_ERROR_NONE) { + return err; } if (transport_parsing->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) { transport_parsing->settings_ack_received = 1; @@ -901,7 +938,7 @@ static int init_settings_frame_parser( } transport_parsing->parser = grpc_chttp2_settings_parser_parse; transport_parsing->parser_data = &transport_parsing->simple.settings; - return ok; + return GRPC_ERROR_NONE; } /* @@ -910,34 +947,37 @@ static int is_window_update_legal(int64_t window_update, int64_t window) { } */ -static int parse_frame_slice(grpc_exec_ctx *exec_ctx, - grpc_chttp2_transport_parsing *transport_parsing, - gpr_slice slice, int is_last) { +static grpc_error *parse_frame_slice( + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing, + gpr_slice slice, int is_last) { grpc_chttp2_stream_parsing *stream_parsing = transport_parsing->incoming_stream; - switch (transport_parsing->parser(exec_ctx, transport_parsing->parser_data, - transport_parsing, stream_parsing, slice, - is_last)) { - case GRPC_CHTTP2_PARSE_OK: - if (stream_parsing) { - grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, - stream_parsing); - } - return 1; - case GRPC_CHTTP2_STREAM_ERROR: - grpc_chttp2_parsing_become_skip_parser(exec_ctx, transport_parsing); - if (stream_parsing) { - stream_parsing->saw_rst_stream = 1; - stream_parsing->rst_stream_reason = GRPC_CHTTP2_PROTOCOL_ERROR; - gpr_slice_buffer_add( - &transport_parsing->qbuf, - grpc_chttp2_rst_stream_create(transport_parsing->incoming_stream_id, - GRPC_CHTTP2_PROTOCOL_ERROR, - &stream_parsing->stats.outgoing)); - } - return 1; - case GRPC_CHTTP2_CONNECTION_ERROR: - return 0; + grpc_error *err = transport_parsing->parser( + exec_ctx, transport_parsing->parser_data, transport_parsing, + stream_parsing, slice, is_last); + if (err == GRPC_ERROR_NONE) { + if (stream_parsing) { + grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, + stream_parsing); + } + return GRPC_ERROR_NONE; + } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, NULL)) { + if (grpc_http_trace) { + const char *msg = grpc_error_string(err); + gpr_log(GPR_ERROR, "%s", msg); + grpc_error_free_string(msg); + } + grpc_chttp2_parsing_become_skip_parser(exec_ctx, transport_parsing); + if (stream_parsing) { + stream_parsing->forced_close_error = err; + gpr_slice_buffer_add( + &transport_parsing->qbuf, + grpc_chttp2_rst_stream_create(transport_parsing->incoming_stream_id, + GRPC_CHTTP2_PROTOCOL_ERROR, + &stream_parsing->stats.outgoing)); + } else { + GRPC_ERROR_UNREF(err); + } } - GPR_UNREACHABLE_CODE(return 0); + return err; } diff --git a/src/core/ext/transport/chttp2/transport/writing.c b/src/core/ext/transport/chttp2/transport/writing.c index a8fb463939..b19f5f068d 100644 --- a/src/core/ext/transport/chttp2/transport/writing.c +++ b/src/core/ext/transport/chttp2/transport/writing.c @@ -45,7 +45,7 @@ static void finalize_outbuf(grpc_exec_ctx *exec_ctx, int grpc_chttp2_unlocking_check_writes( grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global, - grpc_chttp2_transport_writing *transport_writing, int is_parsing) { + grpc_chttp2_transport_writing *transport_writing) { grpc_chttp2_stream_global *stream_global; grpc_chttp2_stream_writing *stream_writing; @@ -61,7 +61,7 @@ int grpc_chttp2_unlocking_check_writes( [GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]); if (transport_global->dirtied_local_settings && - !transport_global->sent_local_settings && !is_parsing) { + !transport_global->sent_local_settings) { gpr_slice_buffer_add( &transport_writing->outbuf, grpc_chttp2_settings_create( @@ -187,7 +187,8 @@ void grpc_chttp2_perform_writes( grpc_endpoint_write(exec_ctx, endpoint, &transport_writing->outbuf, &transport_writing->done_cb); } else { - grpc_exec_ctx_enqueue(exec_ctx, &transport_writing->done_cb, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &transport_writing->done_cb, GRPC_ERROR_NONE, + NULL); } } @@ -334,25 +335,27 @@ void grpc_chttp2_cleanup_writing( transport_global, transport_writing, &stream_global, &stream_writing)) { if (stream_writing->sent_initial_metadata) { grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, - &stream_global->send_initial_metadata_finished, 1); + exec_ctx, transport_global, stream_global, + &stream_global->send_initial_metadata_finished, GRPC_ERROR_NONE); } grpc_transport_move_one_way_stats(&stream_writing->stats, &stream_global->stats.outgoing); if (stream_writing->sent_message) { GPR_ASSERT(stream_writing->send_message == NULL); grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, &stream_global->send_message_finished, 1); + exec_ctx, transport_global, stream_global, + &stream_global->send_message_finished, GRPC_ERROR_NONE); stream_writing->sent_message = 0; } if (stream_writing->sent_trailing_metadata) { grpc_chttp2_complete_closure_step( - exec_ctx, stream_global, - &stream_global->send_trailing_metadata_finished, 1); + exec_ctx, transport_global, stream_global, + &stream_global->send_trailing_metadata_finished, GRPC_ERROR_NONE); } if (stream_writing->sent_trailing_metadata) { grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, - !transport_global->is_client, 1); + !transport_global->is_client, 1, + GRPC_ERROR_NONE); } GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2_writing"); } diff --git a/src/core/ext/transport/cronet/transport/cronet_transport.c b/src/core/ext/transport/cronet/transport/cronet_transport.c index 1bb53b756c..25d8aca250 100644 --- a/src/core/ext/transport/cronet/transport/cronet_transport.c +++ b/src/core/ext/transport/cronet/transport/cronet_transport.c @@ -159,11 +159,11 @@ static void set_pollset_set_do_nothing(grpc_exec_ctx *exec_ctx, static void enqueue_callbacks(grpc_closure *callback_list[]) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; if (callback_list[0]) { - grpc_exec_ctx_enqueue(&exec_ctx, callback_list[0], true, NULL); + grpc_exec_ctx_sched(&exec_ctx, callback_list[0], GRPC_ERROR_NONE, NULL); callback_list[0] = NULL; } if (callback_list[1]) { - grpc_exec_ctx_enqueue(&exec_ctx, callback_list[1], true, NULL); + grpc_exec_ctx_sched(&exec_ctx, callback_list[1], GRPC_ERROR_NONE, NULL); callback_list[1] = NULL; } grpc_exec_ctx_finish(&exec_ctx); diff --git a/src/core/lib/channel/channel_args.c b/src/core/lib/channel/channel_args.c index d53ce904a9..79ceeb66b3 100644 --- a/src/core/lib/channel/channel_args.c +++ b/src/core/lib/channel/channel_args.c @@ -149,6 +149,7 @@ grpc_channel_args *grpc_channel_args_normalize(const grpc_channel_args *a) { void grpc_channel_args_destroy(grpc_channel_args *a) { size_t i; + if (!a) return; for (i = 0; i < a->num_args; i++) { switch (a->args[i].type) { case GRPC_ARG_STRING: @@ -212,7 +213,7 @@ static int find_compression_algorithm_states_bitset(const grpc_channel_args *a, grpc_channel_args *grpc_channel_args_compression_algorithm_set_state( grpc_channel_args **a, grpc_compression_algorithm algorithm, int state) { - int *states_arg; + int *states_arg = NULL; grpc_channel_args *result = *a; const int states_arg_found = find_compression_algorithm_states_bitset(*a, &states_arg); diff --git a/src/core/lib/channel/compress_filter.c b/src/core/lib/channel/compress_filter.c index 32f4f8d37e..32ebe53ee6 100644 --- a/src/core/lib/channel/compress_filter.c +++ b/src/core/lib/channel/compress_filter.c @@ -154,11 +154,11 @@ static void process_send_initial_metadata( static void continue_send_message(grpc_exec_ctx *exec_ctx, grpc_call_element *elem); -static void send_done(grpc_exec_ctx *exec_ctx, void *elemp, bool success) { +static void send_done(grpc_exec_ctx *exec_ctx, void *elemp, grpc_error *error) { grpc_call_element *elem = elemp; call_data *calld = elem->call_data; gpr_slice_buffer_reset_and_unref(&calld->slices); - calld->post_send->cb(exec_ctx, calld->post_send->cb_arg, success); + calld->post_send->cb(exec_ctx, calld->post_send->cb_arg, error); } static void finish_send_message(grpc_exec_ctx *exec_ctx, @@ -206,7 +206,7 @@ static void finish_send_message(grpc_exec_ctx *exec_ctx, grpc_call_next_op(exec_ctx, elem, &calld->send_op); } -static void got_slice(grpc_exec_ctx *exec_ctx, void *elemp, bool success) { +static void got_slice(grpc_exec_ctx *exec_ctx, void *elemp, grpc_error *error) { grpc_call_element *elem = elemp; call_data *calld = elem->call_data; gpr_slice_buffer_add(&calld->slices, calld->incoming_slice); diff --git a/src/core/lib/channel/http_client_filter.c b/src/core/lib/channel/http_client_filter.c index 792f0d8ae6..ab6c6c9ef0 100644 --- a/src/core/lib/channel/http_client_filter.c +++ b/src/core/lib/channel/http_client_filter.c @@ -101,7 +101,8 @@ 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, bool success) { +static void hc_on_recv(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; @@ -109,7 +110,7 @@ static void hc_on_recv(grpc_exec_ctx *exec_ctx, void *user_data, bool success) { a.exec_ctx = exec_ctx; grpc_metadata_batch_filter(calld->recv_initial_metadata, client_recv_filter, &a); - calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, success); + calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, error); } static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) { diff --git a/src/core/lib/channel/http_server_filter.c b/src/core/lib/channel/http_server_filter.c index 922f771cf1..d0beebd817 100644 --- a/src/core/lib/channel/http_server_filter.c +++ b/src/core/lib/channel/http_server_filter.c @@ -142,10 +142,11 @@ static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) { } } -static void hs_on_recv(grpc_exec_ctx *exec_ctx, void *user_data, bool success) { +static void hs_on_recv(grpc_exec_ctx *exec_ctx, void *user_data, + grpc_error *err) { grpc_call_element *elem = user_data; call_data *calld = elem->call_data; - if (success) { + if (err == GRPC_ERROR_NONE) { server_filter_args a; a.elem = elem; a.exec_ctx = exec_ctx; @@ -157,27 +158,35 @@ static void hs_on_recv(grpc_exec_ctx *exec_ctx, void *user_data, bool success) { calld->seen_path && calld->seen_authority) { /* do nothing */ } else { + err = GRPC_ERROR_CREATE("Bad incoming HTTP headers"); if (!calld->seen_path) { - gpr_log(GPR_ERROR, "Missing :path header"); + err = grpc_error_add_child(err, + GRPC_ERROR_CREATE("Missing :path header")); } if (!calld->seen_authority) { - gpr_log(GPR_ERROR, "Missing :authority header"); + err = grpc_error_add_child( + err, GRPC_ERROR_CREATE("Missing :authority header")); } if (!calld->seen_method) { - gpr_log(GPR_ERROR, "Missing :method header"); + err = grpc_error_add_child(err, + GRPC_ERROR_CREATE("Missing :method header")); } if (!calld->seen_scheme) { - gpr_log(GPR_ERROR, "Missing :scheme header"); + err = grpc_error_add_child(err, + GRPC_ERROR_CREATE("Missing :scheme header")); } if (!calld->seen_te_trailers) { - gpr_log(GPR_ERROR, "Missing te trailers header"); + err = grpc_error_add_child( + err, GRPC_ERROR_CREATE("Missing te: trailers header")); } /* Error this call out */ - success = 0; grpc_call_element_send_cancel(exec_ctx, elem); } + } else { + GRPC_ERROR_REF(err); } - calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, success); + calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, err); + GRPC_ERROR_UNREF(err); } static void hs_mutate_op(grpc_call_element *elem, diff --git a/src/core/lib/http/httpcli.c b/src/core/lib/http/httpcli.c index e8957bfe89..18135bcb58 100644 --- a/src/core/lib/http/httpcli.c +++ b/src/core/lib/http/httpcli.c @@ -39,12 +39,14 @@ #include <grpc/support/alloc.h> #include <grpc/support/log.h> #include <grpc/support/string_util.h> +#include <grpc/support/useful.h> #include "src/core/lib/http/format_request.h" #include "src/core/lib/http/parser.h" #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/iomgr_internal.h" #include "src/core/lib/iomgr/resolve_address.h" +#include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/iomgr/tcp_client.h" #include "src/core/lib/support/string.h" @@ -59,8 +61,7 @@ typedef struct { gpr_timespec deadline; int have_read_byte; const grpc_httpcli_handshaker *handshaker; - grpc_httpcli_response_cb on_response; - void *user_data; + grpc_closure *on_done; grpc_httpcli_context *context; grpc_polling_entity *pollent; grpc_iomgr_object iomgr_obj; @@ -69,6 +70,7 @@ typedef struct { grpc_closure on_read; grpc_closure done_write; grpc_closure connected; + grpc_error *overall_error; } internal_request; static grpc_httpcli_get_override g_get_override = NULL; @@ -76,6 +78,7 @@ static grpc_httpcli_post_override g_post_override = NULL; static void plaintext_handshake(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *endpoint, const char *host, + gpr_timespec deadline, void (*on_done)(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *endpoint)) { @@ -93,14 +96,14 @@ void grpc_httpcli_context_destroy(grpc_httpcli_context *context) { grpc_pollset_set_destroy(context->pollset_set); } -static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req); +static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, + grpc_error *due_to_error); static void finish(grpc_exec_ctx *exec_ctx, internal_request *req, - int success) { + grpc_error *error) { grpc_polling_entity_del_from_pollset_set(exec_ctx, req->pollent, req->context->pollset_set); - req->on_response(exec_ctx, req->user_data, - success ? &req->parser.http.response : NULL); + grpc_exec_ctx_sched(exec_ctx, req->on_done, error, NULL); grpc_http_parser_destroy(&req->parser); if (req->addresses != NULL) { grpc_resolved_addresses_destroy(req->addresses); @@ -114,39 +117,49 @@ static void finish(grpc_exec_ctx *exec_ctx, internal_request *req, grpc_iomgr_unregister_object(&req->iomgr_obj); gpr_slice_buffer_destroy(&req->incoming); gpr_slice_buffer_destroy(&req->outgoing); + GRPC_ERROR_UNREF(req->overall_error); gpr_free(req); } -static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, bool success); +static void append_error(internal_request *req, grpc_error *error) { + if (req->overall_error == GRPC_ERROR_NONE) { + req->overall_error = GRPC_ERROR_CREATE("Failed HTTP/1 client request"); + } + grpc_resolved_address *addr = &req->addresses->addrs[req->next_address - 1]; + char *addr_text = grpc_sockaddr_to_uri((struct sockaddr *)addr->addr); + req->overall_error = grpc_error_add_child( + req->overall_error, + grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, addr_text)); + gpr_free(addr_text); +} static void do_read(grpc_exec_ctx *exec_ctx, internal_request *req) { grpc_endpoint_read(exec_ctx, req->ep, &req->incoming, &req->on_read); } -static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, bool success) { +static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, + grpc_error *error) { internal_request *req = user_data; size_t i; for (i = 0; i < req->incoming.count; i++) { if (GPR_SLICE_LENGTH(req->incoming.slices[i])) { req->have_read_byte = 1; - if (!grpc_http_parser_parse(&req->parser, req->incoming.slices[i])) { - finish(exec_ctx, req, 0); + grpc_error *err = + grpc_http_parser_parse(&req->parser, req->incoming.slices[i]); + if (err != GRPC_ERROR_NONE) { + finish(exec_ctx, req, err); return; } } } - if (success) { + if (error == GRPC_ERROR_NONE) { do_read(exec_ctx, req); } else if (!req->have_read_byte) { - next_address(exec_ctx, req); + next_address(exec_ctx, req, GRPC_ERROR_REF(error)); } else { - int parse_success = grpc_http_parser_eof(&req->parser); - if (parse_success && (req->parser.type != GRPC_HTTP_RESPONSE)) { - parse_success = 0; - } - finish(exec_ctx, req, parse_success); + finish(exec_ctx, req, grpc_http_parser_eof(&req->parser)); } } @@ -154,12 +167,12 @@ static void on_written(grpc_exec_ctx *exec_ctx, internal_request *req) { do_read(exec_ctx, req); } -static void done_write(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void done_write(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { internal_request *req = arg; - if (success) { + if (error == GRPC_ERROR_NONE) { on_written(exec_ctx, req); } else { - next_address(exec_ctx, req); + next_address(exec_ctx, req, GRPC_ERROR_REF(error)); } } @@ -174,7 +187,8 @@ static void on_handshake_done(grpc_exec_ctx *exec_ctx, void *arg, internal_request *req = arg; if (!ep) { - next_address(exec_ctx, req); + next_address(exec_ctx, req, + GRPC_ERROR_CREATE("Unexplained handshake failure")); return; } @@ -182,23 +196,30 @@ static void on_handshake_done(grpc_exec_ctx *exec_ctx, void *arg, start_write(exec_ctx, req); } -static void on_connected(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void on_connected(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { internal_request *req = arg; if (!req->ep) { - next_address(exec_ctx, req); + next_address(exec_ctx, req, GRPC_ERROR_REF(error)); return; } req->handshaker->handshake( exec_ctx, req, req->ep, req->ssl_host_override ? req->ssl_host_override : req->host, - on_handshake_done); + req->deadline, on_handshake_done); } -static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req) { +static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, + grpc_error *error) { grpc_resolved_address *addr; + if (error != GRPC_ERROR_NONE) { + append_error(req, error); + } if (req->next_address == req->addresses->naddrs) { - finish(exec_ctx, req, 0); + finish(exec_ctx, req, + GRPC_ERROR_CREATE_REFERENCING("Failed HTTP requests to all targets", + &req->overall_error, 1)); return; } addr = &req->addresses->addrs[req->next_address++]; @@ -208,34 +229,34 @@ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req) { (struct sockaddr *)&addr->addr, addr->len, req->deadline); } -static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg, - grpc_resolved_addresses *addresses) { +static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { internal_request *req = arg; - if (!addresses) { - finish(exec_ctx, req, 0); + if (error != GRPC_ERROR_NONE) { + finish(exec_ctx, req, error); return; } - req->addresses = addresses; req->next_address = 0; - next_address(exec_ctx, req); + next_address(exec_ctx, req, GRPC_ERROR_NONE); } -static void internal_request_begin( - grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, - grpc_polling_entity *pollent, const grpc_httpcli_request *request, - gpr_timespec deadline, grpc_httpcli_response_cb on_response, - void *user_data, const char *name, gpr_slice request_text) { +static void internal_request_begin(grpc_exec_ctx *exec_ctx, + grpc_httpcli_context *context, + grpc_polling_entity *pollent, + const grpc_httpcli_request *request, + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response, + const char *name, gpr_slice request_text) { internal_request *req = gpr_malloc(sizeof(internal_request)); memset(req, 0, sizeof(*req)); req->request_text = request_text; - grpc_http_parser_init(&req->parser); - req->on_response = on_response; - req->user_data = user_data; + grpc_http_parser_init(&req->parser, GRPC_HTTP_RESPONSE, response); + req->on_done = on_done; req->deadline = deadline; req->handshaker = request->handshaker ? request->handshaker : &grpc_httpcli_plaintext; req->context = context; req->pollent = pollent; + req->overall_error = GRPC_ERROR_NONE; grpc_closure_init(&req->on_read, on_read, req); grpc_closure_init(&req->done_write, done_write, req); gpr_slice_buffer_init(&req->incoming); @@ -248,22 +269,22 @@ static void internal_request_begin( grpc_polling_entity_add_to_pollset_set(exec_ctx, req->pollent, req->context->pollset_set); grpc_resolve_address(exec_ctx, request->host, req->handshaker->default_port, - on_resolved, req); + grpc_closure_create(on_resolved, req), &req->addresses); } void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, const grpc_httpcli_request *request, - gpr_timespec deadline, - grpc_httpcli_response_cb on_response, void *user_data) { + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response) { char *name; if (g_get_override && - g_get_override(exec_ctx, request, deadline, on_response, user_data)) { + g_get_override(exec_ctx, request, deadline, on_done, response)) { return; } gpr_asprintf(&name, "HTTP:GET:%s:%s", request->host, request->http.path); - internal_request_begin(exec_ctx, context, pollent, request, deadline, - on_response, user_data, name, + internal_request_begin(exec_ctx, context, pollent, request, deadline, on_done, + response, name, grpc_httpcli_format_get_request(request)); gpr_free(name); } @@ -272,18 +293,18 @@ void grpc_httpcli_post(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, - gpr_timespec deadline, - grpc_httpcli_response_cb on_response, void *user_data) { + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response) { char *name; if (g_post_override && g_post_override(exec_ctx, request, body_bytes, body_size, deadline, - on_response, user_data)) { + on_done, response)) { return; } gpr_asprintf(&name, "HTTP:POST:%s:%s", request->host, request->http.path); internal_request_begin( - exec_ctx, context, pollent, request, deadline, on_response, user_data, - name, grpc_httpcli_format_post_request(request, body_bytes, body_size)); + exec_ctx, context, pollent, request, deadline, on_done, response, name, + grpc_httpcli_format_post_request(request, body_bytes, body_size)); gpr_free(name); } diff --git a/src/core/lib/http/httpcli.h b/src/core/lib/http/httpcli.h index 7e7784f1ab..662e176f4c 100644 --- a/src/core/lib/http/httpcli.h +++ b/src/core/lib/http/httpcli.h @@ -57,7 +57,7 @@ typedef struct grpc_httpcli_context { typedef struct { const char *default_port; void (*handshake)(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *endpoint, - const char *host, + const char *host, gpr_timespec deadline, void (*on_done)(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *endpoint)); } grpc_httpcli_handshaker; @@ -82,11 +82,6 @@ typedef struct grpc_httpcli_request { /* Expose the parser response type as a httpcli response too */ typedef struct grpc_http_response grpc_httpcli_response; -/* Callback for grpc_httpcli_get and grpc_httpcli_post. */ -typedef void (*grpc_httpcli_response_cb)(grpc_exec_ctx *exec_ctx, - void *user_data, - const grpc_http_response *response); - void grpc_httpcli_context_init(grpc_httpcli_context *context); void grpc_httpcli_context_destroy(grpc_httpcli_context *context); @@ -103,8 +98,8 @@ void grpc_httpcli_context_destroy(grpc_httpcli_context *context); void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, const grpc_httpcli_request *request, - gpr_timespec deadline, - grpc_httpcli_response_cb on_response, void *user_data); + gpr_timespec deadline, grpc_closure *on_complete, + grpc_httpcli_response *response); /* Asynchronously perform a HTTP POST. 'context' specifies the http context under which to do the post @@ -125,19 +120,19 @@ void grpc_httpcli_post(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_polling_entity *pollent, const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, - gpr_timespec deadline, - grpc_httpcli_response_cb on_response, void *user_data); + gpr_timespec deadline, grpc_closure *on_complete, + grpc_httpcli_response *response); /* override functions return 1 if they handled the request, 0 otherwise */ typedef int (*grpc_httpcli_get_override)(grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, gpr_timespec deadline, - grpc_httpcli_response_cb on_response, - void *user_data); + grpc_closure *on_complete, + grpc_httpcli_response *response); typedef int (*grpc_httpcli_post_override)( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, gpr_timespec deadline, - grpc_httpcli_response_cb on_response, void *user_data); + grpc_closure *on_complete, grpc_httpcli_response *response); void grpc_httpcli_set_override(grpc_httpcli_get_override get, grpc_httpcli_post_override post); diff --git a/src/core/lib/http/httpcli_security_connector.c b/src/core/lib/http/httpcli_security_connector.c index 5590928968..a57d93bb7b 100644 --- a/src/core/lib/http/httpcli_security_connector.c +++ b/src/core/lib/http/httpcli_security_connector.c @@ -61,6 +61,7 @@ static void httpcli_ssl_destroy(grpc_security_connector *sc) { static void httpcli_ssl_do_handshake(grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc, grpc_endpoint *nonsecure_endpoint, + gpr_timespec deadline, grpc_security_handshake_done_cb cb, void *user_data) { grpc_httpcli_ssl_channel_security_connector *c = @@ -79,7 +80,7 @@ static void httpcli_ssl_do_handshake(grpc_exec_ctx *exec_ctx, cb(exec_ctx, user_data, GRPC_SECURITY_ERROR, NULL, NULL); } else { grpc_do_security_handshake(exec_ctx, handshaker, &sc->base, true, - nonsecure_endpoint, cb, user_data); + nonsecure_endpoint, deadline, cb, user_data); } } @@ -163,6 +164,7 @@ static void on_secure_transport_setup_done(grpc_exec_ctx *exec_ctx, void *rp, static void ssl_handshake(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp, const char *host, + gpr_timespec deadline, void (*on_done)(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *endpoint)) { grpc_channel_security_connector *sc = NULL; @@ -181,7 +183,7 @@ static void ssl_handshake(grpc_exec_ctx *exec_ctx, void *arg, pem_root_certs, pem_root_certs_size, host, &sc) == GRPC_SECURITY_OK); grpc_channel_security_connector_do_handshake( - exec_ctx, sc, tcp, on_secure_transport_setup_done, c); + exec_ctx, sc, tcp, deadline, on_secure_transport_setup_done, c); GRPC_SECURITY_CONNECTOR_UNREF(&sc->base, "httpcli"); } diff --git a/src/core/lib/http/parser.c b/src/core/lib/http/parser.c index 09b2ed40d1..92ed08ae51 100644 --- a/src/core/lib/http/parser.c +++ b/src/core/lib/http/parser.c @@ -48,37 +48,38 @@ static char *buf2str(void *buffer, size_t length) { return out; } -static int handle_response_line(grpc_http_parser *parser) { +static grpc_error *handle_response_line(grpc_http_parser *parser) { uint8_t *beg = parser->cur_line; uint8_t *cur = beg; uint8_t *end = beg + parser->cur_line_length; - if (cur == end || *cur++ != 'H') goto error; - if (cur == end || *cur++ != 'T') goto error; - if (cur == end || *cur++ != 'T') goto error; - if (cur == end || *cur++ != 'P') goto error; - if (cur == end || *cur++ != '/') goto error; - if (cur == end || *cur++ != '1') goto error; - if (cur == end || *cur++ != '.') goto error; - if (cur == end || *cur < '0' || *cur++ > '1') goto error; - if (cur == end || *cur++ != ' ') goto error; - if (cur == end || *cur < '1' || *cur++ > '9') goto error; - if (cur == end || *cur < '0' || *cur++ > '9') goto error; - if (cur == end || *cur < '0' || *cur++ > '9') goto error; - parser->http.response.status = + if (cur == end || *cur++ != 'H') return GRPC_ERROR_CREATE("Expected 'H'"); + if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); + if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); + if (cur == end || *cur++ != 'P') return GRPC_ERROR_CREATE("Expected 'P'"); + if (cur == end || *cur++ != '/') return GRPC_ERROR_CREATE("Expected '/'"); + if (cur == end || *cur++ != '1') return GRPC_ERROR_CREATE("Expected '1'"); + if (cur == end || *cur++ != '.') return GRPC_ERROR_CREATE("Expected '.'"); + if (cur == end || *cur < '0' || *cur++ > '1') { + return GRPC_ERROR_CREATE("Expected HTTP/1.0 or HTTP/1.1"); + } + if (cur == end || *cur++ != ' ') return GRPC_ERROR_CREATE("Expected ' '"); + if (cur == end || *cur < '1' || *cur++ > '9') + return GRPC_ERROR_CREATE("Expected status code"); + if (cur == end || *cur < '0' || *cur++ > '9') + return GRPC_ERROR_CREATE("Expected status code"); + if (cur == end || *cur < '0' || *cur++ > '9') + return GRPC_ERROR_CREATE("Expected status code"); + parser->http.response->status = (cur[-3] - '0') * 100 + (cur[-2] - '0') * 10 + (cur[-1] - '0'); - if (cur == end || *cur++ != ' ') goto error; + if (cur == end || *cur++ != ' ') return GRPC_ERROR_CREATE("Expected ' '"); /* we don't really care about the status code message */ - return 1; - -error: - if (grpc_http1_trace) gpr_log(GPR_ERROR, "Failed parsing response line"); - return 0; + return GRPC_ERROR_NONE; } -static int handle_request_line(grpc_http_parser *parser) { +static grpc_error *handle_request_line(grpc_http_parser *parser) { uint8_t *beg = parser->cur_line; uint8_t *cur = beg; uint8_t *end = beg + parser->cur_line_length; @@ -87,84 +88,81 @@ static int handle_request_line(grpc_http_parser *parser) { while (cur != end && *cur++ != ' ') ; - if (cur == end) goto error; - parser->http.request.method = buf2str(beg, (size_t)(cur - beg - 1)); + if (cur == end) return GRPC_ERROR_CREATE("No method on HTTP request line"); + parser->http.request->method = buf2str(beg, (size_t)(cur - beg - 1)); beg = cur; while (cur != end && *cur++ != ' ') ; - if (cur == end) goto error; - parser->http.request.path = buf2str(beg, (size_t)(cur - beg - 1)); - - if (cur == end || *cur++ != 'H') goto error; - if (cur == end || *cur++ != 'T') goto error; - if (cur == end || *cur++ != 'T') goto error; - if (cur == end || *cur++ != 'P') goto error; - if (cur == end || *cur++ != '/') goto error; + if (cur == end) return GRPC_ERROR_CREATE("No path on HTTP request line"); + parser->http.request->path = buf2str(beg, (size_t)(cur - beg - 1)); + + if (cur == end || *cur++ != 'H') return GRPC_ERROR_CREATE("Expected 'H'"); + if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); + if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); + if (cur == end || *cur++ != 'P') return GRPC_ERROR_CREATE("Expected 'P'"); + if (cur == end || *cur++ != '/') return GRPC_ERROR_CREATE("Expected '/'"); vers_major = (uint8_t)(*cur++ - '1' + 1); ++cur; - if (cur == end) goto error; + if (cur == end) + return GRPC_ERROR_CREATE("End of line in HTTP version string"); vers_minor = (uint8_t)(*cur++ - '1' + 1); if (vers_major == 1) { if (vers_minor == 0) { - parser->http.request.version = GRPC_HTTP_HTTP10; + parser->http.request->version = GRPC_HTTP_HTTP10; } else if (vers_minor == 1) { - parser->http.request.version = GRPC_HTTP_HTTP11; + parser->http.request->version = GRPC_HTTP_HTTP11; } else { - goto error; + return GRPC_ERROR_CREATE( + "Expected one of HTTP/1.0, HTTP/1.1, or HTTP/2.0"); } } else if (vers_major == 2) { if (vers_minor == 0) { - parser->http.request.version = GRPC_HTTP_HTTP20; + parser->http.request->version = GRPC_HTTP_HTTP20; } else { - goto error; + return GRPC_ERROR_CREATE( + "Expected one of HTTP/1.0, HTTP/1.1, or HTTP/2.0"); } } else { - goto error; + return GRPC_ERROR_CREATE("Expected one of HTTP/1.0, HTTP/1.1, or HTTP/2.0"); } - return 1; - -error: - if (grpc_http1_trace) gpr_log(GPR_ERROR, "Failed parsing request line"); - return 0; + return GRPC_ERROR_NONE; } -static int handle_first_line(grpc_http_parser *parser) { - if (parser->cur_line[0] == 'H') { - parser->type = GRPC_HTTP_RESPONSE; - return handle_response_line(parser); - } else { - parser->type = GRPC_HTTP_REQUEST; - return handle_request_line(parser); +static grpc_error *handle_first_line(grpc_http_parser *parser) { + switch (parser->type) { + case GRPC_HTTP_REQUEST: + return handle_request_line(parser); + case GRPC_HTTP_RESPONSE: + return handle_response_line(parser); } + GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); } -static int add_header(grpc_http_parser *parser) { +static grpc_error *add_header(grpc_http_parser *parser) { uint8_t *beg = parser->cur_line; uint8_t *cur = beg; uint8_t *end = beg + parser->cur_line_length; size_t *hdr_count = NULL; grpc_http_header **hdrs = NULL; grpc_http_header hdr = {NULL, NULL}; + grpc_error *error = GRPC_ERROR_NONE; GPR_ASSERT(cur != end); if (*cur == ' ' || *cur == '\t') { - if (grpc_http1_trace) - gpr_log(GPR_ERROR, "Continued header lines not supported yet"); - goto error; + error = GRPC_ERROR_CREATE("Continued header lines not supported yet"); + goto done; } while (cur != end && *cur != ':') { cur++; } if (cur == end) { - if (grpc_http1_trace) { - gpr_log(GPR_ERROR, "Didn't find ':' in header string"); - } - goto error; + error = GRPC_ERROR_CREATE("Didn't find ':' in header string"); + goto done; } GPR_ASSERT(cur >= beg); hdr.key = buf2str(beg, (size_t)(cur - beg)); @@ -176,14 +174,15 @@ static int add_header(grpc_http_parser *parser) { GPR_ASSERT((size_t)(end - cur) >= parser->cur_line_end_length); hdr.value = buf2str(cur, (size_t)(end - cur) - parser->cur_line_end_length); - if (parser->type == GRPC_HTTP_RESPONSE) { - hdr_count = &parser->http.response.hdr_count; - hdrs = &parser->http.response.hdrs; - } else if (parser->type == GRPC_HTTP_REQUEST) { - hdr_count = &parser->http.request.hdr_count; - hdrs = &parser->http.request.hdrs; - } else { - return 0; + switch (parser->type) { + case GRPC_HTTP_RESPONSE: + hdr_count = &parser->http.response->hdr_count; + hdrs = &parser->http.response->hdrs; + break; + case GRPC_HTTP_REQUEST: + hdr_count = &parser->http.request->hdr_count; + hdrs = &parser->http.request->hdrs; + break; } if (*hdr_count == parser->hdr_capacity) { @@ -192,20 +191,21 @@ static int add_header(grpc_http_parser *parser) { *hdrs = gpr_realloc(*hdrs, parser->hdr_capacity * sizeof(**hdrs)); } (*hdrs)[(*hdr_count)++] = hdr; - return 1; -error: - gpr_free(hdr.key); - gpr_free(hdr.value); - return 0; +done: + if (error != GRPC_ERROR_NONE) { + gpr_free(hdr.key); + gpr_free(hdr.value); + } + return error; } -static int finish_line(grpc_http_parser *parser) { +static grpc_error *finish_line(grpc_http_parser *parser) { + grpc_error *err; switch (parser->state) { case GRPC_HTTP_FIRST_LINE: - if (!handle_first_line(parser)) { - return 0; - } + err = handle_first_line(parser); + if (err != GRPC_ERROR_NONE) return err; parser->state = GRPC_HTTP_HEADERS; break; case GRPC_HTTP_HEADERS: @@ -213,30 +213,31 @@ static int finish_line(grpc_http_parser *parser) { parser->state = GRPC_HTTP_BODY; break; } - if (!add_header(parser)) { - return 0; + err = add_header(parser); + if (err != GRPC_ERROR_NONE) { + return err; } break; case GRPC_HTTP_BODY: - GPR_UNREACHABLE_CODE(return 0); + GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); } parser->cur_line_length = 0; - return 1; + return GRPC_ERROR_NONE; } -static int addbyte_body(grpc_http_parser *parser, uint8_t byte) { +static grpc_error *addbyte_body(grpc_http_parser *parser, uint8_t byte) { size_t *body_length = NULL; char **body = NULL; if (parser->type == GRPC_HTTP_RESPONSE) { - body_length = &parser->http.response.body_length; - body = &parser->http.response.body; + body_length = &parser->http.response->body_length; + body = &parser->http.response->body; } else if (parser->type == GRPC_HTTP_REQUEST) { - body_length = &parser->http.request.body_length; - body = &parser->http.request.body; + body_length = &parser->http.request->body_length; + body = &parser->http.request->body; } else { - return 0; + GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); } if (*body_length == parser->body_capacity) { @@ -246,34 +247,34 @@ static int addbyte_body(grpc_http_parser *parser, uint8_t byte) { (*body)[*body_length] = (char)byte; (*body_length)++; - return 1; + return GRPC_ERROR_NONE; } -static int check_line(grpc_http_parser *parser) { +static bool check_line(grpc_http_parser *parser) { if (parser->cur_line_length >= 2 && parser->cur_line[parser->cur_line_length - 2] == '\r' && parser->cur_line[parser->cur_line_length - 1] == '\n') { - return 1; + return true; } // HTTP request with \n\r line termiantors. else if (parser->cur_line_length >= 2 && parser->cur_line[parser->cur_line_length - 2] == '\n' && parser->cur_line[parser->cur_line_length - 1] == '\r') { - return 1; + return true; } // HTTP request with only \n line terminators. else if (parser->cur_line_length >= 1 && parser->cur_line[parser->cur_line_length - 1] == '\n') { parser->cur_line_end_length = 1; - return 1; + return true; } - return 0; + return false; } -static int addbyte(grpc_http_parser *parser, uint8_t byte) { +static grpc_error *addbyte(grpc_http_parser *parser, uint8_t byte) { switch (parser->state) { case GRPC_HTTP_FIRST_LINE: case GRPC_HTTP_HEADERS: @@ -288,7 +289,7 @@ static int addbyte(grpc_http_parser *parser, uint8_t byte) { if (check_line(parser)) { return finish_line(parser); } else { - return 1; + return GRPC_ERROR_NONE; } GPR_UNREACHABLE_CODE(return 0); case GRPC_HTTP_BODY: @@ -297,46 +298,53 @@ static int addbyte(grpc_http_parser *parser, uint8_t byte) { GPR_UNREACHABLE_CODE(return 0); } -void grpc_http_parser_init(grpc_http_parser *parser) { +void grpc_http_parser_init(grpc_http_parser *parser, grpc_http_type type, + void *request_or_response) { memset(parser, 0, sizeof(*parser)); parser->state = GRPC_HTTP_FIRST_LINE; - parser->type = GRPC_HTTP_UNKNOWN; + parser->type = type; + parser->http.request_or_response = request_or_response; parser->cur_line_end_length = 2; } -void grpc_http_parser_destroy(grpc_http_parser *parser) { +void grpc_http_parser_destroy(grpc_http_parser *parser) {} + +void grpc_http_request_destroy(grpc_http_request *request) { size_t i; - if (parser->type == GRPC_HTTP_RESPONSE) { - gpr_free(parser->http.response.body); - for (i = 0; i < parser->http.response.hdr_count; i++) { - gpr_free(parser->http.response.hdrs[i].key); - gpr_free(parser->http.response.hdrs[i].value); - } - gpr_free(parser->http.response.hdrs); - } else if (parser->type == GRPC_HTTP_REQUEST) { - gpr_free(parser->http.request.body); - for (i = 0; i < parser->http.request.hdr_count; i++) { - gpr_free(parser->http.request.hdrs[i].key); - gpr_free(parser->http.request.hdrs[i].value); - } - gpr_free(parser->http.request.hdrs); - gpr_free(parser->http.request.method); - gpr_free(parser->http.request.path); + gpr_free(request->body); + for (i = 0; i < request->hdr_count; i++) { + gpr_free(request->hdrs[i].key); + gpr_free(request->hdrs[i].value); } + gpr_free(request->hdrs); + gpr_free(request->method); + gpr_free(request->path); } -int grpc_http_parser_parse(grpc_http_parser *parser, gpr_slice slice) { +void grpc_http_response_destroy(grpc_http_response *response) { + size_t i; + gpr_free(response->body); + for (i = 0; i < response->hdr_count; i++) { + gpr_free(response->hdrs[i].key); + gpr_free(response->hdrs[i].value); + } + gpr_free(response->hdrs); +} + +grpc_error *grpc_http_parser_parse(grpc_http_parser *parser, gpr_slice slice) { size_t i; for (i = 0; i < GPR_SLICE_LENGTH(slice); i++) { - if (!addbyte(parser, GPR_SLICE_START_PTR(slice)[i])) { - return 0; - } + grpc_error *err = addbyte(parser, GPR_SLICE_START_PTR(slice)[i]); + if (err != GRPC_ERROR_NONE) return err; } - return 1; + return GRPC_ERROR_NONE; } -int grpc_http_parser_eof(grpc_http_parser *parser) { - return parser->state == GRPC_HTTP_BODY; +grpc_error *grpc_http_parser_eof(grpc_http_parser *parser) { + if (parser->state != GRPC_HTTP_BODY) { + return GRPC_ERROR_CREATE("Did not finish headers"); + } + return GRPC_ERROR_NONE; } diff --git a/src/core/lib/http/parser.c.orig b/src/core/lib/http/parser.c.orig new file mode 100644 index 0000000000..74d90fd8bf --- /dev/null +++ b/src/core/lib/http/parser.c.orig @@ -0,0 +1,357 @@ +/* + * + * 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/http/parser.h" + +#include <string.h> + +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/useful.h> + +int grpc_http1_trace = 0; + +static char *buf2str(void *buffer, size_t length) { + char *out = gpr_malloc(length + 1); + memcpy(out, buffer, length); + out[length] = 0; + return out; +} + +static grpc_error *handle_response_line(grpc_http_parser *parser) { + uint8_t *beg = parser->cur_line; + uint8_t *cur = beg; + uint8_t *end = beg + parser->cur_line_length; + + if (cur == end || *cur++ != 'H') return GRPC_ERROR_CREATE("Expected 'H'"); + if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); + if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); + if (cur == end || *cur++ != 'P') return GRPC_ERROR_CREATE("Expected 'P'"); + if (cur == end || *cur++ != '/') return GRPC_ERROR_CREATE("Expected '/'"); + if (cur == end || *cur++ != '1') return GRPC_ERROR_CREATE("Expected '1'"); + if (cur == end || *cur++ != '.') return GRPC_ERROR_CREATE("Expected '.'"); + if (cur == end || *cur < '0' || *cur++ > '1') { + return GRPC_ERROR_CREATE("Expected HTTP/1.0 or HTTP/1.1"); + } + if (cur == end || *cur++ != ' ') return GRPC_ERROR_CREATE("Expected ' '"); + if (cur == end || *cur < '1' || *cur++ > '9') + return GRPC_ERROR_CREATE("Expected status code"); + if (cur == end || *cur < '0' || *cur++ > '9') + return GRPC_ERROR_CREATE("Expected status code"); + if (cur == end || *cur < '0' || *cur++ > '9') + return GRPC_ERROR_CREATE("Expected status code"); + parser->http.response->status = + (cur[-3] - '0') * 100 + (cur[-2] - '0') * 10 + (cur[-1] - '0'); + if (cur == end || *cur++ != ' ') return GRPC_ERROR_CREATE("Expected ' '"); + + /* we don't really care about the status code message */ + + return GRPC_ERROR_NONE; +} + +static grpc_error *handle_request_line(grpc_http_parser *parser) { + uint8_t *beg = parser->cur_line; + uint8_t *cur = beg; + uint8_t *end = beg + parser->cur_line_length; + uint8_t vers_major = 0; + uint8_t vers_minor = 0; + + while (cur != end && *cur++ != ' ') + ; + if (cur == end) return GRPC_ERROR_CREATE("No method on HTTP request line"); + parser->http.request->method = buf2str(beg, (size_t)(cur - beg - 1)); + + beg = cur; + while (cur != end && *cur++ != ' ') + ; + if (cur == end) return GRPC_ERROR_CREATE("No path on HTTP request line"); + parser->http.request->path = buf2str(beg, (size_t)(cur - beg - 1)); + + if (cur == end || *cur++ != 'H') return GRPC_ERROR_CREATE("Expected 'H'"); + if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); + if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); + if (cur == end || *cur++ != 'P') return GRPC_ERROR_CREATE("Expected 'P'"); + if (cur == end || *cur++ != '/') return GRPC_ERROR_CREATE("Expected '/'"); + vers_major = (uint8_t)(*cur++ - '1' + 1); + ++cur; + if (cur == end) + return GRPC_ERROR_CREATE("End of line in HTTP version string"); + vers_minor = (uint8_t)(*cur++ - '1' + 1); + + if (vers_major == 1) { + if (vers_minor == 0) { + parser->http.request->version = GRPC_HTTP_HTTP10; + } else if (vers_minor == 1) { + parser->http.request->version = GRPC_HTTP_HTTP11; + } else { + return GRPC_ERROR_CREATE( + "Expected one of HTTP/1.0, HTTP/1.1, or HTTP/2.0"); + } + } else if (vers_major == 2) { + if (vers_minor == 0) { + parser->http.request->version = GRPC_HTTP_HTTP20; + } else { + return GRPC_ERROR_CREATE( + "Expected one of HTTP/1.0, HTTP/1.1, or HTTP/2.0"); + } + } else { + return GRPC_ERROR_CREATE("Expected one of HTTP/1.0, HTTP/1.1, or HTTP/2.0"); + } + + return GRPC_ERROR_NONE; +} + +static grpc_error *handle_first_line(grpc_http_parser *parser) { + switch (parser->type) { + case GRPC_HTTP_REQUEST: + return handle_request_line(parser); + case GRPC_HTTP_RESPONSE: + return handle_response_line(parser); + } + GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); +} + +static grpc_error *add_header(grpc_http_parser *parser) { + uint8_t *beg = parser->cur_line; + uint8_t *cur = beg; + uint8_t *end = beg + parser->cur_line_length; + size_t *hdr_count = NULL; + grpc_http_header **hdrs = NULL; + grpc_http_header hdr = {NULL, NULL}; + grpc_error *error = GRPC_ERROR_NONE; + + GPR_ASSERT(cur != end); + + if (*cur == ' ' || *cur == '\t') { + error = GRPC_ERROR_CREATE("Continued header lines not supported yet"); + goto done; + } + + while (cur != end && *cur != ':') { + cur++; + } + if (cur == end) { +<<<<<<< HEAD + error = GRPC_ERROR_CREATE("Didn't find ':' in header string"); + goto done; +======= + if (grpc_http1_trace) { + gpr_log(GPR_ERROR, "Didn't find ':' in header string"); + } + goto error; +>>>>>>> a709afe241d8b264a1c326315f757b4a8d330207 + } + GPR_ASSERT(cur >= beg); + hdr.key = buf2str(beg, (size_t)(cur - beg)); + cur++; /* skip : */ + + while (cur != end && (*cur == ' ' || *cur == '\t')) { + cur++; + } + GPR_ASSERT((size_t)(end - cur) >= parser->cur_line_end_length); + hdr.value = buf2str(cur, (size_t)(end - cur) - parser->cur_line_end_length); + + switch (parser->type) { + case GRPC_HTTP_RESPONSE: + hdr_count = &parser->http.response->hdr_count; + hdrs = &parser->http.response->hdrs; + break; + case GRPC_HTTP_REQUEST: + hdr_count = &parser->http.request->hdr_count; + hdrs = &parser->http.request->hdrs; + break; + } + + if (*hdr_count == parser->hdr_capacity) { + parser->hdr_capacity = + GPR_MAX(parser->hdr_capacity + 1, parser->hdr_capacity * 3 / 2); + *hdrs = gpr_realloc(*hdrs, parser->hdr_capacity * sizeof(**hdrs)); + } + (*hdrs)[(*hdr_count)++] = hdr; + +done: + if (error != GRPC_ERROR_NONE) { + gpr_free(hdr.key); + gpr_free(hdr.value); + } + return error; +} + +static grpc_error *finish_line(grpc_http_parser *parser) { + grpc_error *err; + switch (parser->state) { + case GRPC_HTTP_FIRST_LINE: + err = handle_first_line(parser); + if (err != GRPC_ERROR_NONE) return err; + parser->state = GRPC_HTTP_HEADERS; + break; + case GRPC_HTTP_HEADERS: + if (parser->cur_line_length == parser->cur_line_end_length) { + parser->state = GRPC_HTTP_BODY; + break; + } + err = add_header(parser); + if (err != GRPC_ERROR_NONE) { + return err; + } + break; + case GRPC_HTTP_BODY: + GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); + } + + parser->cur_line_length = 0; + return GRPC_ERROR_NONE; +} + +static grpc_error *addbyte_body(grpc_http_parser *parser, uint8_t byte) { + size_t *body_length = NULL; + char **body = NULL; + + if (parser->type == GRPC_HTTP_RESPONSE) { + body_length = &parser->http.response->body_length; + body = &parser->http.response->body; + } else if (parser->type == GRPC_HTTP_REQUEST) { + body_length = &parser->http.request->body_length; + body = &parser->http.request->body; + } else { + GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); + } + + if (*body_length == parser->body_capacity) { + parser->body_capacity = GPR_MAX(8, parser->body_capacity * 3 / 2); + *body = gpr_realloc((void *)*body, parser->body_capacity); + } + (*body)[*body_length] = (char)byte; + (*body_length)++; + + return GRPC_ERROR_NONE; +} + +static bool check_line(grpc_http_parser *parser) { + if (parser->cur_line_length >= 2 && + parser->cur_line[parser->cur_line_length - 2] == '\r' && + parser->cur_line[parser->cur_line_length - 1] == '\n') { + return true; + } + + // HTTP request with \n\r line termiantors. + else if (parser->cur_line_length >= 2 && + parser->cur_line[parser->cur_line_length - 2] == '\n' && + parser->cur_line[parser->cur_line_length - 1] == '\r') { + return true; + } + + // HTTP request with only \n line terminators. + else if (parser->cur_line_length >= 1 && + parser->cur_line[parser->cur_line_length - 1] == '\n') { + parser->cur_line_end_length = 1; + return true; + } + + return false; +} + +static grpc_error *addbyte(grpc_http_parser *parser, uint8_t byte) { + switch (parser->state) { + case GRPC_HTTP_FIRST_LINE: + case GRPC_HTTP_HEADERS: + if (parser->cur_line_length >= GRPC_HTTP_PARSER_MAX_HEADER_LENGTH) { + if (grpc_http1_trace) + gpr_log(GPR_ERROR, "HTTP client max line length (%d) exceeded", + GRPC_HTTP_PARSER_MAX_HEADER_LENGTH); + return 0; + } + parser->cur_line[parser->cur_line_length] = byte; + parser->cur_line_length++; + if (check_line(parser)) { + return finish_line(parser); + } else { + return GRPC_ERROR_NONE; + } + GPR_UNREACHABLE_CODE(return 0); + case GRPC_HTTP_BODY: + return addbyte_body(parser, byte); + } + GPR_UNREACHABLE_CODE(return 0); +} + +void grpc_http_parser_init(grpc_http_parser *parser, grpc_http_type type, + void *request_or_response) { + memset(parser, 0, sizeof(*parser)); + parser->state = GRPC_HTTP_FIRST_LINE; + parser->type = type; + parser->http.request_or_response = request_or_response; + parser->cur_line_end_length = 2; +} + +void grpc_http_parser_destroy(grpc_http_parser *parser) {} + +void grpc_http_request_destroy(grpc_http_request *request) { + size_t i; + gpr_free(request->body); + for (i = 0; i < request->hdr_count; i++) { + gpr_free(request->hdrs[i].key); + gpr_free(request->hdrs[i].value); + } + gpr_free(request->hdrs); + gpr_free(request->method); + gpr_free(request->path); +} + +void grpc_http_response_destroy(grpc_http_response *response) { + size_t i; + gpr_free(response->body); + for (i = 0; i < response->hdr_count; i++) { + gpr_free(response->hdrs[i].key); + gpr_free(response->hdrs[i].value); + } + gpr_free(response->hdrs); +} + +grpc_error *grpc_http_parser_parse(grpc_http_parser *parser, gpr_slice slice) { + size_t i; + + for (i = 0; i < GPR_SLICE_LENGTH(slice); i++) { + grpc_error *err = addbyte(parser, GPR_SLICE_START_PTR(slice)[i]); + if (err != GRPC_ERROR_NONE) return err; + } + + return GRPC_ERROR_NONE; +} + +grpc_error *grpc_http_parser_eof(grpc_http_parser *parser) { + if (parser->state != GRPC_HTTP_BODY) { + return GRPC_ERROR_CREATE("Did not finish headers"); + } + return GRPC_ERROR_NONE; +} diff --git a/src/core/lib/http/parser.h b/src/core/lib/http/parser.h index 536637e9a2..6df3cc8b13 100644 --- a/src/core/lib/http/parser.h +++ b/src/core/lib/http/parser.h @@ -36,6 +36,7 @@ #include <grpc/support/port_platform.h> #include <grpc/support/slice.h> +#include "src/core/lib/iomgr/error.h" /* Maximum length of a header string of the form 'Key: Value\r\n' */ #define GRPC_HTTP_PARSER_MAX_HEADER_LENGTH 4096 @@ -61,7 +62,6 @@ typedef enum { typedef enum { GRPC_HTTP_RESPONSE, GRPC_HTTP_REQUEST, - GRPC_HTTP_UNKNOWN } grpc_http_type; /* A request */ @@ -97,8 +97,9 @@ typedef struct { grpc_http_type type; union { - grpc_http_response response; - grpc_http_request request; + grpc_http_response *response; + grpc_http_request *request; + void *request_or_response; } http; size_t body_capacity; size_t hdr_capacity; @@ -108,11 +109,15 @@ typedef struct { size_t cur_line_end_length; } grpc_http_parser; -void grpc_http_parser_init(grpc_http_parser *parser); +void grpc_http_parser_init(grpc_http_parser *parser, grpc_http_type type, + void *request_or_response); void grpc_http_parser_destroy(grpc_http_parser *parser); -int grpc_http_parser_parse(grpc_http_parser *parser, gpr_slice slice); -int grpc_http_parser_eof(grpc_http_parser *parser); +grpc_error *grpc_http_parser_parse(grpc_http_parser *parser, gpr_slice slice); +grpc_error *grpc_http_parser_eof(grpc_http_parser *parser); + +void grpc_http_request_destroy(grpc_http_request *request); +void grpc_http_response_destroy(grpc_http_response *response); extern int grpc_http1_trace; diff --git a/src/core/lib/iomgr/closure.c b/src/core/lib/iomgr/closure.c index 27793c32e4..0b6c3b2539 100644 --- a/src/core/lib/iomgr/closure.c +++ b/src/core/lib/iomgr/closure.c @@ -39,25 +39,32 @@ void grpc_closure_init(grpc_closure *closure, grpc_iomgr_cb_func cb, void *cb_arg) { closure->cb = cb; closure->cb_arg = cb_arg; - closure->final_data = 0; } -void grpc_closure_list_add(grpc_closure_list *closure_list, - grpc_closure *closure, bool success) { - if (closure == NULL) return; - closure->final_data = (success != 0); +void grpc_closure_list_append(grpc_closure_list *closure_list, + grpc_closure *closure, grpc_error *error) { + if (closure == NULL) { + GRPC_ERROR_UNREF(error); + return; + } + closure->error = error; + closure->next_data.next = NULL; if (closure_list->head == NULL) { closure_list->head = closure; } else { - closure_list->tail->final_data |= (uintptr_t)closure; + closure_list->tail->next_data.next = closure; } closure_list->tail = closure; } -void grpc_closure_list_fail_all(grpc_closure_list *list) { - for (grpc_closure *c = list->head; c != NULL; c = grpc_closure_next(c)) { - c->final_data &= ~(uintptr_t)1; +void grpc_closure_list_fail_all(grpc_closure_list *list, + grpc_error *forced_failure) { + for (grpc_closure *c = list->head; c != NULL; c = c->next_data.next) { + if (c->error == GRPC_ERROR_NONE) { + c->error = GRPC_ERROR_REF(forced_failure); + } } + GRPC_ERROR_UNREF(forced_failure); } bool grpc_closure_list_empty(grpc_closure_list closure_list) { @@ -71,7 +78,7 @@ void grpc_closure_list_move(grpc_closure_list *src, grpc_closure_list *dst) { if (dst->head == NULL) { *dst = *src; } else { - dst->tail->final_data |= (uintptr_t)src->head; + dst->tail->next_data.next = src->head; dst->tail = src->tail; } src->head = src->tail = NULL; @@ -83,12 +90,13 @@ typedef struct { grpc_closure wrapper; } wrapped_closure; -static void closure_wrapper(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void closure_wrapper(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { wrapped_closure *wc = arg; grpc_iomgr_cb_func cb = wc->cb; void *cb_arg = wc->cb_arg; gpr_free(wc); - cb(exec_ctx, cb_arg, success); + cb(exec_ctx, cb_arg, error); } grpc_closure *grpc_closure_create(grpc_iomgr_cb_func cb, void *cb_arg) { @@ -98,7 +106,3 @@ grpc_closure *grpc_closure_create(grpc_iomgr_cb_func cb, void *cb_arg) { grpc_closure_init(&wc->wrapper, closure_wrapper, wc); return &wc->wrapper; } - -grpc_closure *grpc_closure_next(grpc_closure *closure) { - return (grpc_closure *)(closure->final_data & ~(uintptr_t)1); -} diff --git a/src/core/lib/iomgr/closure.h b/src/core/lib/iomgr/closure.h index fdc2daed9d..08e59a168e 100644 --- a/src/core/lib/iomgr/closure.h +++ b/src/core/lib/iomgr/closure.h @@ -36,6 +36,7 @@ #include <grpc/support/port_platform.h> #include <stdbool.h> +#include "src/core/lib/iomgr/error.h" struct grpc_closure; typedef struct grpc_closure grpc_closure; @@ -52,10 +53,10 @@ typedef struct grpc_closure_list { /** gRPC Callback definition. * * \param arg Arbitrary input. - * \param success An indication on the state of the iomgr. On false, cleanup - * actions should be taken (eg, shutdown). */ + * \param error GRPC_ERROR_NONE if no error occurred, otherwise some grpc_error + * describing what went wrong */ typedef void (*grpc_iomgr_cb_func)(grpc_exec_ctx *exec_ctx, void *arg, - bool success); + grpc_error *error); /** A closure over a grpc_iomgr_cb_func. */ struct grpc_closure { @@ -65,10 +66,15 @@ struct grpc_closure { /** Arguments to be passed to "cb". */ void *cb_arg; - /** Once enqueued, contains in the lower bit the success of the closure, - and in the upper bits the pointer to the next closure in the list. - Before enqueing for execution, this is usable for scratch data. */ - uintptr_t final_data; + /** Once queued, the result of the closure. Before then: scratch space */ + grpc_error *error; + + /** Once queued, next indicates the next queued closure; before then, scratch + * space */ + union { + grpc_closure *next; + uintptr_t scratch; + } next_data; }; /** Initializes \a closure with \a cb and \a cb_arg. */ @@ -81,13 +87,14 @@ grpc_closure *grpc_closure_create(grpc_iomgr_cb_func cb, void *cb_arg); #define GRPC_CLOSURE_LIST_INIT \ { NULL, NULL } -/** add \a closure to the end of \a list and set \a closure's success to \a - * success */ -void grpc_closure_list_add(grpc_closure_list *list, grpc_closure *closure, - bool success); +/** add \a closure to the end of \a list + and set \a closure's result to \a error */ +void grpc_closure_list_append(grpc_closure_list *list, grpc_closure *closure, + grpc_error *error); /** force all success bits in \a list to false */ -void grpc_closure_list_fail_all(grpc_closure_list *list); +void grpc_closure_list_fail_all(grpc_closure_list *list, + grpc_error *forced_failure); /** append all closures from \a src to \a dst and empty \a src. */ void grpc_closure_list_move(grpc_closure_list *src, grpc_closure_list *dst); @@ -95,7 +102,4 @@ void grpc_closure_list_move(grpc_closure_list *src, grpc_closure_list *dst); /** return whether \a list is empty. */ bool grpc_closure_list_empty(grpc_closure_list list); -/** return the next pointer for a queued closure list */ -grpc_closure *grpc_closure_next(grpc_closure *closure); - #endif /* GRPC_CORE_LIB_IOMGR_CLOSURE_H */ diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h index 3877ceb1e2..f9808bbda1 100644 --- a/src/core/lib/iomgr/endpoint.h +++ b/src/core/lib/iomgr/endpoint.h @@ -82,7 +82,7 @@ char *grpc_endpoint_get_peer(grpc_endpoint *ep); void grpc_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, gpr_slice_buffer *slices, grpc_closure *cb); -/* Causes any pending read/write callbacks to run immediately with +/* Causes any pending and future read/write callbacks to run immediately with success==0 */ void grpc_endpoint_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); void grpc_endpoint_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); diff --git a/src/core/lib/iomgr/endpoint_pair_posix.c b/src/core/lib/iomgr/endpoint_pair_posix.c index e0ce47c773..e295fb4867 100644 --- a/src/core/lib/iomgr/endpoint_pair_posix.c +++ b/src/core/lib/iomgr/endpoint_pair_posix.c @@ -58,8 +58,8 @@ static void create_sockets(int sv[2]) { GPR_ASSERT(fcntl(sv[0], F_SETFL, flags | O_NONBLOCK) == 0); flags = fcntl(sv[1], F_GETFL, 0); GPR_ASSERT(fcntl(sv[1], F_SETFL, flags | O_NONBLOCK) == 0); - GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[0])); - GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[1])); + GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[0]) == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[1]) == GRPC_ERROR_NONE); } grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, diff --git a/src/core/lib/iomgr/error.c b/src/core/lib/iomgr/error.c new file mode 100644 index 0000000000..540fb4fa7e --- /dev/null +++ b/src/core/lib/iomgr/error.c @@ -0,0 +1,535 @@ +/* + * + * 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 "src/core/lib/iomgr/error.h" + +#include <inttypes.h> +#include <stdbool.h> +#include <string.h> + +#include <grpc/support/alloc.h> +#include <grpc/support/avl.h> +#include <grpc/support/log.h> +#include <grpc/support/string_util.h> +#include <grpc/support/useful.h> + +#ifdef GPR_WINDOWS +#include <grpc/support/log_windows.h> +#endif + +static void destroy_integer(void *key) {} + +static void *copy_integer(void *key) { return key; } + +static long compare_integers(void *key1, void *key2) { + return GPR_ICMP((uintptr_t)key1, (uintptr_t)key2); +} + +static void destroy_string(void *str) { gpr_free(str); } + +static void *copy_string(void *str) { return gpr_strdup(str); } + +static void destroy_err(void *err) { GRPC_ERROR_UNREF(err); } + +static void *copy_err(void *err) { return GRPC_ERROR_REF(err); } + +static void destroy_time(void *tm) { gpr_free(tm); } + +static gpr_timespec *box_time(gpr_timespec tm) { + gpr_timespec *out = gpr_malloc(sizeof(*out)); + *out = tm; + return out; +} + +static void *copy_time(void *tm) { return box_time(*(gpr_timespec *)tm); } + +static const gpr_avl_vtable avl_vtable_ints = {destroy_integer, copy_integer, + compare_integers, + destroy_integer, copy_integer}; + +static const gpr_avl_vtable avl_vtable_strs = {destroy_integer, copy_integer, + compare_integers, destroy_string, + copy_string}; + +static const gpr_avl_vtable avl_vtable_times = { + destroy_integer, copy_integer, compare_integers, destroy_time, copy_time}; + +static const gpr_avl_vtable avl_vtable_errs = { + destroy_integer, copy_integer, compare_integers, destroy_err, copy_err}; + +static const char *error_int_name(grpc_error_ints key) { + switch (key) { + case GRPC_ERROR_INT_ERRNO: + return "errno"; + case GRPC_ERROR_INT_FILE_LINE: + return "file_line"; + case GRPC_ERROR_INT_STREAM_ID: + return "stream_id"; + case GRPC_ERROR_INT_GRPC_STATUS: + return "grpc_status"; + case GRPC_ERROR_INT_OFFSET: + return "offset"; + case GRPC_ERROR_INT_INDEX: + return "index"; + case GRPC_ERROR_INT_SIZE: + return "size"; + case GRPC_ERROR_INT_HTTP2_ERROR: + return "http2_error"; + case GRPC_ERROR_INT_TSI_CODE: + return "tsi_code"; + case GRPC_ERROR_INT_SECURITY_STATUS: + return "security_status"; + case GRPC_ERROR_INT_FD: + return "fd"; + case GRPC_ERROR_INT_WSA_ERROR: + return "wsa_error"; + case GRPC_ERROR_INT_HTTP_STATUS: + return "http_status"; + } + GPR_UNREACHABLE_CODE(return "unknown"); +} + +static const char *error_str_name(grpc_error_strs key) { + switch (key) { + case GRPC_ERROR_STR_DESCRIPTION: + return "description"; + case GRPC_ERROR_STR_OS_ERROR: + return "os_error"; + case GRPC_ERROR_STR_TARGET_ADDRESS: + return "target_address"; + case GRPC_ERROR_STR_SYSCALL: + return "syscall"; + case GRPC_ERROR_STR_FILE: + return "file"; + case GRPC_ERROR_STR_GRPC_MESSAGE: + return "grpc_message"; + case GRPC_ERROR_STR_RAW_BYTES: + return "raw_bytes"; + case GRPC_ERROR_STR_TSI_ERROR: + return "tsi_error"; + case GRPC_ERROR_STR_FILENAME: + return "filename"; + } + GPR_UNREACHABLE_CODE(return "unknown"); +} + +static const char *error_time_name(grpc_error_times key) { + switch (key) { + case GRPC_ERROR_TIME_CREATED: + return "created"; + } + GPR_UNREACHABLE_CODE(return "unknown"); +} + +struct grpc_error { + gpr_refcount refs; + gpr_avl ints; + gpr_avl strs; + gpr_avl times; + gpr_avl errs; + uintptr_t next_err; +}; + +static bool is_special(grpc_error *err) { + return err == GRPC_ERROR_NONE || err == GRPC_ERROR_OOM || + err == GRPC_ERROR_CANCELLED; +} + +#ifdef GRPC_ERROR_REFCOUNT_DEBUG +grpc_error *grpc_error_ref(grpc_error *err, const char *file, int line, + const char *func) { + if (is_special(err)) return err; + gpr_log(GPR_DEBUG, "%p: %d -> %d [%s:%d %s]", err, err->refs.count, + err->refs.count + 1, file, line, func); + gpr_ref(&err->refs); + return err; +} +#else +grpc_error *grpc_error_ref(grpc_error *err) { + if (is_special(err)) return err; + gpr_ref(&err->refs); + return err; +} +#endif + +static void error_destroy(grpc_error *err) { + GPR_ASSERT(!is_special(err)); + gpr_avl_unref(err->ints); + gpr_avl_unref(err->strs); + gpr_avl_unref(err->errs); + gpr_avl_unref(err->times); + gpr_free(err); +} + +#ifdef GRPC_ERROR_REFCOUNT_DEBUG +void grpc_error_unref(grpc_error *err, const char *file, int line, + const char *func) { + if (is_special(err)) return; + gpr_log(GPR_DEBUG, "%p: %d -> %d [%s:%d %s]", err, err->refs.count, + err->refs.count - 1, file, line, func); + if (gpr_unref(&err->refs)) { + error_destroy(err); + } +} +#else +void grpc_error_unref(grpc_error *err) { + if (is_special(err)) return; + if (gpr_unref(&err->refs)) { + error_destroy(err); + } +} +#endif + +grpc_error *grpc_error_create(const char *file, int line, const char *desc, + grpc_error **referencing, + size_t num_referencing) { + grpc_error *err = gpr_malloc(sizeof(*err)); + if (err == NULL) { // TODO(ctiller): make gpr_malloc return NULL + return GRPC_ERROR_OOM; + } +#ifdef GRPC_ERROR_REFCOUNT_DEBUG + gpr_log(GPR_DEBUG, "%p create [%s:%d]", err, file, line); +#endif + err->ints = gpr_avl_add(gpr_avl_create(&avl_vtable_ints), + (void *)(uintptr_t)GRPC_ERROR_INT_FILE_LINE, + (void *)(uintptr_t)line); + err->strs = gpr_avl_add( + gpr_avl_add(gpr_avl_create(&avl_vtable_strs), + (void *)(uintptr_t)GRPC_ERROR_STR_FILE, gpr_strdup(file)), + (void *)(uintptr_t)GRPC_ERROR_STR_DESCRIPTION, gpr_strdup(desc)); + err->errs = gpr_avl_create(&avl_vtable_errs); + err->next_err = 0; + for (size_t i = 0; i < num_referencing; i++) { + if (referencing[i] == GRPC_ERROR_NONE) continue; + err->errs = gpr_avl_add(err->errs, (void *)(err->next_err++), + GRPC_ERROR_REF(referencing[i])); + } + err->times = gpr_avl_add(gpr_avl_create(&avl_vtable_times), + (void *)(uintptr_t)GRPC_ERROR_TIME_CREATED, + box_time(gpr_now(GPR_CLOCK_REALTIME))); + gpr_ref_init(&err->refs, 1); + return err; +} + +static grpc_error *copy_error_and_unref(grpc_error *in) { + if (is_special(in)) { + if (in == GRPC_ERROR_NONE) return GRPC_ERROR_CREATE("no error"); + if (in == GRPC_ERROR_OOM) return GRPC_ERROR_CREATE("oom"); + if (in == GRPC_ERROR_CANCELLED) return GRPC_ERROR_CREATE("cancelled"); + return GRPC_ERROR_CREATE("unknown"); + } + grpc_error *out = gpr_malloc(sizeof(*out)); +#ifdef GRPC_ERROR_REFCOUNT_DEBUG + gpr_log(GPR_DEBUG, "%p create copying", out); +#endif + out->ints = gpr_avl_ref(in->ints); + out->strs = gpr_avl_ref(in->strs); + out->errs = gpr_avl_ref(in->errs); + out->times = gpr_avl_ref(in->times); + out->next_err = in->next_err; + gpr_ref_init(&out->refs, 1); + GRPC_ERROR_UNREF(in); + return out; +} + +grpc_error *grpc_error_set_int(grpc_error *src, grpc_error_ints which, + intptr_t value) { + grpc_error *new = copy_error_and_unref(src); + new->ints = gpr_avl_add(new->ints, (void *)(uintptr_t)which, (void *)value); + return new; +} + +bool grpc_error_get_int(grpc_error *err, grpc_error_ints which, intptr_t *p) { + void *pp; + if (gpr_avl_maybe_get(err->ints, (void *)(uintptr_t)which, &pp)) { + if (p != NULL) *p = (intptr_t)pp; + return true; + } + return false; +} + +grpc_error *grpc_error_set_str(grpc_error *src, grpc_error_strs which, + const char *value) { + grpc_error *new = copy_error_and_unref(src); + new->strs = + gpr_avl_add(new->strs, (void *)(uintptr_t)which, gpr_strdup(value)); + return new; +} + +grpc_error *grpc_error_add_child(grpc_error *src, grpc_error *child) { + grpc_error *new = copy_error_and_unref(src); + new->errs = gpr_avl_add(new->errs, (void *)(new->next_err++), child); + return new; +} + +static const char *no_error_string = "null"; +static const char *oom_error_string = "\"Out of memory\""; +static const char *cancelled_error_string = "\"Cancelled\""; + +typedef struct { + char *key; + char *value; +} kv_pair; + +typedef struct { + kv_pair *kvs; + size_t num_kvs; + size_t cap_kvs; +} kv_pairs; + +static void append_kv(kv_pairs *kvs, char *key, char *value) { + if (kvs->num_kvs == kvs->cap_kvs) { + kvs->cap_kvs = GPR_MAX(3 * kvs->cap_kvs / 2, 4); + kvs->kvs = gpr_realloc(kvs->kvs, sizeof(*kvs->kvs) * kvs->cap_kvs); + } + kvs->kvs[kvs->num_kvs].key = key; + kvs->kvs[kvs->num_kvs].value = value; + kvs->num_kvs++; +} + +static void collect_kvs(gpr_avl_node *node, char *key(void *k), + char *fmt(void *v), kv_pairs *kvs) { + if (node == NULL) return; + append_kv(kvs, key(node->key), fmt(node->value)); + collect_kvs(node->left, key, fmt, kvs); + collect_kvs(node->right, key, fmt, kvs); +} + +static char *key_int(void *p) { + return gpr_strdup(error_int_name((grpc_error_ints)(uintptr_t)p)); +} + +static char *key_str(void *p) { + return gpr_strdup(error_str_name((grpc_error_strs)(uintptr_t)p)); +} + +static char *key_time(void *p) { + return gpr_strdup(error_time_name((grpc_error_times)(uintptr_t)p)); +} + +static char *fmt_int(void *p) { + char *s; + gpr_asprintf(&s, "%" PRIdPTR, (intptr_t)p); + return s; +} + +static void append_chr(char c, char **s, size_t *sz, size_t *cap) { + if (*sz == *cap) { + *cap = GPR_MAX(8, 3 * *cap / 2); + *s = gpr_realloc(*s, *cap); + } + (*s)[(*sz)++] = c; +} + +static void append_str(const char *str, char **s, size_t *sz, size_t *cap) { + for (const char *c = str; *c; c++) { + append_chr(*c, s, sz, cap); + } +} + +static void append_esc_str(const char *str, char **s, size_t *sz, size_t *cap) { + static const char *hex = "0123456789abcdef"; + append_chr('"', s, sz, cap); + for (const uint8_t *c = (const uint8_t *)str; *c; c++) { + if (*c < 32 || *c >= 127) { + append_chr('\\', s, sz, cap); + switch (*c) { + case '\b': + append_chr('b', s, sz, cap); + break; + case '\f': + append_chr('f', s, sz, cap); + break; + case '\n': + append_chr('n', s, sz, cap); + break; + case '\r': + append_chr('r', s, sz, cap); + break; + case '\t': + append_chr('t', s, sz, cap); + break; + default: + append_chr('u', s, sz, cap); + append_chr('0', s, sz, cap); + append_chr('0', s, sz, cap); + append_chr(hex[*c >> 4], s, sz, cap); + append_chr(hex[*c & 0x0f], s, sz, cap); + break; + } + } else { + append_chr((char)*c, s, sz, cap); + } + } + append_chr('"', s, sz, cap); +} + +static char *fmt_str(void *p) { + char *s = NULL; + size_t sz = 0; + size_t cap = 0; + append_esc_str(p, &s, &sz, &cap); + append_chr(0, &s, &sz, &cap); + return s; +} + +static char *fmt_time(void *p) { + gpr_timespec tm = *(gpr_timespec *)p; + char *out; + char *pfx = "!!"; + switch (tm.clock_type) { + case GPR_CLOCK_MONOTONIC: + pfx = "@monotonic:"; + break; + case GPR_CLOCK_REALTIME: + pfx = "@"; + break; + case GPR_CLOCK_PRECISE: + pfx = "@precise:"; + break; + case GPR_TIMESPAN: + pfx = ""; + break; + } + gpr_asprintf(&out, "\"%s%" PRId64 ".%09d\"", pfx, tm.tv_sec, tm.tv_nsec); + return out; +} + +static void add_errs(gpr_avl_node *n, char **s, size_t *sz, size_t *cap) { + if (n == NULL) return; + add_errs(n->left, s, sz, cap); + const char *e = grpc_error_string(n->value); + append_str(e, s, sz, cap); + grpc_error_free_string(e); + add_errs(n->right, s, sz, cap); +} + +static char *errs_string(grpc_error *err) { + char *s = NULL; + size_t sz = 0; + size_t cap = 0; + append_chr('[', &s, &sz, &cap); + add_errs(err->errs.root, &s, &sz, &cap); + append_chr(']', &s, &sz, &cap); + append_chr(0, &s, &sz, &cap); + return s; +} + +static int cmp_kvs(const void *a, const void *b) { + const kv_pair *ka = a; + const kv_pair *kb = b; + return strcmp(ka->key, kb->key); +} + +static const char *finish_kvs(kv_pairs *kvs) { + char *s = NULL; + size_t sz = 0; + size_t cap = 0; + + append_chr('{', &s, &sz, &cap); + for (size_t i = 0; i < kvs->num_kvs; i++) { + if (i != 0) append_chr(',', &s, &sz, &cap); + append_esc_str(kvs->kvs[i].key, &s, &sz, &cap); + gpr_free(kvs->kvs[i].key); + append_chr(':', &s, &sz, &cap); + append_str(kvs->kvs[i].value, &s, &sz, &cap); + gpr_free(kvs->kvs[i].value); + } + append_chr('}', &s, &sz, &cap); + append_chr(0, &s, &sz, &cap); + + gpr_free(kvs->kvs); + return s; +} + +void grpc_error_free_string(const char *str) { + if (str == no_error_string) return; + if (str == oom_error_string) return; + if (str == cancelled_error_string) return; + gpr_free((char *)str); +} + +const char *grpc_error_string(grpc_error *err) { + if (err == GRPC_ERROR_NONE) return no_error_string; + if (err == GRPC_ERROR_OOM) return oom_error_string; + if (err == GRPC_ERROR_CANCELLED) return cancelled_error_string; + + kv_pairs kvs; + memset(&kvs, 0, sizeof(kvs)); + + collect_kvs(err->ints.root, key_int, fmt_int, &kvs); + collect_kvs(err->strs.root, key_str, fmt_str, &kvs); + collect_kvs(err->times.root, key_time, fmt_time, &kvs); + if (!gpr_avl_is_empty(err->errs)) { + append_kv(&kvs, gpr_strdup("referenced_errors"), errs_string(err)); + } + + qsort(kvs.kvs, kvs.num_kvs, sizeof(kv_pair), cmp_kvs); + + return finish_kvs(&kvs); +} + +grpc_error *grpc_os_error(const char *file, int line, int err, + const char *call_name) { + return grpc_error_set_str( + grpc_error_set_str( + grpc_error_set_int(grpc_error_create(file, line, "OS Error", NULL, 0), + GRPC_ERROR_INT_ERRNO, err), + GRPC_ERROR_STR_OS_ERROR, strerror(err)), + GRPC_ERROR_STR_SYSCALL, call_name); +} + +#ifdef GPR_WINDOWS +grpc_error *grpc_wsa_error(const char *file, int line, int err, + const char *call_name) { + char *utf8_message = gpr_format_message(err); + grpc_error *error = grpc_error_set_str( + grpc_error_set_str( + grpc_error_set_int(grpc_error_create(file, line, "OS Error", NULL, 0), + GRPC_ERROR_INT_WSA_ERROR, err), + GRPC_ERROR_STR_OS_ERROR, utf8_message), + GRPC_ERROR_STR_SYSCALL, call_name); + gpr_free(utf8_message); + return error; +} +#endif + +bool grpc_log_if_error(const char *what, grpc_error *error, const char *file, + int line) { + if (error == GRPC_ERROR_NONE) return true; + const char *msg = grpc_error_string(error); + gpr_log(file, line, GPR_LOG_SEVERITY_ERROR, "%s: %s", what, msg); + grpc_error_free_string(msg); + GRPC_ERROR_UNREF(error); + return false; +} diff --git a/src/core/lib/iomgr/error.h b/src/core/lib/iomgr/error.h new file mode 100644 index 0000000000..69cdf3028e --- /dev/null +++ b/src/core/lib/iomgr/error.h @@ -0,0 +1,192 @@ +/* + * + * 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. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_ERROR_H +#define GRPC_CORE_LIB_IOMGR_ERROR_H + +#include <stdbool.h> +#include <stdint.h> + +#include <grpc/support/time.h> + +/// Opaque representation of an error. +/// Errors are refcounted objects that represent the result of an operation. +/// Ownership laws: +/// if a grpc_error is returned by a function, the caller owns a ref to that +/// instance +/// if a grpc_error is passed to a grpc_closure callback function (functions +/// with the signature: +/// void (*f)(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error)) +/// then those functions do not automatically own a ref to error +/// if a grpc_error is passed to *ANY OTHER FUNCTION* then that function takes +/// ownership of the error +/// Errors have: +/// a set of ints, strings, and timestamps that describe the error +/// always present are: +/// GRPC_ERROR_STR_FILE, GRPC_ERROR_INT_FILE_LINE - source location the error +/// was generated +/// GRPC_ERROR_STR_DESCRIPTION - a human readable description of the error +/// GRPC_ERROR_TIME_CREATED - a timestamp indicating when the error happened +/// an error can also have children; these are other errors that are believed +/// to have contributed to this one. By accumulating children, we can begin +/// to root cause high level failures from low level failures, without having +/// to derive execution paths from log lines +typedef struct grpc_error grpc_error; + +typedef enum { + /// 'errno' from the operating system + GRPC_ERROR_INT_ERRNO, + /// __LINE__ from the call site creating the error + GRPC_ERROR_INT_FILE_LINE, + /// stream identifier: for errors that are associated with an individual + /// wire stream + GRPC_ERROR_INT_STREAM_ID, + /// grpc status code representing this error + GRPC_ERROR_INT_GRPC_STATUS, + /// offset into some binary blob (usually represented by + /// GRPC_ERROR_STR_RAW_BYTES) where the error occurred + GRPC_ERROR_INT_OFFSET, + /// context sensitive index associated with the error + GRPC_ERROR_INT_INDEX, + /// context sensitive size associated with the error + GRPC_ERROR_INT_SIZE, + /// http2 error code associated with the error (see the HTTP2 RFC) + GRPC_ERROR_INT_HTTP2_ERROR, + /// TSI status code associated with the error + GRPC_ERROR_INT_TSI_CODE, + /// grpc_security_status associated with the error + GRPC_ERROR_INT_SECURITY_STATUS, + /// WSAGetLastError() reported when this error occurred + GRPC_ERROR_INT_WSA_ERROR, + /// File descriptor associated with this error + GRPC_ERROR_INT_FD, + /// HTTP status (i.e. 404) + GRPC_ERROR_INT_HTTP_STATUS, +} grpc_error_ints; + +typedef enum { + /// top-level textual description of this error + GRPC_ERROR_STR_DESCRIPTION, + /// source file in which this error occurred + GRPC_ERROR_STR_FILE, + /// operating system description of this error + GRPC_ERROR_STR_OS_ERROR, + /// syscall that generated this error + GRPC_ERROR_STR_SYSCALL, + /// peer that we were trying to communicate when this error occurred + GRPC_ERROR_STR_TARGET_ADDRESS, + /// grpc status message associated with this error + GRPC_ERROR_STR_GRPC_MESSAGE, + /// hex dump (or similar) with the data that generated this error + GRPC_ERROR_STR_RAW_BYTES, + /// tsi error string associated with this error + GRPC_ERROR_STR_TSI_ERROR, + /// filename that we were trying to read/write when this error occurred + GRPC_ERROR_STR_FILENAME, +} grpc_error_strs; + +typedef enum { + /// timestamp of error creation + GRPC_ERROR_TIME_CREATED, +} grpc_error_times; + +#define GRPC_ERROR_NONE ((grpc_error *)NULL) +#define GRPC_ERROR_OOM ((grpc_error *)1) +#define GRPC_ERROR_CANCELLED ((grpc_error *)2) + +const char *grpc_error_string(grpc_error *error); +void grpc_error_free_string(const char *str); + +/// Create an error - but use GRPC_ERROR_CREATE instead +grpc_error *grpc_error_create(const char *file, int line, const char *desc, + grpc_error **referencing, size_t num_referencing); +/// Create an error (this is the preferred way of generating an error that is +/// not due to a system call - for system calls, use GRPC_OS_ERROR or +/// GRPC_WSA_ERROR as appropriate) +/// \a referencing is an array of num_referencing elements indicating one or +/// more errors that are believed to have contributed to this one +/// err = grpc_error_create(x, y, z, r, nr) is equivalent to: +/// err = grpc_error_create(x, y, z, NULL, 0); +/// for (i=0; i<nr; i++) err = grpc_error_add_child(err, r[i]); +#define GRPC_ERROR_CREATE(desc) \ + grpc_error_create(__FILE__, __LINE__, desc, NULL, 0) + +// Create an error that references some other errors. This function adds a +// reference to each error in errs - it does not consume an existing reference +#define GRPC_ERROR_CREATE_REFERENCING(desc, errs, count) \ + grpc_error_create(__FILE__, __LINE__, desc, errs, count) + +//#define GRPC_ERROR_REFCOUNT_DEBUG +#ifdef GRPC_ERROR_REFCOUNT_DEBUG +grpc_error *grpc_error_ref(grpc_error *err, const char *file, int line, + const char *func); +void grpc_error_unref(grpc_error *err, const char *file, int line, + const char *func); +#define GRPC_ERROR_REF(err) grpc_error_ref(err, __FILE__, __LINE__, __func__) +#define GRPC_ERROR_UNREF(err) \ + grpc_error_unref(err, __FILE__, __LINE__, __func__) +#else +grpc_error *grpc_error_ref(grpc_error *err); +void grpc_error_unref(grpc_error *err); +#define GRPC_ERROR_REF(err) grpc_error_ref(err) +#define GRPC_ERROR_UNREF(err) grpc_error_unref(err) +#endif + +grpc_error *grpc_error_set_int(grpc_error *src, grpc_error_ints which, + intptr_t value); +bool grpc_error_get_int(grpc_error *error, grpc_error_ints which, intptr_t *p); +grpc_error *grpc_error_set_time(grpc_error *src, grpc_error_times which, + gpr_timespec value); +grpc_error *grpc_error_set_str(grpc_error *src, grpc_error_strs which, + const char *value); +/// Add a child error: an error that is believed to have contributed to this +/// error occurring. Allows root causing high level errors from lower level +/// errors that contributed to them. +grpc_error *grpc_error_add_child(grpc_error *src, grpc_error *child); +grpc_error *grpc_os_error(const char *file, int line, int err, + const char *call_name); +/// create an error associated with errno!=0 (an 'operating system' error) +#define GRPC_OS_ERROR(err, call_name) \ + grpc_os_error(__FILE__, __LINE__, err, call_name) +grpc_error *grpc_wsa_error(const char *file, int line, int err, + const char *call_name); +/// windows only: create an error associated with WSAGetLastError()!=0 +#define GRPC_WSA_ERROR(err, call_name) \ + grpc_wsa_error(__FILE__, __LINE__, err, call_name) + +bool grpc_log_if_error(const char *what, grpc_error *error, const char *file, + int line); +#define GRPC_LOG_IF_ERROR(what, error) \ + grpc_log_if_error((what), (error), __FILE__, __LINE__) + +#endif /* GRPC_CORE_LIB_IOMGR_ERROR_H */ diff --git a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c index 943c404f91..9e306af5fa 100644 --- a/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +++ b/src/core/lib/iomgr/ev_poll_and_epoll_posix.c @@ -221,9 +221,10 @@ struct grpc_pollset { struct grpc_pollset_vtable { void (*add_fd)(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, struct grpc_fd *fd, int and_unlock_pollset); - void (*maybe_work_and_unlock)(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_pollset_worker *worker, - gpr_timespec deadline, gpr_timespec now); + 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); }; @@ -251,9 +252,9 @@ static int poll_deadline_to_millis_timeout(gpr_timespec deadline, #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 void pollset_kick_ext(grpc_pollset *p, - grpc_pollset_worker *specific_worker, - uint32_t flags); +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, @@ -420,12 +421,13 @@ static bool fd_is_orphaned(grpc_fd *fd) { return (gpr_atm_acq_load(&fd->refst) & 1) == 0; } -static void pollset_kick_locked(grpc_fd_watcher *watcher) { +static grpc_error *pollset_kick_locked(grpc_fd_watcher *watcher) { gpr_mu_lock(&watcher->pollset->mu); GPR_ASSERT(watcher->worker); - pollset_kick_ext(watcher->pollset, watcher->worker, - GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP); + 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) { @@ -464,7 +466,7 @@ static void close_fd_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd) { } else { remove_fd_from_all_epoll_sets(fd->fd); } - grpc_exec_ctx_enqueue(exec_ctx, fd->on_done_closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, fd->on_done_closure, GRPC_ERROR_NONE, NULL); } static int fd_wrapped_fd(grpc_fd *fd) { @@ -513,15 +515,27 @@ 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 (*st == CLOSURE_NOT_READY) { + 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_enqueue(exec_ctx, closure, !fd->shutdown, NULL); + 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! */ @@ -544,7 +558,7 @@ static int set_ready_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd, return 0; } else { /* waiting ==> queue closure */ - grpc_exec_ctx_enqueue(exec_ctx, *st, !fd->shutdown, NULL); + grpc_exec_ctx_sched(exec_ctx, *st, fd_shutdown_error(fd->shutdown), NULL); *st = CLOSURE_NOT_READY; return 1; } @@ -557,11 +571,22 @@ static void set_read_notifier_pollset_locked( static void fd_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd) { gpr_mu_lock(&fd->mu); - GPR_ASSERT(!fd->shutdown); - fd->shutdown = 1; - set_ready_locked(exec_ctx, fd, &fd->read_closure); - set_ready_locked(exec_ctx, fd, &fd->write_closure); + /* 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, @@ -744,10 +769,19 @@ static void push_front_worker(grpc_pollset *p, grpc_pollset_worker *worker) { worker->prev->next = worker->next->prev = worker; } -static void pollset_kick_ext(grpc_pollset *p, - grpc_pollset_worker *specific_worker, - uint32_t flags) { +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) { @@ -757,25 +791,28 @@ static void pollset_kick_ext(grpc_pollset *p, for (specific_worker = p->root_worker.next; specific_worker != &p->root_worker; specific_worker = specific_worker->next) { - grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + kick_append_error( + &error, grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd)); } - p->kicked_without_pollers = 1; + 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 = 1; + specific_worker->reevaluate_polling_on_wakeup = true; } - specific_worker->kicked_specifically = 1; - grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + 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 = 1; + specific_worker->reevaluate_polling_on_wakeup = true; } - specific_worker->kicked_specifically = 1; - grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + 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); @@ -783,14 +820,9 @@ static void pollset_kick_ext(grpc_pollset *p, specific_worker = pop_front_worker(p); if (specific_worker != NULL) { if (gpr_tls_get(&g_current_thread_worker) == (intptr_t)specific_worker) { - /* Prefer not to kick self. Push the worker to the end of the list and - * pop the one from front */ GPR_TIMER_MARK("kick_anonymous_not_self", 0); push_back_worker(p, specific_worker); specific_worker = pop_front_worker(p); - /* If there was only one worker on the pollset, we would get the same - * worker we pushed (the one set on current thread local) back. If so, - * kick it only if GRPC_POLLSET_CAN_KICK_SELF flag is set */ if ((flags & GRPC_POLLSET_CAN_KICK_SELF) == 0 && gpr_tls_get(&g_current_thread_worker) == (intptr_t)specific_worker) { @@ -801,28 +833,30 @@ static void pollset_kick_ext(grpc_pollset *p, if (specific_worker != NULL) { GPR_TIMER_MARK("finally_kick", 0); push_back_worker(p, specific_worker); - grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + 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 = 1; + p->kicked_without_pollers = true; } } GPR_TIMER_END("pollset_kick_ext", 0); + return error; } -static void pollset_kick(grpc_pollset *p, - grpc_pollset_worker *specific_worker) { - pollset_kick_ext(p, specific_worker, 0); +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 void pollset_global_init(void) { +static grpc_error *pollset_global_init(void) { gpr_tls_init(&g_current_thread_poller); gpr_tls_init(&g_current_thread_worker); - grpc_wakeup_fd_init(&grpc_global_wakeup_fd); + return grpc_wakeup_fd_init(&grpc_global_wakeup_fd); } static void pollset_global_shutdown(void) { @@ -831,7 +865,9 @@ static void pollset_global_shutdown(void) { gpr_tls_destroy(&g_current_thread_worker); } -static void kick_poller(void) { grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd); } +static grpc_error *kick_poller(void) { + return grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd); +} /* main interface */ @@ -894,14 +930,23 @@ static void pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, 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_enqueue(exec_ctx, pollset->shutdown_done, true, NULL); + 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 void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_pollset_worker **worker_hdl, gpr_timespec now, - gpr_timespec deadline) { +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; @@ -917,7 +962,10 @@ static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, pollset->local_wakeup_cache = worker.wakeup_fd->next; } else { worker.wakeup_fd = gpr_malloc(sizeof(*worker.wakeup_fd)); - grpc_wakeup_fd_init(&worker.wakeup_fd->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 @@ -954,8 +1002,9 @@ static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, } gpr_tls_set(&g_current_thread_poller, (intptr_t)pollset); GPR_TIMER_BEGIN("maybe_work_and_unlock", 0); - pollset->vtable->maybe_work_and_unlock(exec_ctx, pollset, &worker, - deadline, now); + 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); @@ -1017,6 +1066,7 @@ static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, } *worker_hdl = NULL; GPR_TIMER_END("pollset_work", 0); + return error; } static void pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, @@ -1065,7 +1115,7 @@ typedef struct grpc_unary_promote_args { } grpc_unary_promote_args; static void basic_do_promote(grpc_exec_ctx *exec_ctx, void *args, - bool success) { + 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; @@ -1167,7 +1217,8 @@ static void basic_pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, up_args->promotion_closure.cb = basic_do_promote; up_args->promotion_closure.cb_arg = up_args; - grpc_closure_list_add(&pollset->idle_jobs, &up_args->promotion_closure, 1); + grpc_closure_list_append(&pollset->idle_jobs, &up_args->promotion_closure, + GRPC_ERROR_NONE); pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST); exit: @@ -1176,11 +1227,9 @@ exit: } } -static void basic_pollset_maybe_work_and_unlock(grpc_exec_ctx *exec_ctx, - grpc_pollset *pollset, - grpc_pollset_worker *worker, - gpr_timespec deadline, - gpr_timespec now) { +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) @@ -1190,6 +1239,7 @@ static void basic_pollset_maybe_work_and_unlock(grpc_exec_ctx *exec_ctx, int timeout; int r; nfds_t nfds; + grpc_error *error = GRPC_ERROR_NONE; fd = pollset->data.ptr; if (fd && fd_is_orphaned(fd)) { @@ -1230,7 +1280,7 @@ static void basic_pollset_maybe_work_and_unlock(grpc_exec_ctx *exec_ctx, if (r < 0) { if (errno != EINTR) { - gpr_log(GPR_ERROR, "poll() failed: %s", strerror(errno)); + work_combine_error(&error, GRPC_OS_ERROR(errno, "poll")); } if (fd) { fd_end_poll(exec_ctx, &fd_watcher, 0, 0, NULL); @@ -1241,10 +1291,12 @@ static void basic_pollset_maybe_work_and_unlock(grpc_exec_ctx *exec_ctx, } } else { if (pfd[0].revents & POLLIN_CHECK) { - grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd); + work_combine_error(&error, + grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd)); } if (pfd[1].revents & POLLIN_CHECK) { - grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd); + 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, @@ -1257,6 +1309,8 @@ static void basic_pollset_maybe_work_and_unlock(grpc_exec_ctx *exec_ctx, if (fd) { GRPC_FD_UNREF(fd, "basicpoll_begin"); } + + return error; } static void basic_pollset_destroy(grpc_pollset *pollset) { @@ -1317,7 +1371,7 @@ exit: } } -static void multipoll_with_poll_pollset_maybe_work_and_unlock( +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) @@ -1331,6 +1385,7 @@ static void multipoll_with_poll_pollset_maybe_work_and_unlock( /* 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); @@ -1383,7 +1438,7 @@ static void multipoll_with_poll_pollset_maybe_work_and_unlock( if (r < 0) { if (errno != EINTR) { - gpr_log(GPR_ERROR, "poll() failed: %s", strerror(errno)); + 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); @@ -1394,10 +1449,12 @@ static void multipoll_with_poll_pollset_maybe_work_and_unlock( } } else { if (pfds[0].revents & POLLIN_CHECK) { - grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd); + work_combine_error(&error, + grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd)); } if (pfds[1].revents & POLLIN_CHECK) { - grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd); + 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) { @@ -1411,6 +1468,8 @@ static void multipoll_with_poll_pollset_maybe_work_and_unlock( gpr_free(pfds); gpr_free(watchers); + + return error; } static void multipoll_with_poll_pollset_finish_shutdown(grpc_pollset *pollset) { @@ -1601,7 +1660,7 @@ static void finally_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, } static void perform_delayed_add(grpc_exec_ctx *exec_ctx, void *arg, - bool iomgr_status) { + grpc_error *error) { delayed_add *da = arg; if (!fd_is_orphaned(da->fd)) { @@ -1614,7 +1673,8 @@ static void perform_delayed_add(grpc_exec_ctx *exec_ctx, void *arg, /* 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_enqueue(exec_ctx, da->pollset->shutdown_done, true, NULL); + grpc_exec_ctx_sched(exec_ctx, da->pollset->shutdown_done, GRPC_ERROR_NONE, + NULL); } } gpr_mu_unlock(&da->pollset->mu); @@ -1638,14 +1698,14 @@ static void multipoll_with_epoll_pollset_add_fd(grpc_exec_ctx *exec_ctx, GRPC_FD_REF(fd, "delayed_add"); grpc_closure_init(&da->closure, perform_delayed_add, da); pollset->in_flight_cbs++; - grpc_exec_ctx_enqueue(exec_ctx, &da->closure, true, NULL); + 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 void multipoll_with_epoll_pollset_maybe_work_and_unlock( +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]; @@ -1654,6 +1714,7 @@ static void multipoll_with_epoll_pollset_maybe_work_and_unlock( 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 @@ -1682,13 +1743,14 @@ static void multipoll_with_epoll_pollset_maybe_work_and_unlock( if (poll_rv < 0) { if (errno != EINTR) { - gpr_log(GPR_ERROR, "poll() failed: %s", strerror(errno)); + work_combine_error(&error, GRPC_OS_ERROR(errno, "poll")); } } else if (poll_rv == 0) { /* do nothing */ } else { if (pfds[0].revents) { - grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd); + work_combine_error(&error, + grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd)); } if (pfds[1].revents) { do { @@ -1696,7 +1758,7 @@ static void multipoll_with_epoll_pollset_maybe_work_and_unlock( ep_rv = epoll_wait(h->epoll_fd, ep_ev, GRPC_EPOLL_MAX_EVENTS, 0); if (ep_rv < 0) { if (errno != EINTR) { - gpr_log(GPR_ERROR, "epoll_wait() failed: %s", strerror(errno)); + work_combine_error(&error, GRPC_OS_ERROR(errno, "epoll_wait")); } } else { int i; @@ -1708,7 +1770,8 @@ static void multipoll_with_epoll_pollset_maybe_work_and_unlock( int read_ev = ep_ev[i].events & (EPOLLIN | EPOLLPRI); int write_ev = ep_ev[i].events & EPOLLOUT; if (fd == NULL) { - grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd); + 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); @@ -1722,6 +1785,7 @@ static void multipoll_with_epoll_pollset_maybe_work_and_unlock( } while (ep_rv == GRPC_EPOLL_MAX_EVENTS); } } + return error; } static void multipoll_with_epoll_pollset_finish_shutdown( @@ -1938,6 +2002,7 @@ static const grpc_event_engine_vtable vtable = { .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, diff --git a/src/core/lib/iomgr/ev_poll_posix.c b/src/core/lib/iomgr/ev_poll_posix.c index 0167999dad..45c0a5e954 100644 --- a/src/core/lib/iomgr/ev_poll_posix.c +++ b/src/core/lib/iomgr/ev_poll_posix.c @@ -1,6 +1,6 @@ /* * - * Copyright 2015-2016, Google Inc. + * Copyright 2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -217,9 +217,9 @@ static int poll_deadline_to_millis_timeout(gpr_timespec deadline, #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 void pollset_kick_ext(grpc_pollset *p, - grpc_pollset_worker *specific_worker, - uint32_t flags); +static grpc_error *pollset_kick_ext(grpc_pollset *p, + grpc_pollset_worker *specific_worker, + uint32_t flags) GRPC_MUST_USE_RESULT; /* Return 1 if the pollset has active threads in pollset_work (pollset must * be locked) */ @@ -328,12 +328,13 @@ static grpc_pollset *fd_get_read_notifier_pollset(grpc_exec_ctx *exec_ctx, return notifier; } -static void pollset_kick_locked(grpc_fd_watcher *watcher) { +static grpc_error *pollset_kick_locked(grpc_fd_watcher *watcher) { gpr_mu_lock(&watcher->pollset->mu); GPR_ASSERT(watcher->worker); - pollset_kick_ext(watcher->pollset, watcher->worker, - GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP); + 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) { @@ -370,7 +371,7 @@ static void close_fd_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd) { if (!fd->released) { close(fd->fd); } - grpc_exec_ctx_enqueue(exec_ctx, fd->on_done_closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, fd->on_done_closure, GRPC_ERROR_NONE, NULL); } static int fd_wrapped_fd(grpc_fd *fd) { @@ -419,15 +420,27 @@ 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 (*st == CLOSURE_NOT_READY) { + 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_enqueue(exec_ctx, closure, !fd->shutdown, NULL); + 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! */ @@ -450,7 +463,7 @@ static int set_ready_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd, return 0; } else { /* waiting ==> queue closure */ - grpc_exec_ctx_enqueue(exec_ctx, *st, !fd->shutdown, NULL); + grpc_exec_ctx_sched(exec_ctx, *st, fd_shutdown_error(fd->shutdown), NULL); *st = CLOSURE_NOT_READY; return 1; } @@ -463,13 +476,24 @@ static void set_read_notifier_pollset_locked( static void fd_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd) { gpr_mu_lock(&fd->mu); - GPR_ASSERT(!fd->shutdown); - fd->shutdown = 1; - set_ready_locked(exec_ctx, fd, &fd->read_closure); - set_ready_locked(exec_ctx, fd, &fd->write_closure); + /* 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); @@ -631,10 +655,19 @@ static void push_front_worker(grpc_pollset *p, grpc_pollset_worker *worker) { worker->prev->next = worker->next->prev = worker; } -static void pollset_kick_ext(grpc_pollset *p, - grpc_pollset_worker *specific_worker, - uint32_t flags) { +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) { @@ -644,25 +677,28 @@ static void pollset_kick_ext(grpc_pollset *p, for (specific_worker = p->root_worker.next; specific_worker != &p->root_worker; specific_worker = specific_worker->next) { - grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + kick_append_error( + &error, grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd)); } - p->kicked_without_pollers = 1; + 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 = 1; + specific_worker->reevaluate_polling_on_wakeup = true; } - specific_worker->kicked_specifically = 1; - grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + 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 = 1; + specific_worker->reevaluate_polling_on_wakeup = true; } - specific_worker->kicked_specifically = 1; - grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + 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); @@ -683,28 +719,31 @@ static void pollset_kick_ext(grpc_pollset *p, if (specific_worker != NULL) { GPR_TIMER_MARK("finally_kick", 0); push_back_worker(p, specific_worker); - grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd); + 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 = 1; + p->kicked_without_pollers = true; } } GPR_TIMER_END("pollset_kick_ext", 0); + GRPC_LOG_IF_ERROR("pollset_kick_ext", GRPC_ERROR_REF(error)); + return error; } -static void pollset_kick(grpc_pollset *p, - grpc_pollset_worker *specific_worker) { - pollset_kick_ext(p, specific_worker, 0); +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 void pollset_global_init(void) { +static grpc_error *pollset_global_init(void) { gpr_tls_init(&g_current_thread_poller); gpr_tls_init(&g_current_thread_worker); - grpc_wakeup_fd_init(&grpc_global_wakeup_fd); + return grpc_wakeup_fd_init(&grpc_global_wakeup_fd); } static void pollset_global_shutdown(void) { @@ -713,7 +752,9 @@ static void pollset_global_shutdown(void) { gpr_tls_destroy(&g_current_thread_worker); } -static void kick_poller(void) { grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd); } +static grpc_error *kick_poller(void) { + return grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd); +} /* main interface */ @@ -783,14 +824,23 @@ static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset) { GRPC_FD_UNREF(pollset->fds[i], "multipoller"); } pollset->fd_count = 0; - grpc_exec_ctx_enqueue(exec_ctx, pollset->shutdown_done, true, NULL); + grpc_exec_ctx_sched(exec_ctx, pollset->shutdown_done, GRPC_ERROR_NONE, NULL); } -static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_pollset_worker **worker_hdl, gpr_timespec now, - gpr_timespec deadline) { +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; @@ -806,7 +856,11 @@ static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, pollset->local_wakeup_cache = worker.wakeup_fd->next; } else { worker.wakeup_fd = gpr_malloc(sizeof(*worker.wakeup_fd)); - grpc_wakeup_fd_init(&worker.wakeup_fd->fd); + error = grpc_wakeup_fd_init(&worker.wakeup_fd->fd); + if (error != GRPC_ERROR_NONE) { + GRPC_LOG_IF_ERROR("pollset_work", GRPC_ERROR_REF(error)); + return error; + } } worker.kicked_specifically = 0; /* If there's work waiting for the pollset to be idle, and the @@ -890,7 +944,7 @@ static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, if (r < 0) { if (errno != EINTR) { - gpr_log(GPR_ERROR, "poll() failed: %s", strerror(errno)); + 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); @@ -901,10 +955,12 @@ static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, } } else { if (pfds[0].revents & POLLIN_CHECK) { - grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd); + work_combine_error( + &error, grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd)); } if (pfds[1].revents & POLLIN_CHECK) { - grpc_wakeup_fd_consume_wakeup(&worker.wakeup_fd->fd); + 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) { @@ -937,7 +993,7 @@ static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, /* 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) { + if (worker.reevaluate_polling_on_wakeup && error == GRPC_ERROR_NONE) { worker.reevaluate_polling_on_wakeup = 0; pollset->kicked_without_pollers = 0; if (queued_work || worker.kicked_specifically) { @@ -982,6 +1038,8 @@ static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, } *worker_hdl = NULL; GPR_TIMER_END("pollset_work", 0); + GRPC_LOG_IF_ERROR("pollset_work", GRPC_ERROR_REF(error)); + return error; } static void pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, @@ -1172,6 +1230,7 @@ static const grpc_event_engine_vtable vtable = { .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, @@ -1199,7 +1258,9 @@ static const grpc_event_engine_vtable vtable = { }; const grpc_event_engine_vtable *grpc_init_poll_posix(void) { - pollset_global_init(); + if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) { + return NULL; + } return &vtable; } diff --git a/src/core/lib/iomgr/ev_posix.c b/src/core/lib/iomgr/ev_posix.c index 6477b05dcd..4c360f13a3 100644 --- a/src/core/lib/iomgr/ev_posix.c +++ b/src/core/lib/iomgr/ev_posix.c @@ -153,6 +153,10 @@ void grpc_fd_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd) { g_event_engine->fd_shutdown(exec_ctx, fd); } +bool grpc_fd_is_shutdown(grpc_fd *fd) { + return g_event_engine->fd_is_shutdown(fd); +} + void grpc_fd_notify_on_read(grpc_exec_ctx *exec_ctx, grpc_fd *fd, grpc_closure *closure) { g_event_engine->fd_notify_on_read(exec_ctx, fd, closure); @@ -187,15 +191,15 @@ void grpc_pollset_destroy(grpc_pollset *pollset) { g_event_engine->pollset_destroy(pollset); } -void grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_pollset_worker **worker, gpr_timespec now, - gpr_timespec deadline) { - g_event_engine->pollset_work(exec_ctx, pollset, worker, now, deadline); +grpc_error *grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, + grpc_pollset_worker **worker, gpr_timespec now, + gpr_timespec deadline) { + return g_event_engine->pollset_work(exec_ctx, pollset, worker, now, deadline); } -void grpc_pollset_kick(grpc_pollset *pollset, - grpc_pollset_worker *specific_worker) { - g_event_engine->pollset_kick(pollset, specific_worker); +grpc_error *grpc_pollset_kick(grpc_pollset *pollset, + grpc_pollset_worker *specific_worker) { + return g_event_engine->pollset_kick(pollset, specific_worker); } void grpc_pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, @@ -245,6 +249,6 @@ void grpc_pollset_set_del_fd(grpc_exec_ctx *exec_ctx, g_event_engine->pollset_set_del_fd(exec_ctx, pollset_set, fd); } -void grpc_kick_poller(void) { g_event_engine->kick_poller(); } +grpc_error *grpc_kick_poller(void) { return g_event_engine->kick_poller(); } #endif // GPR_POSIX_SOCKET diff --git a/src/core/lib/iomgr/ev_posix.h b/src/core/lib/iomgr/ev_posix.h index 344bf63438..87e9bc4d46 100644 --- a/src/core/lib/iomgr/ev_posix.h +++ b/src/core/lib/iomgr/ev_posix.h @@ -55,6 +55,7 @@ typedef struct grpc_event_engine_vtable { grpc_closure *closure); void (*fd_notify_on_write)(grpc_exec_ctx *exec_ctx, grpc_fd *fd, grpc_closure *closure); + bool (*fd_is_shutdown)(grpc_fd *fd); grpc_pollset *(*fd_get_read_notifier_pollset)(grpc_exec_ctx *exec_ctx, grpc_fd *fd); @@ -63,11 +64,11 @@ typedef struct grpc_event_engine_vtable { grpc_closure *closure); void (*pollset_reset)(grpc_pollset *pollset); void (*pollset_destroy)(grpc_pollset *pollset); - void (*pollset_work)(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_pollset_worker **worker, gpr_timespec now, - gpr_timespec deadline); - void (*pollset_kick)(grpc_pollset *pollset, - grpc_pollset_worker *specific_worker); + grpc_error *(*pollset_work)(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, + grpc_pollset_worker **worker, gpr_timespec now, + gpr_timespec deadline); + grpc_error *(*pollset_kick)(grpc_pollset *pollset, + grpc_pollset_worker *specific_worker); void (*pollset_add_fd)(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, struct grpc_fd *fd); @@ -90,7 +91,7 @@ typedef struct grpc_event_engine_vtable { void (*pollset_set_del_fd)(grpc_exec_ctx *exec_ctx, grpc_pollset_set *pollset_set, grpc_fd *fd); - void (*kick_poller)(void); + grpc_error *(*kick_poller)(void); void (*shutdown_engine)(void); } grpc_event_engine_vtable; @@ -116,7 +117,10 @@ int grpc_fd_wrapped_fd(grpc_fd *fd); void grpc_fd_orphan(grpc_exec_ctx *exec_ctx, grpc_fd *fd, grpc_closure *on_done, int *release_fd, const char *reason); -/* Cause any current callbacks to error out with GRPC_CALLBACK_CANCELLED. */ +/* Has grpc_fd_shutdown been called on an fd? */ +bool grpc_fd_is_shutdown(grpc_fd *fd); + +/* Cause any current and future callbacks to fail. */ void grpc_fd_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd); /* Register read interest, causing read_cb to be called once when fd becomes diff --git a/src/core/lib/iomgr/exec_ctx.c b/src/core/lib/iomgr/exec_ctx.c index e451479073..c44aafcddf 100644 --- a/src/core/lib/iomgr/exec_ctx.c +++ b/src/core/lib/iomgr/exec_ctx.c @@ -63,11 +63,12 @@ bool grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx) { grpc_closure *c = exec_ctx->closure_list.head; exec_ctx->closure_list.head = exec_ctx->closure_list.tail = NULL; while (c != NULL) { - bool success = (bool)(c->final_data & 1); - grpc_closure *next = (grpc_closure *)(c->final_data & ~(uintptr_t)1); + grpc_closure *next = c->next_data.next; + grpc_error *error = c->error; did_something = true; GPR_TIMER_BEGIN("grpc_exec_ctx_flush.cb", 0); - c->cb(exec_ctx, c->cb_arg, success); + c->cb(exec_ctx, c->cb_arg, error); + GRPC_ERROR_UNREF(error); GPR_TIMER_END("grpc_exec_ctx_flush.cb", 0); c = next; } @@ -81,11 +82,11 @@ void grpc_exec_ctx_finish(grpc_exec_ctx *exec_ctx) { grpc_exec_ctx_flush(exec_ctx); } -void grpc_exec_ctx_enqueue(grpc_exec_ctx *exec_ctx, grpc_closure *closure, - bool success, - grpc_workqueue *offload_target_or_null) { +void grpc_exec_ctx_sched(grpc_exec_ctx *exec_ctx, grpc_closure *closure, + grpc_error *error, + grpc_workqueue *offload_target_or_null) { GPR_ASSERT(offload_target_or_null == NULL); - grpc_closure_list_add(&exec_ctx->closure_list, closure, success); + grpc_closure_list_append(&exec_ctx->closure_list, closure, error); } void grpc_exec_ctx_enqueue_list(grpc_exec_ctx *exec_ctx, diff --git a/src/core/lib/iomgr/exec_ctx.h b/src/core/lib/iomgr/exec_ctx.h index 9d47a262f8..38f27d9b13 100644 --- a/src/core/lib/iomgr/exec_ctx.h +++ b/src/core/lib/iomgr/exec_ctx.h @@ -94,9 +94,9 @@ bool grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx); * the instance is destroyed, or work may be lost. */ void grpc_exec_ctx_finish(grpc_exec_ctx *exec_ctx); /** Add a closure to be executed at the next flush/finish point */ -void grpc_exec_ctx_enqueue(grpc_exec_ctx *exec_ctx, grpc_closure *closure, - bool success, - grpc_workqueue *offload_target_or_null); +void grpc_exec_ctx_sched(grpc_exec_ctx *exec_ctx, grpc_closure *closure, + grpc_error *error, + grpc_workqueue *offload_target_or_null); /** Returns true if we'd like to leave this execution context as soon as possible: useful for deciding whether to do something more or not depending on outside context */ diff --git a/src/core/lib/iomgr/executor.c b/src/core/lib/iomgr/executor.c index 36e22e4271..8d7535d6fe 100644 --- a/src/core/lib/iomgr/executor.c +++ b/src/core/lib/iomgr/executor.c @@ -112,10 +112,10 @@ static void maybe_spawn_locked() { g_executor.pending_join = 1; } -void grpc_executor_enqueue(grpc_closure *closure, bool success) { +void grpc_executor_push(grpc_closure *closure, grpc_error *error) { gpr_mu_lock(&g_executor.mu); if (g_executor.shutting_down == 0) { - grpc_closure_list_add(&g_executor.closures, closure, success); + grpc_closure_list_append(&g_executor.closures, closure, error); maybe_spawn_locked(); } gpr_mu_unlock(&g_executor.mu); diff --git a/src/core/lib/iomgr/executor.h b/src/core/lib/iomgr/executor.h index b7e6f51aa5..da9dcd07d0 100644 --- a/src/core/lib/iomgr/executor.h +++ b/src/core/lib/iomgr/executor.h @@ -45,7 +45,7 @@ void grpc_executor_init(); /** Enqueue \a closure for its eventual execution of \a f(arg) on a separate * thread */ -void grpc_executor_enqueue(grpc_closure *closure, bool success); +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(); diff --git a/src/core/lib/iomgr/iocp_windows.c b/src/core/lib/iomgr/iocp_windows.c index 708232295e..2532e52e48 100644 --- a/src/core/lib/iomgr/iocp_windows.c +++ b/src/core/lib/iomgr/iocp_windows.c @@ -104,7 +104,6 @@ grpc_iocp_work_status grpc_iocp_work(grpc_exec_ctx *exec_ctx, } else if (overlapped == &socket->read_info.overlapped) { info = &socket->read_info; } else { - gpr_log(GPR_ERROR, "Unknown IOCP operation"); abort(); } success = WSAGetOverlappedResult(socket->socket, &info->overlapped, &bytes, @@ -112,16 +111,7 @@ grpc_iocp_work_status grpc_iocp_work(grpc_exec_ctx *exec_ctx, info->bytes_transfered = bytes; info->wsa_error = success ? 0 : WSAGetLastError(); GPR_ASSERT(overlapped == &info->overlapped); - GPR_ASSERT(!info->has_pending_iocp); - gpr_mu_lock(&socket->state_mu); - if (info->closure) { - closure = info->closure; - info->closure = NULL; - } else { - info->has_pending_iocp = 1; - } - gpr_mu_unlock(&socket->state_mu); - grpc_exec_ctx_enqueue(exec_ctx, closure, true, NULL); + grpc_socket_become_ready(exec_ctx, socket, info); return GRPC_IOCP_WORK_WORK; } @@ -176,33 +166,4 @@ void grpc_iocp_add_socket(grpc_winsocket *socket) { GPR_ASSERT(ret == g_iocp); } -/* Calling notify_on_read or write means either of two things: - -) The IOCP already completed in the background, and we need to call - the callback now. - -) The IOCP hasn't completed yet, and we're queuing it for later. */ -static void socket_notify_on_iocp(grpc_exec_ctx *exec_ctx, - grpc_winsocket *socket, grpc_closure *closure, - grpc_winsocket_callback_info *info) { - GPR_ASSERT(info->closure == NULL); - gpr_mu_lock(&socket->state_mu); - if (info->has_pending_iocp) { - info->has_pending_iocp = 0; - grpc_exec_ctx_enqueue(exec_ctx, closure, true, NULL); - } else { - info->closure = closure; - } - gpr_mu_unlock(&socket->state_mu); -} - -void grpc_socket_notify_on_write(grpc_exec_ctx *exec_ctx, - grpc_winsocket *socket, - grpc_closure *closure) { - socket_notify_on_iocp(exec_ctx, socket, closure, &socket->write_info); -} - -void grpc_socket_notify_on_read(grpc_exec_ctx *exec_ctx, grpc_winsocket *socket, - grpc_closure *closure) { - socket_notify_on_iocp(exec_ctx, socket, closure, &socket->read_info); -} - #endif /* GPR_WINSOCK_SOCKET */ diff --git a/src/core/lib/iomgr/iocp_windows.h b/src/core/lib/iomgr/iocp_windows.h index ae210fa7d7..011fee38ff 100644 --- a/src/core/lib/iomgr/iocp_windows.h +++ b/src/core/lib/iomgr/iocp_windows.h @@ -52,12 +52,4 @@ void grpc_iocp_flush(void); void grpc_iocp_shutdown(void); void grpc_iocp_add_socket(grpc_winsocket *); -void grpc_socket_notify_on_write(grpc_exec_ctx *exec_ctx, - grpc_winsocket *winsocket, - grpc_closure *closure); - -void grpc_socket_notify_on_read(grpc_exec_ctx *exec_ctx, - grpc_winsocket *winsocket, - grpc_closure *closure); - #endif /* GRPC_CORE_LIB_IOMGR_IOCP_WINDOWS_H */ diff --git a/src/core/lib/support/load_file.c b/src/core/lib/iomgr/load_file.c index f30aacdd4f..b62ecbc534 100644 --- a/src/core/lib/support/load_file.c +++ b/src/core/lib/iomgr/load_file.c @@ -31,7 +31,7 @@ * */ -#include "src/core/lib/support/load_file.h" +#include "src/core/lib/iomgr/load_file.h" #include <errno.h> #include <string.h> @@ -43,21 +43,19 @@ #include "src/core/lib/support/block_annotate.h" #include "src/core/lib/support/string.h" -gpr_slice gpr_load_file(const char *filename, int add_null_terminator, - int *success) { +grpc_error *grpc_load_file(const char *filename, int add_null_terminator, + gpr_slice *output) { unsigned char *contents = NULL; size_t contents_size = 0; - char *error_msg = NULL; gpr_slice result = gpr_empty_slice(); FILE *file; size_t bytes_read = 0; + grpc_error *error = GRPC_ERROR_NONE; GRPC_SCHEDULING_START_BLOCKING_REGION; file = fopen(filename, "rb"); if (file == NULL) { - gpr_asprintf(&error_msg, "Could not open file %s (error = %s).", filename, - strerror(errno)); - GPR_ASSERT(error_msg != NULL); + error = GRPC_OS_ERROR(errno, "fopen"); goto end; } fseek(file, 0, SEEK_END); @@ -67,25 +65,25 @@ gpr_slice gpr_load_file(const char *filename, int add_null_terminator, contents = gpr_malloc(contents_size + (add_null_terminator ? 1 : 0)); bytes_read = fread(contents, 1, contents_size, file); if (bytes_read < contents_size) { + error = GRPC_OS_ERROR(errno, "fread"); GPR_ASSERT(ferror(file)); - gpr_asprintf(&error_msg, "Error %s occured while reading file %s.", - strerror(errno), filename); - GPR_ASSERT(error_msg != NULL); goto end; } - if (success != NULL) *success = 1; if (add_null_terminator) { contents[contents_size++] = 0; } result = gpr_slice_new(contents, contents_size, gpr_free); end: - if (error_msg != NULL) { - gpr_log(GPR_ERROR, "%s", error_msg); - gpr_free(error_msg); - if (success != NULL) *success = 0; - } + *output = result; if (file != NULL) fclose(file); + if (error != GRPC_ERROR_NONE) { + grpc_error *error_out = grpc_error_set_str( + GRPC_ERROR_CREATE_REFERENCING("Failed to load file", &error, 1), + GRPC_ERROR_STR_FILENAME, filename); + GRPC_ERROR_UNREF(error); + error = error_out; + } GRPC_SCHEDULING_END_BLOCKING_REGION; - return result; + return error; } diff --git a/src/core/lib/support/load_file.h b/src/core/lib/iomgr/load_file.h index 9a4b27942e..9aac2225d1 100644 --- a/src/core/lib/support/load_file.h +++ b/src/core/lib/iomgr/load_file.h @@ -31,25 +31,26 @@ * */ -#ifndef GRPC_CORE_LIB_SUPPORT_LOAD_FILE_H -#define GRPC_CORE_LIB_SUPPORT_LOAD_FILE_H +#ifndef GRPC_CORE_LIB_IOMGR_LOAD_FILE_H +#define GRPC_CORE_LIB_IOMGR_LOAD_FILE_H #include <stdio.h> #include <grpc/support/slice.h> +#include "src/core/lib/iomgr/error.h" + #ifdef __cplusplus extern "C" { #endif /* Loads the content of a file into a slice. add_null_terminator will add - a NULL terminator if non-zero. The success parameter, if not NULL, - will be set to 1 in case of success and 0 in case of failure. */ -gpr_slice gpr_load_file(const char *filename, int add_null_terminator, - int *success); + a NULL terminator if non-zero. */ +grpc_error *grpc_load_file(const char *filename, int add_null_terminator, + gpr_slice *slice); #ifdef __cplusplus } #endif -#endif /* GRPC_CORE_LIB_SUPPORT_LOAD_FILE_H */ +#endif /* GRPC_CORE_LIB_IOMGR_LOAD_FILE_H */ diff --git a/src/core/lib/iomgr/pollset.h b/src/core/lib/iomgr/pollset.h index c40a474877..8d9edc8406 100644 --- a/src/core/lib/iomgr/pollset.h +++ b/src/core/lib/iomgr/pollset.h @@ -81,14 +81,15 @@ void grpc_pollset_destroy(grpc_pollset *pollset); May call grpc_closure_list_run on grpc_closure_list, without holding the pollset lock */ -void grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_pollset_worker **worker, gpr_timespec now, - gpr_timespec deadline); +grpc_error *grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, + grpc_pollset_worker **worker, gpr_timespec now, + gpr_timespec deadline) GRPC_MUST_USE_RESULT; /* Break one polling thread out of polling work for this pollset. If specific_worker is GRPC_POLLSET_KICK_BROADCAST, kick ALL the workers. Otherwise, if specific_worker is non-NULL, then kick that worker. */ -void grpc_pollset_kick(grpc_pollset *pollset, - grpc_pollset_worker *specific_worker); +grpc_error *grpc_pollset_kick(grpc_pollset *pollset, + grpc_pollset_worker *specific_worker) + GRPC_MUST_USE_RESULT; #endif /* GRPC_CORE_LIB_IOMGR_POLLSET_H */ diff --git a/src/core/lib/iomgr/pollset_windows.c b/src/core/lib/iomgr/pollset_windows.c index bff5c586f8..626dd784b3 100644 --- a/src/core/lib/iomgr/pollset_windows.c +++ b/src/core/lib/iomgr/pollset_windows.c @@ -109,7 +109,7 @@ void grpc_pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, pollset->shutting_down = 1; grpc_pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST); if (!pollset->is_iocp_worker) { - grpc_exec_ctx_enqueue(exec_ctx, closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_NONE, NULL); } else { pollset->on_shutdown = closure; } @@ -127,9 +127,9 @@ void grpc_pollset_reset(grpc_pollset *pollset) { pollset->on_shutdown = NULL; } -void grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, - grpc_pollset_worker **worker_hdl, gpr_timespec now, - gpr_timespec deadline) { +grpc_error *grpc_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; @@ -167,7 +167,8 @@ void grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, } if (pollset->shutting_down && pollset->on_shutdown != NULL) { - grpc_exec_ctx_enqueue(exec_ctx, pollset->on_shutdown, true, NULL); + grpc_exec_ctx_sched(exec_ctx, pollset->on_shutdown, GRPC_ERROR_NONE, + NULL); pollset->on_shutdown = NULL; } goto done; @@ -197,9 +198,11 @@ done: } gpr_cv_destroy(&worker.cv); *worker_hdl = NULL; + return GRPC_ERROR_NONE; } -void grpc_pollset_kick(grpc_pollset *p, grpc_pollset_worker *specific_worker) { +grpc_error *grpc_pollset_kick(grpc_pollset *p, + grpc_pollset_worker *specific_worker) { if (specific_worker != NULL) { if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) { for (specific_worker = @@ -233,6 +236,7 @@ void grpc_pollset_kick(grpc_pollset *p, grpc_pollset_worker *specific_worker) { p->kicked_without_pollers = 1; } } + return GRPC_ERROR_NONE; } void grpc_kick_poller(void) { grpc_iocp_kick(); } diff --git a/src/core/lib/iomgr/resolve_address.h b/src/core/lib/iomgr/resolve_address.h index ef198fe0f6..ddbe375755 100644 --- a/src/core/lib/iomgr/resolve_address.h +++ b/src/core/lib/iomgr/resolve_address.h @@ -50,24 +50,20 @@ typedef struct { grpc_resolved_address *addrs; } grpc_resolved_addresses; -/* Async result callback: - On success: addresses is the result, and the callee must call - grpc_resolved_addresses_destroy when it's done with them - On failure: addresses is NULL */ -typedef void (*grpc_resolve_cb)(grpc_exec_ctx *exec_ctx, void *arg, - grpc_resolved_addresses *addresses); /* Asynchronously resolve addr. Use default_port if a port isn't designated in addr, otherwise use the port in addr. */ /* TODO(ctiller): add a timeout here */ extern void (*grpc_resolve_address)(grpc_exec_ctx *exec_ctx, const char *addr, const char *default_port, - grpc_resolve_cb cb, void *arg); + grpc_closure *on_done, + grpc_resolved_addresses **addresses); /* Destroy resolved addresses */ void grpc_resolved_addresses_destroy(grpc_resolved_addresses *addresses); /* Resolve addr in a blocking fashion. Returns NULL on failure. On success, result must be freed with grpc_resolved_addresses_destroy. */ -extern grpc_resolved_addresses *(*grpc_blocking_resolve_address)( - const char *name, const char *default_port); +extern grpc_error *(*grpc_blocking_resolve_address)( + const char *name, const char *default_port, + grpc_resolved_addresses **addresses); #endif /* GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_H */ diff --git a/src/core/lib/iomgr/resolve_address_posix.c b/src/core/lib/iomgr/resolve_address_posix.c index cae91eec20..4e9f978584 100644 --- a/src/core/lib/iomgr/resolve_address_posix.c +++ b/src/core/lib/iomgr/resolve_address_posix.c @@ -54,38 +54,33 @@ #include "src/core/lib/support/block_annotate.h" #include "src/core/lib/support/string.h" -typedef struct { - char *name; - char *default_port; - grpc_resolve_cb cb; - grpc_closure request_closure; - void *arg; -} request; - -static grpc_resolved_addresses *blocking_resolve_address_impl( - const char *name, const char *default_port) { +static grpc_error *blocking_resolve_address_impl( + const char *name, const char *default_port, + grpc_resolved_addresses **addresses) { struct addrinfo hints; struct addrinfo *result = NULL, *resp; char *host; char *port; int s; size_t i; - grpc_resolved_addresses *addrs = NULL; + grpc_error *err; if (name[0] == 'u' && name[1] == 'n' && name[2] == 'i' && name[3] == 'x' && name[4] == ':' && name[5] != 0) { - return grpc_resolve_unix_domain_address(name + 5); + return grpc_resolve_unix_domain_address(name + 5, addresses); } /* parse name, splitting it into host and port parts */ gpr_split_host_port(name, &host, &port); if (host == NULL) { - gpr_log(GPR_ERROR, "unparseable host:port: '%s'", name); + err = grpc_error_set_str(GRPC_ERROR_CREATE("unparseable host:port"), + GRPC_ERROR_STR_TARGET_ADDRESS, name); goto done; } if (port == NULL) { if (default_port == NULL) { - gpr_log(GPR_ERROR, "no port in name '%s'", name); + err = grpc_error_set_str(GRPC_ERROR_CREATE("no port in name"), + GRPC_ERROR_STR_TARGET_ADDRESS, name); goto done; } port = gpr_strdup(default_port); @@ -115,23 +110,31 @@ static grpc_resolved_addresses *blocking_resolve_address_impl( } if (s != 0) { - gpr_log(GPR_ERROR, "getaddrinfo: %s", gai_strerror(s)); + err = grpc_error_set_str( + grpc_error_set_str( + grpc_error_set_str(grpc_error_set_int(GRPC_ERROR_CREATE("OS Error"), + GRPC_ERROR_INT_ERRNO, s), + GRPC_ERROR_STR_OS_ERROR, gai_strerror(s)), + GRPC_ERROR_STR_SYSCALL, "getaddrinfo"), + GRPC_ERROR_STR_TARGET_ADDRESS, name); goto done; } /* Success path: set addrs non-NULL, fill it in */ - addrs = gpr_malloc(sizeof(grpc_resolved_addresses)); - addrs->naddrs = 0; + *addresses = gpr_malloc(sizeof(grpc_resolved_addresses)); + (*addresses)->naddrs = 0; for (resp = result; resp != NULL; resp = resp->ai_next) { - addrs->naddrs++; + (*addresses)->naddrs++; } - addrs->addrs = gpr_malloc(sizeof(grpc_resolved_address) * addrs->naddrs); + (*addresses)->addrs = + gpr_malloc(sizeof(grpc_resolved_address) * (*addresses)->naddrs); i = 0; for (resp = result; resp != NULL; resp = resp->ai_next) { - memcpy(&addrs->addrs[i].addr, resp->ai_addr, resp->ai_addrlen); - addrs->addrs[i].len = resp->ai_addrlen; + memcpy(&(*addresses)->addrs[i].addr, resp->ai_addr, resp->ai_addrlen); + (*addresses)->addrs[i].len = resp->ai_addrlen; i++; } + err = GRPC_ERROR_NONE; done: gpr_free(host); @@ -139,45 +142,59 @@ done: if (result) { freeaddrinfo(result); } - return addrs; + return err; } -grpc_resolved_addresses *(*grpc_blocking_resolve_address)( - const char *name, const char *default_port) = blocking_resolve_address_impl; +grpc_error *(*grpc_blocking_resolve_address)( + const char *name, const char *default_port, + grpc_resolved_addresses **addresses) = blocking_resolve_address_impl; + +typedef struct { + char *name; + char *default_port; + grpc_closure *on_done; + grpc_resolved_addresses **addrs_out; + grpc_closure request_closure; + void *arg; +} request; /* Callback to be passed to grpc_executor to asynch-ify * grpc_blocking_resolve_address */ -static void do_request_thread(grpc_exec_ctx *exec_ctx, void *rp, bool success) { +static void do_request_thread(grpc_exec_ctx *exec_ctx, void *rp, + grpc_error *error) { request *r = rp; - grpc_resolved_addresses *resolved = - grpc_blocking_resolve_address(r->name, r->default_port); - void *arg = r->arg; - grpc_resolve_cb cb = r->cb; + grpc_exec_ctx_sched( + exec_ctx, r->on_done, + grpc_blocking_resolve_address(r->name, r->default_port, r->addrs_out), + NULL); gpr_free(r->name); gpr_free(r->default_port); - cb(exec_ctx, arg, resolved); gpr_free(r); } void grpc_resolved_addresses_destroy(grpc_resolved_addresses *addrs) { - gpr_free(addrs->addrs); + if (addrs != NULL) { + gpr_free(addrs->addrs); + } gpr_free(addrs); } static void resolve_address_impl(grpc_exec_ctx *exec_ctx, const char *name, - const char *default_port, grpc_resolve_cb cb, - void *arg) { + const char *default_port, + grpc_closure *on_done, + grpc_resolved_addresses **addrs) { request *r = gpr_malloc(sizeof(request)); grpc_closure_init(&r->request_closure, do_request_thread, r); r->name = gpr_strdup(name); r->default_port = gpr_strdup(default_port); - r->cb = cb; - r->arg = arg; - grpc_executor_enqueue(&r->request_closure, 1); + r->on_done = on_done; + r->addrs_out = addrs; + grpc_executor_push(&r->request_closure, GRPC_ERROR_NONE); } void (*grpc_resolve_address)(grpc_exec_ctx *exec_ctx, const char *name, - const char *default_port, grpc_resolve_cb cb, - void *arg) = resolve_address_impl; + const char *default_port, grpc_closure *on_done, + grpc_resolved_addresses **addrs) = + resolve_address_impl; #endif diff --git a/src/core/lib/iomgr/resolve_address_windows.c b/src/core/lib/iomgr/resolve_address_windows.c index c1bbb3db6b..2af8af82dc 100644 --- a/src/core/lib/iomgr/resolve_address_windows.c +++ b/src/core/lib/iomgr/resolve_address_windows.c @@ -56,30 +56,37 @@ typedef struct { char *name; char *default_port; - grpc_resolve_cb cb; grpc_closure request_closure; - void *arg; + grpc_closure *on_done; + grpc_resolved_addresses **addresses; } request; -static grpc_resolved_addresses *blocking_resolve_address_impl( - const char *name, const char *default_port) { +static grpc_error *blocking_resolve_address_impl( + const char *name, const char *default_port, + grpc_resolved_addresses **addresses) { struct addrinfo hints; struct addrinfo *result = NULL, *resp; char *host; char *port; int s; size_t i; - grpc_resolved_addresses *addrs = NULL; + grpc_error *error = GRPC_ERROR_NONE; /* parse name, splitting it into host and port parts */ gpr_split_host_port(name, &host, &port); if (host == NULL) { - gpr_log(GPR_ERROR, "unparseable host:port: '%s'", name); + char *msg; + gpr_asprintf(&msg, "unparseable host:port: '%s'", name); + error = GRPC_ERROR_CREATE(msg); + gpr_free(msg); goto done; } if (port == NULL) { if (default_port == NULL) { - gpr_log(GPR_ERROR, "no port in name '%s'", name); + char *msg; + gpr_asprintf(&msg, "no port in name '%s'", name); + error = GRPC_ERROR_CREATE(msg); + gpr_free(msg); goto done; } port = gpr_strdup(default_port); @@ -95,31 +102,30 @@ static grpc_resolved_addresses *blocking_resolve_address_impl( s = getaddrinfo(host, port, &hints, &result); GRPC_SCHEDULING_END_BLOCKING_REGION; if (s != 0) { - char *error_message = gpr_format_message(s); - gpr_log(GPR_ERROR, "getaddrinfo: %s", error_message); - gpr_free(error_message); + error = GRPC_WSA_ERROR(WSAGetLastError(), "getaddrinfo"); goto done; } /* Success path: set addrs non-NULL, fill it in */ - addrs = gpr_malloc(sizeof(grpc_resolved_addresses)); - addrs->naddrs = 0; + (*addresses) = gpr_malloc(sizeof(grpc_resolved_addresses)); + (*addresses)->naddrs = 0; for (resp = result; resp != NULL; resp = resp->ai_next) { - addrs->naddrs++; + (*addresses)->naddrs++; } - addrs->addrs = gpr_malloc(sizeof(grpc_resolved_address) * addrs->naddrs); + (*addresses)->addrs = + gpr_malloc(sizeof(grpc_resolved_address) * (*addresses)->naddrs); i = 0; for (resp = result; resp != NULL; resp = resp->ai_next) { - memcpy(&addrs->addrs[i].addr, resp->ai_addr, resp->ai_addrlen); - addrs->addrs[i].len = resp->ai_addrlen; + memcpy(&(*addresses)->addrs[i].addr, resp->ai_addr, resp->ai_addrlen); + (*addresses)->addrs[i].len = resp->ai_addrlen; i++; } { - for (i = 0; i < addrs->naddrs; i++) { + for (i = 0; i < (*addresses)->naddrs; i++) { char *buf; - grpc_sockaddr_to_string(&buf, (struct sockaddr *)&addrs->addrs[i].addr, - 0); + grpc_sockaddr_to_string( + &buf, (struct sockaddr *)&(*addresses)->addrs[i].addr, 0); gpr_free(buf); } } @@ -130,45 +136,53 @@ done: if (result) { freeaddrinfo(result); } - return addrs; + return error; } -grpc_resolved_addresses *(*grpc_blocking_resolve_address)( - const char *name, const char *default_port) = blocking_resolve_address_impl; +grpc_error *(*grpc_blocking_resolve_address)( + const char *name, const char *default_port, + grpc_resolved_addresses **addresses) = blocking_resolve_address_impl; /* Callback to be passed to grpc_executor to asynch-ify * grpc_blocking_resolve_address */ -static void do_request_thread(grpc_exec_ctx *exec_ctx, void *rp, bool success) { +static void do_request_thread(grpc_exec_ctx *exec_ctx, void *rp, + grpc_error *error) { request *r = rp; - grpc_resolved_addresses *resolved = - grpc_blocking_resolve_address(r->name, r->default_port); - void *arg = r->arg; - grpc_resolve_cb cb = r->cb; + if (error == GRPC_ERROR_NONE) { + error = + grpc_blocking_resolve_address(r->name, r->default_port, r->addresses); + } else { + GRPC_ERROR_REF(error); + } + grpc_exec_ctx_sched(exec_ctx, r->on_done, error, NULL); gpr_free(r->name); gpr_free(r->default_port); - cb(exec_ctx, arg, resolved); gpr_free(r); } void grpc_resolved_addresses_destroy(grpc_resolved_addresses *addrs) { - gpr_free(addrs->addrs); + if (addrs != NULL) { + gpr_free(addrs->addrs); + } gpr_free(addrs); } static void resolve_address_impl(grpc_exec_ctx *exec_ctx, const char *name, - const char *default_port, grpc_resolve_cb cb, - void *arg) { + const char *default_port, + grpc_closure *on_done, + grpc_resolved_addresses **addresses) { request *r = gpr_malloc(sizeof(request)); grpc_closure_init(&r->request_closure, do_request_thread, r); r->name = gpr_strdup(name); r->default_port = gpr_strdup(default_port); - r->cb = cb; - r->arg = arg; - grpc_executor_enqueue(&r->request_closure, 1); + r->on_done = on_done; + r->addresses = addresses; + grpc_executor_push(&r->request_closure, GRPC_ERROR_NONE); } void (*grpc_resolve_address)(grpc_exec_ctx *exec_ctx, const char *name, - const char *default_port, grpc_resolve_cb cb, - void *arg) = resolve_address_impl; + const char *default_port, grpc_closure *on_done, + grpc_resolved_addresses **addresses) = + resolve_address_impl; #endif diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index 2147c86d4d..3a1371617e 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -49,6 +49,7 @@ #include <sys/types.h> #include <unistd.h> +#include <grpc/support/alloc.h> #include <grpc/support/host_port.h> #include <grpc/support/log.h> #include <grpc/support/port_platform.h> @@ -57,10 +58,10 @@ #include "src/core/lib/support/string.h" /* set a socket to non blocking mode */ -int grpc_set_socket_nonblocking(int fd, int non_blocking) { +grpc_error *grpc_set_socket_nonblocking(int fd, int non_blocking) { int oldflags = fcntl(fd, F_GETFL, 0); if (oldflags < 0) { - return 0; + return GRPC_OS_ERROR(errno, "fcntl"); } if (non_blocking) { @@ -70,62 +71,71 @@ int grpc_set_socket_nonblocking(int fd, int non_blocking) { } if (fcntl(fd, F_SETFL, oldflags) != 0) { - return 0; + return GRPC_OS_ERROR(errno, "fcntl"); } - return 1; + return GRPC_ERROR_NONE; } -int grpc_set_socket_no_sigpipe_if_possible(int fd) { +grpc_error *grpc_set_socket_no_sigpipe_if_possible(int fd) { #ifdef GPR_HAVE_SO_NOSIGPIPE int val = 1; int newval; socklen_t intlen = sizeof(newval); - return 0 == setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, &val, sizeof(val)) && - 0 == getsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, &newval, &intlen) && - (newval != 0) == val; -#else - return 1; + if (0 != setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, &val, sizeof(val))) { + return GRPC_OS_ERROR(errno, "setsockopt(SO_NOSIGPIPE)"); + } + if (0 != getsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, &newval, &intlen)) { + return GRPC_OS_ERROR(errno, "getsockopt(SO_NOSIGPIPE)"); + } + if ((newval != 0) != (val != 0)) { + return GRPC_ERROR_CREATE("Failed to set SO_NOSIGPIPE"); + } #endif + return GRPC_ERROR_NONE; } -int grpc_set_socket_ip_pktinfo_if_possible(int fd) { +grpc_error *grpc_set_socket_ip_pktinfo_if_possible(int fd) { #ifdef GPR_HAVE_IP_PKTINFO int get_local_ip = 1; - return 0 == setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &get_local_ip, - sizeof(get_local_ip)); -#else - (void)fd; - return 1; + if (0 != setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &get_local_ip, + sizeof(get_local_ip))) { + return GRPC_OS_ERROR(errno, "setsockopt(IP_PKTINFO)"); + } #endif + return GRPC_ERROR_NONE; } -int grpc_set_socket_ipv6_recvpktinfo_if_possible(int fd) { +grpc_error *grpc_set_socket_ipv6_recvpktinfo_if_possible(int fd) { #ifdef GPR_HAVE_IPV6_RECVPKTINFO int get_local_ip = 1; - return 0 == setsockopt(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &get_local_ip, - sizeof(get_local_ip)); -#else - (void)fd; - return 1; + if (0 != setsockopt(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &get_local_ip, + sizeof(get_local_ip))) { + return GRPC_OS_ERROR(errno, "setsockopt(IPV6_RECVPKTINFO)"); + } #endif + return GRPC_ERROR_NONE; } -int grpc_set_socket_sndbuf(int fd, int buffer_size_bytes) { +grpc_error *grpc_set_socket_sndbuf(int fd, int buffer_size_bytes) { return 0 == setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &buffer_size_bytes, - sizeof(buffer_size_bytes)); + sizeof(buffer_size_bytes)) + ? GRPC_ERROR_NONE + : GRPC_OS_ERROR(errno, "setsockopt(SO_SNDBUF)"); } -int grpc_set_socket_rcvbuf(int fd, int buffer_size_bytes) { +grpc_error *grpc_set_socket_rcvbuf(int fd, int buffer_size_bytes) { return 0 == setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &buffer_size_bytes, - sizeof(buffer_size_bytes)); + sizeof(buffer_size_bytes)) + ? GRPC_ERROR_NONE + : GRPC_OS_ERROR(errno, "setsockopt(SO_RCVBUF)"); } /* set a socket to close on exec */ -int grpc_set_socket_cloexec(int fd, int close_on_exec) { +grpc_error *grpc_set_socket_cloexec(int fd, int close_on_exec) { int oldflags = fcntl(fd, F_GETFD, 0); if (oldflags < 0) { - return 0; + return GRPC_OS_ERROR(errno, "fcntl"); } if (close_on_exec) { @@ -135,30 +145,45 @@ int grpc_set_socket_cloexec(int fd, int close_on_exec) { } if (fcntl(fd, F_SETFD, oldflags) != 0) { - return 0; + return GRPC_OS_ERROR(errno, "fcntl"); } - return 1; + return GRPC_ERROR_NONE; } /* set a socket to reuse old addresses */ -int grpc_set_socket_reuse_addr(int fd, int reuse) { +grpc_error *grpc_set_socket_reuse_addr(int fd, int reuse) { int val = (reuse != 0); int newval; socklen_t intlen = sizeof(newval); - return 0 == setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) && - 0 == getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &newval, &intlen) && - (newval != 0) == val; + if (0 != setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val))) { + return GRPC_OS_ERROR(errno, "setsockopt(SO_REUSEADDR)"); + } + if (0 != getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &newval, &intlen)) { + return GRPC_OS_ERROR(errno, "getsockopt(SO_REUSEADDR)"); + } + if ((newval != 0) != val) { + return GRPC_ERROR_CREATE("Failed to set SO_REUSEADDR"); + } + + return GRPC_ERROR_NONE; } /* disable nagle */ -int grpc_set_socket_low_latency(int fd, int low_latency) { +grpc_error *grpc_set_socket_low_latency(int fd, int low_latency) { int val = (low_latency != 0); int newval; socklen_t intlen = sizeof(newval); - return 0 == setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)) && - 0 == getsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &newval, &intlen) && - (newval != 0) == val; + if (0 != setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val))) { + return GRPC_OS_ERROR(errno, "setsockopt(TCP_NODELAY)"); + } + if (0 != getsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &newval, &intlen)) { + return GRPC_OS_ERROR(errno, "getsockopt(TCP_NODELAY)"); + } + if ((newval != 0) != val) { + return GRPC_ERROR_CREATE("Failed to set TCP_NODELAY"); + } + return GRPC_ERROR_NONE; } static gpr_once g_probe_ipv6_once = GPR_ONCE_INIT; @@ -206,35 +231,47 @@ static int set_socket_dualstack(int fd) { } } -int grpc_create_dualstack_socket(const struct sockaddr *addr, int type, - int protocol, grpc_dualstack_mode *dsmode) { +static grpc_error *error_for_fd(int fd, const struct sockaddr *addr) { + if (fd >= 0) return GRPC_ERROR_NONE; + char *addr_str; + grpc_sockaddr_to_string(&addr_str, addr, 0); + grpc_error *err = grpc_error_set_str(GRPC_OS_ERROR(errno, "socket"), + GRPC_ERROR_STR_TARGET_ADDRESS, addr_str); + gpr_free(addr_str); + return err; +} + +grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type, + int protocol, + grpc_dualstack_mode *dsmode, + int *newfd) { int family = addr->sa_family; if (family == AF_INET6) { - int fd; if (grpc_ipv6_loopback_available()) { - fd = socket(family, type, protocol); + *newfd = socket(family, type, protocol); } else { - fd = -1; + *newfd = -1; errno = EAFNOSUPPORT; } /* Check if we've got a valid dualstack socket. */ - if (fd >= 0 && set_socket_dualstack(fd)) { + if (*newfd >= 0 && set_socket_dualstack(*newfd)) { *dsmode = GRPC_DSMODE_DUALSTACK; - return fd; + return GRPC_ERROR_NONE; } /* If this isn't an IPv4 address, then return whatever we've got. */ if (!grpc_sockaddr_is_v4mapped(addr, NULL)) { *dsmode = GRPC_DSMODE_IPV6; - return fd; + return error_for_fd(*newfd, addr); } /* Fall back to AF_INET. */ - if (fd >= 0) { - close(fd); + if (*newfd >= 0) { + close(*newfd); } family = AF_INET; } *dsmode = family == AF_INET ? GRPC_DSMODE_IPV4 : GRPC_DSMODE_NONE; - return socket(family, type, protocol); + *newfd = socket(family, type, protocol); + return error_for_fd(*newfd, addr); } #endif diff --git a/src/core/lib/iomgr/socket_utils_posix.h b/src/core/lib/iomgr/socket_utils_posix.h index 7e41d1c870..30ff39dfa3 100644 --- a/src/core/lib/iomgr/socket_utils_posix.h +++ b/src/core/lib/iomgr/socket_utils_posix.h @@ -37,21 +37,23 @@ #include <sys/socket.h> #include <unistd.h> +#include "src/core/lib/iomgr/error.h" + /* a wrapper for accept or accept4 */ int grpc_accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int nonblock, int cloexec); /* set a socket to non blocking mode */ -int grpc_set_socket_nonblocking(int fd, int non_blocking); +grpc_error *grpc_set_socket_nonblocking(int fd, int non_blocking); /* set a socket to close on exec */ -int grpc_set_socket_cloexec(int fd, int close_on_exec); +grpc_error *grpc_set_socket_cloexec(int fd, int close_on_exec); /* set a socket to reuse old addresses */ -int grpc_set_socket_reuse_addr(int fd, int reuse); +grpc_error *grpc_set_socket_reuse_addr(int fd, int reuse); /* disable nagle */ -int grpc_set_socket_low_latency(int fd, int low_latency); +grpc_error *grpc_set_socket_low_latency(int fd, int low_latency); /* Returns true if this system can create AF_INET6 sockets bound to ::1. The value is probed once, and cached for the life of the process. @@ -64,27 +66,22 @@ int grpc_set_socket_low_latency(int fd, int low_latency); int grpc_ipv6_loopback_available(void); /* Tries to set SO_NOSIGPIPE if available on this platform. - Returns 1 on success, 0 on failure. If SO_NO_SIGPIPE is not available, returns 1. */ -int grpc_set_socket_no_sigpipe_if_possible(int fd); +grpc_error *grpc_set_socket_no_sigpipe_if_possible(int fd); /* Tries to set IP_PKTINFO if available on this platform. - Returns 1 on success, 0 on failure. If IP_PKTINFO is not available, returns 1. */ -int grpc_set_socket_ip_pktinfo_if_possible(int fd); +grpc_error *grpc_set_socket_ip_pktinfo_if_possible(int fd); /* Tries to set IPV6_RECVPKTINFO if available on this platform. - Returns 1 on success, 0 on failure. If IPV6_RECVPKTINFO is not available, returns 1. */ -int grpc_set_socket_ipv6_recvpktinfo_if_possible(int fd); +grpc_error *grpc_set_socket_ipv6_recvpktinfo_if_possible(int fd); -/* Tries to set the socket's send buffer to given size. - Returns 1 on success, 0 on failure. */ -int grpc_set_socket_sndbuf(int fd, int buffer_size_bytes); +/* Tries to set the socket's send buffer to given size. */ +grpc_error *grpc_set_socket_sndbuf(int fd, int buffer_size_bytes); -/* Tries to set the socket's receive buffer to given size. - Returns 1 on success, 0 on failure. */ -int grpc_set_socket_rcvbuf(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); /* An enum to keep track of IPv4/IPv6 socket modes. @@ -125,7 +122,9 @@ extern int grpc_forbid_dualstack_sockets_for_testing; IPv4, so that bind() or connect() see the correct family. Also, it's important to distinguish between DUALSTACK and IPV6 when listening on the [::] wildcard address. */ -int grpc_create_dualstack_socket(const struct sockaddr *addr, int type, - int protocol, grpc_dualstack_mode *dsmode); +grpc_error *grpc_create_dualstack_socket(const struct sockaddr *addr, int type, + int protocol, + grpc_dualstack_mode *dsmode, + int *newfd); #endif /* GRPC_CORE_LIB_IOMGR_SOCKET_UTILS_POSIX_H */ diff --git a/src/core/lib/iomgr/socket_windows.c b/src/core/lib/iomgr/socket_windows.c index 7d8f9f761d..d7d5f6f157 100644 --- a/src/core/lib/iomgr/socket_windows.c +++ b/src/core/lib/iomgr/socket_windows.c @@ -91,10 +91,69 @@ void grpc_winsocket_shutdown(grpc_winsocket *winsocket) { closesocket(winsocket->socket); } -void grpc_winsocket_destroy(grpc_winsocket *winsocket) { +static void destroy(grpc_winsocket *winsocket) { grpc_iomgr_unregister_object(&winsocket->iomgr_object); gpr_mu_destroy(&winsocket->state_mu); gpr_free(winsocket); } +static bool check_destroyable(grpc_winsocket *winsocket) { + return winsocket->destroy_called == true && + winsocket->write_info.closure == NULL && + winsocket->read_info.closure == NULL; +} + +void grpc_winsocket_destroy(grpc_winsocket *winsocket) { + gpr_mu_lock(&winsocket->state_mu); + GPR_ASSERT(!winsocket->destroy_called); + winsocket->destroy_called = true; + bool should_destroy = check_destroyable(winsocket); + gpr_mu_unlock(&winsocket->state_mu); + if (should_destroy) destroy(winsocket); +} + +/* Calling notify_on_read or write means either of two things: +-) The IOCP already completed in the background, and we need to call +the callback now. +-) The IOCP hasn't completed yet, and we're queuing it for later. */ +static void socket_notify_on_iocp(grpc_exec_ctx *exec_ctx, + grpc_winsocket *socket, grpc_closure *closure, + grpc_winsocket_callback_info *info) { + GPR_ASSERT(info->closure == NULL); + gpr_mu_lock(&socket->state_mu); + if (info->has_pending_iocp) { + info->has_pending_iocp = 0; + grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_NONE, NULL); + } else { + info->closure = closure; + } + gpr_mu_unlock(&socket->state_mu); +} + +void grpc_socket_notify_on_write(grpc_exec_ctx *exec_ctx, + grpc_winsocket *socket, + grpc_closure *closure) { + socket_notify_on_iocp(exec_ctx, socket, closure, &socket->write_info); +} + +void grpc_socket_notify_on_read(grpc_exec_ctx *exec_ctx, grpc_winsocket *socket, + grpc_closure *closure) { + socket_notify_on_iocp(exec_ctx, socket, closure, &socket->read_info); +} + +void grpc_socket_become_ready(grpc_exec_ctx *exec_ctx, grpc_winsocket *socket, + grpc_winsocket_callback_info *info) { + GPR_ASSERT(!info->has_pending_iocp); + gpr_mu_lock(&socket->state_mu); + if (info->closure) { + grpc_exec_ctx_sched(exec_ctx, info->closure, GRPC_ERROR_NONE, NULL); + info->closure = NULL; + } else { + info->has_pending_iocp = 1; + } + bool should_destroy = check_destroyable(socket); + gpr_mu_unlock(&socket->state_mu); + if (should_destroy) destroy(socket); +} + #endif /* GPR_WINSOCK_SOCKET */ diff --git a/src/core/lib/iomgr/socket_windows.h b/src/core/lib/iomgr/socket_windows.h index 73c4384987..490d0e0a06 100644 --- a/src/core/lib/iomgr/socket_windows.h +++ b/src/core/lib/iomgr/socket_windows.h @@ -81,6 +81,7 @@ typedef struct grpc_winsocket_callback_info { is closer to what happens in posix world. */ typedef struct grpc_winsocket { SOCKET socket; + bool destroy_called; grpc_winsocket_callback_info write_info; grpc_winsocket_callback_info read_info; @@ -108,4 +109,16 @@ void grpc_winsocket_shutdown(grpc_winsocket *socket); /* Destroy a socket. Should only be called if there's no pending operation. */ void grpc_winsocket_destroy(grpc_winsocket *socket); +void grpc_socket_notify_on_write(grpc_exec_ctx *exec_ctx, + grpc_winsocket *winsocket, + grpc_closure *closure); + +void grpc_socket_notify_on_read(grpc_exec_ctx *exec_ctx, + grpc_winsocket *winsocket, + grpc_closure *closure); + +void grpc_socket_become_ready(grpc_exec_ctx *exec_ctx, + grpc_winsocket *winsocket, + grpc_winsocket_callback_info *ci); + #endif /* GRPC_CORE_LIB_IOMGR_SOCKET_WINDOWS_H */ diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index e93d5734a0..80c7a3f128 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -71,33 +71,39 @@ typedef struct { grpc_closure *closure; } async_connect; -static int prepare_socket(const struct sockaddr *addr, int fd) { - if (fd < 0) { - goto error; +static grpc_error *prepare_socket(const struct sockaddr *addr, int fd) { + grpc_error *err = GRPC_ERROR_NONE; + + GPR_ASSERT(fd >= 0); + + err = grpc_set_socket_nonblocking(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; + err = grpc_set_socket_cloexec(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; + if (!grpc_is_unix_socket(addr)) { + err = grpc_set_socket_low_latency(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; } - - if (!grpc_set_socket_nonblocking(fd, 1) || !grpc_set_socket_cloexec(fd, 1) || - (!grpc_is_unix_socket(addr) && !grpc_set_socket_low_latency(fd, 1)) || - !grpc_set_socket_no_sigpipe_if_possible(fd)) { - gpr_log(GPR_ERROR, "Unable to configure socket %d: %s", fd, - strerror(errno)); - goto error; - } - return 1; + err = grpc_set_socket_no_sigpipe_if_possible(fd); + if (err != GRPC_ERROR_NONE) goto error; + goto done; error: if (fd >= 0) { close(fd); } - return 0; +done: + return err; } -static void tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, bool success) { +static void tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { int done; async_connect *ac = acp; if (grpc_tcp_trace) { - gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: on_alarm: success=%d", ac->addr_str, - success); + const char *str = grpc_error_string(error); + gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: on_alarm: error=%s", ac->addr_str, + str); + grpc_error_free_string(str); } gpr_mu_lock(&ac->mu); if (ac->fd != NULL) { @@ -112,7 +118,7 @@ static void tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, bool success) { } } -static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, bool success) { +static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { async_connect *ac = acp; int so_error = 0; socklen_t so_error_size; @@ -122,9 +128,13 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, bool success) { grpc_closure *closure = ac->closure; grpc_fd *fd; + GRPC_ERROR_REF(error); + if (grpc_tcp_trace) { - gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: on_writable: success=%d", - ac->addr_str, success); + const char *str = grpc_error_string(error); + gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: on_writable: error=%s", + ac->addr_str, str); + grpc_error_free_string(str); } gpr_mu_lock(&ac->mu); @@ -136,15 +146,14 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, bool success) { grpc_timer_cancel(exec_ctx, &ac->alarm); gpr_mu_lock(&ac->mu); - if (success) { + if (error == GRPC_ERROR_NONE) { do { so_error_size = sizeof(so_error); err = getsockopt(grpc_fd_wrapped_fd(fd), SOL_SOCKET, SO_ERROR, &so_error, &so_error_size); } while (err < 0 && errno == EINTR); if (err < 0) { - gpr_log(GPR_ERROR, "failed to connect to '%s': getsockopt(ERROR): %s", - ac->addr_str, strerror(errno)); + error = GRPC_OS_ERROR(errno, "getsockopt"); goto finish; } else if (so_error != 0) { if (so_error == ENOBUFS) { @@ -169,14 +178,12 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, bool success) { } else { switch (so_error) { case ECONNREFUSED: - gpr_log( - GPR_ERROR, - "failed to connect to '%s': socket error: connection refused", - ac->addr_str); + error = grpc_error_set_int(error, GRPC_ERROR_INT_ERRNO, errno); + error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + "Connection refused"); break; default: - gpr_log(GPR_ERROR, "failed to connect to '%s': socket error: %d", - ac->addr_str, so_error); + error = GRPC_OS_ERROR(errno, "getsockopt(SO_ERROR)"); break; } goto finish; @@ -188,8 +195,8 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, bool success) { goto finish; } } else { - gpr_log(GPR_ERROR, "failed to connect to '%s': timeout occurred", - ac->addr_str); + error = + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, "Timeout occurred"); goto finish; } @@ -203,12 +210,18 @@ finish: } done = (--ac->refs == 0); gpr_mu_unlock(&ac->mu); + if (error != GRPC_ERROR_NONE) { + error = grpc_error_set_str(error, GRPC_ERROR_STR_DESCRIPTION, + "Failed to connect to remote host"); + error = + grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, ac->addr_str); + } if (done) { gpr_mu_destroy(&ac->mu); gpr_free(ac->addr_str); gpr_free(ac); } - grpc_exec_ctx_enqueue(exec_ctx, closure, *ep != NULL, NULL); + grpc_exec_ctx_sched(exec_ctx, closure, error, NULL); } static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, @@ -225,6 +238,7 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, grpc_fd *fdobj; char *name; char *addr_str; + grpc_error *error; *ep = NULL; @@ -234,9 +248,10 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, addr_len = sizeof(addr6_v4mapped); } - fd = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode); - if (fd < 0) { - gpr_log(GPR_ERROR, "Unable to create socket: %s", strerror(errno)); + error = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd); + if (error != GRPC_ERROR_NONE) { + grpc_exec_ctx_sched(exec_ctx, closure, error, NULL); + return; } if (dsmode == GRPC_DSMODE_IPV4) { /* If we got an AF_INET socket, map the address back to IPv4. */ @@ -244,8 +259,8 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, addr = (struct sockaddr *)&addr4_copy; addr_len = sizeof(addr4_copy); } - if (!prepare_socket(addr, fd)) { - grpc_exec_ctx_enqueue(exec_ctx, closure, false, NULL); + if ((error = prepare_socket(addr, fd)) != GRPC_ERROR_NONE) { + grpc_exec_ctx_sched(exec_ctx, closure, error, NULL); return; } @@ -261,14 +276,14 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, if (err >= 0) { *ep = grpc_tcp_create(fdobj, GRPC_TCP_DEFAULT_READ_SLICE_SIZE, addr_str); - grpc_exec_ctx_enqueue(exec_ctx, closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, closure, GRPC_ERROR_NONE, NULL); goto done; } if (errno != EWOULDBLOCK && errno != EINPROGRESS) { - gpr_log(GPR_ERROR, "connect error to '%s': %s", addr_str, strerror(errno)); grpc_fd_orphan(exec_ctx, fdobj, NULL, NULL, "tcp_client_connect_error"); - grpc_exec_ctx_enqueue(exec_ctx, closure, false, NULL); + grpc_exec_ctx_sched(exec_ctx, closure, GRPC_OS_ERROR(errno, "connect"), + NULL); goto done; } diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index efa0140f54..562cb9c6bf 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -75,23 +75,25 @@ static void async_connect_unlock_and_cleanup(async_connect *ac, if (socket != NULL) grpc_winsocket_destroy(socket); } -static void on_alarm(grpc_exec_ctx *exec_ctx, void *acp, bool occured) { +static void on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { async_connect *ac = acp; gpr_mu_lock(&ac->mu); - if (ac->socket != NULL) { - grpc_winsocket_shutdown(ac->socket); + grpc_winsocket *socket = ac->socket; + ac->socket = NULL; + if (socket != NULL) { + grpc_winsocket_shutdown(socket); } - async_connect_unlock_and_cleanup(ac, ac->socket); + async_connect_unlock_and_cleanup(ac, socket); } -static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, bool from_iocp) { +static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { async_connect *ac = acp; - SOCKET sock = ac->socket->socket; grpc_endpoint **ep = ac->endpoint; GPR_ASSERT(*ep == NULL); - grpc_winsocket_callback_info *info = &ac->socket->write_info; grpc_closure *on_done = ac->on_done; + GRPC_ERROR_REF(error); + gpr_mu_lock(&ac->mu); grpc_winsocket *socket = ac->socket; ac->socket = NULL; @@ -101,17 +103,15 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, bool from_iocp) { gpr_mu_lock(&ac->mu); - if (from_iocp && socket != NULL) { + if (error == GRPC_ERROR_NONE && socket != NULL) { DWORD transfered_bytes = 0; DWORD flags; - BOOL wsa_success = WSAGetOverlappedResult(sock, &info->overlapped, - &transfered_bytes, FALSE, &flags); + BOOL wsa_success = + WSAGetOverlappedResult(socket->socket, &socket->write_info.overlapped, + &transfered_bytes, FALSE, &flags); GPR_ASSERT(transfered_bytes == 0); if (!wsa_success) { - char *utf8_message = gpr_format_message(WSAGetLastError()); - gpr_log(GPR_ERROR, "on_connect error connecting to '%s': %s", - ac->addr_name, utf8_message); - gpr_free(utf8_message); + error = GRPC_WSA_ERROR(WSAGetLastError(), "ConnectEx"); } else { *ep = grpc_tcp_create(socket, ac->addr_name); socket = NULL; @@ -121,7 +121,7 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, bool from_iocp) { async_connect_unlock_and_cleanup(ac, socket); /* If the connection was aborted, the callback was already called when the deadline was met. */ - on_done->cb(exec_ctx, on_done->cb_arg, *ep != NULL); + grpc_exec_ctx_sched(exec_ctx, on_done, error, NULL); } /* Tries to issue one async connection, then schedules both an IOCP @@ -141,10 +141,8 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, LPFN_CONNECTEX ConnectEx; GUID guid = WSAID_CONNECTEX; DWORD ioctl_num_bytes; - const char *message = NULL; - char *utf8_message; grpc_winsocket_callback_info *info; - int last_error; + grpc_error *error = GRPC_ERROR_NONE; *endpoint = NULL; @@ -157,12 +155,12 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED); if (sock == INVALID_SOCKET) { - message = "Unable to create socket: %s"; + error = GRPC_WSA_ERROR(WSAGetLastError(), "WSASocket"); goto failure; } - if (!grpc_tcp_prepare_socket(sock)) { - message = "Unable to set socket options: %s"; + error = grpc_tcp_prepare_socket(sock); + if (error != GRPC_ERROR_NONE) { goto failure; } @@ -173,7 +171,8 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, &ConnectEx, sizeof(ConnectEx), &ioctl_num_bytes, NULL, NULL); if (status != 0) { - message = "Unable to retrieve ConnectEx pointer: %s"; + error = GRPC_WSA_ERROR(WSAGetLastError(), + "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER)"); goto failure; } @@ -181,7 +180,7 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, status = bind(sock, (struct sockaddr *)&local_address, sizeof(local_address)); if (status != 0) { - message = "Unable to bind socket: %s"; + error = GRPC_WSA_ERROR(WSAGetLastError(), "bind"); goto failure; } @@ -193,9 +192,9 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, /* It wouldn't be unusual to get a success immediately. But we'll still get an IOCP notification, so let's ignore it. */ if (!success) { - int error = WSAGetLastError(); - if (error != ERROR_IO_PENDING) { - message = "ConnectEx failed: %s"; + int last_error = WSAGetLastError(); + if (last_error != ERROR_IO_PENDING) { + error = GRPC_WSA_ERROR(last_error, "ConnectEx"); goto failure; } } @@ -215,17 +214,18 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, return; failure: - last_error = WSAGetLastError(); - utf8_message = gpr_format_message(last_error); - gpr_log(GPR_ERROR, message, utf8_message); - gpr_log(GPR_ERROR, "last error = %d", last_error); - gpr_free(utf8_message); + GPR_ASSERT(error != GRPC_ERROR_NONE); + char *target_uri = grpc_sockaddr_to_uri(addr); + grpc_error *final_error = grpc_error_set_str( + GRPC_ERROR_CREATE_REFERENCING("Failed to connect", &error, 1), + GRPC_ERROR_STR_TARGET_ADDRESS, target_uri); + GRPC_ERROR_UNREF(error); if (socket != NULL) { grpc_winsocket_destroy(socket); } else if (sock != INVALID_SOCKET) { closesocket(sock); } - grpc_exec_ctx_enqueue(exec_ctx, on_done, false, NULL); + grpc_exec_ctx_sched(exec_ctx, on_done, final_error, NULL); } #endif /* GPR_WINSOCK_SOCKET */ diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index e2869224f1..017f52c367 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -38,6 +38,7 @@ #include "src/core/lib/iomgr/tcp_posix.h" #include <errno.h> +#include <stdbool.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> @@ -74,7 +75,7 @@ typedef struct { grpc_endpoint base; grpc_fd *em_fd; int fd; - int finished_edge; + bool finished_edge; msg_iovlen_type iov_size; /* Number of slices to allocate per read attempt */ size_t slice_size; gpr_refcount refcount; @@ -101,9 +102,9 @@ typedef struct { } grpc_tcp; static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, - bool success); + grpc_error *error); static void tcp_handle_write(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, - bool success); + grpc_error *error); static void tcp_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; @@ -155,12 +156,15 @@ static void tcp_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { TCP_UNREF(exec_ctx, tcp, "destroy"); } -static void call_read_cb(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, int success) { +static void call_read_cb(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, + grpc_error *error) { grpc_closure *cb = tcp->read_cb; - if (grpc_tcp_trace) { + if (false && grpc_tcp_trace) { size_t i; - gpr_log(GPR_DEBUG, "read: success=%d", success); + const char *str = grpc_error_string(error); + gpr_log(GPR_DEBUG, "read: error=%s", str); + grpc_error_free_string(str); for (i = 0; i < tcp->incoming_buffer->count; i++) { char *dump = gpr_dump_slice(tcp->incoming_buffer->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII); @@ -171,7 +175,7 @@ static void call_read_cb(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, int success) { tcp->read_cb = NULL; tcp->incoming_buffer = NULL; - cb->cb(exec_ctx, cb->cb_arg, success); + grpc_exec_ctx_sched(exec_ctx, cb, error, NULL); } #define MAX_READ_IOVEC 4 @@ -219,15 +223,14 @@ static void tcp_continue_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { /* We've consumed the edge, request a new one */ grpc_fd_notify_on_read(exec_ctx, tcp->em_fd, &tcp->read_closure); } else { - /* TODO(klempner): Log interesting errors */ gpr_slice_buffer_reset_and_unref(tcp->incoming_buffer); - call_read_cb(exec_ctx, tcp, 0); + call_read_cb(exec_ctx, tcp, GRPC_OS_ERROR(errno, "recvmsg")); TCP_UNREF(exec_ctx, tcp, "read"); } } else if (read_bytes == 0) { /* 0 read size ==> end of stream */ gpr_slice_buffer_reset_and_unref(tcp->incoming_buffer); - call_read_cb(exec_ctx, tcp, 0); + call_read_cb(exec_ctx, tcp, GRPC_ERROR_CREATE("EOF")); TCP_UNREF(exec_ctx, tcp, "read"); } else { GPR_ASSERT((size_t)read_bytes <= tcp->incoming_buffer->length); @@ -240,7 +243,7 @@ static void tcp_continue_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { ++tcp->iov_size; } GPR_ASSERT((size_t)read_bytes == tcp->incoming_buffer->length); - call_read_cb(exec_ctx, tcp, 1); + call_read_cb(exec_ctx, tcp, GRPC_ERROR_NONE); TCP_UNREF(exec_ctx, tcp, "read"); } @@ -248,13 +251,13 @@ static void tcp_continue_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { } static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, - bool success) { + grpc_error *error) { grpc_tcp *tcp = (grpc_tcp *)arg; GPR_ASSERT(!tcp->finished_edge); - if (!success) { + if (error != GRPC_ERROR_NONE) { gpr_slice_buffer_reset_and_unref(tcp->incoming_buffer); - call_read_cb(exec_ctx, tcp, 0); + call_read_cb(exec_ctx, tcp, GRPC_ERROR_REF(error)); TCP_UNREF(exec_ctx, tcp, "read"); } else { tcp_continue_read(exec_ctx, tcp); @@ -271,17 +274,16 @@ static void tcp_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, gpr_slice_buffer_swap(incoming_buffer, &tcp->last_read_buffer); TCP_REF(tcp, "read"); if (tcp->finished_edge) { - tcp->finished_edge = 0; + tcp->finished_edge = false; grpc_fd_notify_on_read(exec_ctx, tcp->em_fd, &tcp->read_closure); } else { - grpc_exec_ctx_enqueue(exec_ctx, &tcp->read_closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &tcp->read_closure, GRPC_ERROR_NONE, NULL); } } -typedef enum { FLUSH_DONE, FLUSH_PENDING, FLUSH_ERROR } flush_result; - +/* returns true if done, false if pending; if returning true, *error is set */ #define MAX_WRITE_IOVEC 16 -static flush_result tcp_flush(grpc_tcp *tcp) { +static bool tcp_flush(grpc_tcp *tcp, grpc_error **error) { struct msghdr msg; struct iovec iov[MAX_WRITE_IOVEC]; msg_iovlen_type iov_size; @@ -331,10 +333,10 @@ static flush_result tcp_flush(grpc_tcp *tcp) { if (errno == EAGAIN) { tcp->outgoing_slice_idx = unwind_slice_idx; tcp->outgoing_byte_idx = unwind_byte_idx; - return FLUSH_PENDING; + return false; } else { - /* TODO(klempner): Log some of these */ - return FLUSH_ERROR; + *error = GRPC_OS_ERROR(errno, "sendmsg"); + return true; } } @@ -355,44 +357,44 @@ static flush_result tcp_flush(grpc_tcp *tcp) { } if (tcp->outgoing_slice_idx == tcp->outgoing_buffer->count) { - return FLUSH_DONE; + *error = GRPC_ERROR_NONE; + return true; } }; } static void tcp_handle_write(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, - bool success) { + grpc_error *error) { grpc_tcp *tcp = (grpc_tcp *)arg; - flush_result status; grpc_closure *cb; - if (!success) { + if (error != GRPC_ERROR_NONE) { cb = tcp->write_cb; tcp->write_cb = NULL; - cb->cb(exec_ctx, cb->cb_arg, 0); + cb->cb(exec_ctx, cb->cb_arg, error); TCP_UNREF(exec_ctx, tcp, "write"); return; } - status = tcp_flush(tcp); - if (status == FLUSH_PENDING) { + if (!tcp_flush(tcp, &error)) { grpc_fd_notify_on_write(exec_ctx, tcp->em_fd, &tcp->write_closure); } else { cb = tcp->write_cb; tcp->write_cb = NULL; GPR_TIMER_BEGIN("tcp_handle_write.cb", 0); - cb->cb(exec_ctx, cb->cb_arg, status == FLUSH_DONE); + cb->cb(exec_ctx, cb->cb_arg, error); GPR_TIMER_END("tcp_handle_write.cb", 0); TCP_UNREF(exec_ctx, tcp, "write"); + GRPC_ERROR_UNREF(error); } } static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, gpr_slice_buffer *buf, grpc_closure *cb) { grpc_tcp *tcp = (grpc_tcp *)ep; - flush_result status; + grpc_error *error = GRPC_ERROR_NONE; - if (grpc_tcp_trace) { + if (false && grpc_tcp_trace) { size_t i; for (i = 0; i < buf->count; i++) { @@ -408,20 +410,22 @@ static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, if (buf->length == 0) { GPR_TIMER_END("tcp_write", 0); - grpc_exec_ctx_enqueue(exec_ctx, cb, true, NULL); + grpc_exec_ctx_sched(exec_ctx, cb, grpc_fd_is_shutdown(tcp->em_fd) + ? GRPC_ERROR_CREATE("EOF") + : GRPC_ERROR_NONE, + NULL); return; } tcp->outgoing_buffer = buf; tcp->outgoing_slice_idx = 0; tcp->outgoing_byte_idx = 0; - status = tcp_flush(tcp); - if (status == FLUSH_PENDING) { + if (!tcp_flush(tcp, &error)) { TCP_REF(tcp, "write"); tcp->write_cb = cb; grpc_fd_notify_on_write(exec_ctx, tcp->em_fd, &tcp->write_closure); } else { - grpc_exec_ctx_enqueue(exec_ctx, cb, status == FLUSH_DONE, NULL); + grpc_exec_ctx_sched(exec_ctx, cb, error, NULL); } GPR_TIMER_END("tcp_write", 0); @@ -461,7 +465,7 @@ grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, size_t slice_size, tcp->incoming_buffer = NULL; tcp->slice_size = slice_size; tcp->iov_size = 1; - tcp->finished_edge = 1; + tcp->finished_edge = true; /* paired with unref in grpc_tcp_destroy */ gpr_ref_init(&tcp->refcount, 1); tcp->em_fd = em_fd; diff --git a/src/core/lib/iomgr/tcp_server.h b/src/core/lib/iomgr/tcp_server.h index fee14ae661..1d6e70dbe9 100644 --- a/src/core/lib/iomgr/tcp_server.h +++ b/src/core/lib/iomgr/tcp_server.h @@ -58,7 +58,8 @@ typedef void (*grpc_tcp_server_cb)(grpc_exec_ctx *exec_ctx, void *arg, /* Create a server, initially not bound to any ports. The caller owns one ref. If shutdown_complete is not NULL, it will be used by grpc_tcp_server_unref() when the ref count reaches zero. */ -grpc_tcp_server *grpc_tcp_server_create(grpc_closure *shutdown_complete); +grpc_error *grpc_tcp_server_create(grpc_closure *shutdown_complete, + grpc_tcp_server **server); /* Start listening to bound ports */ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *server, @@ -74,8 +75,8 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *server, but not dualstack sockets. */ /* TODO(ctiller): deprecate this, and make grpc_tcp_server_add_ports to handle all of the multiple socket port matching logic in one place */ -int grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, - size_t addr_len); +grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, + size_t addr_len, int *out_port); /* Number of fds at the given port_index, or 0 if port_index is out of bounds. */ diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index 909e34abc7..6fb547bb36 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -59,6 +59,8 @@ #include <grpc/support/string_util.h> #include <grpc/support/sync.h> #include <grpc/support/time.h> +#include <grpc/support/useful.h> + #include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/iomgr/socket_utils_posix.h" @@ -133,7 +135,8 @@ struct grpc_tcp_server { size_t next_pollset_to_assign; }; -grpc_tcp_server *grpc_tcp_server_create(grpc_closure *shutdown_complete) { +grpc_error *grpc_tcp_server_create(grpc_closure *shutdown_complete, + grpc_tcp_server **server) { grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server)); gpr_ref_init(&s->refs, 1); gpr_mu_init(&s->mu); @@ -149,12 +152,13 @@ grpc_tcp_server *grpc_tcp_server_create(grpc_closure *shutdown_complete) { s->tail = NULL; s->nports = 0; s->next_pollset_to_assign = 0; - return s; + *server = s; + return GRPC_ERROR_NONE; } static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { if (s->shutdown_complete != NULL) { - grpc_exec_ctx_enqueue(exec_ctx, s->shutdown_complete, true, NULL); + grpc_exec_ctx_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE, NULL); } gpr_mu_destroy(&s->mu); @@ -169,7 +173,7 @@ static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { } static void destroyed_port(grpc_exec_ctx *exec_ctx, void *server, - bool success) { + grpc_error *error) { grpc_tcp_server *s = server; gpr_mu_lock(&s->mu); s->destroyed_ports++; @@ -263,61 +267,68 @@ static int get_max_accept_queue_size(void) { } /* Prepare a recently-created socket for listening. */ -static int prepare_socket(int fd, const struct sockaddr *addr, - size_t addr_len) { +static grpc_error *prepare_socket(int fd, const struct sockaddr *addr, + size_t addr_len, int *port) { struct sockaddr_storage sockname_temp; socklen_t sockname_len; - - if (fd < 0) { - goto error; - } - - if (!grpc_set_socket_nonblocking(fd, 1) || !grpc_set_socket_cloexec(fd, 1) || - (!grpc_is_unix_socket(addr) && (!grpc_set_socket_low_latency(fd, 1) || - !grpc_set_socket_reuse_addr(fd, 1))) || - !grpc_set_socket_no_sigpipe_if_possible(fd)) { - gpr_log(GPR_ERROR, "Unable to configure socket %d: %s", fd, - strerror(errno)); - goto error; + grpc_error *err = GRPC_ERROR_NONE; + + GPR_ASSERT(fd >= 0); + + err = grpc_set_socket_nonblocking(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; + err = grpc_set_socket_cloexec(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; + if (!grpc_is_unix_socket(addr)) { + err = grpc_set_socket_low_latency(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; + err = grpc_set_socket_reuse_addr(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; } + err = grpc_set_socket_no_sigpipe_if_possible(fd); + if (err != GRPC_ERROR_NONE) goto error; GPR_ASSERT(addr_len < ~(socklen_t)0); if (bind(fd, addr, (socklen_t)addr_len) < 0) { - char *addr_str; - grpc_sockaddr_to_string(&addr_str, addr, 0); - gpr_log(GPR_ERROR, "bind addr=%s: %s", addr_str, strerror(errno)); - gpr_free(addr_str); + err = GRPC_OS_ERROR(errno, "bind"); goto error; } if (listen(fd, get_max_accept_queue_size()) < 0) { - gpr_log(GPR_ERROR, "listen: %s", strerror(errno)); + err = GRPC_OS_ERROR(errno, "listen"); goto error; } sockname_len = sizeof(sockname_temp); if (getsockname(fd, (struct sockaddr *)&sockname_temp, &sockname_len) < 0) { + err = GRPC_OS_ERROR(errno, "getsockname"); goto error; } - return grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + return GRPC_ERROR_NONE; error: + GPR_ASSERT(err != GRPC_ERROR_NONE); if (fd >= 0) { close(fd); } - return -1; + grpc_error *ret = grpc_error_set_int( + GRPC_ERROR_CREATE_REFERENCING("Unable to configure socket", &err, 1), + GRPC_ERROR_INT_FD, fd); + GRPC_ERROR_UNREF(err); + return ret; } /* event manager callback when reads are ready */ -static void on_read(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) { grpc_tcp_listener *sp = arg; grpc_tcp_server_acceptor acceptor = {sp->server, sp->port_index, sp->fd_index}; grpc_pollset *read_notifier_pollset = NULL; grpc_fd *fdobj; - if (!success) { + if (err != GRPC_ERROR_NONE) { goto error; } @@ -386,18 +397,19 @@ error: } } -static grpc_tcp_listener *add_socket_to_server(grpc_tcp_server *s, int fd, - const struct sockaddr *addr, - size_t addr_len, - unsigned port_index, - unsigned fd_index) { +static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd, + const struct sockaddr *addr, + size_t addr_len, unsigned port_index, + unsigned fd_index, + grpc_tcp_listener **listener) { grpc_tcp_listener *sp = NULL; - int port; + int port = -1; char *addr_str; char *name; - port = prepare_socket(fd, addr, addr_len); - if (port >= 0) { + grpc_error *err = prepare_socket(fd, addr, addr_len, &port); + if (err == GRPC_ERROR_NONE) { + GPR_ASSERT(port > 0); grpc_sockaddr_to_string(&addr_str, (struct sockaddr *)&addr, 1); gpr_asprintf(&name, "tcp-server-listener:%s", addr_str); gpr_mu_lock(&s->mu); @@ -427,11 +439,12 @@ static grpc_tcp_listener *add_socket_to_server(grpc_tcp_server *s, int fd, gpr_free(name); } - return sp; + *listener = sp; + return err; } -int grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, - size_t addr_len) { +grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, + size_t addr_len, int *out_port) { grpc_tcp_listener *sp; grpc_tcp_listener *sp2 = NULL; int fd; @@ -446,6 +459,7 @@ int grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, int port; unsigned port_index = 0; unsigned fd_index = 0; + grpc_error *errs[2] = {GRPC_ERROR_NONE, GRPC_ERROR_NONE}; if (s->tail != NULL) { port_index = s->tail->port_index + 1; } @@ -484,33 +498,35 @@ int grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, /* Try listening on IPv6 first. */ addr = (struct sockaddr *)&wild6; addr_len = sizeof(wild6); - fd = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode); - sp = add_socket_to_server(s, fd, addr, addr_len, port_index, fd_index); - if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) { - goto done; - } - if (sp != NULL) { - ++fd_index; - } - /* If we didn't get a dualstack socket, also listen on 0.0.0.0. */ - if (port == 0 && sp != NULL) { - grpc_sockaddr_set_port((struct sockaddr *)&wild4, sp->port); + errs[0] = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd); + if (errs[0] == GRPC_ERROR_NONE) { + errs[0] = add_socket_to_server(s, fd, addr, addr_len, port_index, + fd_index, &sp); + if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) { + goto done; + } + if (sp != NULL) { + ++fd_index; + } + /* If we didn't get a dualstack socket, also listen on 0.0.0.0. */ + if (port == 0 && sp != NULL) { + grpc_sockaddr_set_port((struct sockaddr *)&wild4, sp->port); + } } addr = (struct sockaddr *)&wild4; addr_len = sizeof(wild4); } - fd = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode); - if (fd < 0) { - gpr_log(GPR_ERROR, "Unable to create socket: %s", strerror(errno)); - } else { + errs[1] = grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, &dsmode, &fd); + if (errs[1] == GRPC_ERROR_NONE) { if (dsmode == GRPC_DSMODE_IPV4 && grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) { addr = (struct sockaddr *)&addr4_copy; addr_len = sizeof(addr4_copy); } sp2 = sp; - sp = add_socket_to_server(s, fd, addr, addr_len, port_index, fd_index); + errs[1] = + add_socket_to_server(s, fd, addr, addr_len, port_index, fd_index, &sp); if (sp2 != NULL && sp != NULL) { sp2->sibling = sp; sp->is_sibling = 1; @@ -520,9 +536,21 @@ int grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, done: gpr_free(allocated_addr); if (sp != NULL) { - return sp->port; + *out_port = sp->port; + GRPC_ERROR_UNREF(errs[0]); + GRPC_ERROR_UNREF(errs[1]); + return GRPC_ERROR_NONE; } else { - return -1; + *out_port = -1; + char *addr_str = grpc_sockaddr_to_uri(addr); + grpc_error *err = grpc_error_set_str( + GRPC_ERROR_CREATE_REFERENCING("Failed to add port to server", errs, + GPR_ARRAY_SIZE(errs)), + GRPC_ERROR_STR_TARGET_ADDRESS, addr_str); + GRPC_ERROR_UNREF(errs[0]); + GRPC_ERROR_UNREF(errs[1]); + gpr_free(addr_str); + return err; } } @@ -591,7 +619,8 @@ grpc_tcp_server *grpc_tcp_server_ref(grpc_tcp_server *s) { void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server *s, grpc_closure *shutdown_starting) { gpr_mu_lock(&s->mu); - grpc_closure_list_add(&s->shutdown_starting, shutdown_starting, 1); + grpc_closure_list_append(&s->shutdown_starting, shutdown_starting, + GRPC_ERROR_NONE); gpr_mu_unlock(&s->mu); } diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c index 8a21d930c8..2a51671ec7 100644 --- a/src/core/lib/iomgr/tcp_server_windows.c +++ b/src/core/lib/iomgr/tcp_server_windows.c @@ -102,7 +102,8 @@ struct grpc_tcp_server { /* Public function. Allocates the proper data structures to hold a grpc_tcp_server. */ -grpc_tcp_server *grpc_tcp_server_create(grpc_closure *shutdown_complete) { +grpc_error *grpc_tcp_server_create(grpc_closure *shutdown_complete, + grpc_tcp_server **server) { grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server)); gpr_ref_init(&s->refs, 1); gpr_mu_init(&s->mu); @@ -114,12 +115,13 @@ grpc_tcp_server *grpc_tcp_server_create(grpc_closure *shutdown_complete) { s->shutdown_starting.head = NULL; s->shutdown_starting.tail = NULL; s->shutdown_complete = shutdown_complete; - return s; + *server = s; + return GRPC_ERROR_NONE; } static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { if (s->shutdown_complete != NULL) { - grpc_exec_ctx_enqueue(exec_ctx, s->shutdown_complete, true, NULL); + grpc_exec_ctx_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE, NULL); } /* Now that the accepts have been aborted, we can destroy the sockets. @@ -143,7 +145,8 @@ grpc_tcp_server *grpc_tcp_server_ref(grpc_tcp_server *s) { void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server *s, grpc_closure *shutdown_starting) { gpr_mu_lock(&s->mu); - grpc_closure_list_add(&s->shutdown_starting, shutdown_starting, 1); + grpc_closure_list_append(&s->shutdown_starting, shutdown_starting, + GRPC_ERROR_NONE); gpr_mu_unlock(&s->mu); } @@ -187,51 +190,49 @@ void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { } /* Prepare (bind) a recently-created socket for listening. */ -static int prepare_socket(SOCKET sock, const struct sockaddr *addr, - size_t addr_len) { +static grpc_error *prepare_socket(SOCKET sock, const struct sockaddr *addr, + size_t addr_len, int *port) { struct sockaddr_storage sockname_temp; socklen_t sockname_len; + grpc_error *error = GRPC_ERROR_NONE; - if (sock == INVALID_SOCKET) goto error; - - if (!grpc_tcp_prepare_socket(sock)) { - char *utf8_message = gpr_format_message(WSAGetLastError()); - gpr_log(GPR_ERROR, "Unable to prepare socket: %s", utf8_message); - gpr_free(utf8_message); - goto error; + error = grpc_tcp_prepare_socket(sock); + if (error != GRPC_ERROR_NONE) { + goto failure; } if (bind(sock, addr, (int)addr_len) == SOCKET_ERROR) { - char *addr_str; - char *utf8_message = gpr_format_message(WSAGetLastError()); - grpc_sockaddr_to_string(&addr_str, addr, 0); - gpr_log(GPR_ERROR, "bind addr=%s: %s", addr_str, utf8_message); - gpr_free(utf8_message); - gpr_free(addr_str); - goto error; + error = GRPC_WSA_ERROR(WSAGetLastError(), "bind"); + goto failure; } if (listen(sock, SOMAXCONN) == SOCKET_ERROR) { - char *utf8_message = gpr_format_message(WSAGetLastError()); - gpr_log(GPR_ERROR, "listen: %s", utf8_message); - gpr_free(utf8_message); - goto error; + error = GRPC_WSA_ERROR(WSAGetLastError(), "listen"); + goto failure; } sockname_len = sizeof(sockname_temp); if (getsockname(sock, (struct sockaddr *)&sockname_temp, &sockname_len) == SOCKET_ERROR) { - char *utf8_message = gpr_format_message(WSAGetLastError()); - gpr_log(GPR_ERROR, "getsockname: %s", utf8_message); - gpr_free(utf8_message); - goto error; + error = GRPC_WSA_ERROR(WSAGetLastError(), "getsockname"); + goto failure; } - return grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + return GRPC_ERROR_NONE; -error: +failure: + GPR_ASSERT(error != GRPC_ERROR_NONE); + char *tgtaddr = grpc_sockaddr_to_uri(addr); + grpc_error *final_error = grpc_error_set_int( + grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING( + "Failed to prepare server socket", &error, 1), + GRPC_ERROR_STR_TARGET_ADDRESS, tgtaddr), + GRPC_ERROR_INT_FD, (intptr_t)sock); + gpr_free(tgtaddr); + GRPC_ERROR_UNREF(error); if (sock != INVALID_SOCKET) closesocket(sock); - return -1; + return error; } static void decrement_active_ports_and_notify(grpc_exec_ctx *exec_ctx, @@ -251,26 +252,23 @@ static void decrement_active_ports_and_notify(grpc_exec_ctx *exec_ctx, /* In order to do an async accept, we need to create a socket first which will be the one assigned to the new incoming connection. */ -static void start_accept(grpc_exec_ctx *exec_ctx, grpc_tcp_listener *port) { +static grpc_error *start_accept(grpc_exec_ctx *exec_ctx, + grpc_tcp_listener *port) { SOCKET sock = INVALID_SOCKET; - char *message; - char *utf8_message; BOOL success; DWORD addrlen = sizeof(struct sockaddr_in6) + 16; DWORD bytes_received = 0; + grpc_error *error = GRPC_ERROR_NONE; sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED); - if (sock == INVALID_SOCKET) { - message = "Unable to create socket: %s"; + error = GRPC_WSA_ERROR(WSAGetLastError(), "WSASocket"); goto failure; } - if (!grpc_tcp_prepare_socket(sock)) { - message = "Unable to prepare socket: %s"; - goto failure; - } + error = grpc_tcp_prepare_socket(sock); + if (error != GRPC_ERROR_NONE) goto failure; /* Start the "accept" asynchronously. */ success = port->AcceptEx(port->socket->socket, sock, port->addresses, 0, @@ -280,9 +278,9 @@ static void start_accept(grpc_exec_ctx *exec_ctx, grpc_tcp_listener *port) { /* It is possible to get an accept immediately without delay. However, we will still get an IOCP notification for it. So let's just ignore it. */ if (!success) { - int error = WSAGetLastError(); - if (error != ERROR_IO_PENDING) { - message = "AcceptEx failed: %s"; + int last_error = WSAGetLastError(); + if (last_error != ERROR_IO_PENDING) { + error = GRPC_WSA_ERROR(last_error, "AcceptEx"); goto failure; } } @@ -291,9 +289,10 @@ static void start_accept(grpc_exec_ctx *exec_ctx, grpc_tcp_listener *port) { immediately process an accept that happened in the meantime. */ port->new_socket = sock; grpc_socket_notify_on_read(exec_ctx, port->socket, &port->on_accept); - return; + return error; failure: + GPR_ASSERT(error != GRPC_ERROR_NONE); if (port->shutting_down) { /* We are abandoning the listener port, take that into account to prevent occasional hangs on shutdown. The hang happens when sp->shutting_down @@ -301,16 +300,15 @@ failure: but we fail there because the listening port has been closed in the meantime. */ decrement_active_ports_and_notify(exec_ctx, port); - return; + GRPC_ERROR_UNREF(error); + return GRPC_ERROR_NONE; } - utf8_message = gpr_format_message(WSAGetLastError()); - gpr_log(GPR_ERROR, message, utf8_message); - gpr_free(utf8_message); if (sock != INVALID_SOCKET) closesocket(sock); + return error; } /* Event manager callback when reads are ready. */ -static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, bool from_iocp) { +static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { grpc_tcp_listener *sp = arg; grpc_tcp_server_acceptor acceptor = {sp->server, sp->port_index, 0}; SOCKET sock = sp->new_socket; @@ -328,7 +326,10 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, bool from_iocp) { /* The general mechanism for shutting down is to queue abortion calls. While this is necessary in the read/write case, it's useless for the accept case. We only need to adjust the pending callback count */ - if (!from_iocp) { + if (error != GRPC_ERROR_NONE) { + const char *msg = grpc_error_string(error); + gpr_log(GPR_INFO, "Skipping on_accept due to error: %s", msg); + grpc_error_free_string(msg); return; } @@ -387,21 +388,20 @@ static void on_accept(grpc_exec_ctx *exec_ctx, void *arg, bool from_iocp) { the former socked we created has now either been destroy or assigned to the new connection. We need to create a new one for the next connection. */ - start_accept(exec_ctx, sp); + GPR_ASSERT(GRPC_LOG_IF_ERROR("start_accept", start_accept(exec_ctx, sp))); } -static grpc_tcp_listener *add_socket_to_server(grpc_tcp_server *s, SOCKET sock, - const struct sockaddr *addr, - size_t addr_len, - unsigned port_index) { +static grpc_error *add_socket_to_server(grpc_tcp_server *s, SOCKET sock, + const struct sockaddr *addr, + size_t addr_len, unsigned port_index, + grpc_tcp_listener **listener) { grpc_tcp_listener *sp = NULL; int port; int status; GUID guid = WSAID_ACCEPTEX; DWORD ioctl_num_bytes; LPFN_ACCEPTEX AcceptEx; - - if (sock == INVALID_SOCKET) return NULL; + grpc_error *error = GRPC_ERROR_NONE; /* We need to grab the AcceptEx pointer for that port, as it may be interface-dependent. We'll cache it to avoid doing that again. */ @@ -417,44 +417,49 @@ static grpc_tcp_listener *add_socket_to_server(grpc_tcp_server *s, SOCKET sock, return NULL; } - port = prepare_socket(sock, addr, addr_len); - if (port >= 0) { - gpr_mu_lock(&s->mu); - GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server"); - sp = gpr_malloc(sizeof(grpc_tcp_listener)); - sp->next = NULL; - if (s->head == NULL) { - s->head = sp; - } else { - s->tail->next = sp; - } - s->tail = sp; - sp->server = s; - sp->socket = grpc_winsocket_create(sock, "listener"); - sp->shutting_down = 0; - sp->AcceptEx = AcceptEx; - sp->new_socket = INVALID_SOCKET; - sp->port = port; - sp->port_index = port_index; - grpc_closure_init(&sp->on_accept, on_accept, sp); - GPR_ASSERT(sp->socket); - gpr_mu_unlock(&s->mu); + error = prepare_socket(sock, addr, addr_len, &port); + if (error != GRPC_ERROR_NONE) { + return error; } - return sp; + GPR_ASSERT(port >= 0); + gpr_mu_lock(&s->mu); + GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server"); + sp = gpr_malloc(sizeof(grpc_tcp_listener)); + sp->next = NULL; + if (s->head == NULL) { + s->head = sp; + } else { + s->tail->next = sp; + } + s->tail = sp; + sp->server = s; + sp->socket = grpc_winsocket_create(sock, "listener"); + sp->shutting_down = 0; + sp->AcceptEx = AcceptEx; + sp->new_socket = INVALID_SOCKET; + sp->port = port; + sp->port_index = port_index; + grpc_closure_init(&sp->on_accept, on_accept, sp); + GPR_ASSERT(sp->socket); + gpr_mu_unlock(&s->mu); + *listener = sp; + + return GRPC_ERROR_NONE; } -int grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, - size_t addr_len) { - grpc_tcp_listener *sp; +grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, + size_t addr_len, int *port) { + grpc_tcp_listener *sp = NULL; SOCKET sock; struct sockaddr_in6 addr6_v4mapped; struct sockaddr_in6 wildcard; struct sockaddr *allocated_addr = NULL; struct sockaddr_storage sockname_temp; socklen_t sockname_len; - int port; unsigned port_index = 0; + grpc_error *error = GRPC_ERROR_NONE; + if (s->tail != NULL) { port_index = s->tail->port_index + 1; } @@ -466,11 +471,11 @@ int grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, sockname_len = sizeof(sockname_temp); if (0 == getsockname(sp->socket->socket, (struct sockaddr *)&sockname_temp, &sockname_len)) { - port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); - if (port > 0) { + *port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp); + if (*port > 0) { allocated_addr = gpr_malloc(addr_len); memcpy(allocated_addr, addr, addr_len); - grpc_sockaddr_set_port(allocated_addr, port); + grpc_sockaddr_set_port(allocated_addr, *port); addr = allocated_addr; break; } @@ -484,8 +489,8 @@ int grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, } /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */ - if (grpc_sockaddr_is_wildcard(addr, &port)) { - grpc_sockaddr_make_wildcard6(port, &wildcard); + if (grpc_sockaddr_is_wildcard(addr, port)) { + grpc_sockaddr_make_wildcard6(*port, &wildcard); addr = (struct sockaddr *)&wildcard; addr_len = sizeof(wildcard); @@ -494,19 +499,26 @@ int grpc_tcp_server_add_port(grpc_tcp_server *s, const void *addr, sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED); if (sock == INVALID_SOCKET) { - char *utf8_message = gpr_format_message(WSAGetLastError()); - gpr_log(GPR_ERROR, "unable to create socket: %s", utf8_message); - gpr_free(utf8_message); + error = GRPC_WSA_ERROR(WSAGetLastError(), "WSASocket"); + goto done; } - sp = add_socket_to_server(s, sock, addr, addr_len, port_index); + error = add_socket_to_server(s, sock, addr, addr_len, port_index, &sp); + +done: gpr_free(allocated_addr); - if (sp) { - return sp->port; + if (error != GRPC_ERROR_NONE) { + grpc_error *error_out = GRPC_ERROR_CREATE_REFERENCING( + "Failed to add port to server", &error, 1); + GRPC_ERROR_UNREF(error); + error = error_out; + *port = -1; } else { - return -1; + GPR_ASSERT(sp != NULL); + *port = sp->port; } + return error; } void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s, @@ -521,7 +533,7 @@ void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s, s->on_accept_cb = on_accept_cb; s->on_accept_cb_arg = on_accept_cb_arg; for (sp = s->head; sp; sp = sp->next) { - start_accept(exec_ctx, sp); + GPR_ASSERT(GRPC_LOG_IF_ERROR("start_accept", start_accept(exec_ctx, sp))); s->active_ports++; } gpr_mu_unlock(&s->mu); diff --git a/src/core/lib/iomgr/tcp_windows.c b/src/core/lib/iomgr/tcp_windows.c index f44bf5fda4..b2af8030aa 100644 --- a/src/core/lib/iomgr/tcp_windows.c +++ b/src/core/lib/iomgr/tcp_windows.c @@ -61,27 +61,34 @@ #define GRPC_FIONBIO FIONBIO #endif -static int set_non_block(SOCKET sock) { +static grpc_error *set_non_block(SOCKET sock) { int status; uint32_t param = 1; DWORD ret; status = WSAIoctl(sock, GRPC_FIONBIO, ¶m, sizeof(param), NULL, 0, &ret, NULL, NULL); - return status == 0; + return status == 0 + ? GRPC_ERROR_NONE + : GRPC_WSA_ERROR(WSAGetLastError(), "WSAIoctl(GRPC_FIONBIO)"); } -static int set_dualstack(SOCKET sock) { +static grpc_error *set_dualstack(SOCKET sock) { int status; unsigned long param = 0; status = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const char *)¶m, sizeof(param)); - return status == 0; + return status == 0 + ? GRPC_ERROR_NONE + : GRPC_WSA_ERROR(WSAGetLastError(), "setsockopt(IPV6_V6ONLY)"); } -int grpc_tcp_prepare_socket(SOCKET sock) { - if (!set_non_block(sock)) return 0; - if (!set_dualstack(sock)) return 0; - return 1; +grpc_error *grpc_tcp_prepare_socket(SOCKET sock) { + grpc_error *err; + err = set_non_block(sock); + if (err != GRPC_ERROR_NONE) return err; + err = set_dualstack(sock); + if (err != GRPC_ERROR_NONE) return err; + return GRPC_ERROR_NONE; } typedef struct grpc_tcp { @@ -148,39 +155,35 @@ static void tcp_ref(grpc_tcp *tcp) { gpr_ref(&tcp->refcount); } #endif /* Asynchronous callback from the IOCP, or the background thread. */ -static void on_read(grpc_exec_ctx *exec_ctx, void *tcpp, bool success) { +static void on_read(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) { grpc_tcp *tcp = tcpp; grpc_closure *cb = tcp->read_cb; grpc_winsocket *socket = tcp->socket; gpr_slice sub; grpc_winsocket_callback_info *info = &socket->read_info; - if (success) { + GRPC_ERROR_REF(error); + + if (error == GRPC_ERROR_NONE) { if (info->wsa_error != 0 && !tcp->shutting_down) { - if (info->wsa_error != WSAECONNRESET) { - char *utf8_message = gpr_format_message(info->wsa_error); - gpr_log(GPR_ERROR, "ReadFile overlapped error: %s", utf8_message); - gpr_free(utf8_message); - } - success = 0; + char *utf8_message = gpr_format_message(info->wsa_error); + error = GRPC_ERROR_CREATE(utf8_message); + gpr_free(utf8_message); gpr_slice_unref(tcp->read_slice); } else { if (info->bytes_transfered != 0 && !tcp->shutting_down) { sub = gpr_slice_sub_no_ref(tcp->read_slice, 0, info->bytes_transfered); gpr_slice_buffer_add(tcp->read_slices, sub); - success = 1; } else { gpr_slice_unref(tcp->read_slice); - success = 0; + error = GRPC_ERROR_CREATE("End of TCP stream"); } } } tcp->read_cb = NULL; TCP_UNREF(tcp, "read"); - if (cb) { - cb->cb(exec_ctx, cb->cb_arg, success); - } + grpc_exec_ctx_sched(exec_ctx, cb, error, NULL); } static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, @@ -194,7 +197,8 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, WSABUF buffer; if (tcp->shutting_down) { - grpc_exec_ctx_enqueue(exec_ctx, cb, false, NULL); + grpc_exec_ctx_sched(exec_ctx, cb, + GRPC_ERROR_CREATE("TCP socket is shutting down"), NULL); return; } @@ -218,7 +222,7 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, /* Did we get data immediately ? Yay. */ if (info->wsa_error != WSAEWOULDBLOCK) { info->bytes_transfered = bytes_read; - grpc_exec_ctx_enqueue(exec_ctx, &tcp->on_read, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &tcp->on_read, GRPC_ERROR_NONE, NULL); return; } @@ -231,7 +235,8 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, int wsa_error = WSAGetLastError(); if (wsa_error != WSA_IO_PENDING) { info->wsa_error = wsa_error; - grpc_exec_ctx_enqueue(exec_ctx, &tcp->on_read, false, NULL); + grpc_exec_ctx_sched(exec_ctx, &tcp->on_read, + GRPC_WSA_ERROR(info->wsa_error, "WSARecv"), NULL); return; } } @@ -240,32 +245,29 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, } /* Asynchronous callback from the IOCP, or the background thread. */ -static void on_write(grpc_exec_ctx *exec_ctx, void *tcpp, bool success) { +static void on_write(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) { grpc_tcp *tcp = (grpc_tcp *)tcpp; grpc_winsocket *handle = tcp->socket; grpc_winsocket_callback_info *info = &handle->write_info; grpc_closure *cb; + GRPC_ERROR_REF(error); + gpr_mu_lock(&tcp->mu); cb = tcp->write_cb; tcp->write_cb = NULL; gpr_mu_unlock(&tcp->mu); - if (success) { + if (error == GRPC_ERROR_NONE) { if (info->wsa_error != 0) { - if (info->wsa_error != WSAECONNRESET) { - char *utf8_message = gpr_format_message(info->wsa_error); - gpr_log(GPR_ERROR, "WSASend overlapped error: %s", utf8_message); - gpr_free(utf8_message); - } - success = 0; + error = GRPC_WSA_ERROR(info->wsa_error, "WSASend"); } else { GPR_ASSERT(info->bytes_transfered == tcp->write_slices->length); } } TCP_UNREF(tcp, "write"); - cb->cb(exec_ctx, cb->cb_arg, success); + grpc_exec_ctx_sched(exec_ctx, cb, error, NULL); } /* Initiates a write. */ @@ -283,7 +285,8 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, size_t len; if (tcp->shutting_down) { - grpc_exec_ctx_enqueue(exec_ctx, cb, false, NULL); + grpc_exec_ctx_sched(exec_ctx, cb, + GRPC_ERROR_CREATE("TCP socket is shutting down"), NULL); return; } @@ -311,19 +314,10 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, connection that has its send queue filled up. But if we don't, then we can avoid doing an async write operation at all. */ if (info->wsa_error != WSAEWOULDBLOCK) { - bool ok = false; - if (status == 0) { - ok = true; - GPR_ASSERT(bytes_sent == tcp->write_slices->length); - } else { - if (info->wsa_error != WSAECONNRESET) { - char *utf8_message = gpr_format_message(info->wsa_error); - gpr_log(GPR_ERROR, "WSASend error: %s", utf8_message); - gpr_free(utf8_message); - } - } - if (allocated) gpr_free(allocated); - grpc_exec_ctx_enqueue(exec_ctx, cb, ok, NULL); + grpc_error *error = status == 0 + ? GRPC_ERROR_NONE + : GRPC_WSA_ERROR(info->wsa_error, "WSASend"); + grpc_exec_ctx_sched(exec_ctx, cb, error, NULL); return; } @@ -340,7 +334,8 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, int wsa_error = WSAGetLastError(); if (wsa_error != WSA_IO_PENDING) { TCP_UNREF(tcp, "write"); - grpc_exec_ctx_enqueue(exec_ctx, cb, false, NULL); + grpc_exec_ctx_sched(exec_ctx, cb, GRPC_WSA_ERROR(wsa_error, "WSASend"), + NULL); return; } } diff --git a/src/core/lib/iomgr/tcp_windows.h b/src/core/lib/iomgr/tcp_windows.h index a2f58eddd5..86d777235e 100644 --- a/src/core/lib/iomgr/tcp_windows.h +++ b/src/core/lib/iomgr/tcp_windows.h @@ -52,6 +52,6 @@ */ grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, char *peer_string); -int grpc_tcp_prepare_socket(SOCKET sock); +grpc_error *grpc_tcp_prepare_socket(SOCKET sock); #endif /* GRPC_CORE_LIB_IOMGR_TCP_WINDOWS_H */ diff --git a/src/core/lib/iomgr/timer.c b/src/core/lib/iomgr/timer.c index 69d3babfdb..9975fa1671 100644 --- a/src/core/lib/iomgr/timer.c +++ b/src/core/lib/iomgr/timer.c @@ -73,7 +73,7 @@ static shard_type *g_shard_queue[NUM_SHARDS]; static bool g_initialized = false; static int run_some_expired_timers(grpc_exec_ctx *exec_ctx, gpr_timespec now, - gpr_timespec *next, int success); + gpr_timespec *next, grpc_error *error); static gpr_timespec compute_min_deadline(shard_type *shard) { return grpc_timer_heap_is_empty(&shard->heap) @@ -105,7 +105,8 @@ void grpc_timer_list_init(gpr_timespec now) { void grpc_timer_list_shutdown(grpc_exec_ctx *exec_ctx) { int i; - run_some_expired_timers(exec_ctx, gpr_inf_future(g_clock_type), NULL, 0); + run_some_expired_timers(exec_ctx, gpr_inf_future(g_clock_type), NULL, + GRPC_ERROR_CREATE("Timer list shutdown")); for (i = 0; i < NUM_SHARDS; i++) { shard_type *shard = &g_shards[i]; gpr_mu_destroy(&shard->mu); @@ -185,13 +186,16 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer, if (!g_initialized) { timer->triggered = 1; - grpc_exec_ctx_enqueue(exec_ctx, &timer->closure, false, NULL); + grpc_exec_ctx_sched( + exec_ctx, &timer->closure, + GRPC_ERROR_CREATE("Attempt to create timer before initialization"), + NULL); return; } if (gpr_time_cmp(deadline, now) <= 0) { timer->triggered = 1; - grpc_exec_ctx_enqueue(exec_ctx, &timer->closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_NONE, NULL); return; } @@ -235,10 +239,15 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer, } void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) { + if (!g_initialized) { + /* must have already been cancelled, also the shard mutex is invalid */ + return; + } + shard_type *shard = &g_shards[shard_idx(timer)]; gpr_mu_lock(&shard->mu); if (!timer->triggered) { - grpc_exec_ctx_enqueue(exec_ctx, &timer->closure, false, NULL); + grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_CANCELLED, NULL); timer->triggered = 1; if (timer->heap_index == INVALID_HEAP_INDEX) { list_remove(timer); @@ -299,12 +308,12 @@ static grpc_timer *pop_one(shard_type *shard, gpr_timespec now) { /* REQUIRES: shard->mu unlocked */ static size_t pop_timers(grpc_exec_ctx *exec_ctx, shard_type *shard, gpr_timespec now, gpr_timespec *new_min_deadline, - int success) { + grpc_error *error) { size_t n = 0; grpc_timer *timer; gpr_mu_lock(&shard->mu); while ((timer = pop_one(shard, now))) { - grpc_exec_ctx_enqueue(exec_ctx, &timer->closure, success, NULL); + grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_REF(error), NULL); n++; } *new_min_deadline = compute_min_deadline(shard); @@ -313,7 +322,7 @@ static size_t pop_timers(grpc_exec_ctx *exec_ctx, shard_type *shard, } static int run_some_expired_timers(grpc_exec_ctx *exec_ctx, gpr_timespec now, - gpr_timespec *next, int success) { + gpr_timespec *next, grpc_error *error) { size_t n = 0; /* TODO(ctiller): verify that there are any timers (atomically) here */ @@ -327,8 +336,8 @@ static int run_some_expired_timers(grpc_exec_ctx *exec_ctx, gpr_timespec now, /* For efficiency, we pop as many available timers as we can from the shard. This may violate perfect timer deadline ordering, but that shouldn't be a big deal because we don't make ordering guarantees. */ - n += pop_timers(exec_ctx, g_shard_queue[0], now, &new_min_deadline, - success); + n += + pop_timers(exec_ctx, g_shard_queue[0], now, &new_min_deadline, error); /* An grpc_timer_init() on the shard could intervene here, adding a new timer that is earlier than new_min_deadline. However, @@ -359,6 +368,8 @@ static int run_some_expired_timers(grpc_exec_ctx *exec_ctx, gpr_timespec now, *next, gpr_time_add(now, gpr_time_from_millis(1, GPR_TIMESPAN))); } + GRPC_ERROR_UNREF(error); + return (int)n; } @@ -367,5 +378,7 @@ bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now, GPR_ASSERT(now.clock_type == g_clock_type); return run_some_expired_timers( exec_ctx, now, next, - gpr_time_cmp(now, gpr_inf_future(now.clock_type)) != 0); + gpr_time_cmp(now, gpr_inf_future(now.clock_type)) != 0 + ? GRPC_ERROR_NONE + : GRPC_ERROR_CREATE("Shutting down timer system")); } diff --git a/src/core/lib/iomgr/unix_sockets_posix.c b/src/core/lib/iomgr/unix_sockets_posix.c index 5767c852df..0e7670e5a5 100644 --- a/src/core/lib/iomgr/unix_sockets_posix.c +++ b/src/core/lib/iomgr/unix_sockets_posix.c @@ -47,17 +47,18 @@ void grpc_create_socketpair_if_unix(int sv[2]) { GPR_ASSERT(socketpair(AF_UNIX, SOCK_STREAM, 0, sv) == 0); } -grpc_resolved_addresses *grpc_resolve_unix_domain_address(const char *name) { +grpc_error *grpc_resolve_unix_domain_address(const char *name, + grpc_resolved_addresses **addrs) { struct sockaddr_un *un; - grpc_resolved_addresses *addrs = gpr_malloc(sizeof(grpc_resolved_addresses)); - addrs->naddrs = 1; - addrs->addrs = gpr_malloc(sizeof(grpc_resolved_address)); - un = (struct sockaddr_un *)addrs->addrs->addr; + *addrs = gpr_malloc(sizeof(grpc_resolved_addresses)); + (*addrs)->naddrs = 1; + (*addrs)->addrs = gpr_malloc(sizeof(grpc_resolved_address)); + un = (struct sockaddr_un *)(*addrs)->addrs->addr; un->sun_family = AF_UNIX; strcpy(un->sun_path, name); - addrs->addrs->len = strlen(un->sun_path) + sizeof(un->sun_family) + 1; - return addrs; + (*addrs)->addrs->len = strlen(un->sun_path) + sizeof(un->sun_family) + 1; + return GRPC_ERROR_NONE; } int grpc_is_unix_socket(const struct sockaddr *addr) { diff --git a/src/core/lib/iomgr/unix_sockets_posix.h b/src/core/lib/iomgr/unix_sockets_posix.h index 6758c498e5..db0516d945 100644 --- a/src/core/lib/iomgr/unix_sockets_posix.h +++ b/src/core/lib/iomgr/unix_sockets_posix.h @@ -43,7 +43,8 @@ void grpc_create_socketpair_if_unix(int sv[2]); -grpc_resolved_addresses *grpc_resolve_unix_domain_address(const char *name); +grpc_error *grpc_resolve_unix_domain_address( + const char *name, grpc_resolved_addresses **addresses); int grpc_is_unix_socket(const struct sockaddr *addr); diff --git a/src/core/lib/iomgr/unix_sockets_posix_noop.c b/src/core/lib/iomgr/unix_sockets_posix_noop.c index d30952789f..56b47c3daf 100644 --- a/src/core/lib/iomgr/unix_sockets_posix_noop.c +++ b/src/core/lib/iomgr/unix_sockets_posix_noop.c @@ -44,8 +44,10 @@ void grpc_create_socketpair_if_unix(int sv[2]) { GPR_ASSERT(0); } -grpc_resolved_addresses *grpc_resolve_unix_domain_address(const char *name) { - return NULL; +grpc_error *grpc_resolve_unix_domain_address( + const char *name, grpc_resolved_addresses **addresses) { + *addresses = NULL; + return GRPC_ERROR_CREATE("Unix domain sockets are not supported on Windows"); } int grpc_is_unix_socket(const struct sockaddr *addr) { return false; } diff --git a/src/core/lib/iomgr/wakeup_fd_eventfd.c b/src/core/lib/iomgr/wakeup_fd_eventfd.c index 8a772add13..667b4a5f90 100644 --- a/src/core/lib/iomgr/wakeup_fd_eventfd.c +++ b/src/core/lib/iomgr/wakeup_fd_eventfd.c @@ -44,29 +44,39 @@ #include "src/core/lib/iomgr/wakeup_fd_posix.h" #include "src/core/lib/profiling/timers.h" -static void eventfd_create(grpc_wakeup_fd* fd_info) { +static grpc_error* eventfd_create(grpc_wakeup_fd* fd_info) { int efd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); - /* TODO(klempner): Handle failure more gracefully */ - GPR_ASSERT(efd >= 0); + if (efd < 0) { + return GRPC_OS_ERROR(errno, "eventfd"); + } fd_info->read_fd = efd; fd_info->write_fd = -1; + return GRPC_ERROR_NONE; } -static void eventfd_consume(grpc_wakeup_fd* fd_info) { +static grpc_error* eventfd_consume(grpc_wakeup_fd* fd_info) { eventfd_t value; int err; do { err = eventfd_read(fd_info->read_fd, &value); } while (err < 0 && errno == EINTR); + if (err < 0 && errno != EAGAIN) { + return GRPC_OS_ERROR(errno, "eventfd_read"); + } + return GRPC_ERROR_NONE; } -static void eventfd_wakeup(grpc_wakeup_fd* fd_info) { +static grpc_error* eventfd_wakeup(grpc_wakeup_fd* fd_info) { int err; GPR_TIMER_BEGIN("eventfd_wakeup", 0); do { err = eventfd_write(fd_info->read_fd, 1); } while (err < 0 && errno == EINTR); + if (err < 0) { + return GRPC_OS_ERROR(errno, "eventfd_write"); + } GPR_TIMER_END("eventfd_wakeup", 0); + return GRPC_ERROR_NONE; } static void eventfd_destroy(grpc_wakeup_fd* fd_info) { diff --git a/src/core/lib/iomgr/wakeup_fd_pipe.c b/src/core/lib/iomgr/wakeup_fd_pipe.c index e9b9a0119f..4e5dbdcb73 100644 --- a/src/core/lib/iomgr/wakeup_fd_pipe.c +++ b/src/core/lib/iomgr/wakeup_fd_pipe.c @@ -45,7 +45,7 @@ #include "src/core/lib/iomgr/socket_utils_posix.h" -static void pipe_init(grpc_wakeup_fd* fd_info) { +static grpc_error* pipe_init(grpc_wakeup_fd* fd_info) { int pipefd[2]; /* TODO(klempner): Make this nonfatal */ int r = pipe(pipefd); @@ -53,36 +53,40 @@ static void pipe_init(grpc_wakeup_fd* fd_info) { gpr_log(GPR_ERROR, "pipe creation failed (%d): %s", errno, strerror(errno)); abort(); } - GPR_ASSERT(grpc_set_socket_nonblocking(pipefd[0], 1)); - GPR_ASSERT(grpc_set_socket_nonblocking(pipefd[1], 1)); + grpc_error* err; + err = grpc_set_socket_nonblocking(pipefd[0], 1); + if (err != GRPC_ERROR_NONE) return err; + err = grpc_set_socket_nonblocking(pipefd[1], 1); + if (err != GRPC_ERROR_NONE) return err; fd_info->read_fd = pipefd[0]; fd_info->write_fd = pipefd[1]; + return GRPC_ERROR_NONE; } -static void pipe_consume(grpc_wakeup_fd* fd_info) { +static grpc_error* pipe_consume(grpc_wakeup_fd* fd_info) { char buf[128]; ssize_t r; for (;;) { r = read(fd_info->read_fd, buf, sizeof(buf)); if (r > 0) continue; - if (r == 0) return; + if (r == 0) return GRPC_ERROR_NONE; switch (errno) { case EAGAIN: - return; + return GRPC_ERROR_NONE; case EINTR: continue; default: - gpr_log(GPR_ERROR, "error reading pipe: %s", strerror(errno)); - return; + return GRPC_OS_ERROR(errno, "read"); } } } -static void pipe_wakeup(grpc_wakeup_fd* fd_info) { +static grpc_error* pipe_wakeup(grpc_wakeup_fd* fd_info) { char c = 0; while (write(fd_info->write_fd, &c, 1) != 1 && errno == EINTR) ; + return GRPC_ERROR_NONE; } static void pipe_destroy(grpc_wakeup_fd* fd_info) { diff --git a/src/core/lib/iomgr/wakeup_fd_posix.c b/src/core/lib/iomgr/wakeup_fd_posix.c index 525369c356..046208abc8 100644 --- a/src/core/lib/iomgr/wakeup_fd_posix.c +++ b/src/core/lib/iomgr/wakeup_fd_posix.c @@ -53,16 +53,16 @@ void grpc_wakeup_fd_global_init(void) { void grpc_wakeup_fd_global_destroy(void) { wakeup_fd_vtable = NULL; } -void grpc_wakeup_fd_init(grpc_wakeup_fd *fd_info) { - wakeup_fd_vtable->init(fd_info); +grpc_error *grpc_wakeup_fd_init(grpc_wakeup_fd *fd_info) { + return wakeup_fd_vtable->init(fd_info); } -void grpc_wakeup_fd_consume_wakeup(grpc_wakeup_fd *fd_info) { - wakeup_fd_vtable->consume(fd_info); +grpc_error *grpc_wakeup_fd_consume_wakeup(grpc_wakeup_fd *fd_info) { + return wakeup_fd_vtable->consume(fd_info); } -void grpc_wakeup_fd_wakeup(grpc_wakeup_fd *fd_info) { - wakeup_fd_vtable->wakeup(fd_info); +grpc_error *grpc_wakeup_fd_wakeup(grpc_wakeup_fd *fd_info) { + return wakeup_fd_vtable->wakeup(fd_info); } void grpc_wakeup_fd_destroy(grpc_wakeup_fd *fd_info) { diff --git a/src/core/lib/iomgr/wakeup_fd_posix.h b/src/core/lib/iomgr/wakeup_fd_posix.h index 6b069c1837..e269f242d8 100644 --- a/src/core/lib/iomgr/wakeup_fd_posix.h +++ b/src/core/lib/iomgr/wakeup_fd_posix.h @@ -62,6 +62,8 @@ #ifndef GRPC_CORE_LIB_IOMGR_WAKEUP_FD_POSIX_H #define GRPC_CORE_LIB_IOMGR_WAKEUP_FD_POSIX_H +#include "src/core/lib/iomgr/error.h" + void grpc_wakeup_fd_global_init(void); void grpc_wakeup_fd_global_destroy(void); @@ -72,9 +74,9 @@ void grpc_wakeup_fd_global_init_force_fallback(void); typedef struct grpc_wakeup_fd grpc_wakeup_fd; typedef struct grpc_wakeup_fd_vtable { - void (*init)(grpc_wakeup_fd* fd_info); - void (*consume)(grpc_wakeup_fd* fd_info); - void (*wakeup)(grpc_wakeup_fd* fd_info); + grpc_error* (*init)(grpc_wakeup_fd* fd_info); + grpc_error* (*consume)(grpc_wakeup_fd* fd_info); + grpc_error* (*wakeup)(grpc_wakeup_fd* fd_info); void (*destroy)(grpc_wakeup_fd* fd_info); /* Must be called before calling any other functions */ int (*check_availability)(void); @@ -89,9 +91,10 @@ extern int grpc_allow_specialized_wakeup_fd; #define GRPC_WAKEUP_FD_GET_READ_FD(fd_info) ((fd_info)->read_fd) -void grpc_wakeup_fd_init(grpc_wakeup_fd* fd_info); -void grpc_wakeup_fd_consume_wakeup(grpc_wakeup_fd* fd_info); -void grpc_wakeup_fd_wakeup(grpc_wakeup_fd* fd_info); +grpc_error* grpc_wakeup_fd_init(grpc_wakeup_fd* fd_info) GRPC_MUST_USE_RESULT; +grpc_error* grpc_wakeup_fd_consume_wakeup(grpc_wakeup_fd* fd_info) + GRPC_MUST_USE_RESULT; +grpc_error* grpc_wakeup_fd_wakeup(grpc_wakeup_fd* fd_info) GRPC_MUST_USE_RESULT; void grpc_wakeup_fd_destroy(grpc_wakeup_fd* fd_info); /* Defined in some specialized implementation's .c file, or by diff --git a/src/core/lib/iomgr/workqueue.h b/src/core/lib/iomgr/workqueue.h index eeca8c0bf2..5cc40eea50 100644 --- a/src/core/lib/iomgr/workqueue.h +++ b/src/core/lib/iomgr/workqueue.h @@ -50,7 +50,8 @@ /* grpc_workqueue is forward declared in exec_ctx.h */ /** Create a work queue */ -grpc_workqueue *grpc_workqueue_create(grpc_exec_ctx *exec_ctx); +grpc_error *grpc_workqueue_create(grpc_exec_ctx *exec_ctx, + grpc_workqueue **workqueue); void grpc_workqueue_flush(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue); @@ -77,7 +78,7 @@ void grpc_workqueue_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset); /** Add a work item to a workqueue */ -void grpc_workqueue_push(grpc_workqueue *workqueue, grpc_closure *closure, - int success); +void grpc_workqueue_enqueue(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue, + grpc_closure *closure, grpc_error *error); #endif /* GRPC_CORE_LIB_IOMGR_WORKQUEUE_H */ diff --git a/src/core/lib/iomgr/workqueue_posix.c b/src/core/lib/iomgr/workqueue_posix.c index 80e7a0b206..45e0f6063b 100644 --- a/src/core/lib/iomgr/workqueue_posix.c +++ b/src/core/lib/iomgr/workqueue_posix.c @@ -45,22 +45,27 @@ #include "src/core/lib/iomgr/ev_posix.h" -static void on_readable(grpc_exec_ctx *exec_ctx, void *arg, bool success); +static void on_readable(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error); -grpc_workqueue *grpc_workqueue_create(grpc_exec_ctx *exec_ctx) { +grpc_error *grpc_workqueue_create(grpc_exec_ctx *exec_ctx, + grpc_workqueue **workqueue) { char name[32]; - grpc_workqueue *workqueue = gpr_malloc(sizeof(grpc_workqueue)); - gpr_ref_init(&workqueue->refs, 1); - gpr_mu_init(&workqueue->mu); - workqueue->closure_list.head = workqueue->closure_list.tail = NULL; - grpc_wakeup_fd_init(&workqueue->wakeup_fd); - sprintf(name, "workqueue:%p", (void *)workqueue); - workqueue->wakeup_read_fd = - grpc_fd_create(GRPC_WAKEUP_FD_GET_READ_FD(&workqueue->wakeup_fd), name); - grpc_closure_init(&workqueue->read_closure, on_readable, workqueue); - grpc_fd_notify_on_read(exec_ctx, workqueue->wakeup_read_fd, - &workqueue->read_closure); - return workqueue; + *workqueue = gpr_malloc(sizeof(grpc_workqueue)); + gpr_ref_init(&(*workqueue)->refs, 1); + gpr_mu_init(&(*workqueue)->mu); + (*workqueue)->closure_list.head = (*workqueue)->closure_list.tail = NULL; + grpc_error *err = grpc_wakeup_fd_init(&(*workqueue)->wakeup_fd); + if (err != GRPC_ERROR_NONE) { + gpr_free(*workqueue); + return err; + } + sprintf(name, "workqueue:%p", (void *)(*workqueue)); + (*workqueue)->wakeup_read_fd = grpc_fd_create( + GRPC_WAKEUP_FD_GET_READ_FD(&(*workqueue)->wakeup_fd), name); + grpc_closure_init(&(*workqueue)->read_closure, on_readable, *workqueue); + grpc_fd_notify_on_read(exec_ctx, (*workqueue)->wakeup_read_fd, + &(*workqueue)->read_closure); + return GRPC_ERROR_NONE; } static void workqueue_destroy(grpc_exec_ctx *exec_ctx, @@ -103,17 +108,14 @@ void grpc_workqueue_add_to_pollset(grpc_exec_ctx *exec_ctx, void grpc_workqueue_flush(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue) { gpr_mu_lock(&workqueue->mu); - if (grpc_closure_list_empty(workqueue->closure_list)) { - grpc_wakeup_fd_wakeup(&workqueue->wakeup_fd); - } grpc_exec_ctx_enqueue_list(exec_ctx, &workqueue->closure_list, NULL); gpr_mu_unlock(&workqueue->mu); } -static void on_readable(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void on_readable(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { grpc_workqueue *workqueue = arg; - if (!success) { + if (error != GRPC_ERROR_NONE) { gpr_mu_destroy(&workqueue->mu); /* HACK: let wakeup_fd code know that we stole the fd */ workqueue->wakeup_fd.read_fd = 0; @@ -123,20 +125,32 @@ static void on_readable(grpc_exec_ctx *exec_ctx, void *arg, bool success) { } else { gpr_mu_lock(&workqueue->mu); grpc_exec_ctx_enqueue_list(exec_ctx, &workqueue->closure_list, NULL); - grpc_wakeup_fd_consume_wakeup(&workqueue->wakeup_fd); + error = grpc_wakeup_fd_consume_wakeup(&workqueue->wakeup_fd); gpr_mu_unlock(&workqueue->mu); - grpc_fd_notify_on_read(exec_ctx, workqueue->wakeup_read_fd, - &workqueue->read_closure); + if (error == GRPC_ERROR_NONE) { + grpc_fd_notify_on_read(exec_ctx, workqueue->wakeup_read_fd, + &workqueue->read_closure); + } else { + /* recurse to get error handling */ + on_readable(exec_ctx, arg, error); + } } } -void grpc_workqueue_push(grpc_workqueue *workqueue, grpc_closure *closure, - int success) { +void grpc_workqueue_enqueue(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue, + grpc_closure *closure, grpc_error *error) { + grpc_error *push_error = GRPC_ERROR_NONE; gpr_mu_lock(&workqueue->mu); if (grpc_closure_list_empty(workqueue->closure_list)) { - grpc_wakeup_fd_wakeup(&workqueue->wakeup_fd); + push_error = grpc_wakeup_fd_wakeup(&workqueue->wakeup_fd); + } + grpc_closure_list_append(&workqueue->closure_list, closure, error); + if (push_error != GRPC_ERROR_NONE) { + const char *msg = grpc_error_string(push_error); + gpr_log(GPR_ERROR, "Failed to push to workqueue: %s", msg); + grpc_error_free_string(msg); + grpc_exec_ctx_enqueue_list(exec_ctx, &workqueue->closure_list, NULL); } - grpc_closure_list_add(&workqueue->closure_list, closure, success); gpr_mu_unlock(&workqueue->mu); } diff --git a/src/core/lib/security/credentials/credentials.c b/src/core/lib/security/credentials/credentials.c index f45a8d8ff6..0eadaec191 100644 --- a/src/core/lib/security/credentials/credentials.c +++ b/src/core/lib/security/credentials/credentials.c @@ -58,6 +58,7 @@ grpc_credentials_metadata_request *grpc_credentials_metadata_request_create( void *user_data) { grpc_credentials_metadata_request *r = gpr_malloc(sizeof(grpc_credentials_metadata_request)); + memset(&r->response, 0, sizeof(r->response)); r->creds = grpc_call_credentials_ref(creds); r->cb = cb; r->user_data = user_data; @@ -67,6 +68,7 @@ grpc_credentials_metadata_request *grpc_credentials_metadata_request_create( void grpc_credentials_metadata_request_destroy( grpc_credentials_metadata_request *r) { grpc_call_credentials_unref(r->creds); + grpc_http_response_destroy(&r->response); gpr_free(r); } diff --git a/src/core/lib/security/credentials/credentials.h b/src/core/lib/security/credentials/credentials.h index 15dcfe473d..ce235e3a1d 100644 --- a/src/core/lib/security/credentials/credentials.h +++ b/src/core/lib/security/credentials/credentials.h @@ -225,6 +225,7 @@ grpc_server_credentials *grpc_find_server_credentials_in_args( typedef struct { grpc_call_credentials *creds; grpc_credentials_metadata_cb cb; + grpc_http_response response; void *user_data; } grpc_credentials_metadata_request; diff --git a/src/core/lib/security/credentials/fake/fake_credentials.c b/src/core/lib/security/credentials/fake/fake_credentials.c index 005777d3c6..ee6d964de1 100644 --- a/src/core/lib/security/credentials/fake/fake_credentials.c +++ b/src/core/lib/security/credentials/fake/fake_credentials.c @@ -95,7 +95,7 @@ static void md_only_test_destruct(grpc_call_credentials *creds) { } static void on_simulated_token_fetch_done(grpc_exec_ctx *exec_ctx, - void *user_data, bool success) { + void *user_data, grpc_error *error) { grpc_credentials_metadata_request *r = (grpc_credentials_metadata_request *)user_data; grpc_md_only_test_credentials *c = (grpc_md_only_test_credentials *)r->creds; @@ -113,8 +113,9 @@ static void md_only_test_get_request_metadata( if (c->is_async) { grpc_credentials_metadata_request *cb_arg = grpc_credentials_metadata_request_create(creds, cb, user_data); - grpc_executor_enqueue( - grpc_closure_create(on_simulated_token_fetch_done, cb_arg), true); + grpc_executor_push( + grpc_closure_create(on_simulated_token_fetch_done, cb_arg), + GRPC_ERROR_NONE); } else { cb(exec_ctx, user_data, c->md_store->entries, 1, GRPC_CREDENTIALS_OK); } diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.c b/src/core/lib/security/credentials/google_default/google_default_credentials.c index 98df68e7b3..312a3d4f90 100644 --- a/src/core/lib/security/credentials/google_default/google_default_credentials.c +++ b/src/core/lib/security/credentials/google_default/google_default_credentials.c @@ -41,11 +41,12 @@ #include "src/core/lib/http/httpcli.h" #include "src/core/lib/http/parser.h" +#include "src/core/lib/iomgr/load_file.h" #include "src/core/lib/iomgr/polling_entity.h" #include "src/core/lib/security/credentials/jwt/jwt_credentials.h" #include "src/core/lib/security/credentials/oauth2/oauth2_credentials.h" #include "src/core/lib/support/env.h" -#include "src/core/lib/support/load_file.h" +#include "src/core/lib/support/string.h" #include "src/core/lib/surface/api_trace.h" /* -- Constants. -- */ @@ -66,18 +67,20 @@ typedef struct { grpc_polling_entity pollent; int is_done; int success; + grpc_http_response response; } compute_engine_detector; -static void on_compute_engine_detection_http_response( - grpc_exec_ctx *exec_ctx, void *user_data, - const grpc_http_response *response) { +static void on_compute_engine_detection_http_response(grpc_exec_ctx *exec_ctx, + void *user_data, + grpc_error *error) { compute_engine_detector *detector = (compute_engine_detector *)user_data; - if (response != NULL && response->status == 200 && response->hdr_count > 0) { + if (error == GRPC_ERROR_NONE && detector->response.status == 200 && + detector->response.hdr_count > 0) { /* Internet providers can return a generic response to all requests, so it is necessary to check that metadata header is present also. */ size_t i; - for (i = 0; i < response->hdr_count; i++) { - grpc_http_header *header = &response->hdrs[i]; + for (i = 0; i < detector->response.hdr_count; i++) { + grpc_http_header *header = &detector->response.hdrs[i]; if (strcmp(header->key, "Metadata-Flavor") == 0 && strcmp(header->value, "Google") == 0) { detector->success = 1; @@ -87,11 +90,13 @@ static void on_compute_engine_detection_http_response( } gpr_mu_lock(g_polling_mu); detector->is_done = 1; - grpc_pollset_kick(grpc_polling_entity_pollset(&detector->pollent), NULL); + GRPC_LOG_IF_ERROR( + "Pollset kick", + grpc_pollset_kick(grpc_polling_entity_pollset(&detector->pollent), NULL)); gpr_mu_unlock(g_polling_mu); } -static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool s) { +static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, grpc_error *e) { grpc_pollset_destroy(p); } @@ -112,6 +117,7 @@ static int is_stack_running_on_compute_engine(void) { detector.is_done = 0; detector.success = 0; + memset(&detector.response, 0, sizeof(detector.response)); memset(&request, 0, sizeof(grpc_httpcli_request)); request.host = GRPC_COMPUTE_ENGINE_DETECTION_HOST; request.http.path = "/"; @@ -121,18 +127,25 @@ static int is_stack_running_on_compute_engine(void) { grpc_httpcli_get( &exec_ctx, &context, &detector.pollent, &request, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), max_detection_delay), - on_compute_engine_detection_http_response, &detector); + grpc_closure_create(on_compute_engine_detection_http_response, &detector), + &detector.response); - grpc_exec_ctx_finish(&exec_ctx); + grpc_exec_ctx_flush(&exec_ctx); /* Block until we get the response. This is not ideal but this should only be called once for the lifetime of the process by the default credentials. */ gpr_mu_lock(g_polling_mu); while (!detector.is_done) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&detector.pollent), - &worker, gpr_now(GPR_CLOCK_MONOTONIC), - gpr_inf_future(GPR_CLOCK_MONOTONIC)); + if (!GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, + grpc_polling_entity_pollset(&detector.pollent), + &worker, gpr_now(GPR_CLOCK_MONOTONIC), + gpr_inf_future(GPR_CLOCK_MONOTONIC)))) { + detector.is_done = 1; + detector.success = 0; + } } gpr_mu_unlock(g_polling_mu); @@ -146,24 +159,37 @@ static int is_stack_running_on_compute_engine(void) { g_polling_mu = NULL; gpr_free(grpc_polling_entity_pollset(&detector.pollent)); + grpc_http_response_destroy(&detector.response); return detector.success; } /* Takes ownership of creds_path if not NULL. */ -static grpc_call_credentials *create_default_creds_from_path(char *creds_path) { +static grpc_error *create_default_creds_from_path( + char *creds_path, grpc_call_credentials **creds) { grpc_json *json = NULL; grpc_auth_json_key key; grpc_auth_refresh_token token; grpc_call_credentials *result = NULL; gpr_slice creds_data = gpr_empty_slice(); - int file_ok = 0; - if (creds_path == NULL) goto end; - creds_data = gpr_load_file(creds_path, 0, &file_ok); - if (!file_ok) goto end; + grpc_error *error = GRPC_ERROR_NONE; + if (creds_path == NULL) { + error = GRPC_ERROR_CREATE("creds_path unset"); + goto end; + } + error = grpc_load_file(creds_path, 0, &creds_data); + if (error != GRPC_ERROR_NONE) { + goto end; + } json = grpc_json_parse_string_with_len( (char *)GPR_SLICE_START_PTR(creds_data), GPR_SLICE_LENGTH(creds_data)); - if (json == NULL) goto end; + if (json == NULL) { + char *dump = gpr_dump_slice(creds_data, GPR_DUMP_HEX | GPR_DUMP_ASCII); + error = grpc_error_set_str(GRPC_ERROR_CREATE("Failed to parse JSON"), + GRPC_ERROR_STR_RAW_BYTES, dump); + gpr_free(dump); + goto end; + } /* First, try an auth json key. */ key = grpc_auth_json_key_create_from_json(json); @@ -171,6 +197,11 @@ static grpc_call_credentials *create_default_creds_from_path(char *creds_path) { result = grpc_service_account_jwt_access_credentials_create_from_auth_json_key( key, grpc_max_auth_token_lifetime()); + if (result == NULL) { + error = GRPC_ERROR_CREATE( + "grpc_service_account_jwt_access_credentials_create_from_auth_json_" + "key failed"); + } goto end; } @@ -179,19 +210,28 @@ static grpc_call_credentials *create_default_creds_from_path(char *creds_path) { if (grpc_auth_refresh_token_is_valid(&token)) { result = grpc_refresh_token_credentials_create_from_auth_refresh_token(token); + if (result == NULL) { + error = GRPC_ERROR_CREATE( + "grpc_refresh_token_credentials_create_from_auth_refresh_token " + "failed"); + } goto end; } end: + GPR_ASSERT((result == NULL) + (error == GRPC_ERROR_NONE) == 1); if (creds_path != NULL) gpr_free(creds_path); gpr_slice_unref(creds_data); if (json != NULL) grpc_json_destroy(json); - return result; + *creds = result; + return error; } grpc_channel_credentials *grpc_google_default_credentials_create(void) { grpc_channel_credentials *result = NULL; grpc_call_credentials *call_creds = NULL; + grpc_error *error = GRPC_ERROR_CREATE("Failed to create Google credentials"); + grpc_error *err; GRPC_API_TRACE("grpc_google_default_credentials_create(void)", 0, ()); @@ -205,14 +245,16 @@ grpc_channel_credentials *grpc_google_default_credentials_create(void) { } /* First, try the environment variable. */ - call_creds = create_default_creds_from_path( - gpr_getenv(GRPC_GOOGLE_CREDENTIALS_ENV_VAR)); - if (call_creds != NULL) goto end; + err = create_default_creds_from_path( + gpr_getenv(GRPC_GOOGLE_CREDENTIALS_ENV_VAR), &call_creds); + if (err == GRPC_ERROR_NONE) goto end; + error = grpc_error_add_child(error, err); /* Then the well-known file. */ - call_creds = create_default_creds_from_path( - grpc_get_well_known_google_credentials_file_path()); - if (call_creds != NULL) goto end; + err = create_default_creds_from_path( + grpc_get_well_known_google_credentials_file_path(), &call_creds); + if (err == GRPC_ERROR_NONE) goto end; + error = grpc_error_add_child(error, err); /* At last try to see if we're on compute engine (do the detection only once since it requires a network test). */ @@ -221,6 +263,10 @@ grpc_channel_credentials *grpc_google_default_credentials_create(void) { compute_engine_detection_done = 1; if (need_compute_engine_creds) { call_creds = grpc_google_compute_engine_credentials_create(NULL); + if (call_creds == NULL) { + error = grpc_error_add_child( + error, GRPC_ERROR_CREATE("Failed to get credentials from network")); + } } } @@ -244,6 +290,11 @@ end: } } gpr_mu_unlock(&g_state_mu); + if (result == NULL) { + GRPC_LOG_IF_ERROR("grpc_google_default_credentials_create", error); + } else { + GRPC_ERROR_UNREF(error); + } return result; } diff --git a/src/core/lib/security/credentials/jwt/jwt_verifier.c b/src/core/lib/security/credentials/jwt/jwt_verifier.c index 1f67db103c..73eb2e3258 100644 --- a/src/core/lib/security/credentials/jwt/jwt_verifier.c +++ b/src/core/lib/security/credentials/jwt/jwt_verifier.c @@ -45,6 +45,7 @@ #include <grpc/support/log.h> #include <grpc/support/string_util.h> #include <grpc/support/sync.h> +#include <grpc/support/useful.h> #include <openssl/pem.h> /* --- Utils. --- */ @@ -320,6 +321,12 @@ grpc_jwt_verifier_status grpc_jwt_claims_check(const grpc_jwt_claims *claims, /* --- verifier_cb_ctx object. --- */ +typedef enum { + HTTP_RESPONSE_OPENID = 0, + HTTP_RESPONSE_KEYS, + HTTP_RESPONSE_COUNT /* must be last */ +} http_response_index; + typedef struct { grpc_jwt_verifier *verifier; grpc_polling_entity pollent; @@ -330,6 +337,7 @@ typedef struct { gpr_slice signed_data; void *user_data; grpc_jwt_verification_done_cb user_cb; + grpc_http_response responses[HTTP_RESPONSE_COUNT]; } verifier_cb_ctx; /* Takes ownership of the header, claims and signature. */ @@ -360,6 +368,9 @@ void verifier_cb_ctx_destroy(verifier_cb_ctx *ctx) { gpr_slice_unref(ctx->signature); gpr_slice_unref(ctx->signed_data); jose_header_destroy(ctx->header); + for (size_t i = 0; i < HTTP_RESPONSE_COUNT; i++) { + grpc_http_response_destroy(&ctx->responses[i]); + } /* TODO: see what to do with claims... */ gpr_free(ctx); } @@ -574,9 +585,9 @@ end: } static void on_keys_retrieved(grpc_exec_ctx *exec_ctx, void *user_data, - const grpc_httpcli_response *response) { - grpc_json *json = json_from_http(response); + grpc_error *error) { verifier_cb_ctx *ctx = (verifier_cb_ctx *)user_data; + grpc_json *json = json_from_http(&ctx->responses[HTTP_RESPONSE_KEYS]); EVP_PKEY *verification_key = NULL; grpc_jwt_verifier_status status = GRPC_JWT_VERIFIER_GENERIC_ERROR; grpc_jwt_claims *claims = NULL; @@ -615,10 +626,11 @@ end: } static void on_openid_config_retrieved(grpc_exec_ctx *exec_ctx, void *user_data, - const grpc_httpcli_response *response) { + grpc_error *error) { const grpc_json *cur; - grpc_json *json = json_from_http(response); verifier_cb_ctx *ctx = (verifier_cb_ctx *)user_data; + const grpc_http_response *response = &ctx->responses[HTTP_RESPONSE_OPENID]; + grpc_json *json = json_from_http(response); grpc_httpcli_request req; const char *jwks_uri; @@ -644,10 +656,12 @@ static void on_openid_config_retrieved(grpc_exec_ctx *exec_ctx, void *user_data, } else { *(req.host + (req.http.path - jwks_uri)) = '\0'; } + grpc_httpcli_get( exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, &req, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), grpc_jwt_verifier_max_delay), - on_keys_retrieved, ctx); + grpc_closure_create(on_keys_retrieved, ctx), + &ctx->responses[HTTP_RESPONSE_KEYS]); grpc_json_destroy(json); gpr_free(req.host); return; @@ -689,12 +703,13 @@ static void verifier_put_mapping(grpc_jwt_verifier *v, const char *email_domain, static void retrieve_key_and_verify(grpc_exec_ctx *exec_ctx, verifier_cb_ctx *ctx) { const char *at_sign; - grpc_httpcli_response_cb http_cb; + grpc_closure *http_cb; char *path_prefix = NULL; const char *iss; grpc_httpcli_request req; memset(&req, 0, sizeof(grpc_httpcli_request)); req.handshaker = &grpc_httpcli_ssl; + http_response_index rsp_idx; GPR_ASSERT(ctx != NULL && ctx->header != NULL && ctx->claims != NULL); iss = ctx->claims->iss; @@ -733,7 +748,8 @@ static void retrieve_key_and_verify(grpc_exec_ctx *exec_ctx, *(path_prefix++) = '\0'; gpr_asprintf(&req.http.path, "/%s/%s", path_prefix, iss); } - http_cb = on_keys_retrieved; + http_cb = grpc_closure_create(on_keys_retrieved, ctx); + rsp_idx = HTTP_RESPONSE_KEYS; } else { req.host = gpr_strdup(strstr(iss, "https://") == iss ? iss + 8 : iss); path_prefix = strchr(req.host, '/'); @@ -744,13 +760,14 @@ static void retrieve_key_and_verify(grpc_exec_ctx *exec_ctx, gpr_asprintf(&req.http.path, "/%s%s", path_prefix, GRPC_OPENID_CONFIG_URL_SUFFIX); } - http_cb = on_openid_config_retrieved; + http_cb = grpc_closure_create(on_openid_config_retrieved, ctx); + rsp_idx = HTTP_RESPONSE_OPENID; } grpc_httpcli_get( exec_ctx, &ctx->verifier->http_ctx, &ctx->pollent, &req, gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), grpc_jwt_verifier_max_delay), - http_cb, ctx); + http_cb, &ctx->responses[rsp_idx]); gpr_free(req.host); gpr_free(req.http.path); return; diff --git a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c index 268026b9f0..1102553dd3 100644 --- a/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +++ b/src/core/lib/security/credentials/oauth2/oauth2_credentials.c @@ -216,9 +216,9 @@ end: return status; } -static void on_oauth2_token_fetcher_http_response( - grpc_exec_ctx *exec_ctx, void *user_data, - const grpc_http_response *response) { +static void on_oauth2_token_fetcher_http_response(grpc_exec_ctx *exec_ctx, + void *user_data, + grpc_error *error) { grpc_credentials_metadata_request *r = (grpc_credentials_metadata_request *)user_data; grpc_oauth2_token_fetcher_credentials *c = @@ -226,9 +226,11 @@ static void on_oauth2_token_fetcher_http_response( gpr_timespec token_lifetime; grpc_credentials_status status; + GRPC_LOG_IF_ERROR("oauth_fetch", GRPC_ERROR_REF(error)); + gpr_mu_lock(&c->mu); status = grpc_oauth2_token_fetcher_credentials_parse_server_response( - response, &c->access_token_md, &token_lifetime); + &r->response, &c->access_token_md, &token_lifetime); if (status == GRPC_CREDENTIALS_OK) { c->token_expiration = gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), token_lifetime); @@ -296,7 +298,7 @@ static grpc_call_credentials_vtable compute_engine_vtable = { static void compute_engine_fetch_oauth2( grpc_exec_ctx *exec_ctx, grpc_credentials_metadata_request *metadata_req, grpc_httpcli_context *httpcli_context, grpc_polling_entity *pollent, - grpc_httpcli_response_cb response_cb, gpr_timespec deadline) { + grpc_iomgr_cb_func response_cb, gpr_timespec deadline) { grpc_http_header header = {"Metadata-Flavor", "Google"}; grpc_httpcli_request request; memset(&request, 0, sizeof(grpc_httpcli_request)); @@ -305,7 +307,8 @@ static void compute_engine_fetch_oauth2( request.http.hdr_count = 1; request.http.hdrs = &header; grpc_httpcli_get(exec_ctx, httpcli_context, pollent, &request, deadline, - response_cb, metadata_req); + grpc_closure_create(response_cb, metadata_req), + &metadata_req->response); } grpc_call_credentials *grpc_google_compute_engine_credentials_create( @@ -337,7 +340,7 @@ static grpc_call_credentials_vtable refresh_token_vtable = { static void refresh_token_fetch_oauth2( grpc_exec_ctx *exec_ctx, grpc_credentials_metadata_request *metadata_req, grpc_httpcli_context *httpcli_context, grpc_polling_entity *pollent, - grpc_httpcli_response_cb response_cb, gpr_timespec deadline) { + grpc_iomgr_cb_func response_cb, gpr_timespec deadline) { grpc_google_refresh_token_credentials *c = (grpc_google_refresh_token_credentials *)metadata_req->creds; grpc_http_header header = {"Content-Type", @@ -354,7 +357,9 @@ static void refresh_token_fetch_oauth2( request.http.hdrs = &header; request.handshaker = &grpc_httpcli_ssl; grpc_httpcli_post(exec_ctx, httpcli_context, pollent, &request, body, - strlen(body), deadline, response_cb, metadata_req); + strlen(body), deadline, + grpc_closure_create(response_cb, metadata_req), + &metadata_req->response); gpr_free(body); } diff --git a/src/core/lib/security/credentials/oauth2/oauth2_credentials.h b/src/core/lib/security/credentials/oauth2/oauth2_credentials.h index 3bc8360a41..7f6f205c22 100644 --- a/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +++ b/src/core/lib/security/credentials/oauth2/oauth2_credentials.h @@ -71,7 +71,7 @@ typedef void (*grpc_fetch_oauth2_func)(grpc_exec_ctx *exec_ctx, grpc_credentials_metadata_request *req, grpc_httpcli_context *http_context, grpc_polling_entity *pollent, - grpc_httpcli_response_cb response_cb, + grpc_iomgr_cb_func cb, gpr_timespec deadline); typedef struct { grpc_call_credentials base; diff --git a/src/core/lib/security/transport/handshake.c b/src/core/lib/security/transport/handshake.c index 6561f4b47d..b374ca7633 100644 --- a/src/core/lib/security/transport/handshake.c +++ b/src/core/lib/security/transport/handshake.c @@ -39,8 +39,10 @@ #include <grpc/support/alloc.h> #include <grpc/support/log.h> #include <grpc/support/slice_buffer.h> +#include "src/core/lib/iomgr/timer.h" #include "src/core/lib/security/context/security_context.h" #include "src/core/lib/security/transport/secure_endpoint.h" +#include "src/core/lib/security/transport/tsi_error.h" #define GRPC_INITIAL_HANDSHAKE_BUFFER_SIZE 256 @@ -60,13 +62,16 @@ typedef struct { grpc_closure on_handshake_data_sent_to_peer; grpc_closure on_handshake_data_received_from_peer; grpc_auth_context *auth_context; + grpc_timer timer; + gpr_refcount refs; } grpc_security_handshake; static void on_handshake_data_received_from_peer(grpc_exec_ctx *exec_ctx, - void *setup, bool success); + void *setup, + grpc_error *error); static void on_handshake_data_sent_to_peer(grpc_exec_ctx *exec_ctx, void *setup, - bool success); + grpc_error *error); static void security_connector_remove_handshake(grpc_security_handshake *h) { GPR_ASSERT(!h->is_client_side); @@ -95,16 +100,34 @@ static void security_connector_remove_handshake(grpc_security_handshake *h) { gpr_mu_unlock(&sc->mu); } +static void unref_handshake(grpc_security_handshake *h) { + if (gpr_unref(&h->refs)) { + if (h->handshaker != NULL) tsi_handshaker_destroy(h->handshaker); + if (h->handshake_buffer != NULL) gpr_free(h->handshake_buffer); + gpr_slice_buffer_destroy(&h->left_overs); + gpr_slice_buffer_destroy(&h->outgoing); + gpr_slice_buffer_destroy(&h->incoming); + GRPC_AUTH_CONTEXT_UNREF(h->auth_context, "handshake"); + GRPC_SECURITY_CONNECTOR_UNREF(h->connector, "handshake"); + gpr_free(h); + } +} + static void security_handshake_done(grpc_exec_ctx *exec_ctx, grpc_security_handshake *h, - int is_success) { + grpc_error *error) { + grpc_timer_cancel(exec_ctx, &h->timer); if (!h->is_client_side) { security_connector_remove_handshake(h); } - if (is_success) { + if (error == GRPC_ERROR_NONE) { h->cb(exec_ctx, h->user_data, GRPC_SECURITY_OK, h->secure_endpoint, h->auth_context); } else { + const char *msg = grpc_error_string(error); + gpr_log(GPR_ERROR, "Security handshake failed: %s", msg); + grpc_error_free_string(msg); + if (h->secure_endpoint != NULL) { grpc_endpoint_shutdown(exec_ctx, h->secure_endpoint); grpc_endpoint_destroy(exec_ctx, h->secure_endpoint); @@ -113,14 +136,8 @@ static void security_handshake_done(grpc_exec_ctx *exec_ctx, } h->cb(exec_ctx, h->user_data, GRPC_SECURITY_ERROR, NULL, NULL); } - if (h->handshaker != NULL) tsi_handshaker_destroy(h->handshaker); - if (h->handshake_buffer != NULL) gpr_free(h->handshake_buffer); - gpr_slice_buffer_destroy(&h->left_overs); - gpr_slice_buffer_destroy(&h->outgoing); - gpr_slice_buffer_destroy(&h->incoming); - GRPC_AUTH_CONTEXT_UNREF(h->auth_context, "handshake"); - GRPC_SECURITY_CONNECTOR_UNREF(h->connector, "handshake"); - gpr_free(h); + unref_handshake(h); + GRPC_ERROR_UNREF(error); } static void on_peer_checked(grpc_exec_ctx *exec_ctx, void *user_data, @@ -130,17 +147,20 @@ static void on_peer_checked(grpc_exec_ctx *exec_ctx, void *user_data, tsi_frame_protector *protector; tsi_result result; if (status != GRPC_SECURITY_OK) { - gpr_log(GPR_ERROR, "Error checking peer."); - security_handshake_done(exec_ctx, h, 0); + security_handshake_done( + exec_ctx, h, + grpc_error_set_int(GRPC_ERROR_CREATE("Error checking peer."), + GRPC_ERROR_INT_SECURITY_STATUS, status)); return; } h->auth_context = GRPC_AUTH_CONTEXT_REF(auth_context, "handshake"); result = tsi_handshaker_create_frame_protector(h->handshaker, NULL, &protector); if (result != TSI_OK) { - gpr_log(GPR_ERROR, "Frame protector creation failed with error %s.", - tsi_result_to_string(result)); - security_handshake_done(exec_ctx, h, 0); + security_handshake_done( + exec_ctx, h, + grpc_set_tsi_error_result( + GRPC_ERROR_CREATE("Frame protector creation failed"), result)); return; } h->secure_endpoint = @@ -148,7 +168,7 @@ static void on_peer_checked(grpc_exec_ctx *exec_ctx, void *user_data, h->left_overs.slices, h->left_overs.count); h->left_overs.count = 0; h->left_overs.length = 0; - security_handshake_done(exec_ctx, h, 1); + security_handshake_done(exec_ctx, h, GRPC_ERROR_NONE); return; } @@ -157,9 +177,9 @@ static void check_peer(grpc_exec_ctx *exec_ctx, grpc_security_handshake *h) { tsi_result result = tsi_handshaker_extract_peer(h->handshaker, &peer); if (result != TSI_OK) { - gpr_log(GPR_ERROR, "Peer extraction failed with error %s", - tsi_result_to_string(result)); - security_handshake_done(exec_ctx, h, 0); + security_handshake_done( + exec_ctx, h, grpc_set_tsi_error_result( + GRPC_ERROR_CREATE("Peer extraction failed"), result)); return; } grpc_security_connector_check_peer(exec_ctx, h->connector, peer, @@ -185,9 +205,9 @@ static void send_handshake_bytes_to_peer(grpc_exec_ctx *exec_ctx, } while (result == TSI_INCOMPLETE_DATA); if (result != TSI_OK) { - gpr_log(GPR_ERROR, "Handshake failed with error %s", - tsi_result_to_string(result)); - security_handshake_done(exec_ctx, h, 0); + security_handshake_done(exec_ctx, h, + grpc_set_tsi_error_result( + GRPC_ERROR_CREATE("Handshake failed"), result)); return; } @@ -203,7 +223,7 @@ static void send_handshake_bytes_to_peer(grpc_exec_ctx *exec_ctx, static void on_handshake_data_received_from_peer(grpc_exec_ctx *exec_ctx, void *handshake, - bool success) { + grpc_error *error) { grpc_security_handshake *h = handshake; size_t consumed_slice_size = 0; tsi_result result = TSI_OK; @@ -211,9 +231,10 @@ static void on_handshake_data_received_from_peer(grpc_exec_ctx *exec_ctx, size_t num_left_overs; int has_left_overs_in_current_slice = 0; - if (!success) { - gpr_log(GPR_ERROR, "Read failed."); - security_handshake_done(exec_ctx, h, 0); + if (error != GRPC_ERROR_NONE) { + security_handshake_done( + exec_ctx, h, + GRPC_ERROR_CREATE_REFERENCING("Handshake read failed", &error, 1)); return; } @@ -238,9 +259,9 @@ static void on_handshake_data_received_from_peer(grpc_exec_ctx *exec_ctx, } if (result != TSI_OK) { - gpr_log(GPR_ERROR, "Handshake failed with error %s", - tsi_result_to_string(result)); - security_handshake_done(exec_ctx, h, 0); + security_handshake_done(exec_ctx, h, + grpc_set_tsi_error_result( + GRPC_ERROR_CREATE("Handshake failed"), result)); return; } @@ -270,13 +291,15 @@ static void on_handshake_data_received_from_peer(grpc_exec_ctx *exec_ctx, /* If handshake is NULL, the handshake is done. */ static void on_handshake_data_sent_to_peer(grpc_exec_ctx *exec_ctx, - void *handshake, bool success) { + void *handshake, grpc_error *error) { grpc_security_handshake *h = handshake; /* Make sure that write is OK. */ - if (!success) { - gpr_log(GPR_ERROR, "Write failed."); - if (handshake != NULL) security_handshake_done(exec_ctx, h, 0); + if (error != GRPC_ERROR_NONE) { + if (handshake != NULL) + security_handshake_done( + exec_ctx, h, + GRPC_ERROR_CREATE_REFERENCING("Handshake write failed", &error, 1)); return; } @@ -291,13 +314,19 @@ static void on_handshake_data_sent_to_peer(grpc_exec_ctx *exec_ctx, } } -void grpc_do_security_handshake(grpc_exec_ctx *exec_ctx, - tsi_handshaker *handshaker, - grpc_security_connector *connector, - bool is_client_side, - grpc_endpoint *nonsecure_endpoint, - grpc_security_handshake_done_cb cb, - void *user_data) { +static void on_timeout(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + grpc_security_handshake *h = arg; + if (error == GRPC_ERROR_NONE) { + grpc_endpoint_shutdown(exec_ctx, h->wrapped_endpoint); + } + unref_handshake(h); +} + +void grpc_do_security_handshake( + grpc_exec_ctx *exec_ctx, tsi_handshaker *handshaker, + grpc_security_connector *connector, bool is_client_side, + grpc_endpoint *nonsecure_endpoint, gpr_timespec deadline, + grpc_security_handshake_done_cb cb, void *user_data) { grpc_security_connector_handshake_list *handshake_node; grpc_security_handshake *h = gpr_malloc(sizeof(grpc_security_handshake)); memset(h, 0, sizeof(grpc_security_handshake)); @@ -309,6 +338,7 @@ void grpc_do_security_handshake(grpc_exec_ctx *exec_ctx, h->wrapped_endpoint = nonsecure_endpoint; h->user_data = user_data; h->cb = cb; + gpr_ref_init(&h->refs, 2); /* timer and handshake proper each get a ref */ grpc_closure_init(&h->on_handshake_data_sent_to_peer, on_handshake_data_sent_to_peer, h); grpc_closure_init(&h->on_handshake_data_received_from_peer, @@ -327,6 +357,8 @@ void grpc_do_security_handshake(grpc_exec_ctx *exec_ctx, gpr_mu_unlock(&server_connector->mu); } send_handshake_bytes_to_peer(exec_ctx, h); + grpc_timer_init(exec_ctx, &h->timer, deadline, on_timeout, h, + gpr_now(deadline.clock_type)); } void grpc_security_handshake_shutdown(grpc_exec_ctx *exec_ctx, diff --git a/src/core/lib/security/transport/handshake.h b/src/core/lib/security/transport/handshake.h index 6ed850b315..c0906dd6af 100644 --- a/src/core/lib/security/transport/handshake.h +++ b/src/core/lib/security/transport/handshake.h @@ -38,13 +38,11 @@ #include "src/core/lib/security/transport/security_connector.h" /* Calls the callback upon completion. Takes owership of handshaker. */ -void grpc_do_security_handshake(grpc_exec_ctx *exec_ctx, - tsi_handshaker *handshaker, - grpc_security_connector *connector, - bool is_client_side, - grpc_endpoint *nonsecure_endpoint, - grpc_security_handshake_done_cb cb, - void *user_data); +void grpc_do_security_handshake( + grpc_exec_ctx *exec_ctx, tsi_handshaker *handshaker, + grpc_security_connector *connector, bool is_client_side, + grpc_endpoint *nonsecure_endpoint, gpr_timespec deadline, + grpc_security_handshake_done_cb cb, void *user_data); void grpc_security_handshake_shutdown(grpc_exec_ctx *exec_ctx, void *handshake); diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c index 4438c8e559..7650d68e89 100644 --- a/src/core/lib/security/transport/secure_endpoint.c +++ b/src/core/lib/security/transport/secure_endpoint.c @@ -38,6 +38,7 @@ #include <grpc/support/slice_buffer.h> #include <grpc/support/sync.h> #include "src/core/lib/debug/trace.h" +#include "src/core/lib/security/transport/tsi_error.h" #include "src/core/lib/support/string.h" #include "src/core/lib/tsi/transport_security_interface.h" @@ -126,8 +127,8 @@ static void flush_read_staging_buffer(secure_endpoint *ep, uint8_t **cur, } static void call_read_cb(grpc_exec_ctx *exec_ctx, secure_endpoint *ep, - bool success) { - if (grpc_trace_secure_endpoint) { + grpc_error *error) { + if (false && grpc_trace_secure_endpoint) { size_t i; for (i = 0; i < ep->read_buffer->count; i++) { char *data = gpr_dump_slice(ep->read_buffer->slices[i], @@ -137,11 +138,12 @@ static void call_read_cb(grpc_exec_ctx *exec_ctx, secure_endpoint *ep, } } ep->read_buffer = NULL; - grpc_exec_ctx_enqueue(exec_ctx, ep->read_cb, success, NULL); + grpc_exec_ctx_sched(exec_ctx, ep->read_cb, error, NULL); SECURE_ENDPOINT_UNREF(exec_ctx, ep, "read"); } -static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, bool success) { +static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, + grpc_error *error) { unsigned i; uint8_t keep_looping = 0; tsi_result result = TSI_OK; @@ -149,9 +151,10 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, bool success) { uint8_t *cur = GPR_SLICE_START_PTR(ep->read_staging_buffer); uint8_t *end = GPR_SLICE_END_PTR(ep->read_staging_buffer); - if (!success) { + if (error != GRPC_ERROR_NONE) { gpr_slice_buffer_reset_and_unref(ep->read_buffer); - call_read_cb(exec_ctx, ep, 0); + call_read_cb(exec_ctx, ep, GRPC_ERROR_CREATE_REFERENCING( + "Secure read failed", &error, 1)); return; } @@ -208,11 +211,12 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, bool success) { if (result != TSI_OK) { gpr_slice_buffer_reset_and_unref(ep->read_buffer); - call_read_cb(exec_ctx, ep, 0); + call_read_cb(exec_ctx, ep, grpc_set_tsi_error_result( + GRPC_ERROR_CREATE("Unwrap failed"), result)); return; } - call_read_cb(exec_ctx, ep, 1); + call_read_cb(exec_ctx, ep, GRPC_ERROR_NONE); } static void endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *secure_ep, @@ -226,7 +230,7 @@ static void endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *secure_ep, if (ep->leftover_bytes.count) { gpr_slice_buffer_swap(&ep->leftover_bytes, &ep->source_buffer); GPR_ASSERT(ep->leftover_bytes.count == 0); - on_read(exec_ctx, ep, 1); + on_read(exec_ctx, ep, GRPC_ERROR_NONE); return; } @@ -252,7 +256,7 @@ static void endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *secure_ep, gpr_slice_buffer_reset_and_unref(&ep->output_buffer); - if (grpc_trace_secure_endpoint) { + if (false && grpc_trace_secure_endpoint) { for (i = 0; i < slices->count; i++) { char *data = gpr_dump_slice(slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII); @@ -315,7 +319,10 @@ static void endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *secure_ep, if (result != TSI_OK) { /* TODO(yangg) do different things according to the error type? */ gpr_slice_buffer_reset_and_unref(&ep->output_buffer); - grpc_exec_ctx_enqueue(exec_ctx, cb, false, NULL); + grpc_exec_ctx_sched( + exec_ctx, cb, + grpc_set_tsi_error_result(GRPC_ERROR_CREATE("Wrap failed"), result), + NULL); return; } diff --git a/src/core/lib/security/transport/security_connector.c b/src/core/lib/security/transport/security_connector.c index 72173e7c9d..f0ee6770e5 100644 --- a/src/core/lib/security/transport/security_connector.c +++ b/src/core/lib/security/transport/security_connector.c @@ -43,12 +43,12 @@ #include <grpc/support/string_util.h> #include "src/core/ext/transport/chttp2/alpn/alpn.h" +#include "src/core/lib/iomgr/load_file.h" #include "src/core/lib/security/context/security_context.h" #include "src/core/lib/security/credentials/credentials.h" #include "src/core/lib/security/transport/handshake.h" #include "src/core/lib/security/transport/secure_endpoint.h" #include "src/core/lib/support/env.h" -#include "src/core/lib/support/load_file.h" #include "src/core/lib/support/string.h" #include "src/core/lib/tsi/fake_transport_security.h" #include "src/core/lib/tsi/ssl_transport_security.h" @@ -127,23 +127,25 @@ void grpc_server_security_connector_shutdown( void grpc_channel_security_connector_do_handshake( grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc, - grpc_endpoint *nonsecure_endpoint, grpc_security_handshake_done_cb cb, - void *user_data) { + grpc_endpoint *nonsecure_endpoint, gpr_timespec deadline, + grpc_security_handshake_done_cb cb, void *user_data) { if (sc == NULL || nonsecure_endpoint == NULL) { cb(exec_ctx, user_data, GRPC_SECURITY_ERROR, NULL, NULL); } else { - sc->do_handshake(exec_ctx, sc, nonsecure_endpoint, cb, user_data); + sc->do_handshake(exec_ctx, sc, nonsecure_endpoint, deadline, cb, user_data); } } void grpc_server_security_connector_do_handshake( grpc_exec_ctx *exec_ctx, grpc_server_security_connector *sc, grpc_tcp_server_acceptor *acceptor, grpc_endpoint *nonsecure_endpoint, - grpc_security_handshake_done_cb cb, void *user_data) { + gpr_timespec deadline, grpc_security_handshake_done_cb cb, + void *user_data) { if (sc == NULL || nonsecure_endpoint == NULL) { cb(exec_ctx, user_data, GRPC_SECURITY_ERROR, NULL, NULL); } else { - sc->do_handshake(exec_ctx, sc, acceptor, nonsecure_endpoint, cb, user_data); + sc->do_handshake(exec_ctx, sc, acceptor, nonsecure_endpoint, deadline, cb, + user_data); } } @@ -310,20 +312,23 @@ static void fake_channel_check_call_host(grpc_exec_ctx *exec_ctx, static void fake_channel_do_handshake(grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc, grpc_endpoint *nonsecure_endpoint, + gpr_timespec deadline, grpc_security_handshake_done_cb cb, void *user_data) { grpc_do_security_handshake(exec_ctx, tsi_create_fake_handshaker(1), &sc->base, - true, nonsecure_endpoint, cb, user_data); + true, nonsecure_endpoint, deadline, cb, user_data); } static void fake_server_do_handshake(grpc_exec_ctx *exec_ctx, grpc_server_security_connector *sc, grpc_tcp_server_acceptor *acceptor, grpc_endpoint *nonsecure_endpoint, + gpr_timespec deadline, grpc_security_handshake_done_cb cb, void *user_data) { grpc_do_security_handshake(exec_ctx, tsi_create_fake_handshaker(0), &sc->base, - false, nonsecure_endpoint, cb, user_data); + false, nonsecure_endpoint, deadline, cb, + user_data); } static grpc_security_connector_vtable fake_channel_vtable = { @@ -413,6 +418,7 @@ static grpc_security_status ssl_create_handshaker( static void ssl_channel_do_handshake(grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc, grpc_endpoint *nonsecure_endpoint, + gpr_timespec deadline, grpc_security_handshake_done_cb cb, void *user_data) { grpc_ssl_channel_security_connector *c = @@ -427,7 +433,7 @@ static void ssl_channel_do_handshake(grpc_exec_ctx *exec_ctx, cb(exec_ctx, user_data, status, NULL, NULL); } else { grpc_do_security_handshake(exec_ctx, handshaker, &sc->base, true, - nonsecure_endpoint, cb, user_data); + nonsecure_endpoint, deadline, cb, user_data); } } @@ -435,6 +441,7 @@ static void ssl_server_do_handshake(grpc_exec_ctx *exec_ctx, grpc_server_security_connector *sc, grpc_tcp_server_acceptor *acceptor, grpc_endpoint *nonsecure_endpoint, + gpr_timespec deadline, grpc_security_handshake_done_cb cb, void *user_data) { grpc_ssl_server_security_connector *c = @@ -446,7 +453,7 @@ static void ssl_server_do_handshake(grpc_exec_ctx *exec_ctx, cb(exec_ctx, user_data, status, NULL, NULL); } else { grpc_do_security_handshake(exec_ctx, handshaker, &sc->base, false, - nonsecure_endpoint, cb, user_data); + nonsecure_endpoint, deadline, cb, user_data); } } @@ -635,7 +642,8 @@ static gpr_slice compute_default_pem_root_certs_once(void) { char *default_root_certs_path = gpr_getenv(GRPC_DEFAULT_SSL_ROOTS_FILE_PATH_ENV_VAR); if (default_root_certs_path != NULL) { - result = gpr_load_file(default_root_certs_path, 0, NULL); + GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(default_root_certs_path, 0, &result)); gpr_free(default_root_certs_path); } @@ -653,7 +661,8 @@ static gpr_slice compute_default_pem_root_certs_once(void) { /* Fall back to installed certs if needed. */ if (GPR_SLICE_IS_EMPTY(result) && ovrd_res != GRPC_SSL_ROOTS_OVERRIDE_FAIL_PERMANENTLY) { - result = gpr_load_file(installed_roots_path, 0, NULL); + GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(installed_roots_path, 0, &result)); } return result; } diff --git a/src/core/lib/security/transport/security_connector.h b/src/core/lib/security/transport/security_connector.h index 84e586deaa..c2ddf5ee1e 100644 --- a/src/core/lib/security/transport/security_connector.h +++ b/src/core/lib/security/transport/security_connector.h @@ -143,7 +143,7 @@ struct grpc_channel_security_connector { grpc_security_call_host_check_cb cb, void *user_data); void (*do_handshake)(grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc, - grpc_endpoint *nonsecure_endpoint, + grpc_endpoint *nonsecure_endpoint, gpr_timespec deadline, grpc_security_handshake_done_cb cb, void *user_data); }; @@ -156,8 +156,8 @@ void grpc_channel_security_connector_check_call_host( /* Handshake. */ void grpc_channel_security_connector_do_handshake( grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *connector, - grpc_endpoint *nonsecure_endpoint, grpc_security_handshake_done_cb cb, - void *user_data); + grpc_endpoint *nonsecure_endpoint, gpr_timespec deadline, + grpc_security_handshake_done_cb cb, void *user_data); /* --- server_security_connector object. --- @@ -174,14 +174,14 @@ struct grpc_server_security_connector { void (*do_handshake)(grpc_exec_ctx *exec_ctx, grpc_server_security_connector *sc, grpc_tcp_server_acceptor *acceptor, - grpc_endpoint *nonsecure_endpoint, + grpc_endpoint *nonsecure_endpoint, gpr_timespec deadline, grpc_security_handshake_done_cb cb, void *user_data); }; void grpc_server_security_connector_do_handshake( grpc_exec_ctx *exec_ctx, grpc_server_security_connector *sc, grpc_tcp_server_acceptor *acceptor, grpc_endpoint *nonsecure_endpoint, - grpc_security_handshake_done_cb cb, void *user_data); + gpr_timespec deadline, grpc_security_handshake_done_cb cb, void *user_data); void grpc_server_security_connector_shutdown( grpc_exec_ctx *exec_ctx, grpc_server_security_connector *connector); diff --git a/src/core/lib/security/transport/server_auth_filter.c b/src/core/lib/security/transport/server_auth_filter.c index b36be127fd..12e789bde9 100644 --- a/src/core/lib/security/transport/server_auth_filter.c +++ b/src/core/lib/security/transport/server_auth_filter.c @@ -128,7 +128,7 @@ static void on_md_processing_done( grpc_metadata_batch_filter(calld->recv_initial_metadata, remove_consumed_md, elem); grpc_metadata_array_destroy(&calld->md); - calld->on_done_recv->cb(&exec_ctx, calld->on_done_recv->cb_arg, 1); + grpc_exec_ctx_sched(&exec_ctx, calld->on_done_recv, GRPC_ERROR_NONE, NULL); } else { gpr_slice message; grpc_transport_stream_op close_op; @@ -146,18 +146,21 @@ static void on_md_processing_done( calld->transport_op.send_trailing_metadata = NULL; grpc_transport_stream_op_add_close(&close_op, status, &message); grpc_call_next_op(&exec_ctx, elem, &close_op); - calld->on_done_recv->cb(&exec_ctx, calld->on_done_recv->cb_arg, 0); + grpc_exec_ctx_sched(&exec_ctx, calld->on_done_recv, + grpc_error_set_int(GRPC_ERROR_CREATE(error_details), + GRPC_ERROR_INT_GRPC_STATUS, status), + NULL); } grpc_exec_ctx_finish(&exec_ctx); } static void auth_on_recv(grpc_exec_ctx *exec_ctx, void *user_data, - bool success) { + grpc_error *error) { grpc_call_element *elem = user_data; call_data *calld = elem->call_data; channel_data *chand = elem->channel_data; - if (success) { + if (error == GRPC_ERROR_NONE) { if (chand->creds->processor.process != NULL) { calld->md = metadata_batch_to_md_array(calld->recv_initial_metadata); chand->creds->processor.process( @@ -166,7 +169,8 @@ static void auth_on_recv(grpc_exec_ctx *exec_ctx, void *user_data, return; } } - calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, success); + grpc_exec_ctx_sched(exec_ctx, calld->on_done_recv, GRPC_ERROR_REF(error), + NULL); } static void set_recv_ops_md_callbacks(grpc_call_element *elem, diff --git a/src/core/lib/security/transport/tsi_error.c b/src/core/lib/security/transport/tsi_error.c new file mode 100644 index 0000000000..afc1733567 --- /dev/null +++ b/src/core/lib/security/transport/tsi_error.c @@ -0,0 +1,40 @@ +/* + * + * 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/security/transport/tsi_error.h" + +grpc_error *grpc_set_tsi_error_result(grpc_error *error, tsi_result result) { + return grpc_error_set_int(grpc_error_set_str(error, GRPC_ERROR_STR_TSI_ERROR, + tsi_result_to_string(result)), + GRPC_ERROR_INT_TSI_CODE, result); +} diff --git a/src/core/lib/security/transport/tsi_error.h b/src/core/lib/security/transport/tsi_error.h new file mode 100644 index 0000000000..636fbb89cf --- /dev/null +++ b/src/core/lib/security/transport/tsi_error.h @@ -0,0 +1,42 @@ +/* + * + * 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_SECURITY_TRANSPORT_TSI_ERROR_H +#define GRPC_CORE_LIB_SECURITY_TRANSPORT_TSI_ERROR_H + +#include "src/core/lib/iomgr/error.h" +#include "src/core/lib/tsi/transport_security_interface.h" + +grpc_error *grpc_set_tsi_error_result(grpc_error *error, tsi_result result); + +#endif /* GRPC_CORE_LIB_SECURITY_TRANSPORT_TSI_ERROR_H */ diff --git a/src/core/lib/support/avl.c b/src/core/lib/support/avl.c index 8d3ce23e6c..acf8fd5a55 100644 --- a/src/core/lib/support/avl.c +++ b/src/core/lib/support/avl.c @@ -124,6 +124,15 @@ void *gpr_avl_get(gpr_avl avl, void *key) { return node ? node->value : NULL; } +int gpr_avl_maybe_get(gpr_avl avl, void *key, void **value) { + gpr_avl_node *node = get(avl.vtable, avl.root, key); + if (node != NULL) { + *value = node->value; + return 1; + } + return 0; +} + static gpr_avl_node *rotate_left(const gpr_avl_vtable *vtable, void *key, void *value, gpr_avl_node *left, gpr_avl_node *right) { @@ -286,3 +295,5 @@ gpr_avl gpr_avl_ref(gpr_avl avl) { } void gpr_avl_unref(gpr_avl avl) { unref_node(avl.vtable, avl.root); } + +int gpr_avl_is_empty(gpr_avl avl) { return avl.root == NULL; } diff --git a/src/core/lib/support/log.c b/src/core/lib/support/log.c index 882abf673c..bae0957df7 100644 --- a/src/core/lib/support/log.c +++ b/src/core/lib/support/log.c @@ -96,4 +96,6 @@ void gpr_log_verbosity_init() { } } -void gpr_set_log_function(gpr_log_func f) { g_log_func = f; } +void gpr_set_log_function(gpr_log_func f) { + g_log_func = f ? f : gpr_default_log; +} diff --git a/src/core/lib/surface/alarm.c b/src/core/lib/surface/alarm.c index 2cf2f00b31..aa9d60ee6a 100644 --- a/src/core/lib/surface/alarm.c +++ b/src/core/lib/surface/alarm.c @@ -48,9 +48,9 @@ struct grpc_alarm { static void do_nothing_end_completion(grpc_exec_ctx *exec_ctx, void *arg, grpc_cq_completion *c) {} -static void alarm_cb(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void alarm_cb(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { grpc_alarm *alarm = arg; - grpc_cq_end_op(exec_ctx, alarm->cq, alarm->tag, success, + grpc_cq_end_op(exec_ctx, alarm->cq, alarm->tag, error, do_nothing_end_completion, NULL, &alarm->completion); } diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c index c613f325dc..04291b0ee0 100644 --- a/src/core/lib/surface/call.c +++ b/src/core/lib/surface/call.c @@ -100,6 +100,7 @@ typedef struct batch_control { grpc_closure finish_batch; void *notify_tag; gpr_refcount steps_to_complete; + grpc_error *error; uint8_t send_initial_metadata; uint8_t send_message; @@ -108,7 +109,6 @@ typedef struct batch_control { uint8_t recv_message; uint8_t recv_final_op; uint8_t is_notify_tag_closure; - uint8_t success; } batch_control; struct grpc_call { @@ -221,9 +221,9 @@ static grpc_call_error close_with_status(grpc_exec_ctx *exec_ctx, grpc_call *c, grpc_status_code status, const char *description); static void destroy_call(grpc_exec_ctx *exec_ctx, void *call_stack, - bool success); + grpc_error *error); static void receiving_slice_ready(grpc_exec_ctx *exec_ctx, void *bctlp, - bool success); + grpc_error *error); grpc_call *grpc_call_create( grpc_channel *channel, grpc_call *parent_call, uint32_t propagation_mask, @@ -360,7 +360,8 @@ void grpc_call_internal_unref(grpc_exec_ctx *exec_ctx, grpc_call *c REF_ARG) { GRPC_CALL_STACK_UNREF(exec_ctx, CALL_STACK_FROM_CALL(c), REF_REASON); } -static void destroy_call(grpc_exec_ctx *exec_ctx, void *call, bool success) { +static void destroy_call(grpc_exec_ctx *exec_ctx, void *call, + grpc_error *error) { size_t i; int ii; grpc_call *c = call; @@ -746,22 +747,23 @@ typedef struct termination_closure { enum { TC_CANCEL, TC_CLOSE } type; } termination_closure; -static void done_termination(grpc_exec_ctx *exec_ctx, void *tcp, bool success) { +static void done_termination(grpc_exec_ctx *exec_ctx, void *tcp, + grpc_error *error) { termination_closure *tc = tcp; - if (tc->type == TC_CANCEL) { - GRPC_CALL_INTERNAL_UNREF(exec_ctx, tc->call, "cancel"); - } - if (tc->type == TC_CLOSE) { - GRPC_CALL_INTERNAL_UNREF(exec_ctx, tc->call, "close"); + switch (tc->type) { + case TC_CANCEL: + GRPC_CALL_INTERNAL_UNREF(exec_ctx, tc->call, "cancel"); + break; + case TC_CLOSE: + GRPC_CALL_INTERNAL_UNREF(exec_ctx, tc->call, "close"); + break; } gpr_slice_unref(tc->optional_message); - if (tc->op_closure != NULL) { - grpc_exec_ctx_enqueue(exec_ctx, tc->op_closure, true, NULL); - } + grpc_exec_ctx_sched(exec_ctx, tc->op_closure, GRPC_ERROR_NONE, NULL); gpr_free(tc); } -static void send_cancel(grpc_exec_ctx *exec_ctx, void *tcp, bool success) { +static void send_cancel(grpc_exec_ctx *exec_ctx, void *tcp, grpc_error *error) { grpc_transport_stream_op op; termination_closure *tc = tcp; memset(&op, 0, sizeof(op)); @@ -772,7 +774,7 @@ static void send_cancel(grpc_exec_ctx *exec_ctx, void *tcp, bool success) { execute_op(exec_ctx, tc->call, &op); } -static void send_close(grpc_exec_ctx *exec_ctx, void *tcp, bool success) { +static void send_close(grpc_exec_ctx *exec_ctx, void *tcp, grpc_error *error) { grpc_transport_stream_op op; termination_closure *tc = tcp; memset(&op, 0, sizeof(op)); @@ -803,7 +805,7 @@ static grpc_call_error terminate_with_status(grpc_exec_ctx *exec_ctx, grpc_closure_init(&tc->closure, send_close, tc); GRPC_CALL_INTERNAL_REF(tc->call, "close"); } - grpc_exec_ctx_enqueue(exec_ctx, &tc->closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &tc->closure, GRPC_ERROR_NONE, NULL); return GRPC_CALL_OK; } @@ -866,11 +868,11 @@ grpc_call *grpc_call_from_top_element(grpc_call_element *elem) { return CALL_FROM_TOP_ELEM(elem); } -static void call_alarm(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void call_alarm(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { grpc_call *call = arg; gpr_mu_lock(&call->mu); call->have_alarm = 0; - if (success) { + if (error != GRPC_ERROR_CANCELLED) { cancel_with_status(exec_ctx, call, GRPC_STATUS_DEADLINE_EXCEEDED, "Deadline Exceeded"); } @@ -1056,7 +1058,8 @@ static void post_batch_completion(grpc_exec_ctx *exec_ctx, batch_control *bctl) { grpc_call *call = bctl->call; if (bctl->is_notify_tag_closure) { - grpc_exec_ctx_enqueue(exec_ctx, bctl->notify_tag, bctl->success, NULL); + /* unrefs bctl->error */ + grpc_exec_ctx_sched(exec_ctx, bctl->notify_tag, bctl->error, NULL); gpr_mu_lock(&call->mu); bctl->call->used_batches = (uint8_t)(bctl->call->used_batches & @@ -1064,7 +1067,8 @@ static void post_batch_completion(grpc_exec_ctx *exec_ctx, gpr_mu_unlock(&call->mu); GRPC_CALL_INTERNAL_UNREF(exec_ctx, call, "completion"); } else { - grpc_cq_end_op(exec_ctx, bctl->call->cq, bctl->notify_tag, bctl->success, + /* unrefs bctl->error */ + grpc_cq_end_op(exec_ctx, bctl->call->cq, bctl->notify_tag, bctl->error, finish_batch_completion, bctl, &bctl->cq_completion); } } @@ -1096,15 +1100,18 @@ static void continue_receiving_slices(grpc_exec_ctx *exec_ctx, } static void receiving_slice_ready(grpc_exec_ctx *exec_ctx, void *bctlp, - bool success) { + grpc_error *error) { batch_control *bctl = bctlp; grpc_call *call = bctl->call; - if (success) { + if (error == GRPC_ERROR_NONE) { gpr_slice_buffer_add(&(*call->receiving_buffer)->data.raw.slice_buffer, call->receiving_slice); continue_receiving_slices(exec_ctx, bctl); } else { + if (grpc_trace_operation_failures) { + GRPC_LOG_IF_ERROR("receiving_slice_ready", GRPC_ERROR_REF(error)); + } grpc_byte_stream_destroy(exec_ctx, call->receiving_stream); call->receiving_stream = NULL; grpc_byte_buffer_destroy(*call->receiving_buffer); @@ -1153,15 +1160,15 @@ static void process_data_after_md(grpc_exec_ctx *exec_ctx, batch_control *bctl, } static void receiving_stream_ready(grpc_exec_ctx *exec_ctx, void *bctlp, - bool success) { + grpc_error *error) { batch_control *bctl = bctlp; grpc_call *call = bctl->call; gpr_mu_lock(&bctl->call->mu); - if (bctl->call->has_initial_md_been_received || !success || + if (bctl->call->has_initial_md_been_received || error != GRPC_ERROR_NONE || call->receiving_stream == NULL) { gpr_mu_unlock(&bctl->call->mu); - process_data_after_md(exec_ctx, bctlp, success); + process_data_after_md(exec_ctx, bctlp, error); } else { call->saved_receiving_stream_ready_bctlp = bctlp; gpr_mu_unlock(&bctl->call->mu); @@ -1219,14 +1226,14 @@ static void validate_filtered_metadata(grpc_exec_ctx *exec_ctx, } static void receiving_initial_metadata_ready(grpc_exec_ctx *exec_ctx, - void *bctlp, bool success) { + void *bctlp, grpc_error *error) { batch_control *bctl = bctlp; grpc_call *call = bctl->call; gpr_mu_lock(&call->mu); - if (!success) { - bctl->success = false; + if (error != GRPC_ERROR_NONE) { + bctl->error = GRPC_ERROR_REF(error); } else { grpc_metadata_batch *md = &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */]; @@ -1250,7 +1257,7 @@ static void receiving_initial_metadata_ready(grpc_exec_ctx *exec_ctx, grpc_closure *saved_rsr_closure = grpc_closure_create( receiving_stream_ready, call->saved_receiving_stream_ready_bctlp); call->saved_receiving_stream_ready_bctlp = NULL; - grpc_exec_ctx_enqueue(exec_ctx, saved_rsr_closure, success, NULL); + grpc_exec_ctx_sched(exec_ctx, saved_rsr_closure, error, NULL); } gpr_mu_unlock(&call->mu); @@ -1260,15 +1267,18 @@ static void receiving_initial_metadata_ready(grpc_exec_ctx *exec_ctx, } } -static void finish_batch(grpc_exec_ctx *exec_ctx, void *bctlp, bool success) { +static void finish_batch(grpc_exec_ctx *exec_ctx, void *bctlp, + grpc_error *error) { batch_control *bctl = bctlp; grpc_call *call = bctl->call; grpc_call *child_call; grpc_call *next_child_call; + GRPC_ERROR_REF(error); + gpr_mu_lock(&call->mu); if (bctl->send_initial_metadata) { - if (!success) { + if (error != GRPC_ERROR_NONE) { set_status_code(call, STATUS_FROM_CORE, GRPC_STATUS_UNAVAILABLE); } grpc_metadata_batch_destroy( @@ -1314,13 +1324,17 @@ static void finish_batch(grpc_exec_ctx *exec_ctx, void *bctlp, bool success) { call->final_op.server.cancelled); } - success = 1; + GRPC_ERROR_UNREF(error); + error = GRPC_ERROR_NONE; } - bctl->success = success != 0; + GRPC_ERROR_UNREF(bctl->error); + bctl->error = GRPC_ERROR_REF(error); gpr_mu_unlock(&call->mu); if (gpr_unref(&bctl->steps_to_complete)) { post_batch_completion(exec_ctx, bctl); } + + GRPC_ERROR_UNREF(error); } static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx, @@ -1350,7 +1364,7 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx, if (nops == 0) { GRPC_CALL_INTERNAL_REF(call, "completion"); - bctl->success = 1; + bctl->error = GRPC_ERROR_NONE; if (!is_notify_tag_closure) { grpc_cq_begin_op(call->cq, notify_tag); } diff --git a/src/core/lib/surface/channel.c b/src/core/lib/surface/channel.c index f0b3c2e15d..8936e7164f 100644 --- a/src/core/lib/surface/channel.c +++ b/src/core/lib/surface/channel.c @@ -83,7 +83,8 @@ struct grpc_channel { /* the protobuf library will (by default) start warning at 100megs */ #define DEFAULT_MAX_MESSAGE_LENGTH (100 * 1024 * 1024) -static void destroy_channel(grpc_exec_ctx *exec_ctx, void *arg, bool success); +static void destroy_channel(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error); grpc_channel *grpc_channel_create(grpc_exec_ctx *exec_ctx, const char *target, const grpc_channel_args *input_args, @@ -310,7 +311,7 @@ void grpc_channel_internal_unref(grpc_exec_ctx *exec_ctx, } static void destroy_channel(grpc_exec_ctx *exec_ctx, void *arg, - bool iomgr_success) { + grpc_error *error) { grpc_channel *channel = arg; grpc_channel_stack_destroy(exec_ctx, CHANNEL_STACK_FROM_CHANNEL(channel)); while (channel->registered_calls) { @@ -336,7 +337,7 @@ void grpc_channel_destroy(grpc_channel *channel) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; GRPC_API_TRACE("grpc_channel_destroy(channel=%p)", 1, (channel)); memset(&op, 0, sizeof(op)); - op.disconnect = 1; + op.disconnect_with_error = GRPC_ERROR_CREATE("Channel Destroyed"); elem = grpc_channel_stack_element(CHANNEL_STACK_FROM_CHANNEL(channel), 0); elem->filter->start_transport_op(&exec_ctx, elem, &op); diff --git a/src/core/lib/surface/channel_ping.c b/src/core/lib/surface/channel_ping.c index 5a50698695..9818f9d2f2 100644 --- a/src/core/lib/surface/channel_ping.c +++ b/src/core/lib/surface/channel_ping.c @@ -53,10 +53,10 @@ static void ping_destroy(grpc_exec_ctx *exec_ctx, void *arg, gpr_free(arg); } -static void ping_done(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void ping_done(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { ping_result *pr = arg; - grpc_cq_end_op(exec_ctx, pr->cq, pr->tag, success, ping_destroy, pr, - &pr->completion_storage); + grpc_cq_end_op(exec_ctx, pr->cq, pr->tag, GRPC_ERROR_REF(error), ping_destroy, + pr, &pr->completion_storage); } void grpc_channel_ping(grpc_channel *channel, grpc_completion_queue *cq, diff --git a/src/core/lib/surface/completion_queue.c b/src/core/lib/surface/completion_queue.c index 5eb7cf1bf4..2cc6aa74e0 100644 --- a/src/core/lib/surface/completion_queue.c +++ b/src/core/lib/surface/completion_queue.c @@ -50,6 +50,8 @@ #include "src/core/lib/surface/event_string.h" #include "src/core/lib/surface/surface_trace.h" +int grpc_trace_operation_failures; + typedef struct { grpc_pollset_worker **worker; void *tag; @@ -92,7 +94,7 @@ static gpr_mu g_freelist_mu; static grpc_completion_queue *g_freelist; static void on_pollset_shutdown_done(grpc_exec_ctx *exec_ctx, void *cc, - bool success); + grpc_error *error); void grpc_cq_global_init(void) { gpr_mu_init(&g_freelist_mu); } @@ -176,7 +178,7 @@ void grpc_cq_internal_ref(grpc_completion_queue *cc) { } static void on_pollset_shutdown_done(grpc_exec_ctx *exec_ctx, void *arg, - bool success) { + grpc_error *error) { grpc_completion_queue *cc = arg; GRPC_CQ_INTERNAL_UNREF(cc, "pollset_destroy"); } @@ -219,7 +221,7 @@ void grpc_cq_begin_op(grpc_completion_queue *cc, void *tag) { event, then enter shutdown mode */ /* Queue a GRPC_OP_COMPLETED operation */ void grpc_cq_end_op(grpc_exec_ctx *exec_ctx, grpc_completion_queue *cc, - void *tag, int success, + void *tag, grpc_error *error, void (*done)(grpc_exec_ctx *exec_ctx, void *done_arg, grpc_cq_completion *storage), void *done_arg, grpc_cq_completion *storage) { @@ -231,16 +233,24 @@ void grpc_cq_end_op(grpc_exec_ctx *exec_ctx, grpc_completion_queue *cc, #endif GPR_TIMER_BEGIN("grpc_cq_end_op", 0); - GRPC_API_TRACE( - "grpc_cq_end_op(exec_ctx=%p, cc=%p, tag=%p, success=%d, done=%p, " - "done_arg=%p, storage=%p)", - 7, (exec_ctx, cc, tag, success, done, done_arg, storage)); + if (grpc_api_trace || + (grpc_trace_operation_failures && error != GRPC_ERROR_NONE)) { + const char *errmsg = grpc_error_string(error); + GRPC_API_TRACE( + "grpc_cq_end_op(exec_ctx=%p, cc=%p, tag=%p, error=%s, done=%p, " + "done_arg=%p, storage=%p)", + 7, (exec_ctx, cc, tag, errmsg, done, done_arg, storage)); + if (grpc_trace_operation_failures) { + gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg); + } + grpc_error_free_string(errmsg); + } storage->tag = tag; storage->done = done; storage->done_arg = done_arg; - storage->next = - ((uintptr_t)&cc->completed_head) | ((uintptr_t)(success != 0)); + storage->next = ((uintptr_t)&cc->completed_head) | + ((uintptr_t)(error == GRPC_ERROR_NONE)); gpr_mu_lock(cc->mu); #ifndef NDEBUG @@ -267,8 +277,15 @@ void grpc_cq_end_op(grpc_exec_ctx *exec_ctx, grpc_completion_queue *cc, break; } } - grpc_pollset_kick(POLLSET_FROM_CQ(cc), pluck_worker); + grpc_error *kick_error = + grpc_pollset_kick(POLLSET_FROM_CQ(cc), pluck_worker); gpr_mu_unlock(cc->mu); + if (kick_error != GRPC_ERROR_NONE) { + const char *msg = grpc_error_string(kick_error); + gpr_log(GPR_ERROR, "Kick failed: %s", msg); + grpc_error_free_string(msg); + GRPC_ERROR_UNREF(kick_error); + } } else { cc->completed_tail->next = ((uintptr_t)storage) | (1u & (uintptr_t)cc->completed_tail->next); @@ -282,6 +299,8 @@ void grpc_cq_end_op(grpc_exec_ctx *exec_ctx, grpc_completion_queue *cc, } GPR_TIMER_END("grpc_cq_end_op", 0); + + GRPC_ERROR_UNREF(error); } grpc_event grpc_completion_queue_next(grpc_completion_queue *cc, @@ -347,8 +366,18 @@ grpc_event grpc_completion_queue_next(grpc_completion_queue *cc, gpr_mu_lock(cc->mu); continue; } else { - grpc_pollset_work(&exec_ctx, POLLSET_FROM_CQ(cc), &worker, now, - iteration_deadline); + grpc_error *err = grpc_pollset_work(&exec_ctx, POLLSET_FROM_CQ(cc), + &worker, now, iteration_deadline); + if (err != GRPC_ERROR_NONE) { + gpr_mu_unlock(cc->mu); + const char *msg = grpc_error_string(err); + gpr_log(GPR_ERROR, "Completion queue next failed: %s", msg); + grpc_error_free_string(msg); + GRPC_ERROR_UNREF(err); + memset(&ret, 0, sizeof(ret)); + ret.type = GRPC_QUEUE_TIMEOUT; + break; + } } } GRPC_SURFACE_TRACE_RETURNED_EVENT(cc, &ret); @@ -464,8 +493,19 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag, grpc_exec_ctx_flush(&exec_ctx); gpr_mu_lock(cc->mu); } else { - grpc_pollset_work(&exec_ctx, POLLSET_FROM_CQ(cc), &worker, now, - iteration_deadline); + grpc_error *err = grpc_pollset_work(&exec_ctx, POLLSET_FROM_CQ(cc), + &worker, now, iteration_deadline); + if (err != GRPC_ERROR_NONE) { + del_plucker(cc, tag, &worker); + gpr_mu_unlock(cc->mu); + const char *msg = grpc_error_string(err); + gpr_log(GPR_ERROR, "Completion queue next failed: %s", msg); + grpc_error_free_string(msg); + GRPC_ERROR_UNREF(err); + memset(&ret, 0, sizeof(ret)); + ret.type = GRPC_QUEUE_TIMEOUT; + break; + } } del_plucker(cc, tag, &worker); } diff --git a/src/core/lib/surface/completion_queue.h b/src/core/lib/surface/completion_queue.h index 3d0dd13c53..b9dd1092b6 100644 --- a/src/core/lib/surface/completion_queue.h +++ b/src/core/lib/surface/completion_queue.h @@ -39,6 +39,8 @@ #include <grpc/grpc.h> #include "src/core/lib/iomgr/pollset.h" +extern int grpc_trace_operation_failures; + typedef struct grpc_cq_completion { /** user supplied tag */ void *tag; @@ -75,7 +77,7 @@ void grpc_cq_begin_op(grpc_completion_queue *cc, void *tag); /* Queue a GRPC_OP_COMPLETED operation; tag must correspond to the tag passed to grpc_cq_begin_op */ void grpc_cq_end_op(grpc_exec_ctx *exec_ctx, grpc_completion_queue *cc, - void *tag, int success, + void *tag, grpc_error *error, void (*done)(grpc_exec_ctx *exec_ctx, void *done_arg, grpc_cq_completion *storage), void *done_arg, grpc_cq_completion *storage); diff --git a/src/core/lib/surface/init.c b/src/core/lib/surface/init.c index 1c8b709015..f07039cb94 100644 --- a/src/core/lib/surface/init.c +++ b/src/core/lib/surface/init.c @@ -165,6 +165,7 @@ void grpc_init(void) { &grpc_trace_channel_stack_builder); grpc_register_tracer("http1", &grpc_http1_trace); grpc_register_tracer("compression", &grpc_compression_trace); + grpc_register_tracer("op_failure", &grpc_trace_operation_failures); grpc_security_pre_init(); grpc_iomgr_init(); grpc_executor_init(); diff --git a/src/core/lib/surface/lame_client.c b/src/core/lib/surface/lame_client.c index 8223555382..5ea4cba5d1 100644 --- a/src/core/lib/surface/lame_client.c +++ b/src/core/lib/surface/lame_client.c @@ -80,7 +80,8 @@ static void lame_start_transport_stream_op(grpc_exec_ctx *exec_ctx, } else if (op->recv_trailing_metadata != NULL) { fill_metadata(elem, op->recv_trailing_metadata); } - grpc_transport_stream_op_finish_with_failure(exec_ctx, op); + grpc_transport_stream_op_finish_with_failure( + exec_ctx, op, GRPC_ERROR_CREATE("lame client channel")); } static char *lame_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) { @@ -93,15 +94,17 @@ static void lame_start_transport_op(grpc_exec_ctx *exec_ctx, if (op->on_connectivity_state_change) { GPR_ASSERT(*op->connectivity_state != GRPC_CHANNEL_SHUTDOWN); *op->connectivity_state = GRPC_CHANNEL_SHUTDOWN; - op->on_connectivity_state_change->cb( - exec_ctx, op->on_connectivity_state_change->cb_arg, 1); + grpc_exec_ctx_sched(exec_ctx, op->on_connectivity_state_change, + GRPC_ERROR_NONE, NULL); } if (op->on_consumed != NULL) { - op->on_consumed->cb(exec_ctx, op->on_consumed->cb_arg, 1); + grpc_exec_ctx_sched(exec_ctx, op->on_consumed, GRPC_ERROR_NONE, NULL); } if (op->send_ping != NULL) { - op->send_ping->cb(exec_ctx, op->send_ping->cb_arg, 0); + grpc_exec_ctx_sched(exec_ctx, op->send_ping, + GRPC_ERROR_CREATE("lame client channel"), NULL); } + GRPC_ERROR_UNREF(op->disconnect_with_error); } static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, diff --git a/src/core/lib/surface/server.c b/src/core/lib/surface/server.c index 88d898bc1c..def6e5068b 100644 --- a/src/core/lib/surface/server.c +++ b/src/core/lib/surface/server.c @@ -230,9 +230,10 @@ struct grpc_server { #define SERVER_FROM_CALL_ELEM(elem) \ (((channel_data *)(elem)->channel_data)->server) -static void publish_new_rpc(grpc_exec_ctx *exec_ctx, void *calld, bool success); +static void publish_new_rpc(grpc_exec_ctx *exec_ctx, void *calld, + grpc_error *error); static void fail_call(grpc_exec_ctx *exec_ctx, grpc_server *server, - size_t cq_idx, requested_call *rc); + size_t cq_idx, requested_call *rc, grpc_error *error); /* Before calling maybe_finish_shutdown, we must hold mu_global and not hold mu_call */ static void maybe_finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_server *server); @@ -263,14 +264,14 @@ struct shutdown_cleanup_args { }; static void shutdown_cleanup(grpc_exec_ctx *exec_ctx, void *arg, - bool iomgr_status_ignored) { + grpc_error *error) { struct shutdown_cleanup_args *a = arg; gpr_slice_unref(a->slice); gpr_free(a); } static void send_shutdown(grpc_exec_ctx *exec_ctx, grpc_channel *channel, - int send_goaway, int send_disconnect) { + int send_goaway, grpc_error *send_disconnect) { grpc_transport_op op; struct shutdown_cleanup_args *sc; grpc_channel_element *elem; @@ -281,7 +282,7 @@ static void send_shutdown(grpc_exec_ctx *exec_ctx, grpc_channel *channel, sc->slice = gpr_slice_from_copied_string("Server shutdown"); op.goaway_message = &sc->slice; op.goaway_status = GRPC_STATUS_OK; - op.disconnect = send_disconnect; + op.disconnect_with_error = send_disconnect; grpc_closure_init(&sc->closure, shutdown_cleanup, sc); op.on_consumed = &sc->closure; @@ -292,14 +293,16 @@ static void send_shutdown(grpc_exec_ctx *exec_ctx, grpc_channel *channel, static void channel_broadcaster_shutdown(grpc_exec_ctx *exec_ctx, channel_broadcaster *cb, int send_goaway, - int force_disconnect) { + grpc_error *force_disconnect) { size_t i; for (i = 0; i < cb->num_channels; i++) { - send_shutdown(exec_ctx, cb->channels[i], send_goaway, force_disconnect); + send_shutdown(exec_ctx, cb->channels[i], send_goaway, + GRPC_ERROR_REF(force_disconnect)); GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, cb->channels[i], "broadcast"); } gpr_free(cb->channels); + GRPC_ERROR_UNREF(force_disconnect); } /* @@ -325,7 +328,8 @@ static void request_matcher_destroy(request_matcher *rm) { gpr_free(rm->requests_per_cq); } -static void kill_zombie(grpc_exec_ctx *exec_ctx, void *elem, bool success) { +static void kill_zombie(grpc_exec_ctx *exec_ctx, void *elem, + grpc_error *error) { grpc_call_destroy(grpc_call_from_top_element(elem)); } @@ -340,20 +344,24 @@ static void request_matcher_zombify_all_pending_calls(grpc_exec_ctx *exec_ctx, grpc_closure_init( &calld->kill_zombie_closure, kill_zombie, grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0)); - grpc_exec_ctx_enqueue(exec_ctx, &calld->kill_zombie_closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &calld->kill_zombie_closure, GRPC_ERROR_NONE, + NULL); } } static void request_matcher_kill_requests(grpc_exec_ctx *exec_ctx, grpc_server *server, - request_matcher *rm) { + request_matcher *rm, + grpc_error *error) { int request_id; for (size_t i = 0; i < server->cq_count; i++) { while ((request_id = gpr_stack_lockfree_pop(rm->requests_per_cq[i])) != -1) { - fail_call(exec_ctx, server, i, &server->requested_calls[request_id]); + fail_call(exec_ctx, server, i, &server->requested_calls[request_id], + GRPC_ERROR_REF(error)); } } + GRPC_ERROR_UNREF(error); } /* @@ -410,7 +418,7 @@ static void orphan_channel(channel_data *chand) { } static void finish_destroy_channel(grpc_exec_ctx *exec_ctx, void *cd, - bool success) { + grpc_error *error) { channel_data *chand = cd; grpc_server *server = chand->server; GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, chand->channel, "server"); @@ -499,25 +507,26 @@ static void publish_call(grpc_exec_ctx *exec_ctx, grpc_server *server, grpc_call_stack_element(grpc_call_get_call_stack(call), 0); channel_data *chand = elem->channel_data; server_ref(chand->server); - grpc_cq_end_op(exec_ctx, calld->cq_new, rc->tag, true, done_request_event, rc, - &rc->completion); + grpc_cq_end_op(exec_ctx, calld->cq_new, rc->tag, GRPC_ERROR_NONE, + done_request_event, rc, &rc->completion); } -static void publish_new_rpc(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void publish_new_rpc(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { grpc_call_element *call_elem = arg; call_data *calld = call_elem->call_data; channel_data *chand = call_elem->channel_data; request_matcher *rm = calld->request_matcher; grpc_server *server = rm->server; - if (!success || gpr_atm_acq_load(&server->shutdown_flag)) { + if (error != GRPC_ERROR_NONE || gpr_atm_acq_load(&server->shutdown_flag)) { gpr_mu_lock(&calld->mu_state); calld->state = ZOMBIED; gpr_mu_unlock(&calld->mu_state); grpc_closure_init( &calld->kill_zombie_closure, kill_zombie, grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0)); - grpc_exec_ctx_enqueue(exec_ctx, &calld->kill_zombie_closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &calld->kill_zombie_closure, error, NULL); return; } @@ -562,7 +571,8 @@ static void finish_start_new_rpc( calld->state = ZOMBIED; gpr_mu_unlock(&calld->mu_state); grpc_closure_init(&calld->kill_zombie_closure, kill_zombie, elem); - grpc_exec_ctx_enqueue(exec_ctx, &calld->kill_zombie_closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &calld->kill_zombie_closure, GRPC_ERROR_NONE, + NULL); return; } @@ -570,7 +580,7 @@ static void finish_start_new_rpc( switch (payload_handling) { case GRPC_SRM_PAYLOAD_NONE: - publish_new_rpc(exec_ctx, elem, true); + publish_new_rpc(exec_ctx, elem, GRPC_ERROR_NONE); break; case GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER: { grpc_op op; @@ -658,18 +668,21 @@ static int num_channels(grpc_server *server) { } static void kill_pending_work_locked(grpc_exec_ctx *exec_ctx, - grpc_server *server) { + grpc_server *server, grpc_error *error) { if (server->started) { request_matcher_kill_requests(exec_ctx, server, - &server->unregistered_request_matcher); + &server->unregistered_request_matcher, + GRPC_ERROR_REF(error)); request_matcher_zombify_all_pending_calls( exec_ctx, &server->unregistered_request_matcher); for (registered_method *rm = server->registered_methods; rm; rm = rm->next) { - request_matcher_kill_requests(exec_ctx, server, &rm->request_matcher); + request_matcher_kill_requests(exec_ctx, server, &rm->request_matcher, + GRPC_ERROR_REF(error)); request_matcher_zombify_all_pending_calls(exec_ctx, &rm->request_matcher); } } + GRPC_ERROR_UNREF(error); } static void maybe_finish_shutdown(grpc_exec_ctx *exec_ctx, @@ -679,7 +692,8 @@ static void maybe_finish_shutdown(grpc_exec_ctx *exec_ctx, return; } - kill_pending_work_locked(exec_ctx, server); + kill_pending_work_locked(exec_ctx, server, + GRPC_ERROR_CREATE("Server Shutdown")); if (server->root_channel_data.next != &server->root_channel_data || server->listeners_destroyed < num_listeners(server)) { @@ -700,7 +714,8 @@ static void maybe_finish_shutdown(grpc_exec_ctx *exec_ctx, for (i = 0; i < server->num_shutdown_tags; i++) { server_ref(server); grpc_cq_end_op(exec_ctx, server->shutdown_tags[i].cq, - server->shutdown_tags[i].tag, 1, done_shutdown_event, server, + server->shutdown_tags[i].tag, GRPC_ERROR_NONE, + done_shutdown_event, server, &server->shutdown_tags[i].completion); } } @@ -723,11 +738,12 @@ static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) { } static void server_on_recv_initial_metadata(grpc_exec_ctx *exec_ctx, void *ptr, - bool success) { + grpc_error *error) { grpc_call_element *elem = ptr; call_data *calld = elem->call_data; gpr_timespec op_deadline; + GRPC_ERROR_REF(error); grpc_metadata_batch_filter(calld->recv_initial_metadata, server_filter, elem); op_deadline = calld->recv_initial_metadata->deadline; if (0 != gpr_time_cmp(op_deadline, gpr_inf_future(op_deadline.clock_type))) { @@ -736,11 +752,13 @@ static void server_on_recv_initial_metadata(grpc_exec_ctx *exec_ctx, void *ptr, if (calld->host && calld->path) { /* do nothing */ } else { - success = 0; + GRPC_ERROR_UNREF(error); + error = + GRPC_ERROR_CREATE_REFERENCING("Missing :authority or :path", &error, 1); } - calld->on_done_recv_initial_metadata->cb( - exec_ctx, calld->on_done_recv_initial_metadata->cb_arg, success); + grpc_exec_ctx_sched(exec_ctx, calld->on_done_recv_initial_metadata, error, + NULL); } static void server_mutate_op(grpc_call_element *elem, @@ -765,10 +783,10 @@ static void server_start_transport_stream_op(grpc_exec_ctx *exec_ctx, } static void got_initial_metadata(grpc_exec_ctx *exec_ctx, void *ptr, - bool success) { + grpc_error *error) { grpc_call_element *elem = ptr; call_data *calld = elem->call_data; - if (success) { + if (error == GRPC_ERROR_NONE) { start_new_rpc(exec_ctx, elem); } else { gpr_mu_lock(&calld->mu_state); @@ -776,7 +794,8 @@ static void got_initial_metadata(grpc_exec_ctx *exec_ctx, void *ptr, calld->state = ZOMBIED; gpr_mu_unlock(&calld->mu_state); grpc_closure_init(&calld->kill_zombie_closure, kill_zombie, elem); - grpc_exec_ctx_enqueue(exec_ctx, &calld->kill_zombie_closure, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &calld->kill_zombie_closure, + GRPC_ERROR_NONE, NULL); } else if (calld->state == PENDING) { calld->state = ZOMBIED; gpr_mu_unlock(&calld->mu_state); @@ -809,7 +828,7 @@ static void accept_stream(grpc_exec_ctx *exec_ctx, void *cd, } static void channel_connectivity_changed(grpc_exec_ctx *exec_ctx, void *cd, - bool iomgr_status_ignored) { + grpc_error *error) { channel_data *chand = cd; grpc_server *server = chand->server; if (chand->connectivity_state != GRPC_CHANNEL_SHUTDOWN) { @@ -1148,7 +1167,9 @@ void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s, op.set_accept_stream_user_data = chand; op.on_connectivity_state_change = &chand->channel_connectivity_changed; op.connectivity_state = &chand->connectivity_state; - op.disconnect = gpr_atm_acq_load(&s->shutdown_flag) != 0; + if (gpr_atm_acq_load(&s->shutdown_flag) != 0) { + op.disconnect_with_error = GRPC_ERROR_CREATE("Server shutdown"); + } grpc_transport_perform_op(exec_ctx, transport, &op); } @@ -1159,7 +1180,7 @@ void done_published_shutdown(grpc_exec_ctx *exec_ctx, void *done_arg, } static void listener_destroy_done(grpc_exec_ctx *exec_ctx, void *s, - bool success) { + grpc_error *error) { grpc_server *server = s; gpr_mu_lock(&server->mu_global); server->listeners_destroyed++; @@ -1181,8 +1202,8 @@ void grpc_server_shutdown_and_notify(grpc_server *server, gpr_mu_lock(&server->mu_global); grpc_cq_begin_op(cq, tag); if (server->shutdown_published) { - grpc_cq_end_op(&exec_ctx, cq, tag, 1, done_published_shutdown, NULL, - gpr_malloc(sizeof(grpc_cq_completion))); + grpc_cq_end_op(&exec_ctx, cq, tag, GRPC_ERROR_NONE, done_published_shutdown, + NULL, gpr_malloc(sizeof(grpc_cq_completion))); gpr_mu_unlock(&server->mu_global); goto done; } @@ -1205,7 +1226,8 @@ void grpc_server_shutdown_and_notify(grpc_server *server, /* collect all unregistered then registered calls */ gpr_mu_lock(&server->mu_call); - kill_pending_work_locked(&exec_ctx, server); + kill_pending_work_locked(&exec_ctx, server, + GRPC_ERROR_CREATE("Server Shutdown")); gpr_mu_unlock(&server->mu_call); maybe_finish_shutdown(&exec_ctx, server); @@ -1233,7 +1255,8 @@ void grpc_server_cancel_all_calls(grpc_server *server) { channel_broadcaster_init(server, &broadcaster); gpr_mu_unlock(&server->mu_global); - channel_broadcaster_shutdown(&exec_ctx, &broadcaster, 0, 1); + channel_broadcaster_shutdown(&exec_ctx, &broadcaster, 0, + GRPC_ERROR_CREATE("Cancelling all calls")); grpc_exec_ctx_finish(&exec_ctx); } @@ -1280,13 +1303,15 @@ static grpc_call_error queue_call_request(grpc_exec_ctx *exec_ctx, request_matcher *rm = NULL; int request_id; if (gpr_atm_acq_load(&server->shutdown_flag)) { - fail_call(exec_ctx, server, cq_idx, rc); + fail_call(exec_ctx, server, cq_idx, rc, + GRPC_ERROR_CREATE("Server Shutdown")); return GRPC_CALL_OK; } request_id = gpr_stack_lockfree_pop(server->request_freelist); if (request_id == -1) { /* out of request ids: just fail this one */ - fail_call(exec_ctx, server, cq_idx, rc); + fail_call(exec_ctx, server, cq_idx, rc, + GRPC_ERROR_CREATE("Server Shutdown")); return GRPC_CALL_OK; } switch (rc->type) { @@ -1314,8 +1339,8 @@ static grpc_call_error queue_call_request(grpc_exec_ctx *exec_ctx, grpc_closure_init( &calld->kill_zombie_closure, kill_zombie, grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0)); - grpc_exec_ctx_enqueue(exec_ctx, &calld->kill_zombie_closure, true, - NULL); + grpc_exec_ctx_sched(exec_ctx, &calld->kill_zombie_closure, + GRPC_ERROR_NONE, NULL); } else { GPR_ASSERT(calld->state == PENDING); calld->state = ACTIVATED; @@ -1421,13 +1446,14 @@ done: } static void fail_call(grpc_exec_ctx *exec_ctx, grpc_server *server, - size_t cq_idx, requested_call *rc) { + size_t cq_idx, requested_call *rc, grpc_error *error) { *rc->call = NULL; rc->initial_metadata->count = 0; + GPR_ASSERT(error != GRPC_ERROR_NONE); server_ref(server); - grpc_cq_end_op(exec_ctx, server->cqs[cq_idx], rc->tag, 0, done_request_event, - rc, &rc->completion); + grpc_cq_end_op(exec_ctx, server->cqs[cq_idx], rc->tag, error, + done_request_event, rc, &rc->completion); } const grpc_channel_args *grpc_server_get_channel_args(grpc_server *server) { diff --git a/src/core/lib/transport/connectivity_state.c b/src/core/lib/transport/connectivity_state.c index 74a5ef5c13..054f112127 100644 --- a/src/core/lib/transport/connectivity_state.c +++ b/src/core/lib/transport/connectivity_state.c @@ -52,7 +52,7 @@ const char *grpc_connectivity_state_name(grpc_connectivity_state state) { case GRPC_CHANNEL_TRANSIENT_FAILURE: return "TRANSIENT_FAILURE"; case GRPC_CHANNEL_SHUTDOWN: - return "FATAL_FAILURE"; + return "SHUTDOWN"; } GPR_UNREACHABLE_CODE(return "UNKNOWN"); } @@ -61,35 +61,40 @@ void grpc_connectivity_state_init(grpc_connectivity_state_tracker *tracker, grpc_connectivity_state init_state, const char *name) { tracker->current_state = init_state; + tracker->current_error = GRPC_ERROR_NONE; tracker->watchers = NULL; tracker->name = gpr_strdup(name); } void grpc_connectivity_state_destroy(grpc_exec_ctx *exec_ctx, grpc_connectivity_state_tracker *tracker) { - int success; + grpc_error *error; grpc_connectivity_state_watcher *w; while ((w = tracker->watchers)) { tracker->watchers = w->next; if (GRPC_CHANNEL_SHUTDOWN != *w->current) { *w->current = GRPC_CHANNEL_SHUTDOWN; - success = 1; + error = GRPC_ERROR_NONE; } else { - success = 0; + error = GRPC_ERROR_CREATE("Shutdown connectivity owner"); } - grpc_exec_ctx_enqueue(exec_ctx, w->notify, success, NULL); + grpc_exec_ctx_sched(exec_ctx, w->notify, error, NULL); gpr_free(w); } + GRPC_ERROR_UNREF(tracker->current_error); gpr_free(tracker->name); } grpc_connectivity_state grpc_connectivity_state_check( - grpc_connectivity_state_tracker *tracker) { + grpc_connectivity_state_tracker *tracker, grpc_error **error) { if (grpc_connectivity_state_trace) { gpr_log(GPR_DEBUG, "CONWATCH: %p %s: get %s", tracker, tracker->name, grpc_connectivity_state_name(tracker->current_state)); } + if (error != NULL) { + *error = GRPC_ERROR_REF(tracker->current_error); + } return tracker->current_state; } @@ -109,7 +114,7 @@ int grpc_connectivity_state_notify_on_state_change( if (current == NULL) { grpc_connectivity_state_watcher *w = tracker->watchers; if (w != NULL && w->notify == notify) { - grpc_exec_ctx_enqueue(exec_ctx, notify, false, NULL); + grpc_exec_ctx_sched(exec_ctx, notify, GRPC_ERROR_CANCELLED, NULL); tracker->watchers = w->next; gpr_free(w); return 0; @@ -117,7 +122,7 @@ int grpc_connectivity_state_notify_on_state_change( while (w != NULL) { grpc_connectivity_state_watcher *rm_candidate = w->next; if (rm_candidate != NULL && rm_candidate->notify == notify) { - grpc_exec_ctx_enqueue(exec_ctx, notify, false, NULL); + grpc_exec_ctx_sched(exec_ctx, notify, GRPC_ERROR_CANCELLED, NULL); w->next = w->next->next; gpr_free(rm_candidate); return 0; @@ -128,7 +133,8 @@ int grpc_connectivity_state_notify_on_state_change( } else { if (tracker->current_state != *current) { *current = tracker->current_state; - grpc_exec_ctx_enqueue(exec_ctx, notify, true, NULL); + grpc_exec_ctx_sched(exec_ctx, notify, + GRPC_ERROR_REF(tracker->current_error), NULL); } else { grpc_connectivity_state_watcher *w = gpr_malloc(sizeof(*w)); w->current = current; @@ -143,13 +149,28 @@ int grpc_connectivity_state_notify_on_state_change( void grpc_connectivity_state_set(grpc_exec_ctx *exec_ctx, grpc_connectivity_state_tracker *tracker, grpc_connectivity_state state, - const char *reason) { + grpc_error *error, const char *reason) { grpc_connectivity_state_watcher *w; if (grpc_connectivity_state_trace) { - gpr_log(GPR_DEBUG, "SET: %p %s: %s --> %s [%s]", tracker, tracker->name, - grpc_connectivity_state_name(tracker->current_state), - grpc_connectivity_state_name(state), reason); + const char *error_string = grpc_error_string(error); + gpr_log(GPR_DEBUG, "SET: %p %s: %s --> %s [%s] error=%p %s", tracker, + tracker->name, grpc_connectivity_state_name(tracker->current_state), + grpc_connectivity_state_name(state), reason, error, error_string); + grpc_error_free_string(error_string); + } + switch (state) { + case GRPC_CHANNEL_CONNECTING: + case GRPC_CHANNEL_IDLE: + case GRPC_CHANNEL_READY: + GPR_ASSERT(error == GRPC_ERROR_NONE); + break; + case GRPC_CHANNEL_SHUTDOWN: + case GRPC_CHANNEL_TRANSIENT_FAILURE: + GPR_ASSERT(error != GRPC_ERROR_NONE); + break; } + GRPC_ERROR_UNREF(tracker->current_error); + tracker->current_error = error; if (tracker->current_state == state) { return; } @@ -158,7 +179,8 @@ void grpc_connectivity_state_set(grpc_exec_ctx *exec_ctx, while ((w = tracker->watchers) != NULL) { *w->current = tracker->current_state; tracker->watchers = w->next; - grpc_exec_ctx_enqueue(exec_ctx, w->notify, true, NULL); + grpc_exec_ctx_sched(exec_ctx, w->notify, + GRPC_ERROR_REF(tracker->current_error), NULL); gpr_free(w); } } diff --git a/src/core/lib/transport/connectivity_state.h b/src/core/lib/transport/connectivity_state.h index 2eb7e09124..7a2fa52c10 100644 --- a/src/core/lib/transport/connectivity_state.h +++ b/src/core/lib/transport/connectivity_state.h @@ -49,6 +49,8 @@ typedef struct grpc_connectivity_state_watcher { typedef struct { /** current connectivity state */ grpc_connectivity_state current_state; + /** error associated with state */ + grpc_error *current_error; /** all our watchers */ grpc_connectivity_state_watcher *watchers; /** a name to help debugging */ @@ -70,10 +72,11 @@ void grpc_connectivity_state_destroy(grpc_exec_ctx *exec_ctx, void grpc_connectivity_state_set(grpc_exec_ctx *exec_ctx, grpc_connectivity_state_tracker *tracker, grpc_connectivity_state state, + grpc_error *associated_error, const char *reason); grpc_connectivity_state grpc_connectivity_state_check( - grpc_connectivity_state_tracker *tracker); + grpc_connectivity_state_tracker *tracker, grpc_error **current_error); /** Return 1 if the channel should start connecting, 0 otherwise. If current==NULL cancel notify if it is already queued (success==0 in that diff --git a/src/core/lib/transport/transport.c b/src/core/lib/transport/transport.c index b65e157a02..1105494a85 100644 --- a/src/core/lib/transport/transport.c +++ b/src/core/lib/transport/transport.c @@ -60,7 +60,7 @@ void grpc_stream_unref(grpc_exec_ctx *exec_ctx, grpc_stream_refcount *refcount) { #endif if (gpr_unref(&refcount->refs)) { - grpc_exec_ctx_enqueue(exec_ctx, &refcount->destroy, true, NULL); + grpc_exec_ctx_sched(exec_ctx, &refcount->destroy, GRPC_ERROR_NONE, NULL); } } @@ -152,11 +152,14 @@ char *grpc_transport_get_peer(grpc_exec_ctx *exec_ctx, return transport->vtable->get_peer(exec_ctx, transport); } -void grpc_transport_stream_op_finish_with_failure( - grpc_exec_ctx *exec_ctx, grpc_transport_stream_op *op) { - grpc_exec_ctx_enqueue(exec_ctx, op->recv_message_ready, false, NULL); - grpc_exec_ctx_enqueue(exec_ctx, op->recv_initial_metadata_ready, false, NULL); - grpc_exec_ctx_enqueue(exec_ctx, op->on_complete, false, NULL); +void grpc_transport_stream_op_finish_with_failure(grpc_exec_ctx *exec_ctx, + grpc_transport_stream_op *op, + grpc_error *error) { + grpc_exec_ctx_sched(exec_ctx, op->recv_message_ready, GRPC_ERROR_REF(error), + NULL); + grpc_exec_ctx_sched(exec_ctx, op->recv_initial_metadata_ready, + GRPC_ERROR_REF(error), NULL); + grpc_exec_ctx_sched(exec_ctx, op->on_complete, error, NULL); } void grpc_transport_stream_op_add_cancellation(grpc_transport_stream_op *op, @@ -180,11 +183,11 @@ typedef struct { grpc_closure closure; } close_message_data; -static void free_message(grpc_exec_ctx *exec_ctx, void *p, bool iomgr_success) { +static void free_message(grpc_exec_ctx *exec_ctx, void *p, grpc_error *error) { close_message_data *cmd = p; gpr_slice_unref(cmd->message); if (cmd->then_call != NULL) { - cmd->then_call->cb(exec_ctx, cmd->then_call->cb_arg, iomgr_success); + cmd->then_call->cb(exec_ctx, cmd->then_call->cb_arg, GRPC_ERROR_REF(error)); } gpr_free(cmd); } diff --git a/src/core/lib/transport/transport.h b/src/core/lib/transport/transport.h index ed06fc3ed2..a46ccb643c 100644 --- a/src/core/lib/transport/transport.h +++ b/src/core/lib/transport/transport.h @@ -155,7 +155,7 @@ typedef struct grpc_transport_op { grpc_closure *on_connectivity_state_change; grpc_connectivity_state *connectivity_state; /** should the transport be disconnected */ - int disconnect; + grpc_error *disconnect_with_error; /** should we send a goaway? after a goaway is sent, once there are no more active calls on the transport, the transport should disconnect */ @@ -216,7 +216,8 @@ void grpc_transport_destroy_stream(grpc_exec_ctx *exec_ctx, grpc_stream *stream, void *and_free_memory); void grpc_transport_stream_op_finish_with_failure(grpc_exec_ctx *exec_ctx, - grpc_transport_stream_op *op); + grpc_transport_stream_op *op, + grpc_error *error); void grpc_transport_stream_op_add_cancellation(grpc_transport_stream_op *op, grpc_status_code status); diff --git a/src/cpp/client/client_context.cc b/src/cpp/client/client_context.cc index d3e5ce0c4a..0ba77a5057 100644 --- a/src/cpp/client/client_context.cc +++ b/src/cpp/client/client_context.cc @@ -63,6 +63,7 @@ ClientContext::ClientContext() call_(nullptr), call_canceled_(false), deadline_(gpr_inf_future(GPR_CLOCK_REALTIME)), + census_context_(nullptr), propagate_from_call_(nullptr) { g_client_callbacks->DefaultConstructor(this); } diff --git a/src/cpp/codegen/codegen_init.cc b/src/cpp/codegen/codegen_init.cc index c5d22124b7..103a7c1258 100644 --- a/src/cpp/codegen/codegen_init.cc +++ b/src/cpp/codegen/codegen_init.cc @@ -34,12 +34,12 @@ #include <grpc++/impl/codegen/core_codegen_interface.h> #include <grpc++/impl/codegen/grpc_library.h> -/// Initializes the global gRPC variables for the codegen library. These will +/// Null-initializes the global gRPC variables for the codegen library. These /// stay null in the absence of of grpc++ library. In this case, no gRPC /// features such as the ability to perform calls will be available. Trying to /// perform them would result in a segmentation fault when trying to deference /// the following nulled globals. These should be associated with actual /// as part of the instantiation of a \a grpc::GrpcLibraryInitializer variable. -grpc::CoreCodegenInterface* grpc::g_core_codegen_interface = nullptr; -grpc::GrpcLibraryInterface* grpc::g_glip = nullptr; +grpc::CoreCodegenInterface* grpc::g_core_codegen_interface; +grpc::GrpcLibraryInterface* grpc::g_glip; diff --git a/src/cpp/ext/proto_server_reflection.cc b/src/cpp/ext/proto_server_reflection.cc index 348a035f0f..3973bfb58e 100644 --- a/src/cpp/ext/proto_server_reflection.cc +++ b/src/cpp/ext/proto_server_reflection.cc @@ -197,8 +197,8 @@ Status ProtoServerReflection::GetAllExtensionNumbers( std::vector<const protobuf::FieldDescriptor*> extensions; descriptor_pool_->FindAllExtensions(desc, &extensions); - for (auto extension : extensions) { - response->add_extension_number(extension->number()); + for (auto it = extensions.begin(); it != extensions.end(); it++) { + response->add_extension_number((*it)->number()); } response->set_base_type_name(type); return Status::OK; diff --git a/src/cpp/ext/proto_server_reflection_plugin.cc b/src/cpp/ext/proto_server_reflection_plugin.cc index f31d102a9e..5b806ce1ae 100644 --- a/src/cpp/ext/proto_server_reflection_plugin.cc +++ b/src/cpp/ext/proto_server_reflection_plugin.cc @@ -60,21 +60,21 @@ void ProtoServerReflectionPlugin::ChangeArguments(const grpc::string& name, void* value) {} bool ProtoServerReflectionPlugin::has_sync_methods() const { - if (reflection_service_ != nullptr) { + if (reflection_service_) { return reflection_service_->has_synchronous_methods(); } return false; } bool ProtoServerReflectionPlugin::has_async_methods() const { - if (reflection_service_ != nullptr) { + if (reflection_service_) { return reflection_service_->has_async_methods(); } return false; } -static std::unique_ptr<::grpc::ServerBuilderPlugin> CreateProtoReflection() { - return std::unique_ptr<::grpc::ServerBuilderPlugin>( +static std::unique_ptr< ::grpc::ServerBuilderPlugin> CreateProtoReflection() { + return std::unique_ptr< ::grpc::ServerBuilderPlugin>( new ProtoServerReflectionPlugin()); } diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index 50fc4733a1..fb4c68ebe4 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -67,7 +67,7 @@ static std::shared_ptr<Server::GlobalCallbacks> g_callbacks = nullptr; static gpr_once g_once_init_callbacks = GPR_ONCE_INIT; static void InitGlobalCallbacks() { - if (g_callbacks == nullptr) { + if (!g_callbacks) { g_callbacks.reset(new DefaultGlobalCallbacks()); } } @@ -324,8 +324,8 @@ Server::~Server() { } void Server::SetGlobalCallbacks(GlobalCallbacks* callbacks) { - GPR_ASSERT(g_callbacks == nullptr); - GPR_ASSERT(callbacks != nullptr); + GPR_ASSERT(!g_callbacks); + GPR_ASSERT(callbacks); g_callbacks.reset(callbacks); } diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 279981744a..45bb858e2e 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -55,9 +55,10 @@ static void do_plugin_list_init(void) { ServerBuilder::ServerBuilder() : max_message_size_(-1), generic_service_(nullptr) { gpr_once_init(&once_init_plugin_list, do_plugin_list_init); - for (auto factory : (*g_plugin_factory_list)) { - std::unique_ptr<ServerBuilderPlugin> plugin = factory(); - plugins_[plugin->name()] = std::move(plugin); + for (auto it = g_plugin_factory_list->begin(); + it != g_plugin_factory_list->end(); it++) { + auto& factory = *it; + plugins_.emplace_back(factory()); } // all compression algorithms enabled by default. enabled_compression_algorithms_bitset_ = @@ -141,7 +142,7 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() { bool has_sync_methods = false; for (auto it = services_.begin(); it != services_.end(); ++it) { if ((*it)->service->has_synchronous_methods()) { - if (thread_pool == nullptr) { + if (!thread_pool) { thread_pool.reset(CreateDefaultThreadPool()); has_sync_methods = true; break; @@ -153,9 +154,9 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() { (*option)->UpdateArguments(&args); (*option)->UpdatePlugins(&plugins_); } - if (thread_pool == nullptr) { + if (!thread_pool) { for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { - if ((*plugin).second->has_sync_methods()) { + if ((*plugin)->has_sync_methods()) { thread_pool.reset(CreateDefaultThreadPool()); has_sync_methods = true; break; @@ -212,7 +213,7 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() { } } for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { - (*plugin).second->InitServer(initializer); + (*plugin)->InitServer(initializer); } if (generic_service_) { server->RegisterAsyncGenericService(generic_service_); @@ -238,7 +239,7 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() { return nullptr; } for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) { - (*plugin).second->Finish(initializer); + (*plugin)->Finish(initializer); } return server; } diff --git a/src/cpp/server/server_posix.cc b/src/cpp/server/server_posix.cc index 8cb9753a12..c3aa2adc60 100644 --- a/src/cpp/server/server_posix.cc +++ b/src/cpp/server/server_posix.cc @@ -42,8 +42,8 @@ namespace grpc { void AddInsecureChannelFromFd(Server* server, int fd) { grpc_server_add_insecure_channel_from_fd( server->c_server(), server->completion_queue()->cq(), fd); +} #endif // GPR_SUPPORT_CHANNELS_FROM_FD -} } // namespace grpc diff --git a/src/node/performance/benchmark_client.js b/src/node/performance/benchmark_client.js index 262aa33862..5ef5260a96 100644 --- a/src/node/performance/benchmark_client.js +++ b/src/node/performance/benchmark_client.js @@ -42,6 +42,8 @@ var fs = require('fs'); var path = require('path'); var util = require('util'); var EventEmitter = require('events'); + +var async = require('async'); var _ = require('lodash'); var PoissonProcess = require('poisson-process'); var Histogram = require('./histogram'); @@ -128,6 +130,36 @@ function BenchmarkClient(server_targets, channels, histogram_params, util.inherits(BenchmarkClient, EventEmitter); /** + * Start every client in the list of clients by waiting for each to be ready, + * then starting outstanding_rpcs_per_channel calls on each of them + * @param {Array<grpc.Client>} client_list The list of clients + * @param {Number} outstanding_rpcs_per_channel The number of calls to start + * on each client + * @param {function(grpc.Client)} makeCall Function to make a single call on + * a single client + * @param {EventEmitter} emitter The event emitter to send errors on, if + * necessary + */ +function startAllClients(client_list, outstanding_rpcs_per_channel, makeCall, + emitter) { + var ready_wait_funcs = _.map(client_list, function(client) { + return _.partial(grpc.waitForClientReady, client, Infinity); + }); + async.parallel(ready_wait_funcs, function(err) { + if (err) { + emitter.emit('error', err); + return; + } + + _.each(client_list, function(client) { + _.times(outstanding_rpcs_per_channel, function() { + makeCall(client); + }); + }); + }); +} + +/** * Start a closed-loop test. For each channel, start * outstanding_rpcs_per_channel RPCs. Then, whenever an RPC finishes, start * another one. @@ -212,11 +244,7 @@ BenchmarkClient.prototype.startClosedLoop = function( }; } - _.each(client_list, function(client) { - _.times(outstanding_rpcs_per_channel, function() { - makeCall(client); - }); - }); + startAllClients(client_list, outstanding_rpcs_per_channel, makeCall, self); }; /** @@ -310,14 +338,12 @@ BenchmarkClient.prototype.startPoisson = function( var averageIntervalMs = (1 / offered_load) * 1000; - _.each(client_list, function(client) { - _.times(outstanding_rpcs_per_channel, function() { - var p = PoissonProcess.create(averageIntervalMs, function() { - makeCall(client, p); - }); - p.start(); + startAllClients(client_list, outstanding_rpcs_per_channel, function(client){ + var p = PoissonProcess.create(averageIntervalMs, function() { + makeCall(client, p); }); - }); + p.start(); + }, self); }; /** diff --git a/src/node/tools/package.json b/src/node/tools/package.json index d4849c2e38..c34b259e2e 100644 --- a/src/node/tools/package.json +++ b/src/node/tools/package.json @@ -34,6 +34,7 @@ "index.js", "bin/protoc.js", "bin/protoc_plugin.js", + "bin/google/protobuf", "LICENSE" ], "main": "index.js" diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m index 0eb10656dd..e9678f38a9 100644 --- a/src/objective-c/GRPCClient/GRPCCall.m +++ b/src/objective-c/GRPCClient/GRPCCall.m @@ -76,7 +76,6 @@ NSString * const kGRPCTrailersKey = @"io.grpc.TrailersKey"; NSString *_host; NSString *_path; GRPCWrappedCall *_wrappedCall; - dispatch_once_t _callAlreadyInvoked; GRPCConnectivityMonitor *_connectivityMonitor; // The C gRPC library has less guarantees on the ordering of events than we diff --git a/src/php/bin/stress_client.sh b/src/php/bin/stress_client.sh new file mode 100755 index 0000000000..8c49b7aa4b --- /dev/null +++ b/src/php/bin/stress_client.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# 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. + +set -e +cd $(dirname $0) +source ./determine_extension_dir.sh +php $extension_dir -d max_execution_time=300 \ + ../tests/interop/stress_client.php $@ 1>&2 diff --git a/src/php/ext/grpc/channel_credentials.c b/src/php/ext/grpc/channel_credentials.c index 5c537378a6..b76fb105f3 100644 --- a/src/php/ext/grpc/channel_credentials.c +++ b/src/php/ext/grpc/channel_credentials.c @@ -47,11 +47,23 @@ #include <zend_exceptions.h> #include <zend_hash.h> +#include <grpc/support/alloc.h> #include <grpc/grpc.h> #include <grpc/grpc_security.h> zend_class_entry *grpc_ce_channel_credentials; +static char *default_pem_root_certs = NULL; + +static grpc_ssl_roots_override_result get_ssl_roots_override( + char **pem_root_certs) { + *pem_root_certs = default_pem_root_certs; + if (default_pem_root_certs == NULL) { + return GRPC_SSL_ROOTS_OVERRIDE_FAIL; + } + return GRPC_SSL_ROOTS_OVERRIDE_OK; +} + /* Frees and destroys an instance of wrapped_grpc_channel_credentials */ void free_wrapped_grpc_channel_credentials(void *object TSRMLS_DC) { wrapped_grpc_channel_credentials *creds = @@ -94,6 +106,24 @@ zval *grpc_php_wrap_channel_credentials(grpc_channel_credentials *wrapped TSRMLS } /** + * Set default roots pem. + * @param string pem_roots PEM encoding of the server root certificates + * @return void + */ +PHP_METHOD(ChannelCredentials, setDefaultRootsPem) { + char *pem_roots; + int pem_roots_length; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &pem_roots, + &pem_roots_length) == FAILURE) { + zend_throw_exception(spl_ce_InvalidArgumentException, + "setDefaultRootsPem expects 1 string", 1 TSRMLS_CC); + return; + } + default_pem_root_certs = gpr_malloc((pem_roots_length + 1) * sizeof(char)); + memcpy(default_pem_root_certs, pem_roots, pem_roots_length + 1); +} + +/** * Create a default channel credentials object. * @return ChannelCredentials The new default channel credentials object */ @@ -178,6 +208,8 @@ PHP_METHOD(ChannelCredentials, createInsecure) { } static zend_function_entry channel_credentials_methods[] = { + PHP_ME(ChannelCredentials, setDefaultRootsPem, NULL, + ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) PHP_ME(ChannelCredentials, createDefault, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) PHP_ME(ChannelCredentials, createSsl, NULL, @@ -192,6 +224,7 @@ void grpc_init_channel_credentials(TSRMLS_D) { zend_class_entry ce; INIT_CLASS_ENTRY(ce, "Grpc\\ChannelCredentials", channel_credentials_methods); + grpc_set_ssl_roots_override_callback(get_ssl_roots_override); ce.create_object = create_wrapped_grpc_channel_credentials; grpc_ce_channel_credentials = zend_register_internal_class(&ce TSRMLS_CC); } diff --git a/src/php/lib/Grpc/BaseStub.php b/src/php/lib/Grpc/BaseStub.php index 70644fac87..df3fe85d44 100755 --- a/src/php/lib/Grpc/BaseStub.php +++ b/src/php/lib/Grpc/BaseStub.php @@ -56,6 +56,10 @@ class BaseStub */ public function __construct($hostname, $opts, $channel = null) { + $ssl_roots = file_get_contents( + dirname(__FILE__).'/../../../../etc/roots.pem'); + ChannelCredentials::setDefaultRootsPem($ssl_roots); + $this->hostname = $hostname; $this->update_metadata = null; if (isset($opts['update_metadata'])) { diff --git a/src/php/tests/interop/interop_client.php b/src/php/tests/interop/interop_client.php index c5bb7c490e..43b3199d92 100755 --- a/src/php/tests/interop/interop_client.php +++ b/src/php/tests/interop/interop_client.php @@ -388,6 +388,103 @@ function timeoutOnSleepingServer($stub) 'Call status was not DEADLINE_EXCEEDED'); } +function customMetadata($stub) +{ + $ECHO_INITIAL_KEY = 'x-grpc-test-echo-initial'; + $ECHO_INITIAL_VALUE = 'test_initial_metadata_value'; + $ECHO_TRAILING_KEY = 'x-grpc-test-echo-trailing-bin'; + $ECHO_TRAILING_VALUE = 'ababab'; + $request_len = 271828; + $response_len = 314159; + + $request = new grpc\testing\SimpleRequest(); + $request->setResponseType(grpc\testing\PayloadType::COMPRESSABLE); + $request->setResponseSize($response_len); + $payload = new grpc\testing\Payload(); + $payload->setType(grpc\testing\PayloadType::COMPRESSABLE); + $payload->setBody(str_repeat("\0", $request_len)); + $request->setPayload($payload); + + $metadata = [ + $ECHO_INITIAL_KEY => [$ECHO_INITIAL_VALUE], + $ECHO_TRAILING_KEY => [$ECHO_TRAILING_VALUE], + ]; + $call = $stub->UnaryCall($request, $metadata); + + $initial_metadata = $call->getMetadata(); + hardAssert(array_key_exists($ECHO_INITIAL_KEY, $initial_metadata), + 'Initial metadata does not contain expected key'); + hardAssert($initial_metadata[$ECHO_INITIAL_KEY][0] == + $ECHO_INITIAL_VALUE, + 'Incorrect initial metadata value'); + + list($result, $status) = $call->wait(); + hardAssert($status->code === Grpc\STATUS_OK, + 'Call did not complete successfully'); + + $trailing_metadata = $call->getTrailingMetadata(); + hardAssert(array_key_exists($ECHO_TRAILING_KEY, $trailing_metadata), + 'Trailing metadata does not contain expected key'); + hardAssert($trailing_metadata[$ECHO_TRAILING_KEY][0] == + $ECHO_TRAILING_VALUE, 'Incorrect trailing metadata value'); + + $streaming_call = $stub->FullDuplexCall($metadata); + + $streaming_request = new grpc\testing\StreamingOutputCallRequest(); + $streaming_request->setPayload($payload); + $streaming_call->write($streaming_request); + $streaming_call->writesDone(); + + hardAssert($streaming_call->getStatus()->code === Grpc\STATUS_OK, + 'Call did not complete successfully'); + + $streaming_trailing_metadata = $streaming_call->getTrailingMetadata(); + hardAssert(array_key_exists($ECHO_TRAILING_KEY, + $streaming_trailing_metadata), + 'Trailing metadata does not contain expected key'); + hardAssert($streaming_trailing_metadata[$ECHO_TRAILING_KEY][0] == + $ECHO_TRAILING_VALUE, 'Incorrect trailing metadata value'); +} + +function statusCodeAndMessage($stub) +{ + $echo_status = new grpc\testing\EchoStatus(); + $echo_status->setCode(2); + $echo_status->setMessage("test status message"); + + $request = new grpc\testing\SimpleRequest(); + $request->setResponseStatus($echo_status); + + $call = $stub->UnaryCall($request); + list($result, $status) = $call->wait(); + + hardAssert($status->code === 2, + 'Received unexpected status code'); + hardAssert($status->details === "test status message", + 'Received unexpected status details'); + + $streaming_call = $stub->FullDuplexCall(); + + $streaming_request = new grpc\testing\StreamingOutputCallRequest(); + $streaming_request->setResponseStatus($echo_status); + $streaming_call->write($streaming_request); + $streaming_call->writesDone(); + + $status = $streaming_call->getStatus(); + hardAssert($status->code === 2, + 'Received unexpected status code'); + hardAssert($status->details === "test status message", + 'Received unexpected status details'); +} + +function unimplementedMethod($stub) +{ + $call = $stub->UnimplementedCall(new grpc\testing\EmptyMessage()); + list($result, $status) = $call->wait(); + hardAssert($status->code === Grpc\STATUS_UNIMPLEMENTED, + 'Received unexpected status code'); +} + function _makeStub($args) { if (!array_key_exists('server_host', $args)) { @@ -472,7 +569,11 @@ function _makeStub($args) $opts['update_metadata'] = $update_metadata; } - $stub = new grpc\testing\TestServiceClient($server_address, $opts); + if ($test_case == 'unimplemented_method') { + $stub = new grpc\testing\UnimplementedServiceClient($server_address, $opts); + } else { + $stub = new grpc\testing\TestServiceClient($server_address, $opts); + } return $stub; } @@ -514,6 +615,15 @@ function interop_main($args, $stub = false) case 'timeout_on_sleeping_server': timeoutOnSleepingServer($stub); break; + case 'custom_metadata': + customMetadata($stub); + break; + case 'status_code_and_message': + statusCodeAndMessage($stub); + break; + case 'unimplemented_method': + unimplementedMethod($stub); + break; case 'service_account_creds': serviceAccountCreds($stub, $args); break; diff --git a/src/php/tests/interop/messages.proto b/src/php/tests/interop/messages.proto index de0b1a2320..44e3c3b8f9 100644 --- a/src/php/tests/interop/messages.proto +++ b/src/php/tests/interop/messages.proto @@ -1,5 +1,5 @@ -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -41,9 +41,6 @@ enum PayloadType { // Uncompressable binary format. UNCOMPRESSABLE = 1; - - // Randomly chosen from all other formats defined in this enum. - RANDOM = 2; } // A block of data, to simply increase gRPC message size. @@ -54,6 +51,13 @@ message Payload { optional bytes body = 2; } +// A protobuf representation for grpc status. This is used by test +// clients to specify a status that the server should attempt to return. +message EchoStatus { + optional int32 code = 1; + optional string message = 2; +} + // Unary request. message SimpleRequest { // Desired payload type in the response from the server. @@ -72,6 +76,12 @@ message SimpleRequest { // Whether SimpleResponse should include OAuth scope. optional bool fill_oauth_scope = 5; + + // Whether to request the server to compress the response. + optional bool request_compressed_response = 6; + + // Whether server should return a given status + optional EchoStatus response_status = 7; } // Unary response, as configured by the request. @@ -123,6 +133,12 @@ message StreamingOutputCallRequest { // Optional input payload sent along with the request. optional Payload payload = 3; + + // Whether to request the server to compress the response. + optional bool request_compressed_response = 6; + + // Whether server should return a given status + optional EchoStatus response_status = 7; } // Server-streaming response, as configured by the request and parameters. @@ -130,3 +146,17 @@ message StreamingOutputCallResponse { // Payload to increase response size. optional Payload payload = 1; } + +// For reconnect interop test only. +// Client tells server what reconnection parameters it used. +message ReconnectParams { + optional int32 max_reconnect_backoff_ms = 1; +} + +// For reconnect interop test only. +// Server tells client whether its reconnects are following the spec and the +// reconnect backoffs it saw. +message ReconnectInfo { + optional bool passed = 1; + repeated int32 backoff_ms = 2; +} diff --git a/src/php/tests/interop/stress_client.php b/src/php/tests/interop/stress_client.php index 419ef5be43..f9cfe8aba5 100644 --- a/src/php/tests/interop/stress_client.php +++ b/src/php/tests/interop/stress_client.php @@ -102,7 +102,7 @@ if (empty($raw_args['server_addresses'])) { } $args['metrics_port'] = empty($raw_args['metrics_port']) ? - '8081' : $args['metrics_port']; + '8081' : $raw_args['metrics_port']; $args['test_duration_secs'] = empty($raw_args['test_duration_secs']) || $raw_args['test_duration_secs'] == -1 ? diff --git a/src/php/tests/interop/test.proto b/src/php/tests/interop/test.proto index 0d169e7f64..57ef30ee1c 100644 --- a/src/php/tests/interop/test.proto +++ b/src/php/tests/interop/test.proto @@ -1,5 +1,5 @@ -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -69,3 +69,10 @@ service TestService { rpc HalfDuplexCall(stream StreamingOutputCallRequest) returns (stream StreamingOutputCallResponse); } + +// A simple service NOT implemented at servers so clients can test for +// that case. +service UnimplementedService { + // A call that no server should implement + rpc UnimplementedCall(grpc.testing.EmptyMessage) returns (grpc.testing.EmptyMessage); +} diff --git a/src/python/grpcio/grpc/__init__.py b/src/python/grpcio/grpc/__init__.py index 2fbb9f45e6..b3eeaad1f7 100644 --- a/src/python/grpcio/grpc/__init__.py +++ b/src/python/grpcio/grpc/__init__.py @@ -29,8 +29,6 @@ """gRPC's Python API.""" -__import__('pkg_resources').declare_namespace(__name__) - import abc import enum @@ -212,14 +210,14 @@ class ChannelConnectivity(enum.Enum): READY: The channel is ready to conduct RPCs. TRANSIENT_FAILURE: The channel has seen a failure from which it expects to recover. - FATAL_FAILURE: The channel has seen a failure from which it cannot recover. + SHUTDOWN: The channel has seen a failure from which it cannot recover. """ IDLE = (_cygrpc.ConnectivityState.idle, 'idle') CONNECTING = (_cygrpc.ConnectivityState.connecting, 'connecting') READY = (_cygrpc.ConnectivityState.ready, 'ready') TRANSIENT_FAILURE = ( _cygrpc.ConnectivityState.transient_failure, 'transient failure') - FATAL_FAILURE = (_cygrpc.ConnectivityState.fatal_failure, 'fatal failure') + SHUTDOWN = (_cygrpc.ConnectivityState.shutdown, 'shutdown') @enum.unique @@ -438,9 +436,7 @@ class UnaryUnaryMultiCallable(six.with_metaclass(abc.ABCMeta)): """Affords invoking a unary-unary RPC.""" @abc.abstractmethod - def __call__( - self, request, timeout=None, metadata=None, credentials=None, - with_call=False): + def __call__(self, request, timeout=None, metadata=None, credentials=None): """Synchronously invokes the underlying RPC. Args: @@ -449,12 +445,30 @@ class UnaryUnaryMultiCallable(six.with_metaclass(abc.ABCMeta)): metadata: An optional sequence of pairs of bytes to be transmitted to the service-side of the RPC. credentials: An optional CallCredentials for the RPC. - with_call: Whether or not to include return a Call for the RPC in addition - to the response. Returns: - The response value for the RPC, and a Call for the RPC if with_call was - set to True at invocation. + The response value for the RPC. + + Raises: + RpcError: Indicating that the RPC terminated with non-OK status. The + raised RpcError will also be a Call for the RPC affording the RPC's + metadata, status code, and details. + """ + raise NotImplementedError() + + @abc.abstractmethod + def with_call(self, request, timeout=None, metadata=None, credentials=None): + """Synchronously invokes the underlying RPC. + + Args: + request: The request value for the RPC. + timeout: An optional durating of time in seconds to allow for the RPC. + metadata: An optional sequence of pairs of bytes to be transmitted to the + service-side of the RPC. + credentials: An optional CallCredentials for the RPC. + + Returns: + The response value for the RPC and a Call value for the RPC. Raises: RpcError: Indicating that the RPC terminated with non-OK status. The @@ -510,8 +524,7 @@ class StreamUnaryMultiCallable(six.with_metaclass(abc.ABCMeta)): @abc.abstractmethod def __call__( - self, request_iterator, timeout=None, metadata=None, credentials=None, - with_call=False): + self, request_iterator, timeout=None, metadata=None, credentials=None): """Synchronously invokes the underlying RPC. Args: @@ -520,8 +533,6 @@ class StreamUnaryMultiCallable(six.with_metaclass(abc.ABCMeta)): metadata: An optional sequence of pairs of bytes to be transmitted to the service-side of the RPC. credentials: An optional CallCredentials for the RPC. - with_call: Whether or not to include return a Call for the RPC in addition - to the response. Returns: The response value for the RPC, and a Call for the RPC if with_call was @@ -535,6 +546,28 @@ class StreamUnaryMultiCallable(six.with_metaclass(abc.ABCMeta)): raise NotImplementedError() @abc.abstractmethod + def with_call( + self, request_iterator, timeout=None, metadata=None, credentials=None): + """Synchronously invokes the underlying RPC. + + Args: + request_iterator: An iterator that yields request values for the RPC. + timeout: An optional duration of time in seconds to allow for the RPC. + metadata: An optional sequence of pairs of bytes to be transmitted to the + service-side of the RPC. + credentials: An optional CallCredentials for the RPC. + + Returns: + The response value for the RPC and a Call for the RPC. + + Raises: + RpcError: Indicating that the RPC terminated with non-OK status. The + raised RpcError will also be a Call for the RPC affording the RPC's + metadata, status code, and details. + """ + raise NotImplementedError() + + @abc.abstractmethod def future( self, request_iterator, timeout=None, metadata=None, credentials=None): """Asynchronously invokes the underlying RPC. @@ -1171,7 +1204,7 @@ def secure_channel(target, credentials, options=None): A Channel to the target through which RPCs may be conducted. """ from grpc import _channel - return _channel.Channel(target, options, credentials) + return _channel.Channel(target, options, credentials._credentials) def server(generic_rpc_handlers, thread_pool, options=None): @@ -1193,3 +1226,49 @@ def server(generic_rpc_handlers, thread_pool, options=None): """ from grpc import _server return _server.Server(generic_rpc_handlers, thread_pool) + + +################################### __all__ ################################# + + +__all__ = ( + 'FutureTimeoutError', + 'FutureCancelledError', + 'Future', + 'ChannelConnectivity', + 'StatusCode', + 'RpcError', + 'RpcContext', + 'Call', + 'ChannelCredentials', + 'CallCredentials', + 'AuthMetadataContext', + 'AuthMetadataPluginCallback', + 'AuthMetadataPlugin', + 'ServerCredentials', + 'UnaryUnaryMultiCallable', + 'UnaryStreamMultiCallable', + 'StreamUnaryMultiCallable', + 'StreamStreamMultiCallable', + 'Channel', + 'ServicerContext', + 'RpcMethodHandler', + 'HandlerCallDetails', + 'GenericRpcHandler', + 'Server', + 'unary_unary_rpc_method_handler', + 'unary_stream_rpc_method_handler', + 'stream_unary_rpc_method_handler', + 'stream_stream_rpc_method_handler', + 'method_handlers_generic_handler', + 'ssl_channel_credentials', + 'metadata_call_credentials', + 'access_token_call_credentials', + 'composite_call_credentials', + 'composite_channel_credentials', + 'ssl_server_credentials', + 'channel_ready_future', + 'insecure_channel', + 'secure_channel', + 'server', +) diff --git a/src/python/grpcio/grpc/_adapter/_types.py b/src/python/grpcio/grpc/_adapter/_types.py index f8405949d4..b7cc6fbbb5 100644 --- a/src/python/grpcio/grpc/_adapter/_types.py +++ b/src/python/grpcio/grpc/_adapter/_types.py @@ -114,7 +114,7 @@ class ConnectivityState(enum.IntEnum): CONNECTING = cygrpc.ConnectivityState.connecting READY = cygrpc.ConnectivityState.ready TRANSIENT_FAILURE = cygrpc.ConnectivityState.transient_failure - FATAL_FAILURE = cygrpc.ConnectivityState.fatal_failure + FATAL_FAILURE = cygrpc.ConnectivityState.shutdown class Status(collections.namedtuple( diff --git a/src/python/grpcio/grpc/_channel.py b/src/python/grpcio/grpc/_channel.py index d9315d2e6c..1f34beeb2c 100644 --- a/src/python/grpcio/grpc/_channel.py +++ b/src/python/grpcio/grpc/_channel.py @@ -449,9 +449,7 @@ class _UnaryUnaryMultiCallable(grpc.UnaryUnaryMultiCallable): ) return state, operations, deadline, deadline_timespec, None - def __call__( - self, request, timeout=None, metadata=None, credentials=None, - with_call=False): + def _blocking(self, request, timeout, metadata, credentials): state, operations, deadline, deadline_timespec, rendezvous = self._prepare( request, timeout, metadata) if rendezvous: @@ -464,7 +462,15 @@ class _UnaryUnaryMultiCallable(grpc.UnaryUnaryMultiCallable): call.set_credentials(credentials._credentials) call.start_batch(cygrpc.Operations(operations), None) _handle_event(completion_queue.poll(), state, self._response_deserializer) - return _end_unary_response_blocking(state, with_call, deadline) + return state, deadline + + def __call__(self, request, timeout=None, metadata=None, credentials=None): + state, deadline, = self._blocking(request, timeout, metadata, credentials) + return _end_unary_response_blocking(state, False, deadline) + + def with_call(self, request, timeout=None, metadata=None, credentials=None): + state, deadline, = self._blocking(request, timeout, metadata, credentials) + return _end_unary_response_blocking(state, True, deadline) def future(self, request, timeout=None, metadata=None, credentials=None): state, operations, deadline, deadline_timespec, rendezvous = self._prepare( @@ -532,9 +538,7 @@ class _StreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable): self._request_serializer = request_serializer self._response_deserializer = response_deserializer - def __call__( - self, request_iterator, timeout=None, metadata=None, credentials=None, - with_call=False): + def _blocking(self, request_iterator, timeout, metadata, credentials): deadline, deadline_timespec = _deadline(timeout) state = _RPCState(_STREAM_UNARY_INITIAL_DUE, None, None, None, None) completion_queue = cygrpc.CompletionQueue() @@ -563,7 +567,19 @@ class _StreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable): state.condition.notify_all() if not state.due: break - return _end_unary_response_blocking(state, with_call, deadline) + return state, deadline + + def __call__( + self, request_iterator, timeout=None, metadata=None, credentials=None): + state, deadline, = self._blocking( + request_iterator, timeout, metadata, credentials) + return _end_unary_response_blocking(state, False, deadline) + + def with_call( + self, request_iterator, timeout=None, metadata=None, credentials=None): + state, deadline, = self._blocking( + request_iterator, timeout, metadata, credentials) + return _end_unary_response_blocking(state, True, deadline) def future( self, request_iterator, timeout=None, metadata=None, credentials=None): @@ -814,6 +830,13 @@ def _options(options): class Channel(grpc.Channel): def __init__(self, target, options, credentials): + """Constructor. + + Args: + target: The target to which to connect. + options: Configuration options for the channel. + credentials: A cygrpc.ChannelCredentials or None. + """ self._channel = cygrpc.Channel(target, _options(options), credentials) self._call_state = _ChannelCallState(self._channel) self._connectivity_state = _ChannelConnectivityState(self._channel) diff --git a/src/python/grpcio/grpc/_common.py b/src/python/grpcio/grpc/_common.py index 1fd1704f18..f351bea9e3 100644 --- a/src/python/grpcio/grpc/_common.py +++ b/src/python/grpcio/grpc/_common.py @@ -46,8 +46,8 @@ CYGRPC_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY = { cygrpc.ConnectivityState.ready: grpc.ChannelConnectivity.READY, cygrpc.ConnectivityState.transient_failure: grpc.ChannelConnectivity.TRANSIENT_FAILURE, - cygrpc.ConnectivityState.fatal_failure: - grpc.ChannelConnectivity.FATAL_FAILURE, + cygrpc.ConnectivityState.shutdown: + grpc.ChannelConnectivity.SHUTDOWN, } CYGRPC_STATUS_CODE_TO_STATUS_CODE = { diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi index 2e52953c0a..0055d0d3a2 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi @@ -33,7 +33,7 @@ class ConnectivityState: connecting = GRPC_CHANNEL_CONNECTING ready = GRPC_CHANNEL_READY transient_failure = GRPC_CHANNEL_TRANSIENT_FAILURE - fatal_failure = GRPC_CHANNEL_SHUTDOWN + shutdown = GRPC_CHANNEL_SHUTDOWN class ChannelArgKey: diff --git a/src/python/grpcio/grpc/_cython/imports.generated.c b/src/python/grpcio/grpc/_cython/imports.generated.c index 5c49f6cf3e..8437e74ba0 100644 --- a/src/python/grpcio/grpc/_cython/imports.generated.c +++ b/src/python/grpcio/grpc/_cython/imports.generated.c @@ -260,6 +260,8 @@ gpr_avl_unref_type gpr_avl_unref_import; gpr_avl_add_type gpr_avl_add_import; gpr_avl_remove_type gpr_avl_remove_import; gpr_avl_get_type gpr_avl_get_import; +gpr_avl_maybe_get_type gpr_avl_maybe_get_import; +gpr_avl_is_empty_type gpr_avl_is_empty_import; gpr_cmdline_create_type gpr_cmdline_create_import; gpr_cmdline_add_int_type gpr_cmdline_add_int_import; gpr_cmdline_add_flag_type gpr_cmdline_add_flag_import; @@ -533,6 +535,8 @@ void pygrpc_load_imports(HMODULE library) { gpr_avl_add_import = (gpr_avl_add_type) GetProcAddress(library, "gpr_avl_add"); gpr_avl_remove_import = (gpr_avl_remove_type) GetProcAddress(library, "gpr_avl_remove"); gpr_avl_get_import = (gpr_avl_get_type) GetProcAddress(library, "gpr_avl_get"); + gpr_avl_maybe_get_import = (gpr_avl_maybe_get_type) GetProcAddress(library, "gpr_avl_maybe_get"); + gpr_avl_is_empty_import = (gpr_avl_is_empty_type) GetProcAddress(library, "gpr_avl_is_empty"); gpr_cmdline_create_import = (gpr_cmdline_create_type) GetProcAddress(library, "gpr_cmdline_create"); gpr_cmdline_add_int_import = (gpr_cmdline_add_int_type) GetProcAddress(library, "gpr_cmdline_add_int"); gpr_cmdline_add_flag_import = (gpr_cmdline_add_flag_type) GetProcAddress(library, "gpr_cmdline_add_flag"); diff --git a/src/python/grpcio/grpc/_cython/imports.generated.h b/src/python/grpcio/grpc/_cython/imports.generated.h index 62865f8a0e..d52e8591b3 100644 --- a/src/python/grpcio/grpc/_cython/imports.generated.h +++ b/src/python/grpcio/grpc/_cython/imports.generated.h @@ -731,6 +731,12 @@ extern gpr_avl_remove_type gpr_avl_remove_import; typedef void *(*gpr_avl_get_type)(gpr_avl avl, void *key); extern gpr_avl_get_type gpr_avl_get_import; #define gpr_avl_get gpr_avl_get_import +typedef int(*gpr_avl_maybe_get_type)(gpr_avl avl, void *key, void **value); +extern gpr_avl_maybe_get_type gpr_avl_maybe_get_import; +#define gpr_avl_maybe_get gpr_avl_maybe_get_import +typedef int(*gpr_avl_is_empty_type)(gpr_avl avl); +extern gpr_avl_is_empty_type gpr_avl_is_empty_import; +#define gpr_avl_is_empty gpr_avl_is_empty_import typedef gpr_cmdline *(*gpr_cmdline_create_type)(const char *description); extern gpr_cmdline_create_type gpr_cmdline_create_import; #define gpr_cmdline_create gpr_cmdline_create_import diff --git a/src/python/grpcio/grpc/beta/_client_adaptations.py b/src/python/grpcio/grpc/beta/_client_adaptations.py index 024808c540..56456cc117 100644 --- a/src/python/grpcio/grpc/beta/_client_adaptations.py +++ b/src/python/grpcio/grpc/beta/_client_adaptations.py @@ -186,9 +186,9 @@ def _blocking_unary_unary( response_deserializer=response_deserializer) effective_metadata = _effective_metadata(metadata, metadata_transformer) if with_call: - response, call = multi_callable( + response, call = multi_callable.with_call( request, timeout=timeout, metadata=effective_metadata, - credentials=_credentials(protocol_options), with_call=True) + credentials=_credentials(protocol_options)) return response, _Rendezvous(None, None, call) else: return multi_callable( @@ -237,9 +237,9 @@ def _blocking_stream_unary( response_deserializer=response_deserializer) effective_metadata = _effective_metadata(metadata, metadata_transformer) if with_call: - response, call = multi_callable( + response, call = multi_callable.with_call( request_iterator, timeout=timeout, metadata=effective_metadata, - credentials=_credentials(protocol_options), with_call=True) + credentials=_credentials(protocol_options)) return response, _Rendezvous(None, None, call) else: return multi_callable( diff --git a/src/python/grpcio/grpc/beta/interfaces.py b/src/python/grpcio/grpc/beta/interfaces.py index 4343b6c4b5..90f6bbbfcc 100644 --- a/src/python/grpcio/grpc/beta/interfaces.py +++ b/src/python/grpcio/grpc/beta/interfaces.py @@ -36,6 +36,9 @@ import six import grpc ChannelConnectivity = grpc.ChannelConnectivity +# FATAL_FAILURE was a Beta-API name for SHUTDOWN +ChannelConnectivity.FATAL_FAILURE = ChannelConnectivity.SHUTDOWN + StatusCode = grpc.StatusCode diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 2a5229434c..839c555f05 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -45,7 +45,6 @@ CORE_SOURCE_FILES = [ 'src/core/lib/support/env_windows.c', 'src/core/lib/support/histogram.c', 'src/core/lib/support/host_port.c', - 'src/core/lib/support/load_file.c', 'src/core/lib/support/log.c', 'src/core/lib/support/log_android.c', 'src/core/lib/support/log_linux.c', @@ -94,6 +93,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/endpoint.c', 'src/core/lib/iomgr/endpoint_pair_posix.c', 'src/core/lib/iomgr/endpoint_pair_windows.c', + 'src/core/lib/iomgr/error.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', @@ -103,6 +103,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/iomgr.c', 'src/core/lib/iomgr/iomgr_posix.c', 'src/core/lib/iomgr/iomgr_windows.c', + 'src/core/lib/iomgr/load_file.c', 'src/core/lib/iomgr/polling_entity.c', 'src/core/lib/iomgr/pollset_set_windows.c', 'src/core/lib/iomgr/pollset_windows.c', @@ -205,6 +206,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/security/transport/secure_endpoint.c', 'src/core/lib/security/transport/security_connector.c', 'src/core/lib/security/transport/server_auth_filter.c', + 'src/core/lib/security/transport/tsi_error.c', 'src/core/lib/security/util/b64.c', 'src/core/lib/security/util/json_util.c', 'src/core/lib/surface/init_secure.c', diff --git a/src/python/grpcio/tests/qps/benchmark_client.py b/src/python/grpcio/tests/qps/benchmark_client.py index 1b100bb168..080281415d 100644 --- a/src/python/grpcio/tests/qps/benchmark_client.py +++ b/src/python/grpcio/tests/qps/benchmark_client.py @@ -30,11 +30,13 @@ """Defines test client behaviors (UNARY/STREAMING) (SYNC/ASYNC).""" import abc +import threading import time from concurrent import futures from six.moves import queue +import grpc from grpc.beta import implementations from grpc.framework.interfaces.face import face from src.proto.grpc.testing import messages_pb2 @@ -62,6 +64,13 @@ class BenchmarkClient: else: channel = implementations.insecure_channel(host, port) + connected_event = threading.Event() + def wait_for_ready(connectivity): + if connectivity == grpc.ChannelConnectivity.READY: + connected_event.set() + channel.subscribe(wait_for_ready, try_to_connect=True) + connected_event.wait() + if config.payload_config.WhichOneof('payload') == 'simple_params': self._generic = False self._stub = services_pb2.beta_create_BenchmarkService_stub(channel) diff --git a/src/python/grpcio/tests/tests.json b/src/python/grpcio/tests/tests.json index e64d2d04a7..8e509621a8 100644 --- a/src/python/grpcio/tests/tests.json +++ b/src/python/grpcio/tests/tests.json @@ -1,10 +1,9 @@ [ + "_api_test.AllTest", + "_api_test.ChannelConnectivityTest", + "_api_test.ChannelTest", "_auth_test.AccessTokenCallCredentialsTest", "_auth_test.GoogleCallCredentialsTest", - "_base_interface_test.AsyncEasyTest", - "_base_interface_test.AsyncPeasyTest", - "_base_interface_test.SyncEasyTest", - "_base_interface_test.SyncPeasyTest", "_beta_features_test.BetaFeaturesTest", "_beta_features_test.ContextManagementAndLifecycleTest", "_cancel_many_calls_test.CancelManyCallsTest", @@ -12,22 +11,7 @@ "_channel_ready_future_test.ChannelReadyFutureTest", "_channel_test.ChannelTest", "_connectivity_channel_test.ChannelConnectivityTest", - "_core_over_links_base_interface_test.AsyncEasyTest", - "_core_over_links_base_interface_test.AsyncPeasyTest", - "_core_over_links_base_interface_test.SyncEasyTest", - "_core_over_links_base_interface_test.SyncPeasyTest", - "_crust_over_core_face_interface_test.DynamicInvokerBlockingInvocationInlineServiceTest", - "_crust_over_core_face_interface_test.DynamicInvokerFutureInvocationAsynchronousEventServiceTest", - "_crust_over_core_face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", - "_crust_over_core_face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", - "_crust_over_core_face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", - "_crust_over_core_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", - "_crust_over_core_over_links_face_interface_test.DynamicInvokerBlockingInvocationInlineServiceTest", - "_crust_over_core_over_links_face_interface_test.DynamicInvokerFutureInvocationAsynchronousEventServiceTest", - "_crust_over_core_over_links_face_interface_test.GenericInvokerBlockingInvocationInlineServiceTest", - "_crust_over_core_over_links_face_interface_test.GenericInvokerFutureInvocationAsynchronousEventServiceTest", - "_crust_over_core_over_links_face_interface_test.MultiCallableInvokerBlockingInvocationInlineServiceTest", - "_crust_over_core_over_links_face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest", + "_connectivity_channel_test.ConnectivityStatesTest", "_empty_message_test.EmptyMessageTest", "_face_interface_test.DynamicInvokerBlockingInvocationInlineServiceTest", "_face_interface_test.DynamicInvokerFutureInvocationAsynchronousEventServiceTest", @@ -39,15 +23,8 @@ "_implementations_test.CallCredentialsTest", "_implementations_test.ChannelCredentialsTest", "_insecure_interop_test.InsecureInteropTest", - "_intermediary_low_test.CancellationTest", - "_intermediary_low_test.EchoTest", - "_intermediary_low_test.ExpirationTest", - "_intermediary_low_test.LonelyClientTest", - "_later_test.LaterTest", "_logging_pool_test.LoggingPoolTest", - "_lonely_invocation_link_test.LonelyInvocationLinkTest", - "_low_test.HangingServerShutdown", - "_low_test.InsecureServerInsecureClient", + "_metadata_test.MetadataTest", "_not_found_test.NotFoundTest", "_python_plugin_test.PythonPluginTest", "_read_some_but_not_all_responses_test.ReadSomeButNotAllResponsesTest", @@ -55,8 +32,6 @@ "_sanity_test.Sanity", "_secure_interop_test.SecureInteropTest", "_thread_cleanup_test.CleanupThreadTest", - "_transmission_test.RoundTripTest", - "_transmission_test.TransmissionTest", "_utilities_test.ChannelConnectivityTest", "beta_python_plugin_test.PythonPluginTest", "cygrpc_test.InsecureServerInsecureClient", diff --git a/src/python/grpcio/tests/unit/_adapter/_intermediary_low_test.py b/src/python/grpcio/tests/unit/_adapter/_intermediary_low_test.py deleted file mode 100644 index 09ebdeff33..0000000000 --- a/src/python/grpcio/tests/unit/_adapter/_intermediary_low_test.py +++ /dev/null @@ -1,429 +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. - -"""Tests for the old '_low'.""" - -import threading -import time -import unittest - -import six -from six.moves import queue - -from grpc._adapter import _intermediary_low as _low - -_STREAM_LENGTH = 300 -_TIMEOUT = 5 -_AFTER_DELAY = 2 -_FUTURE = time.time() + 60 * 60 * 24 -_BYTE_SEQUENCE = b'\abcdefghijklmnopqrstuvwxyz0123456789' * 200 -_BYTE_SEQUENCE_SEQUENCE = tuple( - bytes(bytearray((row + column) % 256 for column in range(row))) - for row in range(_STREAM_LENGTH)) - - -class LonelyClientTest(unittest.TestCase): - - def testLonelyClient(self): - host = 'nosuchhostexists' - port = 54321 - method = 'test method' - deadline = time.time() + _TIMEOUT - after_deadline = deadline + _AFTER_DELAY - metadata_tag = object() - finish_tag = object() - - completion_queue = _low.CompletionQueue() - channel = _low.Channel('%s:%d' % (host, port), None) - client_call = _low.Call(channel, completion_queue, method, host, deadline) - - client_call.invoke(completion_queue, metadata_tag, finish_tag) - first_event = completion_queue.get(after_deadline) - self.assertIsNotNone(first_event) - second_event = completion_queue.get(after_deadline) - self.assertIsNotNone(second_event) - kinds = [event.kind for event in (first_event, second_event)] - six.assertCountEqual(self, - (_low.Event.Kind.METADATA_ACCEPTED, _low.Event.Kind.FINISH), - kinds) - - self.assertIsNone(completion_queue.get(after_deadline)) - - completion_queue.stop() - stop_event = completion_queue.get(_FUTURE) - self.assertEqual(_low.Event.Kind.STOP, stop_event.kind) - - del client_call - del channel - del completion_queue - - -def _drive_completion_queue(completion_queue, event_queue): - while True: - event = completion_queue.get(_FUTURE) - if event.kind is _low.Event.Kind.STOP: - break - event_queue.put(event) - - -class EchoTest(unittest.TestCase): - - def setUp(self): - self.host = 'localhost' - - self.server_completion_queue = _low.CompletionQueue() - self.server = _low.Server(self.server_completion_queue) - port = self.server.add_http2_addr('[::]:0') - self.server.start() - self.server_events = queue.Queue() - self.server_completion_queue_thread = threading.Thread( - target=_drive_completion_queue, - args=(self.server_completion_queue, self.server_events)) - self.server_completion_queue_thread.start() - - self.client_completion_queue = _low.CompletionQueue() - self.channel = _low.Channel('%s:%d' % (self.host, port), None) - self.client_events = queue.Queue() - self.client_completion_queue_thread = threading.Thread( - target=_drive_completion_queue, - args=(self.client_completion_queue, self.client_events)) - self.client_completion_queue_thread.start() - - def tearDown(self): - self.server.stop() - self.server.cancel_all_calls() - self.server_completion_queue.stop() - self.client_completion_queue.stop() - self.server_completion_queue_thread.join() - self.client_completion_queue_thread.join() - del self.server - - def _perform_echo_test(self, test_data): - method = 'test method' - details = 'test details' - server_leading_metadata_key = 'my_server_leading_key' - server_leading_metadata_value = 'my_server_leading_value' - server_trailing_metadata_key = 'my_server_trailing_key' - server_trailing_metadata_value = 'my_server_trailing_value' - client_metadata_key = 'my_client_key' - client_metadata_value = 'my_client_value' - server_leading_binary_metadata_key = 'my_server_leading_key-bin' - server_leading_binary_metadata_value = b'\0'*2047 - server_trailing_binary_metadata_key = 'my_server_trailing_key-bin' - server_trailing_binary_metadata_value = b'\0'*2047 - client_binary_metadata_key = 'my_client_key-bin' - client_binary_metadata_value = b'\0'*2047 - deadline = _FUTURE - metadata_tag = object() - finish_tag = object() - write_tag = object() - complete_tag = object() - service_tag = object() - read_tag = object() - status_tag = object() - - server_data = [] - client_data = [] - - client_call = _low.Call(self.channel, self.client_completion_queue, - method, self.host, deadline) - client_call.add_metadata(client_metadata_key, client_metadata_value) - client_call.add_metadata(client_binary_metadata_key, - client_binary_metadata_value) - - client_call.invoke(self.client_completion_queue, metadata_tag, finish_tag) - - self.server.service(service_tag) - service_accepted = self.server_events.get() - self.assertIsNotNone(service_accepted) - self.assertIs(service_accepted.kind, _low.Event.Kind.SERVICE_ACCEPTED) - self.assertIs(service_accepted.tag, service_tag) - self.assertEqual(method.encode(), service_accepted.service_acceptance.method) - self.assertEqual(self.host.encode(), service_accepted.service_acceptance.host) - self.assertIsNotNone(service_accepted.service_acceptance.call) - metadata = dict(service_accepted.metadata) - self.assertIn(client_metadata_key.encode(), metadata) - self.assertEqual(client_metadata_value.encode(), metadata[client_metadata_key.encode()]) - self.assertIn(client_binary_metadata_key.encode(), metadata) - self.assertEqual(client_binary_metadata_value, - metadata[client_binary_metadata_key.encode()]) - server_call = service_accepted.service_acceptance.call - server_call.accept(self.server_completion_queue, finish_tag) - server_call.add_metadata(server_leading_metadata_key, - server_leading_metadata_value) - server_call.add_metadata(server_leading_binary_metadata_key, - server_leading_binary_metadata_value) - server_call.premetadata() - - metadata_accepted = self.client_events.get() - self.assertIsNotNone(metadata_accepted) - self.assertEqual(_low.Event.Kind.METADATA_ACCEPTED, metadata_accepted.kind) - self.assertEqual(metadata_tag, metadata_accepted.tag) - metadata = dict(metadata_accepted.metadata) - self.assertIn(server_leading_metadata_key.encode(), metadata) - self.assertEqual(server_leading_metadata_value.encode(), - metadata[server_leading_metadata_key.encode()]) - self.assertIn(server_leading_binary_metadata_key.encode(), metadata) - self.assertEqual(server_leading_binary_metadata_value, - metadata[server_leading_binary_metadata_key.encode()]) - - for datum in test_data: - client_call.write(datum, write_tag, _low.WriteFlags.WRITE_NO_COMPRESS) - write_accepted = self.client_events.get() - self.assertIsNotNone(write_accepted) - self.assertIs(write_accepted.kind, _low.Event.Kind.WRITE_ACCEPTED) - self.assertIs(write_accepted.tag, write_tag) - self.assertIs(write_accepted.write_accepted, True) - - server_call.read(read_tag) - read_accepted = self.server_events.get() - self.assertIsNotNone(read_accepted) - self.assertEqual(_low.Event.Kind.READ_ACCEPTED, read_accepted.kind) - self.assertEqual(read_tag, read_accepted.tag) - self.assertIsNotNone(read_accepted.bytes) - server_data.append(read_accepted.bytes) - - server_call.write(read_accepted.bytes, write_tag, 0) - write_accepted = self.server_events.get() - self.assertIsNotNone(write_accepted) - self.assertEqual(_low.Event.Kind.WRITE_ACCEPTED, write_accepted.kind) - self.assertEqual(write_tag, write_accepted.tag) - self.assertTrue(write_accepted.write_accepted) - - client_call.read(read_tag) - read_accepted = self.client_events.get() - self.assertIsNotNone(read_accepted) - self.assertEqual(_low.Event.Kind.READ_ACCEPTED, read_accepted.kind) - self.assertEqual(read_tag, read_accepted.tag) - self.assertIsNotNone(read_accepted.bytes) - client_data.append(read_accepted.bytes) - - client_call.complete(complete_tag) - complete_accepted = self.client_events.get() - self.assertIsNotNone(complete_accepted) - self.assertIs(complete_accepted.kind, _low.Event.Kind.COMPLETE_ACCEPTED) - self.assertIs(complete_accepted.tag, complete_tag) - self.assertIs(complete_accepted.complete_accepted, True) - - server_call.read(read_tag) - read_accepted = self.server_events.get() - self.assertIsNotNone(read_accepted) - self.assertEqual(_low.Event.Kind.READ_ACCEPTED, read_accepted.kind) - self.assertEqual(read_tag, read_accepted.tag) - self.assertIsNone(read_accepted.bytes) - - server_call.add_metadata(server_trailing_metadata_key, - server_trailing_metadata_value) - server_call.add_metadata(server_trailing_binary_metadata_key, - server_trailing_binary_metadata_value) - - server_call.status(_low.Status(_low.Code.OK, details), status_tag) - server_terminal_event_one = self.server_events.get() - server_terminal_event_two = self.server_events.get() - if server_terminal_event_one.kind == _low.Event.Kind.COMPLETE_ACCEPTED: - status_accepted = server_terminal_event_one - rpc_accepted = server_terminal_event_two - else: - status_accepted = server_terminal_event_two - rpc_accepted = server_terminal_event_one - self.assertIsNotNone(status_accepted) - self.assertIsNotNone(rpc_accepted) - self.assertEqual(_low.Event.Kind.COMPLETE_ACCEPTED, status_accepted.kind) - self.assertEqual(status_tag, status_accepted.tag) - self.assertTrue(status_accepted.complete_accepted) - self.assertEqual(_low.Event.Kind.FINISH, rpc_accepted.kind) - self.assertEqual(finish_tag, rpc_accepted.tag) - self.assertEqual(_low.Status(_low.Code.OK, ''), rpc_accepted.status) - - client_call.read(read_tag) - client_terminal_event_one = self.client_events.get() - client_terminal_event_two = self.client_events.get() - if client_terminal_event_one.kind == _low.Event.Kind.READ_ACCEPTED: - read_accepted = client_terminal_event_one - finish_accepted = client_terminal_event_two - else: - read_accepted = client_terminal_event_two - finish_accepted = client_terminal_event_one - self.assertIsNotNone(read_accepted) - self.assertIsNotNone(finish_accepted) - self.assertEqual(_low.Event.Kind.READ_ACCEPTED, read_accepted.kind) - self.assertEqual(read_tag, read_accepted.tag) - self.assertIsNone(read_accepted.bytes) - self.assertEqual(_low.Event.Kind.FINISH, finish_accepted.kind) - self.assertEqual(finish_tag, finish_accepted.tag) - self.assertEqual(_low.Status(_low.Code.OK, details.encode()), finish_accepted.status) - metadata = dict(finish_accepted.metadata) - self.assertIn(server_trailing_metadata_key.encode(), metadata) - self.assertEqual(server_trailing_metadata_value.encode(), - metadata[server_trailing_metadata_key.encode()]) - self.assertIn(server_trailing_binary_metadata_key.encode(), metadata) - self.assertEqual(server_trailing_binary_metadata_value, - metadata[server_trailing_binary_metadata_key.encode()]) - self.assertSetEqual(set(key for key, _ in finish_accepted.metadata), - set((server_trailing_metadata_key.encode(), - server_trailing_binary_metadata_key.encode(),))) - - self.assertSequenceEqual(test_data, server_data) - self.assertSequenceEqual(test_data, client_data) - - def testNoEcho(self): - self._perform_echo_test(()) - - def testOneByteEcho(self): - self._perform_echo_test([b'\x07']) - - def testOneManyByteEcho(self): - self._perform_echo_test([_BYTE_SEQUENCE]) - - def testManyOneByteEchoes(self): - self._perform_echo_test( - [_BYTE_SEQUENCE[i:i+1] for i in range(len(_BYTE_SEQUENCE))]) - - def testManyManyByteEchoes(self): - self._perform_echo_test(_BYTE_SEQUENCE_SEQUENCE) - - -class CancellationTest(unittest.TestCase): - - def setUp(self): - self.host = 'localhost' - - self.server_completion_queue = _low.CompletionQueue() - self.server = _low.Server(self.server_completion_queue) - port = self.server.add_http2_addr('[::]:0') - self.server.start() - self.server_events = queue.Queue() - self.server_completion_queue_thread = threading.Thread( - target=_drive_completion_queue, - args=(self.server_completion_queue, self.server_events)) - self.server_completion_queue_thread.start() - - self.client_completion_queue = _low.CompletionQueue() - self.channel = _low.Channel('%s:%d' % (self.host, port), None) - self.client_events = queue.Queue() - self.client_completion_queue_thread = threading.Thread( - target=_drive_completion_queue, - args=(self.client_completion_queue, self.client_events)) - self.client_completion_queue_thread.start() - - def tearDown(self): - self.server.stop() - self.server.cancel_all_calls() - self.server_completion_queue.stop() - self.client_completion_queue.stop() - self.server_completion_queue_thread.join() - self.client_completion_queue_thread.join() - del self.server - - def testCancellation(self): - method = 'test method' - deadline = _FUTURE - metadata_tag = object() - finish_tag = object() - write_tag = object() - service_tag = object() - read_tag = object() - test_data = _BYTE_SEQUENCE_SEQUENCE - - server_data = [] - client_data = [] - - client_call = _low.Call(self.channel, self.client_completion_queue, - method, self.host, deadline) - - client_call.invoke(self.client_completion_queue, metadata_tag, finish_tag) - - self.server.service(service_tag) - service_accepted = self.server_events.get() - server_call = service_accepted.service_acceptance.call - - server_call.accept(self.server_completion_queue, finish_tag) - server_call.premetadata() - - metadata_accepted = self.client_events.get() - self.assertIsNotNone(metadata_accepted) - - for datum in test_data: - client_call.write(datum, write_tag, 0) - write_accepted = self.client_events.get() - - server_call.read(read_tag) - read_accepted = self.server_events.get() - server_data.append(read_accepted.bytes) - - server_call.write(read_accepted.bytes, write_tag, 0) - write_accepted = self.server_events.get() - self.assertIsNotNone(write_accepted) - - client_call.read(read_tag) - read_accepted = self.client_events.get() - client_data.append(read_accepted.bytes) - - client_call.cancel() - # cancel() is idempotent. - client_call.cancel() - client_call.cancel() - client_call.cancel() - - server_call.read(read_tag) - - server_terminal_event_one = self.server_events.get() - server_terminal_event_two = self.server_events.get() - if server_terminal_event_one.kind == _low.Event.Kind.READ_ACCEPTED: - read_accepted = server_terminal_event_one - rpc_accepted = server_terminal_event_two - else: - read_accepted = server_terminal_event_two - rpc_accepted = server_terminal_event_one - self.assertIsNotNone(read_accepted) - self.assertIsNotNone(rpc_accepted) - self.assertEqual(_low.Event.Kind.READ_ACCEPTED, read_accepted.kind) - self.assertIsNone(read_accepted.bytes) - self.assertEqual(_low.Event.Kind.FINISH, rpc_accepted.kind) - self.assertEqual(_low.Status(_low.Code.CANCELLED, ''), rpc_accepted.status) - - finish_event = self.client_events.get() - self.assertEqual(_low.Event.Kind.FINISH, finish_event.kind) - self.assertEqual(_low.Status(_low.Code.CANCELLED, b'Cancelled'), - finish_event.status) - - self.assertSequenceEqual(test_data, server_data) - self.assertSequenceEqual(test_data, client_data) - - -class ExpirationTest(unittest.TestCase): - - @unittest.skip('TODO(nathaniel): Expiration test!') - def testExpiration(self): - pass - - -if __name__ == '__main__': - unittest.main(verbosity=2) - diff --git a/src/python/grpcio/tests/unit/_adapter/_low_test.py b/src/python/grpcio/tests/unit/_adapter/_low_test.py deleted file mode 100644 index e09a1f2564..0000000000 --- a/src/python/grpcio/tests/unit/_adapter/_low_test.py +++ /dev/null @@ -1,319 +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. - -import threading -import time -import unittest - -from grpc import _grpcio_metadata -from grpc._adapter import _types -from grpc._adapter import _low -from tests.unit import test_common - - -def wait_for_events(completion_queues, deadline): - """ - Args: - completion_queues: list of completion queues to wait for events on - deadline: absolute deadline to wait until - - Returns: - a sequence of events of length len(completion_queues). - """ - - results = [None] * len(completion_queues) - lock = threading.Lock() - threads = [] - def set_ith_result(i, completion_queue): - result = completion_queue.next(deadline) - with lock: - results[i] = result - for i, completion_queue in enumerate(completion_queues): - thread = threading.Thread(target=set_ith_result, - args=[i, completion_queue]) - thread.start() - threads.append(thread) - for thread in threads: - thread.join() - return results - - -class InsecureServerInsecureClient(unittest.TestCase): - - def setUp(self): - self.server_completion_queue = _low.CompletionQueue() - self.server = _low.Server(self.server_completion_queue, []) - self.port = self.server.add_http2_port('[::]:0') - self.client_completion_queue = _low.CompletionQueue() - self.client_channel = _low.Channel('localhost:%d'%self.port, []) - - self.server.start() - - def tearDown(self): - self.server.shutdown() - del self.client_channel - - self.client_completion_queue.shutdown() - while (self.client_completion_queue.next(float('+inf')).type != - _types.EventType.QUEUE_SHUTDOWN): - pass - self.server_completion_queue.shutdown() - while (self.server_completion_queue.next(float('+inf')).type != - _types.EventType.QUEUE_SHUTDOWN): - pass - - del self.client_completion_queue - del self.server_completion_queue - del self.server - - def testEcho(self): - deadline = time.time() + 5 - event_time_tolerance = 2 - deadline_tolerance = 0.25 - client_metadata_ascii_key = 'key' - client_metadata_ascii_value = 'val' - client_metadata_bin_key = 'key-bin' - client_metadata_bin_value = b'\0'*1000 - server_initial_metadata_key = 'init_me_me_me' - server_initial_metadata_value = 'whodawha?' - server_trailing_metadata_key = 'california_is_in_a_drought' - server_trailing_metadata_value = 'zomg it is' - server_status_code = _types.StatusCode.OK - server_status_details = 'our work is never over' - request = 'blarghaflargh' - response = 'his name is robert paulson' - method = 'twinkies' - host = 'hostess' - server_request_tag = object() - request_call_result = self.server.request_call(self.server_completion_queue, - server_request_tag) - - self.assertEqual(_types.CallError.OK, request_call_result) - - client_call_tag = object() - client_call = self.client_channel.create_call( - self.client_completion_queue, method, host, deadline) - client_initial_metadata = [ - (client_metadata_ascii_key, client_metadata_ascii_value), - (client_metadata_bin_key, client_metadata_bin_value) - ] - client_start_batch_result = client_call.start_batch([ - _types.OpArgs.send_initial_metadata(client_initial_metadata), - _types.OpArgs.send_message(request, 0), - _types.OpArgs.send_close_from_client(), - _types.OpArgs.recv_initial_metadata(), - _types.OpArgs.recv_message(), - _types.OpArgs.recv_status_on_client() - ], client_call_tag) - self.assertEqual(_types.CallError.OK, client_start_batch_result) - - client_no_event, request_event, = wait_for_events( - [self.client_completion_queue, self.server_completion_queue], - time.time() + event_time_tolerance) - self.assertEqual(client_no_event, None) - self.assertEqual(_types.EventType.OP_COMPLETE, request_event.type) - self.assertIsInstance(request_event.call, _low.Call) - self.assertIs(server_request_tag, request_event.tag) - self.assertEqual(1, len(request_event.results)) - received_initial_metadata = request_event.results[0].initial_metadata - # Check that our metadata were transmitted - self.assertTrue(test_common.metadata_transmitted(client_initial_metadata, - received_initial_metadata)) - # Check that Python's user agent string is a part of the full user agent - # string - received_initial_metadata_dict = dict(received_initial_metadata) - self.assertIn(b'user-agent', received_initial_metadata_dict) - self.assertIn('Python-gRPC-{}'.format(_grpcio_metadata.__version__).encode(), - received_initial_metadata_dict[b'user-agent']) - self.assertEqual(method.encode(), request_event.call_details.method) - self.assertEqual(host.encode(), request_event.call_details.host) - self.assertLess(abs(deadline - request_event.call_details.deadline), - deadline_tolerance) - - # Check that the channel is connected, and that both it and the call have - # the proper target and peer; do this after the first flurry of messages to - # avoid the possibility that connection was delayed by the core until the - # first message was sent. - self.assertEqual(_types.ConnectivityState.READY, - self.client_channel.check_connectivity_state(False)) - self.assertIsNotNone(self.client_channel.target()) - self.assertIsNotNone(client_call.peer()) - - server_call_tag = object() - server_call = request_event.call - server_initial_metadata = [ - (server_initial_metadata_key, server_initial_metadata_value) - ] - server_trailing_metadata = [ - (server_trailing_metadata_key, server_trailing_metadata_value) - ] - server_start_batch_result = server_call.start_batch([ - _types.OpArgs.send_initial_metadata(server_initial_metadata), - _types.OpArgs.recv_message(), - _types.OpArgs.send_message(response, 0), - _types.OpArgs.recv_close_on_server(), - _types.OpArgs.send_status_from_server( - server_trailing_metadata, server_status_code, server_status_details) - ], server_call_tag) - self.assertEqual(_types.CallError.OK, server_start_batch_result) - - client_event, server_event, = wait_for_events( - [self.client_completion_queue, self.server_completion_queue], - time.time() + event_time_tolerance) - - self.assertEqual(6, len(client_event.results)) - found_client_op_types = set() - for client_result in client_event.results: - # we expect each op type to be unique - self.assertNotIn(client_result.type, found_client_op_types) - found_client_op_types.add(client_result.type) - if client_result.type == _types.OpType.RECV_INITIAL_METADATA: - self.assertTrue( - test_common.metadata_transmitted(server_initial_metadata, - client_result.initial_metadata)) - elif client_result.type == _types.OpType.RECV_MESSAGE: - self.assertEqual(response.encode(), client_result.message) - elif client_result.type == _types.OpType.RECV_STATUS_ON_CLIENT: - self.assertTrue( - test_common.metadata_transmitted(server_trailing_metadata, - client_result.trailing_metadata)) - self.assertEqual(server_status_details.encode(), client_result.status.details) - self.assertEqual(server_status_code, client_result.status.code) - self.assertEqual(set([ - _types.OpType.SEND_INITIAL_METADATA, - _types.OpType.SEND_MESSAGE, - _types.OpType.SEND_CLOSE_FROM_CLIENT, - _types.OpType.RECV_INITIAL_METADATA, - _types.OpType.RECV_MESSAGE, - _types.OpType.RECV_STATUS_ON_CLIENT - ]), found_client_op_types) - - self.assertEqual(5, len(server_event.results)) - found_server_op_types = set() - for server_result in server_event.results: - self.assertNotIn(client_result.type, found_server_op_types) - found_server_op_types.add(server_result.type) - if server_result.type == _types.OpType.RECV_MESSAGE: - self.assertEqual(request.encode(), server_result.message) - elif server_result.type == _types.OpType.RECV_CLOSE_ON_SERVER: - self.assertFalse(server_result.cancelled) - self.assertEqual(set([ - _types.OpType.SEND_INITIAL_METADATA, - _types.OpType.RECV_MESSAGE, - _types.OpType.SEND_MESSAGE, - _types.OpType.RECV_CLOSE_ON_SERVER, - _types.OpType.SEND_STATUS_FROM_SERVER - ]), found_server_op_types) - - del client_call - del server_call - - -class HangingServerShutdown(unittest.TestCase): - - def setUp(self): - self.server_completion_queue = _low.CompletionQueue() - self.server = _low.Server(self.server_completion_queue, []) - self.port = self.server.add_http2_port('[::]:0') - self.client_completion_queue = _low.CompletionQueue() - self.client_channel = _low.Channel('localhost:%d'%self.port, []) - - self.server.start() - - def tearDown(self): - self.server.shutdown() - del self.client_channel - - self.client_completion_queue.shutdown() - self.server_completion_queue.shutdown() - while True: - client_event, server_event = wait_for_events( - [self.client_completion_queue, self.server_completion_queue], - float("+inf")) - if (client_event.type == _types.EventType.QUEUE_SHUTDOWN and - server_event.type == _types.EventType.QUEUE_SHUTDOWN): - break - - del self.client_completion_queue - del self.server_completion_queue - del self.server - - def testHangingServerCall(self): - deadline = time.time() + 5 - deadline_tolerance = 0.25 - event_time_tolerance = 2 - cancel_all_calls_time_tolerance = 0.5 - request = 'blarghaflargh' - method = 'twinkies' - host = 'hostess' - server_request_tag = object() - request_call_result = self.server.request_call(self.server_completion_queue, - server_request_tag) - - client_call_tag = object() - client_call = self.client_channel.create_call(self.client_completion_queue, - method, host, deadline) - client_start_batch_result = client_call.start_batch([ - _types.OpArgs.send_initial_metadata([]), - _types.OpArgs.send_message(request, 0), - _types.OpArgs.send_close_from_client(), - _types.OpArgs.recv_initial_metadata(), - _types.OpArgs.recv_message(), - _types.OpArgs.recv_status_on_client() - ], client_call_tag) - - client_no_event, request_event, = wait_for_events( - [self.client_completion_queue, self.server_completion_queue], - time.time() + event_time_tolerance) - - # Now try to shutdown the server and expect that we see server shutdown - # almost immediately after calling cancel_all_calls. - - # First attempt to cancel all calls before shutting down, and expect - # our state machine to catch the erroneous API use. - with self.assertRaises(RuntimeError): - self.server.cancel_all_calls() - - shutdown_tag = object() - self.server.shutdown(shutdown_tag) - pre_cancel_timestamp = time.time() - self.server.cancel_all_calls() - finish_shutdown_timestamp = None - client_call_event, server_shutdown_event = wait_for_events( - [self.client_completion_queue, self.server_completion_queue], - time.time() + event_time_tolerance) - self.assertIs(shutdown_tag, server_shutdown_event.tag) - self.assertGreater(pre_cancel_timestamp + cancel_all_calls_time_tolerance, - time.time()) - - del client_call - - -if __name__ == '__main__': - unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/unit/_api_test.py b/src/python/grpcio/tests/unit/_api_test.py new file mode 100644 index 0000000000..2fe89499f5 --- /dev/null +++ b/src/python/grpcio/tests/unit/_api_test.py @@ -0,0 +1,111 @@ +# 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. + +"""Test of gRPC Python's application-layer API.""" + +import unittest + +import six + +import grpc + +from tests.unit import _from_grpc_import_star + + +class AllTest(unittest.TestCase): + + def testAll(self): + expected_grpc_code_elements = ( + 'FutureTimeoutError', + 'FutureCancelledError', + 'Future', + 'ChannelConnectivity', + 'StatusCode', + 'RpcError', + 'RpcContext', + 'Call', + 'ChannelCredentials', + 'CallCredentials', + 'AuthMetadataContext', + 'AuthMetadataPluginCallback', + 'AuthMetadataPlugin', + 'ServerCredentials', + 'UnaryUnaryMultiCallable', + 'UnaryStreamMultiCallable', + 'StreamUnaryMultiCallable', + 'StreamStreamMultiCallable', + 'Channel', + 'ServicerContext', + 'RpcMethodHandler', + 'HandlerCallDetails', + 'GenericRpcHandler', + 'Server', + 'unary_unary_rpc_method_handler', + 'unary_stream_rpc_method_handler', + 'stream_unary_rpc_method_handler', + 'stream_stream_rpc_method_handler', + 'method_handlers_generic_handler', + 'ssl_channel_credentials', + 'metadata_call_credentials', + 'access_token_call_credentials', + 'composite_call_credentials', + 'composite_channel_credentials', + 'ssl_server_credentials', + 'channel_ready_future', + 'insecure_channel', + 'secure_channel', + 'server', + ) + + six.assertCountEqual( + self, expected_grpc_code_elements, + _from_grpc_import_star.GRPC_ELEMENTS) + + +class ChannelConnectivityTest(unittest.TestCase): + + def testChannelConnectivity(self): + self.assertSequenceEqual( + (grpc.ChannelConnectivity.IDLE, + grpc.ChannelConnectivity.CONNECTING, + grpc.ChannelConnectivity.READY, + grpc.ChannelConnectivity.TRANSIENT_FAILURE, + grpc.ChannelConnectivity.SHUTDOWN,), + tuple(grpc.ChannelConnectivity)) + + +class ChannelTest(unittest.TestCase): + + def test_secure_channel(self): + channel_credentials = grpc.ssl_channel_credentials() + channel = grpc.secure_channel('google.com:443', channel_credentials) + + +if __name__ == '__main__': + unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/unit/_core_over_links_base_interface_test.py b/src/python/grpcio/tests/unit/_core_over_links_base_interface_test.py deleted file mode 100644 index 2b8981c752..0000000000 --- a/src/python/grpcio/tests/unit/_core_over_links_base_interface_test.py +++ /dev/null @@ -1,157 +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. - -"""Tests Base interface compliance of the core-over-gRPC-links stack.""" - -import collections -import logging -import random -import time -import unittest - -import six - -from grpc._adapter import _intermediary_low -from grpc._links import invocation -from grpc._links import service -from grpc.beta import interfaces as beta_interfaces -from grpc.framework.core import implementations -from grpc.framework.interfaces.base import utilities -from tests.unit import test_common as grpc_test_common -from tests.unit.framework.common import test_constants -from tests.unit.framework.interfaces.base import test_cases -from tests.unit.framework.interfaces.base import test_interfaces - - -class _SerializationBehaviors( - collections.namedtuple( - '_SerializationBehaviors', - ('request_serializers', 'request_deserializers', 'response_serializers', - 'response_deserializers',))): - pass - - -class _Links( - collections.namedtuple( - '_Links', - ('invocation_end_link', 'invocation_grpc_link', 'service_grpc_link', - 'service_end_link'))): - pass - - -def _serialization_behaviors_from_serializations(serializations): - request_serializers = {} - request_deserializers = {} - response_serializers = {} - response_deserializers = {} - for (group, method), serialization in six.iteritems(serializations): - request_serializers[group, method] = serialization.serialize_request - request_deserializers[group, method] = serialization.deserialize_request - response_serializers[group, method] = serialization.serialize_response - response_deserializers[group, method] = serialization.deserialize_response - return _SerializationBehaviors( - request_serializers, request_deserializers, response_serializers, - response_deserializers) - - -class _Implementation(test_interfaces.Implementation): - - def instantiate(self, serializations, servicer): - serialization_behaviors = _serialization_behaviors_from_serializations( - serializations) - invocation_end_link = implementations.invocation_end_link() - service_end_link = implementations.service_end_link( - servicer, test_constants.DEFAULT_TIMEOUT, - test_constants.MAXIMUM_TIMEOUT) - service_grpc_link = service.service_link( - serialization_behaviors.request_deserializers, - serialization_behaviors.response_serializers) - port = service_grpc_link.add_port('[::]:0', None) - channel = _intermediary_low.Channel('localhost:%d' % port, None) - invocation_grpc_link = invocation.invocation_link( - channel, b'localhost', None, - serialization_behaviors.request_serializers, - serialization_behaviors.response_deserializers) - - invocation_end_link.join_link(invocation_grpc_link) - invocation_grpc_link.join_link(invocation_end_link) - service_end_link.join_link(service_grpc_link) - service_grpc_link.join_link(service_end_link) - invocation_grpc_link.start() - service_grpc_link.start() - return invocation_end_link, service_end_link, ( - invocation_grpc_link, service_grpc_link) - - def destantiate(self, memo): - invocation_grpc_link, service_grpc_link = memo - invocation_grpc_link.stop() - service_grpc_link.begin_stop() - service_grpc_link.end_stop() - - def invocation_initial_metadata(self): - return grpc_test_common.INVOCATION_INITIAL_METADATA - - def service_initial_metadata(self): - return grpc_test_common.SERVICE_INITIAL_METADATA - - def invocation_completion(self): - return utilities.completion(None, None, None) - - def service_completion(self): - return utilities.completion( - grpc_test_common.SERVICE_TERMINAL_METADATA, - beta_interfaces.StatusCode.OK, grpc_test_common.DETAILS) - - def metadata_transmitted(self, original_metadata, transmitted_metadata): - return original_metadata is None or grpc_test_common.metadata_transmitted( - original_metadata, transmitted_metadata) - - def completion_transmitted(self, original_completion, transmitted_completion): - if (original_completion.terminal_metadata is not None and - not grpc_test_common.metadata_transmitted( - original_completion.terminal_metadata, - transmitted_completion.terminal_metadata)): - return False - elif original_completion.code is not transmitted_completion.code: - return False - elif original_completion.message != transmitted_completion.message: - return False - else: - return True - - -def load_tests(loader, tests, pattern): - return unittest.TestSuite( - tests=tuple( - loader.loadTestsFromTestCase(test_case_class) - for test_case_class in test_cases.test_cases(_Implementation()))) - - -if __name__ == '__main__': - unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/unit/_crust_over_core_over_links_face_interface_test.py b/src/python/grpcio/tests/unit/_crust_over_core_over_links_face_interface_test.py deleted file mode 100644 index 50b9a5a824..0000000000 --- a/src/python/grpcio/tests/unit/_crust_over_core_over_links_face_interface_test.py +++ /dev/null @@ -1,163 +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. - -"""Tests Face compliance of the crust-over-core-over-gRPC-links stack.""" - -import collections -import unittest - -import six - -from grpc._adapter import _intermediary_low -from grpc._links import invocation -from grpc._links import service -from grpc.beta import interfaces as beta_interfaces -from grpc.framework.core import implementations as core_implementations -from grpc.framework.crust import implementations as crust_implementations -from grpc.framework.foundation import logging_pool -from grpc.framework.interfaces.links import utilities -from tests.unit import test_common as grpc_test_common -from tests.unit.framework.common import test_constants -from tests.unit.framework.interfaces.face import test_cases -from tests.unit.framework.interfaces.face import test_interfaces - - -class _SerializationBehaviors( - collections.namedtuple( - '_SerializationBehaviors', - ('request_serializers', 'request_deserializers', 'response_serializers', - 'response_deserializers',))): - pass - - -def _serialization_behaviors_from_test_methods(test_methods): - request_serializers = {} - request_deserializers = {} - response_serializers = {} - response_deserializers = {} - for (group, method), test_method in six.iteritems(test_methods): - request_serializers[group, method] = test_method.serialize_request - request_deserializers[group, method] = test_method.deserialize_request - response_serializers[group, method] = test_method.serialize_response - response_deserializers[group, method] = test_method.deserialize_response - return _SerializationBehaviors( - request_serializers, request_deserializers, response_serializers, - response_deserializers) - - -class _Implementation(test_interfaces.Implementation): - - def instantiate( - self, methods, method_implementations, multi_method_implementation): - pool = logging_pool.pool(test_constants.POOL_SIZE) - servicer = crust_implementations.servicer( - method_implementations, multi_method_implementation, pool) - serialization_behaviors = _serialization_behaviors_from_test_methods( - methods) - invocation_end_link = core_implementations.invocation_end_link() - service_end_link = core_implementations.service_end_link( - servicer, test_constants.DEFAULT_TIMEOUT, - test_constants.MAXIMUM_TIMEOUT) - service_grpc_link = service.service_link( - serialization_behaviors.request_deserializers, - serialization_behaviors.response_serializers) - port = service_grpc_link.add_port('[::]:0', None) - channel = _intermediary_low.Channel('localhost:%d' % port, None) - invocation_grpc_link = invocation.invocation_link( - channel, b'localhost', None, - serialization_behaviors.request_serializers, - serialization_behaviors.response_deserializers) - - invocation_end_link.join_link(invocation_grpc_link) - invocation_grpc_link.join_link(invocation_end_link) - service_grpc_link.join_link(service_end_link) - service_end_link.join_link(service_grpc_link) - service_end_link.start() - invocation_end_link.start() - invocation_grpc_link.start() - service_grpc_link.start() - - generic_stub = crust_implementations.generic_stub(invocation_end_link, pool) - # TODO(nathaniel): Add a "groups" attribute to _digest.TestServiceDigest. - group = next(iter(methods))[0] - # TODO(nathaniel): Add a "cardinalities_by_group" attribute to - # _digest.TestServiceDigest. - cardinalities = { - method: method_object.cardinality() - for (group, method), method_object in six.iteritems(methods)} - dynamic_stub = crust_implementations.dynamic_stub( - invocation_end_link, group, cardinalities, pool) - - return generic_stub, {group: dynamic_stub}, ( - invocation_end_link, invocation_grpc_link, service_grpc_link, - service_end_link, pool) - - def destantiate(self, memo): - (invocation_end_link, invocation_grpc_link, service_grpc_link, - service_end_link, pool) = memo - invocation_end_link.stop(0).wait() - invocation_grpc_link.stop() - service_grpc_link.begin_stop() - service_end_link.stop(0).wait() - service_grpc_link.end_stop() - invocation_end_link.join_link(utilities.NULL_LINK) - invocation_grpc_link.join_link(utilities.NULL_LINK) - service_grpc_link.join_link(utilities.NULL_LINK) - service_end_link.join_link(utilities.NULL_LINK) - pool.shutdown(wait=True) - - def invocation_metadata(self): - return grpc_test_common.INVOCATION_INITIAL_METADATA - - def initial_metadata(self): - return grpc_test_common.SERVICE_INITIAL_METADATA - - def terminal_metadata(self): - return grpc_test_common.SERVICE_TERMINAL_METADATA - - def code(self): - return beta_interfaces.StatusCode.OK - - def details(self): - return grpc_test_common.DETAILS - - def metadata_transmitted(self, original_metadata, transmitted_metadata): - return original_metadata is None or grpc_test_common.metadata_transmitted( - original_metadata, transmitted_metadata) - - -def load_tests(loader, tests, pattern): - return unittest.TestSuite( - tests=tuple( - loader.loadTestsFromTestCase(test_case_class) - for test_case_class in test_cases.test_cases(_Implementation()))) - - -if __name__ == '__main__': - unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/unit/_from_grpc_import_star.py b/src/python/grpcio/tests/unit/_from_grpc_import_star.py new file mode 100644 index 0000000000..78d2fb7dc5 --- /dev/null +++ b/src/python/grpcio/tests/unit/_from_grpc_import_star.py @@ -0,0 +1,38 @@ +# 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. + +_BEFORE_IMPORT = tuple(globals()) + +from grpc import * + +_AFTER_IMPORT = tuple(globals()) + +GRPC_ELEMENTS = tuple( + element for element in _AFTER_IMPORT + if element not in _BEFORE_IMPORT and element != '_BEFORE_IMPORT') diff --git a/src/python/grpcio/tests/unit/_links/_lonely_invocation_link_test.py b/src/python/grpcio/tests/unit/_links/_lonely_invocation_link_test.py deleted file mode 100644 index 890755f81c..0000000000 --- a/src/python/grpcio/tests/unit/_links/_lonely_invocation_link_test.py +++ /dev/null @@ -1,88 +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. - -"""A test of invocation-side code unconnected to an RPC server.""" - -import unittest - -from grpc._adapter import _intermediary_low -from grpc._links import invocation -from grpc.framework.interfaces.links import links -from tests.unit.framework.common import test_constants -from tests.unit.framework.interfaces.links import test_cases -from tests.unit.framework.interfaces.links import test_utilities - -_NULL_BEHAVIOR = lambda unused_argument: None - - -class LonelyInvocationLinkTest(unittest.TestCase): - - def testUpAndDown(self): - channel = _intermediary_low.Channel('nonexistent:54321', None) - invocation_link = invocation.invocation_link( - channel, 'nonexistent', None, {}, {}) - - invocation_link.start() - invocation_link.stop() - - def _test_lonely_invocation_with_termination(self, termination): - test_operation_id = object() - test_group = 'test package.Test Service' - test_method = 'test method' - invocation_link_mate = test_utilities.RecordingLink() - - channel = _intermediary_low.Channel('nonexistent:54321', None) - invocation_link = invocation.invocation_link( - channel, 'nonexistent', None, {}, {}) - invocation_link.join_link(invocation_link_mate) - invocation_link.start() - - ticket = links.Ticket( - test_operation_id, 0, test_group, test_method, - links.Ticket.Subscription.FULL, test_constants.SHORT_TIMEOUT, 1, None, - None, None, None, None, termination, None) - invocation_link.accept_ticket(ticket) - invocation_link_mate.block_until_tickets_satisfy(test_cases.terminated) - - invocation_link.stop() - - self.assertIsNot( - invocation_link_mate.tickets()[-1].termination, - links.Ticket.Termination.COMPLETION) - - def testLonelyInvocationLinkWithCommencementTicket(self): - self._test_lonely_invocation_with_termination(None) - - def testLonelyInvocationLinkWithEntireTicket(self): - self._test_lonely_invocation_with_termination( - links.Ticket.Termination.COMPLETION) - - -if __name__ == '__main__': - unittest.main() diff --git a/src/python/grpcio/tests/unit/_links/_transmission_test.py b/src/python/grpcio/tests/unit/_links/_transmission_test.py deleted file mode 100644 index 1f6edd18ca..0000000000 --- a/src/python/grpcio/tests/unit/_links/_transmission_test.py +++ /dev/null @@ -1,239 +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. - -"""Tests transmission of tickets across gRPC-on-the-wire.""" - -import unittest - -from grpc._adapter import _intermediary_low -from grpc._links import invocation -from grpc._links import service -from grpc.beta import interfaces as beta_interfaces -from grpc.framework.interfaces.links import links -from tests.unit import test_common -from tests.unit._links import _proto_scenarios -from tests.unit.framework.common import test_constants -from tests.unit.framework.interfaces.links import test_cases -from tests.unit.framework.interfaces.links import test_utilities - -_IDENTITY = lambda x: x - - -class TransmissionTest(test_cases.TransmissionTest, unittest.TestCase): - - def create_transmitting_links(self): - service_link = service.service_link( - {self.group_and_method(): self.deserialize_request}, - {self.group_and_method(): self.serialize_response}) - port = service_link.add_port('[::]:0', None) - service_link.start() - channel = _intermediary_low.Channel('localhost:%d' % port, None) - invocation_link = invocation.invocation_link( - channel, 'localhost', None, - {self.group_and_method(): self.serialize_request}, - {self.group_and_method(): self.deserialize_response}) - invocation_link.start() - return invocation_link, service_link - - def destroy_transmitting_links(self, invocation_side_link, service_side_link): - invocation_side_link.stop() - service_side_link.begin_stop() - service_side_link.end_stop() - - def create_invocation_initial_metadata(self): - return ( - ('first_invocation_initial_metadata_key', 'just a string value'), - ('second_invocation_initial_metadata_key', '0123456789'), - ('third_invocation_initial_metadata_key-bin', '\x00\x57' * 100), - ) - - def create_invocation_terminal_metadata(self): - return None - - def create_service_initial_metadata(self): - return ( - ('first_service_initial_metadata_key', 'just another string value'), - ('second_service_initial_metadata_key', '9876543210'), - ('third_service_initial_metadata_key-bin', '\x00\x59\x02' * 100), - ) - - def create_service_terminal_metadata(self): - return ( - ('first_service_terminal_metadata_key', 'yet another string value'), - ('second_service_terminal_metadata_key', 'abcdefghij'), - ('third_service_terminal_metadata_key-bin', '\x00\x37' * 100), - ) - - def create_invocation_completion(self): - return None, None - - def create_service_completion(self): - return ( - beta_interfaces.StatusCode.OK, b'An exuberant test "details" message!') - - def assertMetadataTransmitted(self, original_metadata, transmitted_metadata): - self.assertTrue( - test_common.metadata_transmitted( - original_metadata, transmitted_metadata), - '%s erroneously transmitted as %s' % ( - original_metadata, transmitted_metadata)) - - -class RoundTripTest(unittest.TestCase): - - def testZeroMessageRoundTrip(self): - test_operation_id = object() - test_group = 'test package.Test Group' - test_method = 'test method' - identity_transformation = {(test_group, test_method): _IDENTITY} - test_code = beta_interfaces.StatusCode.OK - test_message = 'a test message' - - service_link = service.service_link( - identity_transformation, identity_transformation) - service_mate = test_utilities.RecordingLink() - service_link.join_link(service_mate) - port = service_link.add_port('[::]:0', None) - service_link.start() - channel = _intermediary_low.Channel('localhost:%d' % port, None) - invocation_link = invocation.invocation_link( - channel, None, None, identity_transformation, identity_transformation) - invocation_mate = test_utilities.RecordingLink() - invocation_link.join_link(invocation_mate) - invocation_link.start() - - invocation_ticket = links.Ticket( - test_operation_id, 0, test_group, test_method, - links.Ticket.Subscription.FULL, test_constants.LONG_TIMEOUT, None, None, - None, None, None, None, links.Ticket.Termination.COMPLETION, None) - invocation_link.accept_ticket(invocation_ticket) - service_mate.block_until_tickets_satisfy(test_cases.terminated) - - service_ticket = links.Ticket( - service_mate.tickets()[-1].operation_id, 0, None, None, None, None, - None, None, None, None, test_code, test_message, - links.Ticket.Termination.COMPLETION, None) - service_link.accept_ticket(service_ticket) - invocation_mate.block_until_tickets_satisfy(test_cases.terminated) - - invocation_link.stop() - service_link.begin_stop() - service_link.end_stop() - - self.assertIs( - service_mate.tickets()[-1].termination, - links.Ticket.Termination.COMPLETION) - self.assertIs( - invocation_mate.tickets()[-1].termination, - links.Ticket.Termination.COMPLETION) - self.assertIs(invocation_mate.tickets()[-1].code, test_code) - self.assertEqual(invocation_mate.tickets()[-1].message, test_message.encode()) - - def _perform_scenario_test(self, scenario): - test_operation_id = object() - test_group, test_method = scenario.group_and_method() - test_code = beta_interfaces.StatusCode.OK - test_message = 'a scenario test message' - - service_link = service.service_link( - {(test_group, test_method): scenario.deserialize_request}, - {(test_group, test_method): scenario.serialize_response}) - service_mate = test_utilities.RecordingLink() - service_link.join_link(service_mate) - port = service_link.add_port('[::]:0', None) - service_link.start() - channel = _intermediary_low.Channel('localhost:%d' % port, None) - invocation_link = invocation.invocation_link( - channel, 'localhost', None, - {(test_group, test_method): scenario.serialize_request}, - {(test_group, test_method): scenario.deserialize_response}) - invocation_mate = test_utilities.RecordingLink() - invocation_link.join_link(invocation_mate) - invocation_link.start() - - invocation_ticket = links.Ticket( - test_operation_id, 0, test_group, test_method, - links.Ticket.Subscription.FULL, test_constants.LONG_TIMEOUT, None, None, - None, None, None, None, None, None) - invocation_link.accept_ticket(invocation_ticket) - requests = scenario.requests() - for request_index, request in enumerate(requests): - request_ticket = links.Ticket( - test_operation_id, 1 + request_index, None, None, None, None, 1, None, - request, None, None, None, None, None) - invocation_link.accept_ticket(request_ticket) - service_mate.block_until_tickets_satisfy( - test_cases.at_least_n_payloads_received_predicate(1 + request_index)) - response_ticket = links.Ticket( - service_mate.tickets()[0].operation_id, request_index, None, None, - None, None, 1, None, scenario.response_for_request(request), None, - None, None, None, None) - service_link.accept_ticket(response_ticket) - invocation_mate.block_until_tickets_satisfy( - test_cases.at_least_n_payloads_received_predicate(1 + request_index)) - request_count = len(requests) - invocation_completion_ticket = links.Ticket( - test_operation_id, request_count + 1, None, None, None, None, None, - None, None, None, None, None, links.Ticket.Termination.COMPLETION, - None) - invocation_link.accept_ticket(invocation_completion_ticket) - service_mate.block_until_tickets_satisfy(test_cases.terminated) - service_completion_ticket = links.Ticket( - service_mate.tickets()[0].operation_id, request_count, None, None, None, - None, None, None, None, None, test_code, test_message, - links.Ticket.Termination.COMPLETION, None) - service_link.accept_ticket(service_completion_ticket) - invocation_mate.block_until_tickets_satisfy(test_cases.terminated) - - invocation_link.stop() - service_link.begin_stop() - service_link.end_stop() - - observed_requests = tuple( - ticket.payload for ticket in service_mate.tickets() - if ticket.payload is not None) - observed_responses = tuple( - ticket.payload for ticket in invocation_mate.tickets() - if ticket.payload is not None) - self.assertTrue(scenario.verify_requests(observed_requests)) - self.assertTrue(scenario.verify_responses(observed_responses)) - - def testEmptyScenario(self): - self._perform_scenario_test(_proto_scenarios.EmptyScenario()) - - def testBidirectionallyUnaryScenario(self): - self._perform_scenario_test(_proto_scenarios.BidirectionallyUnaryScenario()) - - def testBidirectionallyStreamingScenario(self): - self._perform_scenario_test( - _proto_scenarios.BidirectionallyStreamingScenario()) - - -if __name__ == '__main__': - unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/unit/_metadata_test.py b/src/python/grpcio/tests/unit/_metadata_test.py new file mode 100644 index 0000000000..2cb13f236b --- /dev/null +++ b/src/python/grpcio/tests/unit/_metadata_test.py @@ -0,0 +1,216 @@ +# 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. +"""Tests server and client side metadata API.""" + +import unittest +import weakref + +import grpc +from grpc import _grpcio_metadata +from grpc.framework.foundation import logging_pool + +from tests.unit import test_common +from tests.unit.framework.common import test_constants + +_CHANNEL_ARGS = (('grpc.primary_user_agent', 'primary-agent'), + ('grpc.secondary_user_agent', 'secondary-agent')) + +_REQUEST = b'\x00\x00\x00' +_RESPONSE = b'\x00\x00\x00' + +_UNARY_UNARY = b'/test/UnaryUnary' +_UNARY_STREAM = b'/test/UnaryStream' +_STREAM_UNARY = b'/test/StreamUnary' +_STREAM_STREAM = b'/test/StreamStream' + +_USER_AGENT = 'Python-gRPC-{}'.format(_grpcio_metadata.__version__) + +_CLIENT_METADATA = ( + (b'client-md-key', b'client-md-key'), + (b'client-md-key-bin', b'\x00\x01') +) + +_SERVER_INITIAL_METADATA = ( + (b'server-initial-md-key', b'server-initial-md-value'), + (b'server-initial-md-key-bin', b'\x00\x02') +) + +_SERVER_TRAILING_METADATA = ( + (b'server-trailing-md-key', b'server-trailing-md-value'), + (b'server-trailing-md-key-bin', b'\x00\x03') +) + + +def user_agent(metadata): + for key, val in metadata: + if key == b'user-agent': + return val.decode('ascii') + raise KeyError('No user agent!') + + +def validate_client_metadata(test, servicer_context): + test.assertTrue(test_common.metadata_transmitted( + _CLIENT_METADATA, servicer_context.invocation_metadata())) + test.assertTrue(user_agent(servicer_context.invocation_metadata()) + .startswith('primary-agent ' + _USER_AGENT)) + test.assertTrue(user_agent(servicer_context.invocation_metadata()) + .endswith('secondary-agent')) + + +def handle_unary_unary(test, request, servicer_context): + validate_client_metadata(test, servicer_context) + servicer_context.send_initial_metadata(_SERVER_INITIAL_METADATA) + servicer_context.set_trailing_metadata(_SERVER_TRAILING_METADATA) + return _RESPONSE + + +def handle_unary_stream(test, request, servicer_context): + validate_client_metadata(test, servicer_context) + servicer_context.send_initial_metadata(_SERVER_INITIAL_METADATA) + servicer_context.set_trailing_metadata(_SERVER_TRAILING_METADATA) + for _ in range(test_constants.STREAM_LENGTH): + yield _RESPONSE + + +def handle_stream_unary(test, request_iterator, servicer_context): + validate_client_metadata(test, servicer_context) + servicer_context.send_initial_metadata(_SERVER_INITIAL_METADATA) + servicer_context.set_trailing_metadata(_SERVER_TRAILING_METADATA) + # TODO(issue:#6891) We should be able to remove this loop + for request in request_iterator: + pass + return _RESPONSE + + +def handle_stream_stream(test, request_iterator, servicer_context): + validate_client_metadata(test, servicer_context) + servicer_context.send_initial_metadata(_SERVER_INITIAL_METADATA) + servicer_context.set_trailing_metadata(_SERVER_TRAILING_METADATA) + # TODO(issue:#6891) We should be able to remove this loop, + # and replace with return; yield + for request in request_iterator: + yield _RESPONSE + + +class _MethodHandler(grpc.RpcMethodHandler): + + def __init__(self, test, request_streaming, response_streaming): + self.request_streaming = request_streaming + self.response_streaming = response_streaming + self.request_deserializer = None + self.response_serializer = None + self.unary_unary = None + self.unary_stream = None + self.stream_unary = None + self.stream_stream = None + if self.request_streaming and self.response_streaming: + self.stream_stream = lambda x, y: handle_stream_stream(test, x, y) + elif self.request_streaming: + self.stream_unary = lambda x, y: handle_stream_unary(test, x, y) + elif self.response_streaming: + self.unary_stream = lambda x, y: handle_unary_stream(test, x, y) + else: + self.unary_unary = lambda x, y: handle_unary_unary(test, x, y) + + +class _GenericHandler(grpc.GenericRpcHandler): + + def __init__(self, test): + self._test = test + + def service(self, handler_call_details): + if handler_call_details.method == _UNARY_UNARY: + return _MethodHandler(self._test, False, False) + elif handler_call_details.method == _UNARY_STREAM: + return _MethodHandler(self._test, False, True) + elif handler_call_details.method == _STREAM_UNARY: + return _MethodHandler(self._test, True, False) + elif handler_call_details.method == _STREAM_STREAM: + return _MethodHandler(self._test, True, True) + else: + return None + + +class MetadataTest(unittest.TestCase): + + def setUp(self): + self._server_pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY) + self._server = grpc.server((_GenericHandler(weakref.proxy(self)),), + self._server_pool) + port = self._server.add_insecure_port('[::]:0') + self._server.start() + self._channel = grpc.insecure_channel('localhost:%d' % port, + options=_CHANNEL_ARGS) + + def tearDown(self): + self._server.stop(0) + + def testUnaryUnary(self): + multi_callable = self._channel.unary_unary(_UNARY_UNARY) + unused_response, call = multi_callable.with_call( + _REQUEST, metadata=_CLIENT_METADATA) + self.assertTrue(test_common.metadata_transmitted( + _SERVER_INITIAL_METADATA, call.initial_metadata())) + self.assertTrue(test_common.metadata_transmitted( + _SERVER_TRAILING_METADATA, call.trailing_metadata())) + + def testUnaryStream(self): + multi_callable = self._channel.unary_stream(_UNARY_STREAM) + call = multi_callable(_REQUEST, metadata=_CLIENT_METADATA) + self.assertTrue(test_common.metadata_transmitted( + _SERVER_INITIAL_METADATA, call.initial_metadata())) + for _ in call: + pass + self.assertTrue(test_common.metadata_transmitted( + _SERVER_TRAILING_METADATA, call.trailing_metadata())) + + def testStreamUnary(self): + multi_callable = self._channel.stream_unary(_STREAM_UNARY) + unused_response, call = multi_callable.with_call( + [_REQUEST] * test_constants.STREAM_LENGTH, + metadata=_CLIENT_METADATA) + self.assertTrue(test_common.metadata_transmitted( + _SERVER_INITIAL_METADATA, call.initial_metadata())) + self.assertTrue(test_common.metadata_transmitted( + _SERVER_TRAILING_METADATA, call.trailing_metadata())) + + def testStreamStream(self): + multi_callable = self._channel.stream_stream(_STREAM_STREAM) + call = multi_callable([_REQUEST] * test_constants.STREAM_LENGTH, + metadata=_CLIENT_METADATA) + self.assertTrue(test_common.metadata_transmitted( + _SERVER_INITIAL_METADATA, call.initial_metadata())) + for _ in call: + pass + self.assertTrue(test_common.metadata_transmitted( + _SERVER_TRAILING_METADATA, call.trailing_metadata())) + + +if __name__ == '__main__': + unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/unit/_rpc_test.py b/src/python/grpcio/tests/unit/_rpc_test.py index 8407593c86..9814504edf 100644 --- a/src/python/grpcio/tests/unit/_rpc_test.py +++ b/src/python/grpcio/tests/unit/_rpc_test.py @@ -27,7 +27,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -"""Test of gRPC Python's application-layer API.""" +"""Test of RPCs made against gRPC Python's application-layer API.""" import itertools import threading @@ -216,10 +216,9 @@ class RPCTest(unittest.TestCase): expected_response = self._handler.handle_unary_unary(request, None) multi_callable = _unary_unary_multi_callable(self._channel) - response, call = multi_callable( + response, call = multi_callable.with_call( request, metadata=( - (b'test', b'SuccessfulUnaryRequestBlockingUnaryResponseWithCall'),), - with_call=True) + (b'test', b'SuccessfulUnaryRequestBlockingUnaryResponseWithCall'),)) self.assertEqual(expected_response, response) self.assertIs(grpc.StatusCode.OK, call.code()) @@ -266,11 +265,11 @@ class RPCTest(unittest.TestCase): request_iterator = iter(requests) multi_callable = _stream_unary_multi_callable(self._channel) - response, call = multi_callable( + response, call = multi_callable.with_call( request_iterator, metadata=( (b'test', b'SuccessfulStreamRequestBlockingUnaryResponseWithCall'), - ), with_call=True) + )) self.assertEqual(expected_response, response) self.assertIs(grpc.StatusCode.OK, call.code()) @@ -525,10 +524,9 @@ class RPCTest(unittest.TestCase): multi_callable = _unary_unary_multi_callable(self._channel) with self._control.pause(): with self.assertRaises(grpc.RpcError) as exception_context: - multi_callable( + multi_callable.with_call( request, timeout=test_constants.SHORT_TIMEOUT, - metadata=((b'test', b'ExpiredUnaryRequestBlockingUnaryResponse'),), - with_call=True) + metadata=((b'test', b'ExpiredUnaryRequestBlockingUnaryResponse'),)) self.assertIsNotNone(exception_context.exception.initial_metadata()) self.assertIs( @@ -640,10 +638,9 @@ class RPCTest(unittest.TestCase): multi_callable = _unary_unary_multi_callable(self._channel) with self._control.fail(): with self.assertRaises(grpc.RpcError) as exception_context: - multi_callable( + multi_callable.with_call( request, - metadata=((b'test', b'FailedUnaryRequestBlockingUnaryResponse'),), - with_call=True) + metadata=((b'test', b'FailedUnaryRequestBlockingUnaryResponse'),)) self.assertIs(grpc.StatusCode.UNKNOWN, exception_context.exception.code()) diff --git a/src/python/grpcio/tests/unit/beta/_connectivity_channel_test.py b/src/python/grpcio/tests/unit/beta/_connectivity_channel_test.py index 5dc8720639..488f7d7141 100644 --- a/src/python/grpcio/tests/unit/beta/_connectivity_channel_test.py +++ b/src/python/grpcio/tests/unit/beta/_connectivity_channel_test.py @@ -187,5 +187,15 @@ class ChannelConnectivityTest(unittest.TestCase): server_completion_queue_thread.join() +class ConnectivityStatesTest(unittest.TestCase): + + def testBetaConnectivityStates(self): + self.assertIsNotNone(interfaces.ChannelConnectivity.IDLE) + self.assertIsNotNone(interfaces.ChannelConnectivity.CONNECTING) + self.assertIsNotNone(interfaces.ChannelConnectivity.READY) + self.assertIsNotNone(interfaces.ChannelConnectivity.TRANSIENT_FAILURE) + self.assertIsNotNone(interfaces.ChannelConnectivity.FATAL_FAILURE) + + if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/unit/beta/test_utilities.py b/src/python/grpcio/tests/unit/beta/test_utilities.py index e374b203ce..8ccad04e05 100644 --- a/src/python/grpcio/tests/unit/beta/test_utilities.py +++ b/src/python/grpcio/tests/unit/beta/test_utilities.py @@ -50,6 +50,6 @@ def not_really_secure_channel( """ target = '%s:%d' % (host, port) channel = grpc.secure_channel( - target, channel_credentials._credentials, + target, channel_credentials, ((b'grpc.ssl_target_name_override', server_host_override,),)) return implementations.Channel(channel) diff --git a/src/python/grpcio/tests/unit/framework/_crust_over_core_face_interface_test.py b/src/python/grpcio/tests/unit/framework/_crust_over_core_face_interface_test.py deleted file mode 100644 index 43457be362..0000000000 --- a/src/python/grpcio/tests/unit/framework/_crust_over_core_face_interface_test.py +++ /dev/null @@ -1,113 +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. - -"""Tests Face interface compliance of the crust-over-core stack.""" - -import collections -import unittest - -import six - -from grpc.framework.core import implementations as core_implementations -from grpc.framework.crust import implementations as crust_implementations -from grpc.framework.foundation import logging_pool -from grpc.framework.interfaces.links import utilities -from tests.unit.framework.common import test_constants -from tests.unit.framework.interfaces.face import test_cases -from tests.unit.framework.interfaces.face import test_interfaces -from tests.unit.framework.interfaces.links import test_utilities - - -class _Implementation(test_interfaces.Implementation): - - def instantiate( - self, methods, method_implementations, multi_method_implementation): - pool = logging_pool.pool(test_constants.POOL_SIZE) - servicer = crust_implementations.servicer( - method_implementations, multi_method_implementation, pool) - - service_end_link = core_implementations.service_end_link( - servicer, test_constants.DEFAULT_TIMEOUT, - test_constants.MAXIMUM_TIMEOUT) - invocation_end_link = core_implementations.invocation_end_link() - invocation_end_link.join_link(service_end_link) - service_end_link.join_link(invocation_end_link) - service_end_link.start() - invocation_end_link.start() - - generic_stub = crust_implementations.generic_stub(invocation_end_link, pool) - # TODO(nathaniel): Add a "groups" attribute to _digest.TestServiceDigest. - group = next(iter(methods))[0] - # TODO(nathaniel): Add a "cardinalities_by_group" attribute to - # _digest.TestServiceDigest. - cardinalities = { - method: method_object.cardinality() - for (group, method), method_object in six.iteritems(methods)} - dynamic_stub = crust_implementations.dynamic_stub( - invocation_end_link, group, cardinalities, pool) - - return generic_stub, {group: dynamic_stub}, ( - invocation_end_link, service_end_link, pool) - - def destantiate(self, memo): - invocation_end_link, service_end_link, pool = memo - invocation_end_link.stop(0).wait() - service_end_link.stop(0).wait() - invocation_end_link.join_link(utilities.NULL_LINK) - service_end_link.join_link(utilities.NULL_LINK) - pool.shutdown(wait=True) - - def invocation_metadata(self): - return object() - - def initial_metadata(self): - return object() - - def terminal_metadata(self): - return object() - - def code(self): - return object() - - def details(self): - return object() - - def metadata_transmitted(self, original_metadata, transmitted_metadata): - return original_metadata is transmitted_metadata - - -def load_tests(loader, tests, pattern): - return unittest.TestSuite( - tests=tuple( - loader.loadTestsFromTestCase(test_case_class) - for test_case_class in test_cases.test_cases(_Implementation()))) - - -if __name__ == '__main__': - unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/unit/framework/core/_base_interface_test.py b/src/python/grpcio/tests/unit/framework/core/_base_interface_test.py deleted file mode 100644 index 1310292306..0000000000 --- a/src/python/grpcio/tests/unit/framework/core/_base_interface_test.py +++ /dev/null @@ -1,96 +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. - -"""Tests the RPC Framework Core's implementation of the Base interface.""" - -import logging -import random -import time -import unittest - -from grpc.framework.core import implementations -from grpc.framework.interfaces.base import utilities -from tests.unit.framework.common import test_constants -from tests.unit.framework.interfaces.base import test_cases -from tests.unit.framework.interfaces.base import test_interfaces - - -class _Implementation(test_interfaces.Implementation): - - def __init__(self): - self._invocation_initial_metadata = object() - self._service_initial_metadata = object() - self._invocation_terminal_metadata = object() - self._service_terminal_metadata = object() - - def instantiate(self, serializations, servicer): - invocation = implementations.invocation_end_link() - service = implementations.service_end_link( - servicer, test_constants.DEFAULT_TIMEOUT, - test_constants.MAXIMUM_TIMEOUT) - invocation.join_link(service) - service.join_link(invocation) - return invocation, service, None - - def destantiate(self, memo): - pass - - def invocation_initial_metadata(self): - return self._invocation_initial_metadata - - def service_initial_metadata(self): - return self._service_initial_metadata - - def invocation_completion(self): - return utilities.completion(self._invocation_terminal_metadata, None, None) - - def service_completion(self): - return utilities.completion(self._service_terminal_metadata, None, None) - - def metadata_transmitted(self, original_metadata, transmitted_metadata): - return transmitted_metadata is original_metadata - - def completion_transmitted(self, original_completion, transmitted_completion): - return ( - (original_completion.terminal_metadata is - transmitted_completion.terminal_metadata) and - original_completion.code is transmitted_completion.code and - original_completion.message is transmitted_completion.message - ) - - -def load_tests(loader, tests, pattern): - return unittest.TestSuite( - tests=tuple( - loader.loadTestsFromTestCase(test_case_class) - for test_case_class in test_cases.test_cases(_Implementation()))) - - -if __name__ == '__main__': - unittest.main(verbosity=2) diff --git a/src/python/grpcio/tests/unit/framework/foundation/_later_test.py b/src/python/grpcio/tests/unit/framework/foundation/_later_test.py deleted file mode 100644 index 6c2459e185..0000000000 --- a/src/python/grpcio/tests/unit/framework/foundation/_later_test.py +++ /dev/null @@ -1,151 +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. - -"""Tests of the later module.""" - -import threading -import time -import unittest - -from grpc.framework.foundation import later - -TICK = 0.1 - - -class LaterTest(unittest.TestCase): - - def test_simple_delay(self): - lock = threading.Lock() - cell = [0] - return_value = object() - - def computation(): - with lock: - cell[0] += 1 - return return_value - computation_future = later.later(TICK * 2, computation) - - self.assertFalse(computation_future.done()) - self.assertFalse(computation_future.cancelled()) - time.sleep(TICK) - self.assertFalse(computation_future.done()) - self.assertFalse(computation_future.cancelled()) - with lock: - self.assertEqual(0, cell[0]) - time.sleep(TICK * 2) - self.assertTrue(computation_future.done()) - self.assertFalse(computation_future.cancelled()) - with lock: - self.assertEqual(1, cell[0]) - self.assertEqual(return_value, computation_future.result()) - - def test_callback(self): - lock = threading.Lock() - cell = [0] - callback_called = [False] - future_passed_to_callback = [None] - def computation(): - with lock: - cell[0] += 1 - computation_future = later.later(TICK * 2, computation) - def callback(outcome): - with lock: - callback_called[0] = True - future_passed_to_callback[0] = outcome - computation_future.add_done_callback(callback) - time.sleep(TICK) - with lock: - self.assertFalse(callback_called[0]) - time.sleep(TICK * 2) - with lock: - self.assertTrue(callback_called[0]) - self.assertTrue(future_passed_to_callback[0].done()) - - callback_called[0] = False - future_passed_to_callback[0] = None - - computation_future.add_done_callback(callback) - with lock: - self.assertTrue(callback_called[0]) - self.assertTrue(future_passed_to_callback[0].done()) - - def test_cancel(self): - lock = threading.Lock() - cell = [0] - callback_called = [False] - future_passed_to_callback = [None] - def computation(): - with lock: - cell[0] += 1 - computation_future = later.later(TICK * 2, computation) - def callback(outcome): - with lock: - callback_called[0] = True - future_passed_to_callback[0] = outcome - computation_future.add_done_callback(callback) - time.sleep(TICK) - with lock: - self.assertFalse(callback_called[0]) - computation_future.cancel() - self.assertTrue(computation_future.cancelled()) - self.assertFalse(computation_future.running()) - self.assertTrue(computation_future.done()) - with lock: - self.assertTrue(callback_called[0]) - self.assertTrue(future_passed_to_callback[0].cancelled()) - - def test_result(self): - lock = threading.Lock() - cell = [0] - callback_called = [False] - future_passed_to_callback_cell = [None] - return_value = object() - - def computation(): - with lock: - cell[0] += 1 - return return_value - computation_future = later.later(TICK * 2, computation) - - def callback(future_passed_to_callback): - with lock: - callback_called[0] = True - future_passed_to_callback_cell[0] = future_passed_to_callback - computation_future.add_done_callback(callback) - returned_value = computation_future.result() - self.assertEqual(return_value, returned_value) - - # The callback may not yet have been called! Sleep a tick. - time.sleep(TICK) - with lock: - self.assertTrue(callback_called[0]) - self.assertEqual(return_value, future_passed_to_callback_cell[0].result()) - -if __name__ == '__main__': - unittest.main(verbosity=2) diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c index c13d1a00d7..4d9707638f 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c @@ -260,6 +260,8 @@ gpr_avl_unref_type gpr_avl_unref_import; gpr_avl_add_type gpr_avl_add_import; gpr_avl_remove_type gpr_avl_remove_import; gpr_avl_get_type gpr_avl_get_import; +gpr_avl_maybe_get_type gpr_avl_maybe_get_import; +gpr_avl_is_empty_type gpr_avl_is_empty_import; gpr_cmdline_create_type gpr_cmdline_create_import; gpr_cmdline_add_int_type gpr_cmdline_add_int_import; gpr_cmdline_add_flag_type gpr_cmdline_add_flag_import; @@ -529,6 +531,8 @@ void grpc_rb_load_imports(HMODULE library) { gpr_avl_add_import = (gpr_avl_add_type) GetProcAddress(library, "gpr_avl_add"); gpr_avl_remove_import = (gpr_avl_remove_type) GetProcAddress(library, "gpr_avl_remove"); gpr_avl_get_import = (gpr_avl_get_type) GetProcAddress(library, "gpr_avl_get"); + gpr_avl_maybe_get_import = (gpr_avl_maybe_get_type) GetProcAddress(library, "gpr_avl_maybe_get"); + gpr_avl_is_empty_import = (gpr_avl_is_empty_type) GetProcAddress(library, "gpr_avl_is_empty"); gpr_cmdline_create_import = (gpr_cmdline_create_type) GetProcAddress(library, "gpr_cmdline_create"); gpr_cmdline_add_int_import = (gpr_cmdline_add_int_type) GetProcAddress(library, "gpr_cmdline_add_int"); gpr_cmdline_add_flag_import = (gpr_cmdline_add_flag_type) GetProcAddress(library, "gpr_cmdline_add_flag"); diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index e9845cd7e2..072e29c232 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -731,6 +731,12 @@ extern gpr_avl_remove_type gpr_avl_remove_import; typedef void *(*gpr_avl_get_type)(gpr_avl avl, void *key); extern gpr_avl_get_type gpr_avl_get_import; #define gpr_avl_get gpr_avl_get_import +typedef int(*gpr_avl_maybe_get_type)(gpr_avl avl, void *key, void **value); +extern gpr_avl_maybe_get_type gpr_avl_maybe_get_import; +#define gpr_avl_maybe_get gpr_avl_maybe_get_import +typedef int(*gpr_avl_is_empty_type)(gpr_avl avl); +extern gpr_avl_is_empty_type gpr_avl_is_empty_import; +#define gpr_avl_is_empty gpr_avl_is_empty_import typedef gpr_cmdline *(*gpr_cmdline_create_type)(const char *description); extern gpr_cmdline_create_type gpr_cmdline_create_import; #define gpr_cmdline_create gpr_cmdline_create_import diff --git a/templates/Makefile.template b/templates/Makefile.template index 079fef65ae..0e3b9926b7 100644 --- a/templates/Makefile.template +++ b/templates/Makefile.template @@ -923,6 +923,7 @@ pc_cxx_unsecure: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc + ifeq ($(EMBED_OPENSSL),true) privatelibs_cxx: \ % for lib in libs: % if 'Makefile' in lib.get('build_system', ['Makefile']): @@ -931,6 +932,18 @@ % endif % endif % endfor + + else + privatelibs_cxx: \ + % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): + % if lib.build == 'private' and lib.language == 'c++' and not lib.get('external_deps', None) and not lib.boringssl: + $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ + % endif + % endif + % endfor + + endif ifeq ($(HAS_ZOOKEEPER),true) @@ -958,12 +971,23 @@ % endfor + ifeq ($(EMBED_OPENSSL),true) buildtests_cxx: buildtests_zookeeper privatelibs_cxx <%text>\</%text> % for tgt in targets: % if tgt.build == 'test' and tgt.language == 'c++' and not tgt.get('external_deps', None): $(BINDIR)/$(CONFIG)/${tgt.name} <%text>\</%text> % endif % endfor + + else + buildtests_cxx: buildtests_zookeeper privatelibs_cxx <%text>\</%text> + % for tgt in targets: + % if tgt.build == 'test' and tgt.language == 'c++' and not tgt.get('external_deps', None) and not tgt.boringssl: + $(BINDIR)/$(CONFIG)/${tgt.name} <%text>\</%text> + % endif + % endfor + + endif ifeq ($(HAS_ZOOKEEPER),true) @@ -1227,12 +1251,12 @@ $(GENDIR)/${p}.pb.cc: ${p}.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) ${' '.join('$(GENDIR)/%s.pb.cc' % q for q in proto_deps.get(p, []))} $(E) "[PROTOC] Generating protobuf CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< $(GENDIR)/${p}.grpc.pb.cc: ${p}.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) ${' '.join('$(GENDIR)/%s.pb.cc $(GENDIR)/%s.grpc.pb.cc' % (q,q) for q in proto_deps.get(p, []))} $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< + $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< endif % endfor diff --git a/templates/tools/dockerfile/run_tests_addons.include b/templates/tools/dockerfile/run_tests_addons.include index 27ac67f5d8..3f0a1899c5 100644 --- a/templates/tools/dockerfile/run_tests_addons.include +++ b/templates/tools/dockerfile/run_tests_addons.include @@ -1,7 +1,2 @@ <%include file="ccache_setup.include"/> -#====================== -# Zookeeper dependencies -# TODO(jtattermusch): is zookeeper still needed? -RUN apt-get install -y libzookeeper-mt-dev - -RUN mkdir /var/local/jenkins +<%include file="run_tests_addons_nocache.include"/>
\ No newline at end of file diff --git a/templates/tools/dockerfile/run_tests_addons_nocache.include b/templates/tools/dockerfile/run_tests_addons_nocache.include new file mode 100644 index 0000000000..242a1acfb3 --- /dev/null +++ b/templates/tools/dockerfile/run_tests_addons_nocache.include @@ -0,0 +1,6 @@ +#====================== +# Zookeeper dependencies +# TODO(jtattermusch): is zookeeper still needed? +RUN apt-get install -y libzookeeper-mt-dev + +RUN mkdir /var/local/jenkins diff --git a/templates/tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile.template b/templates/tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile.template new file mode 100644 index 0000000000..4cd069da34 --- /dev/null +++ b/templates/tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile.template @@ -0,0 +1,65 @@ +%YAML 1.2 +--- | + # 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. + + FROM debian:jessie + + <%include file="../../apt_get_basic.include"/> + <%include file="../../ruby_deps.include"/> + <%include file="../../gcp_api_libraries.include"/> + <%include file="../../php_deps.include"/> + <%include file="../../run_tests_addons.include"/> + # ronn: a ruby tool used to convert markdown to man pages, used during the + # install of Protobuf extensions + # + # rake: a ruby version of make used to build the PHP Protobuf extension + RUN /bin/bash -l -c "rvm all do gem install ronn rake" + + # Install composer + RUN curl -sS https://getcomposer.org/installer | php + RUN mv composer.phar /usr/local/bin/composer + + # As an attempt to work around #4212, try to prefetch Protobuf-PHP dependency + # into composer cache to prevent "composer install" from cloning on each build. + RUN git clone --mirror https://github.com/stanley-cheung/Protobuf-PHP.git ${'\\'} + /root/.composer/cache/vcs/git-github.com-stanley-cheung-Protobuf-PHP.git/ + + # Download the patched PHP protobuf so that PHP gRPC clients can be generated + # from proto3 schemas. + RUN git clone https://github.com/stanley-cheung/Protobuf-PHP.git /var/local/git/protobuf-php + + RUN /bin/bash -l -c "rvm use ruby-2.1 ${'\\'} + && cd /var/local/git/protobuf-php ${'\\'} + && rvm all do rake pear:package version=1.0 ${'\\'} + && pear install Protobuf-1.0.tgz" + + # Define the default command. + CMD ["bash"] + diff --git a/templates/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile.template b/templates/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile.template index fbed53930b..4950a82d2d 100644 --- a/templates/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile.template +++ b/templates/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile.template @@ -33,7 +33,6 @@ <%include file="../../apt_get_basic.include"/> <%include file="../../cxx_deps.include"/> - <%include file="../../run_tests_addons.include"/> + <%include file="../../run_tests_addons_nocache.include"/> # Define the default command. CMD ["bash"] -
\ No newline at end of file diff --git a/templates/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile.template b/templates/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile.template index 7956798781..e77b3d9e41 100644 --- a/templates/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile.template +++ b/templates/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile.template @@ -36,7 +36,9 @@ RUN apt-get update && apt-get install -y ${'\\'} gcc-4.4 ${'\\'} - gcc-4.4-multilib + gcc-4.4-multilib ${'\\'} + g++-4.4 ${'\\'} + g++-4.4-multilib RUN wget ${openssl_fallback.base_uri + openssl_fallback.tarball} diff --git a/test/core/bad_client/bad_client.c b/test/core/bad_client/bad_client.c index f753b6fd24..24ee3387a0 100644 --- a/test/core/bad_client/bad_client.c +++ b/test/core/bad_client/bad_client.c @@ -62,7 +62,7 @@ static void thd_func(void *arg) { gpr_event_set(&a->done_thd, (void *)1); } -static void done_write(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void done_write(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { thd_args *a = arg; gpr_event_set(&a->done_write, (void *)1); } @@ -81,7 +81,7 @@ typedef struct { gpr_event read_done; } read_args; -static void read_done(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void read_done(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { read_args *a = arg; a->validator(&a->incoming); gpr_event_set(&a->read_done, (void *)1); diff --git a/test/core/bad_ssl/servers/cert.c b/test/core/bad_ssl/servers/cert.c index bd11efd314..91dd9de81b 100644 --- a/test/core/bad_ssl/servers/cert.c +++ b/test/core/bad_ssl/servers/cert.c @@ -38,7 +38,7 @@ #include <grpc/support/log.h> #include <grpc/support/useful.h> -#include "src/core/lib/support/load_file.h" +#include "src/core/lib/iomgr/load_file.h" #include "test/core/bad_ssl/server_common.h" #include "test/core/end2end/data/ssl_test_data.h" @@ -52,16 +52,15 @@ int main(int argc, char **argv) { grpc_server_credentials *ssl_creds; grpc_server *server; gpr_slice cert_slice, key_slice; - int ok; grpc_init(); - cert_slice = - gpr_load_file("src/core/lib/tsi/test_creds/badserver.pem", 1, &ok); - GPR_ASSERT(ok); - key_slice = - gpr_load_file("src/core/lib/tsi/test_creds/badserver.key", 1, &ok); - GPR_ASSERT(ok); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "load_file", grpc_load_file("src/core/lib/tsi/test_creds/badserver.pem", + 1, &cert_slice))); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "load_file", grpc_load_file("src/core/lib/tsi/test_creds/badserver.key", + 1, &key_slice))); pem_key_cert_pair.private_key = (const char *)GPR_SLICE_START_PTR(key_slice); pem_key_cert_pair.cert_chain = (const char *)GPR_SLICE_START_PTR(cert_slice); diff --git a/test/core/channel/channel_stack_test.c b/test/core/channel/channel_stack_test.c index 2d77bc5bd4..f9561bed70 100644 --- a/test/core/channel/channel_stack_test.c +++ b/test/core/channel/channel_stack_test.c @@ -81,12 +81,13 @@ static char *get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) { return gpr_strdup("peer"); } -static void free_channel(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void free_channel(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { grpc_channel_stack_destroy(exec_ctx, arg); gpr_free(arg); } -static void free_call(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void free_call(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { grpc_call_stack_destroy(exec_ctx, arg, NULL, NULL); gpr_free(arg); } diff --git a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c b/test/core/client_config/resolvers/dns_resolver_connectivity_test.c index 2322aa688a..69c07d83f4 100644 --- a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c +++ b/test/core/client_config/resolvers/dns_resolver_connectivity_test.c @@ -67,21 +67,21 @@ static grpc_client_channel_factory cc_factory = {&sc_vtable}; static gpr_mu g_mu; static bool g_fail_resolution = true; -static grpc_resolved_addresses *my_resolve_address(const char *name, - const char *addr) { +static grpc_error *my_resolve_address(const char *name, const char *addr, + grpc_resolved_addresses **addrs) { gpr_mu_lock(&g_mu); GPR_ASSERT(0 == strcmp("test", name)); if (g_fail_resolution) { g_fail_resolution = false; gpr_mu_unlock(&g_mu); - return NULL; + return GRPC_ERROR_CREATE("Forced Failure"); } else { gpr_mu_unlock(&g_mu); - grpc_resolved_addresses *addrs = gpr_malloc(sizeof(*addrs)); - addrs->naddrs = 1; - addrs->addrs = gpr_malloc(sizeof(*addrs->addrs)); - addrs->addrs[0].len = 123; - return addrs; + *addrs = gpr_malloc(sizeof(**addrs)); + (*addrs)->naddrs = 1; + (*addrs)->addrs = gpr_malloc(sizeof(*(*addrs)->addrs)); + (*addrs)->addrs[0].len = 123; + return GRPC_ERROR_NONE; } } @@ -100,7 +100,7 @@ static grpc_resolver *create_resolver(const char *name) { return resolver; } -static void on_done(grpc_exec_ctx *exec_ctx, void *ev, bool success) { +static void on_done(grpc_exec_ctx *exec_ctx, void *ev, grpc_error *error) { gpr_event_set(ev, (void *)1); } diff --git a/test/core/client_config/set_initial_connect_string_test.c b/test/core/client_config/set_initial_connect_string_test.c index 63371a6b34..1b51424f7e 100644 --- a/test/core/client_config/set_initial_connect_string_test.c +++ b/test/core/client_config/set_initial_connect_string_test.c @@ -65,8 +65,8 @@ static int server_port; static struct rpc_state state; static grpc_closure on_read; -static void handle_read(grpc_exec_ctx *exec_ctx, void *arg, bool success) { - GPR_ASSERT(success); +static void handle_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + GPR_ASSERT(error == GRPC_ERROR_NONE); gpr_slice_buffer_move_into(&state.temp_incoming_buffer, &state.incoming_buffer); gpr_log(GPR_DEBUG, "got %" PRIuPTR " bytes, magic is %" PRIuPTR " bytes", diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c index 46e060e4fe..65a8deb663 100644 --- a/test/core/end2end/dualstack_socket_test.c +++ b/test/core/end2end/dualstack_socket_test.c @@ -273,7 +273,9 @@ void test_connect(const char *server_host, const char *client_host, int port, } int external_dns_works(const char *host) { - grpc_resolved_addresses *res = grpc_blocking_resolve_address(host, "80"); + grpc_resolved_addresses *res; + grpc_error *error = grpc_blocking_resolve_address(host, "80", &res); + GRPC_ERROR_UNREF(error); if (res != NULL) { grpc_resolved_addresses_destroy(res); return 1; diff --git a/test/core/end2end/end2end_nosec_tests.c b/test/core/end2end/end2end_nosec_tests.c index b71299c09e..2893bddc43 100644 --- a/test/core/end2end/end2end_nosec_tests.c +++ b/test/core/end2end/end2end_nosec_tests.c @@ -115,6 +115,8 @@ extern void simple_metadata(grpc_end2end_test_config config); extern void simple_metadata_pre_init(void); extern void simple_request(grpc_end2end_test_config config); extern void simple_request_pre_init(void); +extern void streaming_error_response(grpc_end2end_test_config config); +extern void streaming_error_response_pre_init(void); extern void trailing_metadata(grpc_end2end_test_config config); extern void trailing_metadata_pre_init(void); @@ -157,6 +159,7 @@ void grpc_end2end_tests_pre_init(void) { simple_delayed_request_pre_init(); simple_metadata_pre_init(); simple_request_pre_init(); + streaming_error_response_pre_init(); trailing_metadata_pre_init(); } @@ -203,6 +206,7 @@ void grpc_end2end_tests(int argc, char **argv, simple_delayed_request(config); simple_metadata(config); simple_request(config); + streaming_error_response(config); trailing_metadata(config); return; } @@ -352,6 +356,10 @@ void grpc_end2end_tests(int argc, char **argv, simple_request(config); continue; } + if (0 == strcmp("streaming_error_response", argv[i])) { + streaming_error_response(config); + continue; + } if (0 == strcmp("trailing_metadata", argv[i])) { trailing_metadata(config); continue; diff --git a/test/core/end2end/end2end_tests.c b/test/core/end2end/end2end_tests.c index 00c9c44a78..96a38e76dc 100644 --- a/test/core/end2end/end2end_tests.c +++ b/test/core/end2end/end2end_tests.c @@ -117,6 +117,8 @@ extern void simple_metadata(grpc_end2end_test_config config); extern void simple_metadata_pre_init(void); extern void simple_request(grpc_end2end_test_config config); extern void simple_request_pre_init(void); +extern void streaming_error_response(grpc_end2end_test_config config); +extern void streaming_error_response_pre_init(void); extern void trailing_metadata(grpc_end2end_test_config config); extern void trailing_metadata_pre_init(void); @@ -160,6 +162,7 @@ void grpc_end2end_tests_pre_init(void) { simple_delayed_request_pre_init(); simple_metadata_pre_init(); simple_request_pre_init(); + streaming_error_response_pre_init(); trailing_metadata_pre_init(); } @@ -207,6 +210,7 @@ void grpc_end2end_tests(int argc, char **argv, simple_delayed_request(config); simple_metadata(config); simple_request(config); + streaming_error_response(config); trailing_metadata(config); return; } @@ -360,6 +364,10 @@ void grpc_end2end_tests(int argc, char **argv, simple_request(config); continue; } + if (0 == strcmp("streaming_error_response", argv[i])) { + streaming_error_response(config); + continue; + } if (0 == strcmp("trailing_metadata", argv[i])) { trailing_metadata(config); continue; diff --git a/test/core/end2end/fixtures/h2_fd.c b/test/core/end2end/fixtures/h2_fd.c index e938fe7730..89fa02517d 100644 --- a/test/core/end2end/fixtures/h2_fd.c +++ b/test/core/end2end/fixtures/h2_fd.c @@ -54,8 +54,8 @@ static void create_sockets(int sv[2]) { GPR_ASSERT(fcntl(sv[0], F_SETFL, flags | O_NONBLOCK) == 0); flags = fcntl(sv[1], F_GETFL, 0); GPR_ASSERT(fcntl(sv[1], F_SETFL, flags | O_NONBLOCK) == 0); - GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[0])); - GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[1])); + GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[0]) == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[1]) == GRPC_ERROR_NONE); } static grpc_end2end_test_fixture chttp2_create_fixture_socketpair( diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c index dd93c4a817..13b8bf7561 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.c +++ b/test/core/end2end/fuzzers/api_fuzzer.c @@ -187,21 +187,25 @@ static gpr_timespec now_impl(gpr_clock_type clock_type) { typedef struct addr_req { grpc_timer timer; char *addr; - grpc_resolve_cb cb; - void *arg; + grpc_closure *on_done; + grpc_resolved_addresses **addrs; } addr_req; -static void finish_resolve(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void finish_resolve(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { addr_req *r = arg; - if (success && 0 == strcmp(r->addr, "server")) { + if (error == GRPC_ERROR_NONE && 0 == strcmp(r->addr, "server")) { grpc_resolved_addresses *addrs = gpr_malloc(sizeof(*addrs)); addrs->naddrs = 1; addrs->addrs = gpr_malloc(sizeof(*addrs->addrs)); addrs->addrs[0].len = 0; - r->cb(exec_ctx, r->arg, addrs); + *r->addrs = addrs; + grpc_exec_ctx_sched(exec_ctx, r->on_done, GRPC_ERROR_NONE, NULL); } else { - r->cb(exec_ctx, r->arg, NULL); + grpc_exec_ctx_sched( + exec_ctx, r->on_done, + GRPC_ERROR_CREATE_REFERENCING("Resolution failed", &error, 1), NULL); } gpr_free(r->addr); @@ -209,12 +213,12 @@ static void finish_resolve(grpc_exec_ctx *exec_ctx, void *arg, bool success) { } void my_resolve_address(grpc_exec_ctx *exec_ctx, const char *addr, - const char *default_port, grpc_resolve_cb cb, - void *arg) { + const char *default_port, grpc_closure *on_done, + grpc_resolved_addresses **addresses) { addr_req *r = gpr_malloc(sizeof(*r)); r->addr = gpr_strdup(addr); - r->cb = cb; - r->arg = arg; + r->on_done = on_done; + r->addrs = addresses; grpc_timer_init(exec_ctx, &r->timer, gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), gpr_time_from_seconds(1, GPR_TIMESPAN)), @@ -240,11 +244,11 @@ typedef struct { gpr_timespec deadline; } future_connect; -static void do_connect(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void do_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { future_connect *fc = arg; - if (!success) { + if (error != GRPC_ERROR_NONE) { *fc->ep = NULL; - grpc_exec_ctx_enqueue(exec_ctx, fc->closure, false, NULL); + grpc_exec_ctx_sched(exec_ctx, fc->closure, GRPC_ERROR_REF(error), NULL); } else if (g_server != NULL) { grpc_endpoint *client; grpc_endpoint *server; @@ -256,7 +260,7 @@ static void do_connect(grpc_exec_ctx *exec_ctx, void *arg, bool success) { grpc_server_setup_transport(exec_ctx, g_server, transport, NULL, NULL); grpc_chttp2_transport_start_reading(exec_ctx, transport, NULL, 0); - grpc_exec_ctx_enqueue(exec_ctx, fc->closure, false, NULL); + grpc_exec_ctx_sched(exec_ctx, fc->closure, GRPC_ERROR_NONE, NULL); } else { sched_connect(exec_ctx, fc->closure, fc->ep, fc->deadline); } @@ -267,7 +271,8 @@ static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, gpr_timespec deadline) { if (gpr_time_cmp(deadline, gpr_now(deadline.clock_type)) < 0) { *ep = NULL; - grpc_exec_ctx_enqueue(exec_ctx, closure, false, NULL); + grpc_exec_ctx_sched(exec_ctx, closure, + GRPC_ERROR_CREATE("Connect deadline exceeded"), NULL); return; } diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0170e921ff5d052b228a26529116ea47fe9d3f0b b/test/core/end2end/fuzzers/api_fuzzer_corpus/0170e921ff5d052b228a26529116ea47fe9d3f0b Binary files differnew file mode 100644 index 0000000000..e837f03018 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0170e921ff5d052b228a26529116ea47fe9d3f0b diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/01a344a0256386cc8abb8dcb65cb55e1244f7f97 b/test/core/end2end/fuzzers/api_fuzzer_corpus/01a344a0256386cc8abb8dcb65cb55e1244f7f97 Binary files differnew file mode 100644 index 0000000000..5ec993f3d0 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/01a344a0256386cc8abb8dcb65cb55e1244f7f97 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/01c59f0a030fa11c4af1b7c0cc85846e9ef3f6b9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/01c59f0a030fa11c4af1b7c0cc85846e9ef3f6b9 Binary files differnew file mode 100644 index 0000000000..a836e0560d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/01c59f0a030fa11c4af1b7c0cc85846e9ef3f6b9 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/06b63ac01c261518e291461fb4707cb29d74e9c5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/06b63ac01c261518e291461fb4707cb29d74e9c5 Binary files differnew file mode 100644 index 0000000000..8d2f820a8f --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/06b63ac01c261518e291461fb4707cb29d74e9c5 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/06eced19ea6819d7b0855c62da49a193b50067ab b/test/core/end2end/fuzzers/api_fuzzer_corpus/06eced19ea6819d7b0855c62da49a193b50067ab Binary files differnew file mode 100644 index 0000000000..ea4fa72470 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/06eced19ea6819d7b0855c62da49a193b50067ab diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/06eee533524c6723881c1591956edf704e0180d9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/06eee533524c6723881c1591956edf704e0180d9 Binary files differnew file mode 100644 index 0000000000..4335fc754f --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/06eee533524c6723881c1591956edf704e0180d9 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0783c943aa7cdb8fdef5f7b1cf73e2bb2daf17f4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0783c943aa7cdb8fdef5f7b1cf73e2bb2daf17f4 Binary files differnew file mode 100644 index 0000000000..f8b4c6e787 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0783c943aa7cdb8fdef5f7b1cf73e2bb2daf17f4 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0963f5f7578c64e9c17d0ad9e4a99ced875cf813 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0963f5f7578c64e9c17d0ad9e4a99ced875cf813 Binary files differnew file mode 100644 index 0000000000..bcff00690d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0963f5f7578c64e9c17d0ad9e4a99ced875cf813 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0a90826e3173642be15ea005c2cbe8ca36ac1c3d b/test/core/end2end/fuzzers/api_fuzzer_corpus/0a90826e3173642be15ea005c2cbe8ca36ac1c3d Binary files differnew file mode 100644 index 0000000000..bb6cf96d27 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0a90826e3173642be15ea005c2cbe8ca36ac1c3d diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0b151bf8080f87bd38c9b8521b3b96c40c708463 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0b151bf8080f87bd38c9b8521b3b96c40c708463 Binary files differnew file mode 100644 index 0000000000..8459a6629e --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0b151bf8080f87bd38c9b8521b3b96c40c708463 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0bf51cb435845a49311a7ddc7341b5cfc8e5ab10 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0bf51cb435845a49311a7ddc7341b5cfc8e5ab10 Binary files differnew file mode 100644 index 0000000000..b919511a28 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0bf51cb435845a49311a7ddc7341b5cfc8e5ab10 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0deeaca17aa93f66291407d3d2438685be5b85ba b/test/core/end2end/fuzzers/api_fuzzer_corpus/0deeaca17aa93f66291407d3d2438685be5b85ba Binary files differnew file mode 100644 index 0000000000..14680a821b --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0deeaca17aa93f66291407d3d2438685be5b85ba diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0dfd0ea582476b3861106c143c70d7af0f3d1357 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0dfd0ea582476b3861106c143c70d7af0f3d1357 Binary files differnew file mode 100644 index 0000000000..3695055b6c --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0dfd0ea582476b3861106c143c70d7af0f3d1357 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0e91ce40cf8882adc75b8b532556d48a2b605ced b/test/core/end2end/fuzzers/api_fuzzer_corpus/0e91ce40cf8882adc75b8b532556d48a2b605ced Binary files differnew file mode 100644 index 0000000000..9d0b4159f7 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0e91ce40cf8882adc75b8b532556d48a2b605ced diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/10f53c34f02d8c051fe0b8759aec08057433a497 b/test/core/end2end/fuzzers/api_fuzzer_corpus/10f53c34f02d8c051fe0b8759aec08057433a497 Binary files differnew file mode 100644 index 0000000000..471890c4c9 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/10f53c34f02d8c051fe0b8759aec08057433a497 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/110e019793b395202dfd8b499edc372cdaccff21 b/test/core/end2end/fuzzers/api_fuzzer_corpus/110e019793b395202dfd8b499edc372cdaccff21 Binary files differnew file mode 100644 index 0000000000..3a148cc127 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/110e019793b395202dfd8b499edc372cdaccff21 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1239eef13562df4ff59856900eee2f871a2fd0f3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1239eef13562df4ff59856900eee2f871a2fd0f3 Binary files differnew file mode 100644 index 0000000000..ce1c1bf3bf --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/1239eef13562df4ff59856900eee2f871a2fd0f3 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/15890f893ee7bddcc08f831d684b10d19c369def b/test/core/end2end/fuzzers/api_fuzzer_corpus/15890f893ee7bddcc08f831d684b10d19c369def Binary files differnew file mode 100644 index 0000000000..6d80a11982 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/15890f893ee7bddcc08f831d684b10d19c369def diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1727c0f6369bfb17d1b40ffa3d3f6b8be8a45c62 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1727c0f6369bfb17d1b40ffa3d3f6b8be8a45c62 Binary files differnew file mode 100644 index 0000000000..8c8a1036b8 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/1727c0f6369bfb17d1b40ffa3d3f6b8be8a45c62 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/179817dab786637b3621ace60a9ab4c7c79432a4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/179817dab786637b3621ace60a9ab4c7c79432a4 Binary files differnew file mode 100644 index 0000000000..cf3531fe41 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/179817dab786637b3621ace60a9ab4c7c79432a4 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/17fa8e029e35c88857b7abcad88609cf2d1ca9a4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/17fa8e029e35c88857b7abcad88609cf2d1ca9a4 Binary files differnew file mode 100644 index 0000000000..83c2b4f3dc --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/17fa8e029e35c88857b7abcad88609cf2d1ca9a4 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1870298c7042983e7716097018a031d105e397fd b/test/core/end2end/fuzzers/api_fuzzer_corpus/1870298c7042983e7716097018a031d105e397fd Binary files differnew file mode 100644 index 0000000000..42a78f4eb6 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/1870298c7042983e7716097018a031d105e397fd diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1917c5996ac82e13143a414eb9448f171fdd751a b/test/core/end2end/fuzzers/api_fuzzer_corpus/1917c5996ac82e13143a414eb9448f171fdd751a Binary files differnew file mode 100644 index 0000000000..dc4176be67 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/1917c5996ac82e13143a414eb9448f171fdd751a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/19549ded404f9a9581d32a1827da96ff1420f0ae b/test/core/end2end/fuzzers/api_fuzzer_corpus/19549ded404f9a9581d32a1827da96ff1420f0ae Binary files differnew file mode 100644 index 0000000000..116ac96c36 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/19549ded404f9a9581d32a1827da96ff1420f0ae diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1b09a1e5994952cda58b8339492f6850936a61f4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1b09a1e5994952cda58b8339492f6850936a61f4 Binary files differnew file mode 100644 index 0000000000..86af616087 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/1b09a1e5994952cda58b8339492f6850936a61f4 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1cd257e53b8d5a57c9feabcfd9f8f22c30cdb4a8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1cd257e53b8d5a57c9feabcfd9f8f22c30cdb4a8 Binary files differnew file mode 100644 index 0000000000..3c4a5486ed --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/1cd257e53b8d5a57c9feabcfd9f8f22c30cdb4a8 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1fd33a83549fb9fc5e7d05a2c308a044b7c9b167 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1fd33a83549fb9fc5e7d05a2c308a044b7c9b167 Binary files differnew file mode 100644 index 0000000000..8385f54c72 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/1fd33a83549fb9fc5e7d05a2c308a044b7c9b167 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/202a15693f991889b5fdd97f016a5410778b07e1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/202a15693f991889b5fdd97f016a5410778b07e1 Binary files differnew file mode 100644 index 0000000000..70df23d052 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/202a15693f991889b5fdd97f016a5410778b07e1 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/20a10c9a0c8cc48fd6317000f70070a0b2451e60 b/test/core/end2end/fuzzers/api_fuzzer_corpus/20a10c9a0c8cc48fd6317000f70070a0b2451e60 Binary files differnew file mode 100644 index 0000000000..9baa758e75 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/20a10c9a0c8cc48fd6317000f70070a0b2451e60 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/21357c3613a47180eb668b1c6c849ce9096a46eb b/test/core/end2end/fuzzers/api_fuzzer_corpus/21357c3613a47180eb668b1c6c849ce9096a46eb Binary files differnew file mode 100644 index 0000000000..4ed1578c8d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/21357c3613a47180eb668b1c6c849ce9096a46eb diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2372fe3d96fda1dae8846a781905c6c408555d3a b/test/core/end2end/fuzzers/api_fuzzer_corpus/2372fe3d96fda1dae8846a781905c6c408555d3a Binary files differnew file mode 100644 index 0000000000..d29897c239 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2372fe3d96fda1dae8846a781905c6c408555d3a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/23982956d17d2f55e61a5d9111b1c0c7ee530214 b/test/core/end2end/fuzzers/api_fuzzer_corpus/23982956d17d2f55e61a5d9111b1c0c7ee530214 Binary files differnew file mode 100644 index 0000000000..146b1b6e52 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/23982956d17d2f55e61a5d9111b1c0c7ee530214 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/25a2c5d4f55a083d2535b46a82e295fb169ffb32 b/test/core/end2end/fuzzers/api_fuzzer_corpus/25a2c5d4f55a083d2535b46a82e295fb169ffb32 Binary files differnew file mode 100644 index 0000000000..e3e284b7ab --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/25a2c5d4f55a083d2535b46a82e295fb169ffb32 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2721f5503254227af744243957ee859fa903e066 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2721f5503254227af744243957ee859fa903e066 Binary files differnew file mode 100644 index 0000000000..a14f605806 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2721f5503254227af744243957ee859fa903e066 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/282003073c8b88d7ad43ce75677777cdb754228c b/test/core/end2end/fuzzers/api_fuzzer_corpus/282003073c8b88d7ad43ce75677777cdb754228c Binary files differnew file mode 100644 index 0000000000..154f3bd6f9 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/282003073c8b88d7ad43ce75677777cdb754228c diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2858613c057a236dbe306cca44df29232f6b48b3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2858613c057a236dbe306cca44df29232f6b48b3 Binary files differnew file mode 100644 index 0000000000..8f934748e7 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2858613c057a236dbe306cca44df29232f6b48b3 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/295d24a7705fe1821606f9224f241a7596481bed b/test/core/end2end/fuzzers/api_fuzzer_corpus/295d24a7705fe1821606f9224f241a7596481bed Binary files differnew file mode 100644 index 0000000000..58a4814491 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/295d24a7705fe1821606f9224f241a7596481bed diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2a08eb351e08f0e6ac1e1416b43ff962a4e3735c b/test/core/end2end/fuzzers/api_fuzzer_corpus/2a08eb351e08f0e6ac1e1416b43ff962a4e3735c Binary files differnew file mode 100644 index 0000000000..c1a88b04ff --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2a08eb351e08f0e6ac1e1416b43ff962a4e3735c diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2a1d70b04f4aba0ec93899485f0807a209a4b207 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2a1d70b04f4aba0ec93899485f0807a209a4b207 Binary files differnew file mode 100644 index 0000000000..a04bc00691 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2a1d70b04f4aba0ec93899485f0807a209a4b207 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2a2ca2f6a1c03067f87bad61515688edc234bacc b/test/core/end2end/fuzzers/api_fuzzer_corpus/2a2ca2f6a1c03067f87bad61515688edc234bacc Binary files differnew file mode 100644 index 0000000000..48d26daa5a --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2a2ca2f6a1c03067f87bad61515688edc234bacc diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2aaee068ca624dcb746af9dc14591b24db033ffc b/test/core/end2end/fuzzers/api_fuzzer_corpus/2aaee068ca624dcb746af9dc14591b24db033ffc Binary files differnew file mode 100644 index 0000000000..ee202ea181 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2aaee068ca624dcb746af9dc14591b24db033ffc diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2ce30739d22f5380f96400f261fd26e95cc33927 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2ce30739d22f5380f96400f261fd26e95cc33927 Binary files differnew file mode 100644 index 0000000000..725aa45654 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2ce30739d22f5380f96400f261fd26e95cc33927 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2e40d861a9fec3742c31971b583e28bf40e28dbe b/test/core/end2end/fuzzers/api_fuzzer_corpus/2e40d861a9fec3742c31971b583e28bf40e28dbe Binary files differnew file mode 100644 index 0000000000..8159fcb3ee --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2e40d861a9fec3742c31971b583e28bf40e28dbe diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2ec78409a7d3625126387512a1c58cae2ff0bcf7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2ec78409a7d3625126387512a1c58cae2ff0bcf7 Binary files differnew file mode 100644 index 0000000000..387120ddce --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2ec78409a7d3625126387512a1c58cae2ff0bcf7 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2ffb878075ebb3d2d778c8aabcb0e96cb51060f0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2ffb878075ebb3d2d778c8aabcb0e96cb51060f0 Binary files differnew file mode 100644 index 0000000000..cb10119c1a --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2ffb878075ebb3d2d778c8aabcb0e96cb51060f0 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/30c74b7b5c92bb602d26c3d703c267e288b432a2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/30c74b7b5c92bb602d26c3d703c267e288b432a2 Binary files differnew file mode 100644 index 0000000000..c2552d60f3 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/30c74b7b5c92bb602d26c3d703c267e288b432a2 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/31498be283beb45294fb96f15b3af4e7de0ce584 b/test/core/end2end/fuzzers/api_fuzzer_corpus/31498be283beb45294fb96f15b3af4e7de0ce584 Binary files differnew file mode 100644 index 0000000000..dfad08ccaa --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/31498be283beb45294fb96f15b3af4e7de0ce584 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/314ea0a2c481639b6559b063399299259c43c9bb b/test/core/end2end/fuzzers/api_fuzzer_corpus/314ea0a2c481639b6559b063399299259c43c9bb Binary files differnew file mode 100644 index 0000000000..6a068384a3 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/314ea0a2c481639b6559b063399299259c43c9bb diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/31ef9c4ed85ae1b4e8a027fc5a1d3037dbbf3b3a b/test/core/end2end/fuzzers/api_fuzzer_corpus/31ef9c4ed85ae1b4e8a027fc5a1d3037dbbf3b3a Binary files differnew file mode 100644 index 0000000000..2edcd8e592 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/31ef9c4ed85ae1b4e8a027fc5a1d3037dbbf3b3a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/327e5a755e3307b121700f1ba23000a844e70596 b/test/core/end2end/fuzzers/api_fuzzer_corpus/327e5a755e3307b121700f1ba23000a844e70596 Binary files differnew file mode 100644 index 0000000000..b2152ccbe1 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/327e5a755e3307b121700f1ba23000a844e70596 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3396a31b1075465bf358eb7836e6f5347a0be591 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3396a31b1075465bf358eb7836e6f5347a0be591 Binary files differnew file mode 100644 index 0000000000..8dd0ffc90d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3396a31b1075465bf358eb7836e6f5347a0be591 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/350a1f6d0fe784667d7ae78e1ed783cdf2263bfd b/test/core/end2end/fuzzers/api_fuzzer_corpus/350a1f6d0fe784667d7ae78e1ed783cdf2263bfd Binary files differnew file mode 100644 index 0000000000..83f2053a99 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/350a1f6d0fe784667d7ae78e1ed783cdf2263bfd diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/35cf9a1a6f81db0829d854fd3716916bae081c8c b/test/core/end2end/fuzzers/api_fuzzer_corpus/35cf9a1a6f81db0829d854fd3716916bae081c8c Binary files differnew file mode 100644 index 0000000000..836e04a1bd --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/35cf9a1a6f81db0829d854fd3716916bae081c8c diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/368f9368e43f7e743653d46360836b3db1b1ba8a b/test/core/end2end/fuzzers/api_fuzzer_corpus/368f9368e43f7e743653d46360836b3db1b1ba8a Binary files differnew file mode 100644 index 0000000000..dae7009170 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/368f9368e43f7e743653d46360836b3db1b1ba8a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/36dea0ab5bc764c2eb2f428bcbe2786e64da8bd3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/36dea0ab5bc764c2eb2f428bcbe2786e64da8bd3 Binary files differnew file mode 100644 index 0000000000..5f8de544f2 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/36dea0ab5bc764c2eb2f428bcbe2786e64da8bd3 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/376f42635e918cc28706b82ad8923cc7401aa9e6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/376f42635e918cc28706b82ad8923cc7401aa9e6 Binary files differnew file mode 100644 index 0000000000..32500f8c58 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/376f42635e918cc28706b82ad8923cc7401aa9e6 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/37cf256347732e86fa92089847b7381e964cc83f b/test/core/end2end/fuzzers/api_fuzzer_corpus/37cf256347732e86fa92089847b7381e964cc83f Binary files differnew file mode 100644 index 0000000000..a737c85a24 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/37cf256347732e86fa92089847b7381e964cc83f diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/38eb06643f87fff21483433dc4169e0388b0c9e1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/38eb06643f87fff21483433dc4169e0388b0c9e1 Binary files differnew file mode 100644 index 0000000000..ff983d57b8 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/38eb06643f87fff21483433dc4169e0388b0c9e1 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3b114f7e66bf6cbf256a5e656ab6620e3f31277f b/test/core/end2end/fuzzers/api_fuzzer_corpus/3b114f7e66bf6cbf256a5e656ab6620e3f31277f Binary files differnew file mode 100644 index 0000000000..1be83994d7 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3b114f7e66bf6cbf256a5e656ab6620e3f31277f diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3db644687c6a09fae4267f05b63a969f28024f87 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3db644687c6a09fae4267f05b63a969f28024f87 Binary files differnew file mode 100644 index 0000000000..1a3281138d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3db644687c6a09fae4267f05b63a969f28024f87 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3dc1bcb27ed0616a2b905025a8898759d94a934d b/test/core/end2end/fuzzers/api_fuzzer_corpus/3dc1bcb27ed0616a2b905025a8898759d94a934d Binary files differnew file mode 100644 index 0000000000..a4a8de45e8 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3dc1bcb27ed0616a2b905025a8898759d94a934d diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3f2e5f90e1a93df61a1c9c09b8c9116149eec526 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3f2e5f90e1a93df61a1c9c09b8c9116149eec526 Binary files differnew file mode 100644 index 0000000000..d1451d487f --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3f2e5f90e1a93df61a1c9c09b8c9116149eec526 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3f31d328c16207904d201406f7e9708360d5799b b/test/core/end2end/fuzzers/api_fuzzer_corpus/3f31d328c16207904d201406f7e9708360d5799b Binary files differnew file mode 100644 index 0000000000..4791cfd373 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3f31d328c16207904d201406f7e9708360d5799b diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4141d93d6c387967967844423a6a83ad1793010a b/test/core/end2end/fuzzers/api_fuzzer_corpus/4141d93d6c387967967844423a6a83ad1793010a Binary files differnew file mode 100644 index 0000000000..9fd03853b6 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/4141d93d6c387967967844423a6a83ad1793010a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4a4675803915c9dafe85b8026c93a0ca9c498233 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4a4675803915c9dafe85b8026c93a0ca9c498233 Binary files differnew file mode 100644 index 0000000000..e72cdf2f27 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/4a4675803915c9dafe85b8026c93a0ca9c498233 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4d345f45f808c5b0541976b5dff98c603611e9ab b/test/core/end2end/fuzzers/api_fuzzer_corpus/4d345f45f808c5b0541976b5dff98c603611e9ab Binary files differnew file mode 100644 index 0000000000..47c4276301 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/4d345f45f808c5b0541976b5dff98c603611e9ab diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4d5e7091c1c67867f2760543d9a8a7256007bdef b/test/core/end2end/fuzzers/api_fuzzer_corpus/4d5e7091c1c67867f2760543d9a8a7256007bdef Binary files differnew file mode 100644 index 0000000000..418b06b4a2 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/4d5e7091c1c67867f2760543d9a8a7256007bdef diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4e8dbf3eb7d11a4fdb994f281454be2a7ebb091c b/test/core/end2end/fuzzers/api_fuzzer_corpus/4e8dbf3eb7d11a4fdb994f281454be2a7ebb091c Binary files differnew file mode 100644 index 0000000000..c2895f60f9 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/4e8dbf3eb7d11a4fdb994f281454be2a7ebb091c diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4eedb47e422ce761fc5b279582e56c7d1f3ed180 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4eedb47e422ce761fc5b279582e56c7d1f3ed180 Binary files differnew file mode 100644 index 0000000000..e75ebcfda9 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/4eedb47e422ce761fc5b279582e56c7d1f3ed180 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5109721ea8f74b08d455968fce90dd74c29aa95a b/test/core/end2end/fuzzers/api_fuzzer_corpus/5109721ea8f74b08d455968fce90dd74c29aa95a Binary files differnew file mode 100644 index 0000000000..b0fc4c1d84 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5109721ea8f74b08d455968fce90dd74c29aa95a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/51be7e2267e32f2eb8079349882f8247dc397d0f b/test/core/end2end/fuzzers/api_fuzzer_corpus/51be7e2267e32f2eb8079349882f8247dc397d0f Binary files differnew file mode 100644 index 0000000000..3071957e72 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/51be7e2267e32f2eb8079349882f8247dc397d0f diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/521e1e27b0997a0dc168f628e8a0497f7f93ea6d b/test/core/end2end/fuzzers/api_fuzzer_corpus/521e1e27b0997a0dc168f628e8a0497f7f93ea6d Binary files differnew file mode 100644 index 0000000000..60a88d4c89 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/521e1e27b0997a0dc168f628e8a0497f7f93ea6d diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/541e87b9d3dc75ad40cb47935ed4de83b25af5b9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/541e87b9d3dc75ad40cb47935ed4de83b25af5b9 Binary files differnew file mode 100644 index 0000000000..4eabbd5a8f --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/541e87b9d3dc75ad40cb47935ed4de83b25af5b9 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5611060a04db105e03cc74da57352b8a09c411e0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5611060a04db105e03cc74da57352b8a09c411e0 Binary files differnew file mode 100644 index 0000000000..cd30ed8f27 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5611060a04db105e03cc74da57352b8a09c411e0 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/56e0bd235d4ea1de80d753b2b12d03d43cd0aa06 b/test/core/end2end/fuzzers/api_fuzzer_corpus/56e0bd235d4ea1de80d753b2b12d03d43cd0aa06 Binary files differnew file mode 100644 index 0000000000..9bd9fe4ad4 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/56e0bd235d4ea1de80d753b2b12d03d43cd0aa06 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/57d4ef9e72f97aa8a1e6689f3be092fc2b24315c b/test/core/end2end/fuzzers/api_fuzzer_corpus/57d4ef9e72f97aa8a1e6689f3be092fc2b24315c Binary files differnew file mode 100644 index 0000000000..59226aa05f --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/57d4ef9e72f97aa8a1e6689f3be092fc2b24315c diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5967be7b53e3bac677c726d30a513949e06e1fde b/test/core/end2end/fuzzers/api_fuzzer_corpus/5967be7b53e3bac677c726d30a513949e06e1fde Binary files differnew file mode 100644 index 0000000000..76c0024049 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5967be7b53e3bac677c726d30a513949e06e1fde diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/598c513564bc043f831876ea61cb8283d43f6726 b/test/core/end2end/fuzzers/api_fuzzer_corpus/598c513564bc043f831876ea61cb8283d43f6726 Binary files differnew file mode 100644 index 0000000000..9c9acf2777 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/598c513564bc043f831876ea61cb8283d43f6726 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/59db3f98b38747d4a35524c1b3d31b5e90f53775 b/test/core/end2end/fuzzers/api_fuzzer_corpus/59db3f98b38747d4a35524c1b3d31b5e90f53775 Binary files differnew file mode 100644 index 0000000000..46274c5b74 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/59db3f98b38747d4a35524c1b3d31b5e90f53775 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5c37a2f980223e737574dba8239378f643800c28 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5c37a2f980223e737574dba8239378f643800c28 Binary files differnew file mode 100644 index 0000000000..3e3432fc62 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5c37a2f980223e737574dba8239378f643800c28 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5ddce6103cb33bc58571c8135b620443740e3646 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ddce6103cb33bc58571c8135b620443740e3646 Binary files differnew file mode 100644 index 0000000000..05798a6b7d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ddce6103cb33bc58571c8135b620443740e3646 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5e31ededf3b3189d252148c450de7a8778653e72 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5e31ededf3b3189d252148c450de7a8778653e72 Binary files differnew file mode 100644 index 0000000000..f8d4762cd5 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5e31ededf3b3189d252148c450de7a8778653e72 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5f61659c332f6153f9a59746bc02064155443b4a b/test/core/end2end/fuzzers/api_fuzzer_corpus/5f61659c332f6153f9a59746bc02064155443b4a Binary files differnew file mode 100644 index 0000000000..790bcc1f0b --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5f61659c332f6153f9a59746bc02064155443b4a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/60ad6847b1fe72ee81decf28dcffa30ce372af6a b/test/core/end2end/fuzzers/api_fuzzer_corpus/60ad6847b1fe72ee81decf28dcffa30ce372af6a Binary files differnew file mode 100644 index 0000000000..c113b0b3b9 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/60ad6847b1fe72ee81decf28dcffa30ce372af6a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6245a105123761558a71a9207b3048d2f3d691f0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6245a105123761558a71a9207b3048d2f3d691f0 Binary files differnew file mode 100644 index 0000000000..ea9e457b77 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6245a105123761558a71a9207b3048d2f3d691f0 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6619768ddd830ebe29021e827961fddb78751086 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6619768ddd830ebe29021e827961fddb78751086 Binary files differnew file mode 100644 index 0000000000..2508dc04f0 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6619768ddd830ebe29021e827961fddb78751086 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/682fdabcfc7243e9c93108d6b2d7d3e920e81970 b/test/core/end2end/fuzzers/api_fuzzer_corpus/682fdabcfc7243e9c93108d6b2d7d3e920e81970 Binary files differnew file mode 100644 index 0000000000..0138558e44 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/682fdabcfc7243e9c93108d6b2d7d3e920e81970 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6ad7afcf2d12025faf0e1812ee7a0a5d754620c6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ad7afcf2d12025faf0e1812ee7a0a5d754620c6 Binary files differnew file mode 100644 index 0000000000..c45f7e8dda --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ad7afcf2d12025faf0e1812ee7a0a5d754620c6 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6ae8b3afc4f6e3a26fec5eaeb2bf64727927552b b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ae8b3afc4f6e3a26fec5eaeb2bf64727927552b Binary files differnew file mode 100644 index 0000000000..041803801e --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ae8b3afc4f6e3a26fec5eaeb2bf64727927552b diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6be9f2d2967566ac929c27a27de40af792a6da90 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6be9f2d2967566ac929c27a27de40af792a6da90 Binary files differnew file mode 100644 index 0000000000..fb7267a703 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6be9f2d2967566ac929c27a27de40af792a6da90 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6c34a6b47ef9e11e02f7675087d888c2c994b010 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6c34a6b47ef9e11e02f7675087d888c2c994b010 Binary files differnew file mode 100644 index 0000000000..243e93f3d0 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6c34a6b47ef9e11e02f7675087d888c2c994b010 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6ce0f95767e8b1c58ff313d10f1a3eb1f9ab8496 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ce0f95767e8b1c58ff313d10f1a3eb1f9ab8496 Binary files differnew file mode 100644 index 0000000000..f1dcb2c260 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6ce0f95767e8b1c58ff313d10f1a3eb1f9ab8496 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6cfe000a50ad8b908b3efa3af94c5df6382ff33d b/test/core/end2end/fuzzers/api_fuzzer_corpus/6cfe000a50ad8b908b3efa3af94c5df6382ff33d Binary files differnew file mode 100644 index 0000000000..56618545ad --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6cfe000a50ad8b908b3efa3af94c5df6382ff33d diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6d6d70df4499b8595851100ffb833d397cc87a18 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6d6d70df4499b8595851100ffb833d397cc87a18 Binary files differnew file mode 100644 index 0000000000..1a770cc52e --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6d6d70df4499b8595851100ffb833d397cc87a18 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6e3d43e98d7be45ecc1863eedfeb85a4cae4a007 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6e3d43e98d7be45ecc1863eedfeb85a4cae4a007 Binary files differnew file mode 100644 index 0000000000..38e2e33721 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6e3d43e98d7be45ecc1863eedfeb85a4cae4a007 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6e77e1cd328bb98d954043230716863c5133c1c4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6e77e1cd328bb98d954043230716863c5133c1c4 Binary files differnew file mode 100644 index 0000000000..f321eab18d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6e77e1cd328bb98d954043230716863c5133c1c4 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6f68ff31046fd15930657516873b8835fdbadfe3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6f68ff31046fd15930657516873b8835fdbadfe3 Binary files differnew file mode 100644 index 0000000000..be37cac366 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6f68ff31046fd15930657516873b8835fdbadfe3 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/71f9eafe17e974062938a6a12433ce723fe07d40 b/test/core/end2end/fuzzers/api_fuzzer_corpus/71f9eafe17e974062938a6a12433ce723fe07d40 Binary files differnew file mode 100644 index 0000000000..51cc9f8928 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/71f9eafe17e974062938a6a12433ce723fe07d40 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/72160b48e0995ee82f116d77a7fb23a028c10932 b/test/core/end2end/fuzzers/api_fuzzer_corpus/72160b48e0995ee82f116d77a7fb23a028c10932 Binary files differnew file mode 100644 index 0000000000..be6505ac15 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/72160b48e0995ee82f116d77a7fb23a028c10932 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/756d77e9fb9ed9dac1db0b1c8cdcc6e05e47329b b/test/core/end2end/fuzzers/api_fuzzer_corpus/756d77e9fb9ed9dac1db0b1c8cdcc6e05e47329b Binary files differnew file mode 100644 index 0000000000..e662e294a8 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/756d77e9fb9ed9dac1db0b1c8cdcc6e05e47329b diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7590589db6b56b4e7db9333fba8d723b6461e0a6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7590589db6b56b4e7db9333fba8d723b6461e0a6 Binary files differnew file mode 100644 index 0000000000..93a98b4927 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/7590589db6b56b4e7db9333fba8d723b6461e0a6 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/75a242a8e6a0c453ac785fe6495d408e9650e17d b/test/core/end2end/fuzzers/api_fuzzer_corpus/75a242a8e6a0c453ac785fe6495d408e9650e17d Binary files differnew file mode 100644 index 0000000000..0198181523 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/75a242a8e6a0c453ac785fe6495d408e9650e17d diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/78d8b2a1732c4528d6acdb21c236f417a0f85798 b/test/core/end2end/fuzzers/api_fuzzer_corpus/78d8b2a1732c4528d6acdb21c236f417a0f85798 Binary files differnew file mode 100644 index 0000000000..77c2b2864c --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/78d8b2a1732c4528d6acdb21c236f417a0f85798 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/79975e5fb34f3569b0d2e40d34d6f7ab1bf82cf2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/79975e5fb34f3569b0d2e40d34d6f7ab1bf82cf2 Binary files differnew file mode 100644 index 0000000000..ad1b3b317f --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/79975e5fb34f3569b0d2e40d34d6f7ab1bf82cf2 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7b44a92a28ff5c96be7c4dae5c56a9e5fa272ad3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7b44a92a28ff5c96be7c4dae5c56a9e5fa272ad3 Binary files differnew file mode 100644 index 0000000000..dac2af4edb --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/7b44a92a28ff5c96be7c4dae5c56a9e5fa272ad3 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7cfe9fd65c3daa43067dfc99dac2814b763b9f48 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7cfe9fd65c3daa43067dfc99dac2814b763b9f48 Binary files differnew file mode 100644 index 0000000000..372e293e43 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/7cfe9fd65c3daa43067dfc99dac2814b763b9f48 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7d3ff63f0b0019fef80e5e3cd82de8dfbcd07103 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7d3ff63f0b0019fef80e5e3cd82de8dfbcd07103 Binary files differnew file mode 100644 index 0000000000..0f58ec75eb --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/7d3ff63f0b0019fef80e5e3cd82de8dfbcd07103 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7f2a2a365669c88559036ed998b074b1b9a31e0b b/test/core/end2end/fuzzers/api_fuzzer_corpus/7f2a2a365669c88559036ed998b074b1b9a31e0b Binary files differnew file mode 100644 index 0000000000..be6cc539f7 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/7f2a2a365669c88559036ed998b074b1b9a31e0b diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/81437c61aeca9becc91003af7b835dc65a3e03e4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/81437c61aeca9becc91003af7b835dc65a3e03e4 Binary files differnew file mode 100644 index 0000000000..72700d75a3 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/81437c61aeca9becc91003af7b835dc65a3e03e4 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8272e45483cb4cc7113b0ffad71f9218542f9cd7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8272e45483cb4cc7113b0ffad71f9218542f9cd7 Binary files differnew file mode 100644 index 0000000000..0da408ead0 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8272e45483cb4cc7113b0ffad71f9218542f9cd7 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/83e2bd562704e16ac57589b4273d0c61775d7c9c b/test/core/end2end/fuzzers/api_fuzzer_corpus/83e2bd562704e16ac57589b4273d0c61775d7c9c Binary files differnew file mode 100644 index 0000000000..40de3dcbc4 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/83e2bd562704e16ac57589b4273d0c61775d7c9c diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/84505278558cc406dc36109deab239f1e4cf1518 b/test/core/end2end/fuzzers/api_fuzzer_corpus/84505278558cc406dc36109deab239f1e4cf1518 Binary files differnew file mode 100644 index 0000000000..d681d33a29 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/84505278558cc406dc36109deab239f1e4cf1518 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8525fa2b11288eda66418be4ecfcf8d7731d75a6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8525fa2b11288eda66418be4ecfcf8d7731d75a6 Binary files differnew file mode 100644 index 0000000000..b723cc19b8 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8525fa2b11288eda66418be4ecfcf8d7731d75a6 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/85a50177266a832eca0563d37ccb03890f12c665 b/test/core/end2end/fuzzers/api_fuzzer_corpus/85a50177266a832eca0563d37ccb03890f12c665 Binary files differnew file mode 100644 index 0000000000..7c2870f1f2 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/85a50177266a832eca0563d37ccb03890f12c665 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/85afba0cb1eb440ed95ee5793a70c7e5d8465148 b/test/core/end2end/fuzzers/api_fuzzer_corpus/85afba0cb1eb440ed95ee5793a70c7e5d8465148 Binary files differnew file mode 100644 index 0000000000..1fc35b79f3 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/85afba0cb1eb440ed95ee5793a70c7e5d8465148 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/871196ccb877b7c6c7d6cafe3324fde440706de3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/871196ccb877b7c6c7d6cafe3324fde440706de3 Binary files differnew file mode 100644 index 0000000000..81d2d757b6 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/871196ccb877b7c6c7d6cafe3324fde440706de3 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8a13b47235d2967f5a5419cb0ad8d241a750a365 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8a13b47235d2967f5a5419cb0ad8d241a750a365 Binary files differnew file mode 100644 index 0000000000..ca96913a47 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8a13b47235d2967f5a5419cb0ad8d241a750a365 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8a6ccd18dbc530ed34afd4a73beeff0449040c25 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8a6ccd18dbc530ed34afd4a73beeff0449040c25 Binary files differnew file mode 100644 index 0000000000..93fc40f581 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8a6ccd18dbc530ed34afd4a73beeff0449040c25 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8bdd4dc6dee56fb6965655425ca378f784a42b6a b/test/core/end2end/fuzzers/api_fuzzer_corpus/8bdd4dc6dee56fb6965655425ca378f784a42b6a Binary files differnew file mode 100644 index 0000000000..b54fd86456 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8bdd4dc6dee56fb6965655425ca378f784a42b6a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8c6776521d0f100708ecb9f8504e572d586b8a21 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8c6776521d0f100708ecb9f8504e572d586b8a21 Binary files differnew file mode 100644 index 0000000000..be00bec404 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8c6776521d0f100708ecb9f8504e572d586b8a21 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8de197bbdf4deaea5bd21af25c0b5c5f03b231ae b/test/core/end2end/fuzzers/api_fuzzer_corpus/8de197bbdf4deaea5bd21af25c0b5c5f03b231ae Binary files differnew file mode 100644 index 0000000000..5a98f90555 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8de197bbdf4deaea5bd21af25c0b5c5f03b231ae diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8e226a7f67b7c6e9d439c3627bfa5644af992593 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8e226a7f67b7c6e9d439c3627bfa5644af992593 Binary files differnew file mode 100644 index 0000000000..a08862a965 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8e226a7f67b7c6e9d439c3627bfa5644af992593 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/908b1f170a721682465838d0c0eca40810beb722 b/test/core/end2end/fuzzers/api_fuzzer_corpus/908b1f170a721682465838d0c0eca40810beb722 Binary files differnew file mode 100644 index 0000000000..f0dbace491 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/908b1f170a721682465838d0c0eca40810beb722 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/92882ccad7fc3e7bc1df7dfa5954a6d591d5dbc2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/92882ccad7fc3e7bc1df7dfa5954a6d591d5dbc2 Binary files differnew file mode 100644 index 0000000000..b53afb9b94 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/92882ccad7fc3e7bc1df7dfa5954a6d591d5dbc2 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/92a87c7a2f2e336f92529bc40deee614dd8b4486 b/test/core/end2end/fuzzers/api_fuzzer_corpus/92a87c7a2f2e336f92529bc40deee614dd8b4486 Binary files differnew file mode 100644 index 0000000000..4d31488b22 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/92a87c7a2f2e336f92529bc40deee614dd8b4486 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/92e8c16eb9a816c5944ecb76cf9af08f05930aeb b/test/core/end2end/fuzzers/api_fuzzer_corpus/92e8c16eb9a816c5944ecb76cf9af08f05930aeb Binary files differnew file mode 100644 index 0000000000..ddc69e3f1b --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/92e8c16eb9a816c5944ecb76cf9af08f05930aeb diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9345e2de4f0476428d941c53013535fbda8a2bca b/test/core/end2end/fuzzers/api_fuzzer_corpus/9345e2de4f0476428d941c53013535fbda8a2bca Binary files differnew file mode 100644 index 0000000000..634bfbc7a4 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/9345e2de4f0476428d941c53013535fbda8a2bca diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/97539b673cb482cfa4d876df515270611b28f22a b/test/core/end2end/fuzzers/api_fuzzer_corpus/97539b673cb482cfa4d876df515270611b28f22a Binary files differnew file mode 100644 index 0000000000..7d23be7cd6 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/97539b673cb482cfa4d876df515270611b28f22a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9b014aa18fb8c033458b6d5fdb351e60d16e8bce b/test/core/end2end/fuzzers/api_fuzzer_corpus/9b014aa18fb8c033458b6d5fdb351e60d16e8bce Binary files differnew file mode 100644 index 0000000000..8c676b28b0 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/9b014aa18fb8c033458b6d5fdb351e60d16e8bce diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9bbb726cd811fce33aecdbcce3d287c252ed71d5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/9bbb726cd811fce33aecdbcce3d287c252ed71d5 Binary files differnew file mode 100644 index 0000000000..e6bd6e3c43 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/9bbb726cd811fce33aecdbcce3d287c252ed71d5 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9dd5d09e1538e12b091c35d252ee43684d0f07bd b/test/core/end2end/fuzzers/api_fuzzer_corpus/9dd5d09e1538e12b091c35d252ee43684d0f07bd Binary files differnew file mode 100644 index 0000000000..79ca267660 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/9dd5d09e1538e12b091c35d252ee43684d0f07bd diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9fd5c58979d17905e46ee7b76f542f7acb54d60f b/test/core/end2end/fuzzers/api_fuzzer_corpus/9fd5c58979d17905e46ee7b76f542f7acb54d60f Binary files differnew file mode 100644 index 0000000000..b612d8b88c --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/9fd5c58979d17905e46ee7b76f542f7acb54d60f diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a001745aa3499a11bf1cee1af077bdc85a03ef95 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a001745aa3499a11bf1cee1af077bdc85a03ef95 Binary files differnew file mode 100644 index 0000000000..97fb1db450 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a001745aa3499a11bf1cee1af077bdc85a03ef95 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a151b36f390273fb440d2e35ab93acc5540bfed6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a151b36f390273fb440d2e35ab93acc5540bfed6 Binary files differnew file mode 100644 index 0000000000..502c838eca --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a151b36f390273fb440d2e35ab93acc5540bfed6 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a19cc971908189b5febf6fb5e8578c91dd666715 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a19cc971908189b5febf6fb5e8578c91dd666715 Binary files differnew file mode 100644 index 0000000000..8e331bc106 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a19cc971908189b5febf6fb5e8578c91dd666715 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a1b0fdbc2160dfe8c1eed409eb60042c819a843a b/test/core/end2end/fuzzers/api_fuzzer_corpus/a1b0fdbc2160dfe8c1eed409eb60042c819a843a Binary files differnew file mode 100644 index 0000000000..028ca0e58d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a1b0fdbc2160dfe8c1eed409eb60042c819a843a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a36a34472604c8107353872e77a84873ff8a9170 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a36a34472604c8107353872e77a84873ff8a9170 Binary files differnew file mode 100644 index 0000000000..5a660eb6ee --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a36a34472604c8107353872e77a84873ff8a9170 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a3fcf35a54c8c88b5cc1ef76e43124bb25b61ba3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a3fcf35a54c8c88b5cc1ef76e43124bb25b61ba3 Binary files differnew file mode 100644 index 0000000000..722b611df3 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a3fcf35a54c8c88b5cc1ef76e43124bb25b61ba3 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a44288607b76ce6df9fe7e196138a587cf4badc9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a44288607b76ce6df9fe7e196138a587cf4badc9 Binary files differnew file mode 100644 index 0000000000..095e02e090 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a44288607b76ce6df9fe7e196138a587cf4badc9 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a7ccc1f7db49512983fe4d42c16b2160357e3585 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a7ccc1f7db49512983fe4d42c16b2160357e3585 Binary files differnew file mode 100644 index 0000000000..8185b0f4ba --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a7ccc1f7db49512983fe4d42c16b2160357e3585 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a7d45318db68aea203c6f661f571394b649cfd86 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a7d45318db68aea203c6f661f571394b649cfd86 Binary files differnew file mode 100644 index 0000000000..1928f47400 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a7d45318db68aea203c6f661f571394b649cfd86 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a8b5f205a578696697bc1ca381e73501c3a9b185 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a8b5f205a578696697bc1ca381e73501c3a9b185 Binary files differnew file mode 100644 index 0000000000..29b2bc16c3 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a8b5f205a578696697bc1ca381e73501c3a9b185 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/aa0c7fda7faff932bf36e10d15ab2180ab1bca27 b/test/core/end2end/fuzzers/api_fuzzer_corpus/aa0c7fda7faff932bf36e10d15ab2180ab1bca27 Binary files differnew file mode 100644 index 0000000000..dad34fea3b --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/aa0c7fda7faff932bf36e10d15ab2180ab1bca27 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/acd5d85336bff9b38196c682864dd7a4965ac904 b/test/core/end2end/fuzzers/api_fuzzer_corpus/acd5d85336bff9b38196c682864dd7a4965ac904 Binary files differnew file mode 100644 index 0000000000..87dd9ee02d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/acd5d85336bff9b38196c682864dd7a4965ac904 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b06102e16c740796a9d30e07b9e564b65f7513da b/test/core/end2end/fuzzers/api_fuzzer_corpus/b06102e16c740796a9d30e07b9e564b65f7513da Binary files differnew file mode 100644 index 0000000000..70517fdf5d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b06102e16c740796a9d30e07b9e564b65f7513da diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b1e28018e26e6baaba5a907e5e6ff9b7a7942018 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b1e28018e26e6baaba5a907e5e6ff9b7a7942018 Binary files differnew file mode 100644 index 0000000000..31e40bfa13 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b1e28018e26e6baaba5a907e5e6ff9b7a7942018 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b2c5f4f8e2129a4201b2525cba8723241bbd8c79 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b2c5f4f8e2129a4201b2525cba8723241bbd8c79 Binary files differnew file mode 100644 index 0000000000..61188e2bde --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b2c5f4f8e2129a4201b2525cba8723241bbd8c79 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b4b8ba878466fc6c4e1939e38c38aa64026b055b b/test/core/end2end/fuzzers/api_fuzzer_corpus/b4b8ba878466fc6c4e1939e38c38aa64026b055b Binary files differnew file mode 100644 index 0000000000..3187f6ae15 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b4b8ba878466fc6c4e1939e38c38aa64026b055b diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b4f6d203097dcd1778f4a912cdc3af96ffb681de b/test/core/end2end/fuzzers/api_fuzzer_corpus/b4f6d203097dcd1778f4a912cdc3af96ffb681de Binary files differnew file mode 100644 index 0000000000..5804a7632a --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b4f6d203097dcd1778f4a912cdc3af96ffb681de diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b51db02b904ceee344fe48179d0c784c59ca2934 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b51db02b904ceee344fe48179d0c784c59ca2934 Binary files differnew file mode 100644 index 0000000000..352df6c020 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b51db02b904ceee344fe48179d0c784c59ca2934 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b63da75ca24aac41285dd14de6712179a3fbc0d1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b63da75ca24aac41285dd14de6712179a3fbc0d1 Binary files differnew file mode 100644 index 0000000000..22e3abc5e4 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b63da75ca24aac41285dd14de6712179a3fbc0d1 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b6ce8604e3c14c6867cd2a78cef144ddd2fbb4c1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b6ce8604e3c14c6867cd2a78cef144ddd2fbb4c1 Binary files differnew file mode 100644 index 0000000000..55fcf2676b --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b6ce8604e3c14c6867cd2a78cef144ddd2fbb4c1 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b79553c903c06619d53395ee67896c1554def055 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b79553c903c06619d53395ee67896c1554def055 Binary files differnew file mode 100644 index 0000000000..55fdc1eb8e --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b79553c903c06619d53395ee67896c1554def055 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b7c3f40ef32cd843e331fb49521c0d614dfbecc9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b7c3f40ef32cd843e331fb49521c0d614dfbecc9 Binary files differnew file mode 100644 index 0000000000..4b010f4f22 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b7c3f40ef32cd843e331fb49521c0d614dfbecc9 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b8bedb9c38fd149bc494a65674a4af5e61dfb311 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b8bedb9c38fd149bc494a65674a4af5e61dfb311 Binary files differnew file mode 100644 index 0000000000..a9c00734ef --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b8bedb9c38fd149bc494a65674a4af5e61dfb311 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b9eb50c5eb99cf0b419efa2cb8d7fdf2e71f6634 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b9eb50c5eb99cf0b419efa2cb8d7fdf2e71f6634 Binary files differnew file mode 100644 index 0000000000..00d6aa2a2c --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b9eb50c5eb99cf0b419efa2cb8d7fdf2e71f6634 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ba46bf502f75c1e66fb89e18c270da8e5a62207f b/test/core/end2end/fuzzers/api_fuzzer_corpus/ba46bf502f75c1e66fb89e18c270da8e5a62207f Binary files differnew file mode 100644 index 0000000000..44f9cd9f11 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ba46bf502f75c1e66fb89e18c270da8e5a62207f diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bb74226288b9d3a163029a25857bbebe84227222 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bb74226288b9d3a163029a25857bbebe84227222 Binary files differnew file mode 100644 index 0000000000..bf7879ec7b --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/bb74226288b9d3a163029a25857bbebe84227222 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bdfa6991c33f312c46ac27bdd8089be1670f0ac2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bdfa6991c33f312c46ac27bdd8089be1670f0ac2 Binary files differnew file mode 100644 index 0000000000..2c7c25c063 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/bdfa6991c33f312c46ac27bdd8089be1670f0ac2 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bf5923216eb069edaf4e135ab7ee426c04d99a25 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bf5923216eb069edaf4e135ab7ee426c04d99a25 Binary files differnew file mode 100644 index 0000000000..f1363ceff8 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/bf5923216eb069edaf4e135ab7ee426c04d99a25 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c09288284e4859b8a85421b19d3c6d0109cdab08 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c09288284e4859b8a85421b19d3c6d0109cdab08 Binary files differnew file mode 100644 index 0000000000..e56b7a7f15 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/c09288284e4859b8a85421b19d3c6d0109cdab08 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c77bd1e9d9be2b6d1362cbb15f63cf749aa113ea b/test/core/end2end/fuzzers/api_fuzzer_corpus/c77bd1e9d9be2b6d1362cbb15f63cf749aa113ea Binary files differnew file mode 100644 index 0000000000..d56d793d15 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/c77bd1e9d9be2b6d1362cbb15f63cf749aa113ea diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c845faac6d4b713a232aa3a6749afdf4e58d7f6a b/test/core/end2end/fuzzers/api_fuzzer_corpus/c845faac6d4b713a232aa3a6749afdf4e58d7f6a Binary files differnew file mode 100644 index 0000000000..9bf4b9687f --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/c845faac6d4b713a232aa3a6749afdf4e58d7f6a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c8b5d9fdb7ade3538abb794a3231d5777a1640a4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c8b5d9fdb7ade3538abb794a3231d5777a1640a4 Binary files differnew file mode 100644 index 0000000000..51af2b71f4 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/c8b5d9fdb7ade3538abb794a3231d5777a1640a4 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ca5a1e4fccc55aa977b841d8d67e6991a4371860 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ca5a1e4fccc55aa977b841d8d67e6991a4371860 Binary files differnew file mode 100644 index 0000000000..6b34269318 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ca5a1e4fccc55aa977b841d8d67e6991a4371860 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/cd4272fec464c45438dce72eb9381971ed0207de b/test/core/end2end/fuzzers/api_fuzzer_corpus/cd4272fec464c45438dce72eb9381971ed0207de Binary files differnew file mode 100644 index 0000000000..949e154e3c --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/cd4272fec464c45438dce72eb9381971ed0207de diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/cd7cf401276531cea7e4221f249f527f231a5bcb b/test/core/end2end/fuzzers/api_fuzzer_corpus/cd7cf401276531cea7e4221f249f527f231a5bcb Binary files differnew file mode 100644 index 0000000000..603c37907e --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/cd7cf401276531cea7e4221f249f527f231a5bcb diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/cea57d6a128cc7cd195cb2390bfde28047d6acf8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/cea57d6a128cc7cd195cb2390bfde28047d6acf8 Binary files differnew file mode 100644 index 0000000000..97dcc4f304 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/cea57d6a128cc7cd195cb2390bfde28047d6acf8 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/crash-40e0fcf83e934a4ea2d31c009e9dfc1e68f11f3a b/test/core/end2end/fuzzers/api_fuzzer_corpus/crash-40e0fcf83e934a4ea2d31c009e9dfc1e68f11f3a Binary files differnew file mode 100644 index 0000000000..63b1a91450 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/crash-40e0fcf83e934a4ea2d31c009e9dfc1e68f11f3a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d02fb86e7e236a2253a2eadb0599f5dc261e4048 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d02fb86e7e236a2253a2eadb0599f5dc261e4048 Binary files differnew file mode 100644 index 0000000000..f73c10927a --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d02fb86e7e236a2253a2eadb0599f5dc261e4048 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d07965987a51541498871433e0fc6313884569d3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d07965987a51541498871433e0fc6313884569d3 Binary files differnew file mode 100644 index 0000000000..6106a4e696 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d07965987a51541498871433e0fc6313884569d3 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d19a252c00c74403389fe9e057cffeee39a4d2e0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d19a252c00c74403389fe9e057cffeee39a4d2e0 Binary files differnew file mode 100644 index 0000000000..964a500134 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d19a252c00c74403389fe9e057cffeee39a4d2e0 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d1d35a1d2148c62c6021479d4153e65511b33cc1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d1d35a1d2148c62c6021479d4153e65511b33cc1 Binary files differnew file mode 100644 index 0000000000..2f0696b179 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d1d35a1d2148c62c6021479d4153e65511b33cc1 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d29cf6979d8d58b4cb779a629ebee62d7e42fc9b b/test/core/end2end/fuzzers/api_fuzzer_corpus/d29cf6979d8d58b4cb779a629ebee62d7e42fc9b Binary files differnew file mode 100644 index 0000000000..b6daf7691e --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d29cf6979d8d58b4cb779a629ebee62d7e42fc9b diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d425e534ec074932b5cf4dc9a6cf4fc0683fd690 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d425e534ec074932b5cf4dc9a6cf4fc0683fd690 Binary files differnew file mode 100644 index 0000000000..5c8828e612 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d425e534ec074932b5cf4dc9a6cf4fc0683fd690 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d5d704fdb985efb36fb42f9ee8482ae473bb4695 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d5d704fdb985efb36fb42f9ee8482ae473bb4695 Binary files differnew file mode 100644 index 0000000000..ca82ab462f --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d5d704fdb985efb36fb42f9ee8482ae473bb4695 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d6d7dc448cc24272ce216dbc7365ebe6e6b7b367 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d6d7dc448cc24272ce216dbc7365ebe6e6b7b367 Binary files differnew file mode 100644 index 0000000000..e49fe7d3be --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d6d7dc448cc24272ce216dbc7365ebe6e6b7b367 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d85482b6a40d7edee97709df0ed02558dca4c079 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d85482b6a40d7edee97709df0ed02558dca4c079 Binary files differnew file mode 100644 index 0000000000..58e2ed8c04 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d85482b6a40d7edee97709df0ed02558dca4c079 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d8f08b0e061e86e94650aa16f99cae81cd696ca3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d8f08b0e061e86e94650aa16f99cae81cd696ca3 Binary files differnew file mode 100644 index 0000000000..4c34fd0833 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d8f08b0e061e86e94650aa16f99cae81cd696ca3 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/dbcaf0a6bd4960e8d0c518494b89bd9b941cfc8e b/test/core/end2end/fuzzers/api_fuzzer_corpus/dbcaf0a6bd4960e8d0c518494b89bd9b941cfc8e Binary files differnew file mode 100644 index 0000000000..098cfa21c3 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/dbcaf0a6bd4960e8d0c518494b89bd9b941cfc8e diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ddc34d5e97ac12572e6c39a336d219d91fa992b1 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ddc34d5e97ac12572e6c39a336d219d91fa992b1 Binary files differnew file mode 100644 index 0000000000..1b5ebce44d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ddc34d5e97ac12572e6c39a336d219d91fa992b1 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ddf932a29b8250746ec310af224f95d4a51cb745 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ddf932a29b8250746ec310af224f95d4a51cb745 Binary files differnew file mode 100644 index 0000000000..62ba3d5ffe --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ddf932a29b8250746ec310af224f95d4a51cb745 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e16a0f378b50b28dae4458b795c8c80cf869901a b/test/core/end2end/fuzzers/api_fuzzer_corpus/e16a0f378b50b28dae4458b795c8c80cf869901a Binary files differnew file mode 100644 index 0000000000..01296fcd54 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/e16a0f378b50b28dae4458b795c8c80cf869901a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e18816dbe46249fb0160b8f06c2b71f6943d3d21 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e18816dbe46249fb0160b8f06c2b71f6943d3d21 Binary files differnew file mode 100644 index 0000000000..d389968bc7 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/e18816dbe46249fb0160b8f06c2b71f6943d3d21 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e7d4357e2c3ac4db7a9bfece1549f0664e4d317b b/test/core/end2end/fuzzers/api_fuzzer_corpus/e7d4357e2c3ac4db7a9bfece1549f0664e4d317b Binary files differnew file mode 100644 index 0000000000..76cac15f1b --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/e7d4357e2c3ac4db7a9bfece1549f0664e4d317b diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e8b1814f9a0942322aeb190ae0ad35105784e101 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e8b1814f9a0942322aeb190ae0ad35105784e101 Binary files differnew file mode 100644 index 0000000000..bb11018c69 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/e8b1814f9a0942322aeb190ae0ad35105784e101 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e8bc4c1b1ffb23de5af2c8fe20599c05f94567ad b/test/core/end2end/fuzzers/api_fuzzer_corpus/e8bc4c1b1ffb23de5af2c8fe20599c05f94567ad Binary files differnew file mode 100644 index 0000000000..8dcd24e6ef --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/e8bc4c1b1ffb23de5af2c8fe20599c05f94567ad diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ea421a728134ad3a95a32f081c2bafa9d989836f b/test/core/end2end/fuzzers/api_fuzzer_corpus/ea421a728134ad3a95a32f081c2bafa9d989836f Binary files differnew file mode 100644 index 0000000000..d44736f753 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ea421a728134ad3a95a32f081c2bafa9d989836f diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/eab5589ebcdd4596996f0a6de6408a0f3e13437b b/test/core/end2end/fuzzers/api_fuzzer_corpus/eab5589ebcdd4596996f0a6de6408a0f3e13437b Binary files differnew file mode 100644 index 0000000000..733f49ca09 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/eab5589ebcdd4596996f0a6de6408a0f3e13437b diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ec56dad56975e8279b2b229288dff3bb0ceaf661 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ec56dad56975e8279b2b229288dff3bb0ceaf661 Binary files differnew file mode 100644 index 0000000000..c3a9711d62 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ec56dad56975e8279b2b229288dff3bb0ceaf661 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ed913deced10ab045fe04c783f6a0e2678f1929f b/test/core/end2end/fuzzers/api_fuzzer_corpus/ed913deced10ab045fe04c783f6a0e2678f1929f Binary files differnew file mode 100644 index 0000000000..53b246bb76 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ed913deced10ab045fe04c783f6a0e2678f1929f diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ee624b408f8a50c79cdaebf4fb4195e6162b70da b/test/core/end2end/fuzzers/api_fuzzer_corpus/ee624b408f8a50c79cdaebf4fb4195e6162b70da Binary files differnew file mode 100644 index 0000000000..abaf0fbb59 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ee624b408f8a50c79cdaebf4fb4195e6162b70da diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f060953b52fe245eb88ee13b32a3971eaa11e40a b/test/core/end2end/fuzzers/api_fuzzer_corpus/f060953b52fe245eb88ee13b32a3971eaa11e40a Binary files differnew file mode 100644 index 0000000000..b8344c2cf8 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f060953b52fe245eb88ee13b32a3971eaa11e40a diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f2ee773064f643871134a017d35fd5d8ae74d35c b/test/core/end2end/fuzzers/api_fuzzer_corpus/f2ee773064f643871134a017d35fd5d8ae74d35c Binary files differnew file mode 100644 index 0000000000..eea043539f --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f2ee773064f643871134a017d35fd5d8ae74d35c diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f38d6347f6044dbc3978ef7e5d5adfb7fc8aceb9 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f38d6347f6044dbc3978ef7e5d5adfb7fc8aceb9 Binary files differnew file mode 100644 index 0000000000..28ed5bb362 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f38d6347f6044dbc3978ef7e5d5adfb7fc8aceb9 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f4b66d285bd0328e511625b1c696662a0b0b2e70 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f4b66d285bd0328e511625b1c696662a0b0b2e70 Binary files differnew file mode 100644 index 0000000000..b3e38dfcc5 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f4b66d285bd0328e511625b1c696662a0b0b2e70 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f6d8d78857d868c2f477da7506a1976354f2631d b/test/core/end2end/fuzzers/api_fuzzer_corpus/f6d8d78857d868c2f477da7506a1976354f2631d Binary files differnew file mode 100644 index 0000000000..86ded50ca0 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f6d8d78857d868c2f477da7506a1976354f2631d diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fb263a744a6d40e183e84ec8a81ca13859c8b5ce b/test/core/end2end/fuzzers/api_fuzzer_corpus/fb263a744a6d40e183e84ec8a81ca13859c8b5ce Binary files differnew file mode 100644 index 0000000000..97aedbad18 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/fb263a744a6d40e183e84ec8a81ca13859c8b5ce diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fb324303c6d5819d6f353f78d087e29adba51836 b/test/core/end2end/fuzzers/api_fuzzer_corpus/fb324303c6d5819d6f353f78d087e29adba51836 Binary files differnew file mode 100644 index 0000000000..0316705e5c --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/fb324303c6d5819d6f353f78d087e29adba51836 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fbc7dd3fbb6abc462ab0493bfe3a8505f12fe4a5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/fbc7dd3fbb6abc462ab0493bfe3a8505f12fe4a5 Binary files differnew file mode 100644 index 0000000000..e2bb451101 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/fbc7dd3fbb6abc462ab0493bfe3a8505f12fe4a5 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/fcc42c56cb8847716474703b5a650f41dce98b38 b/test/core/end2end/fuzzers/api_fuzzer_corpus/fcc42c56cb8847716474703b5a650f41dce98b38 Binary files differnew file mode 100644 index 0000000000..095375a96d --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/fcc42c56cb8847716474703b5a650f41dce98b38 diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ff7f9df969df7fe6c9c1515528404b55f9d237b6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ff7f9df969df7fe6c9c1515528404b55f9d237b6 Binary files differnew file mode 100644 index 0000000000..ca8dccd65e --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ff7f9df969df7fe6c9c1515528404b55f9d237b6 diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/2c452818a10ddef09b90c89a53db14b9b56b21f3 b/test/core/end2end/fuzzers/client_fuzzer_corpus/2c452818a10ddef09b90c89a53db14b9b56b21f3 Binary files differnew file mode 100644 index 0000000000..059634fda1 --- /dev/null +++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/2c452818a10ddef09b90c89a53db14b9b56b21f3 diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/42ead79c94eccdf8a8c3d8036be73e14fa260dd5 b/test/core/end2end/fuzzers/client_fuzzer_corpus/42ead79c94eccdf8a8c3d8036be73e14fa260dd5 Binary files differnew file mode 100644 index 0000000000..b9c53b26ed --- /dev/null +++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/42ead79c94eccdf8a8c3d8036be73e14fa260dd5 diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/4e05d6cf1c3f0c04f6ee92d09a53ee0fe35c085a b/test/core/end2end/fuzzers/client_fuzzer_corpus/4e05d6cf1c3f0c04f6ee92d09a53ee0fe35c085a Binary files differnew file mode 100644 index 0000000000..8a4a279998 --- /dev/null +++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/4e05d6cf1c3f0c04f6ee92d09a53ee0fe35c085a diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/8f980dd25f1c77e3536131c2c620aa32e8c13180 b/test/core/end2end/fuzzers/client_fuzzer_corpus/8f980dd25f1c77e3536131c2c620aa32e8c13180 Binary files differnew file mode 100644 index 0000000000..fcebab7a64 --- /dev/null +++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/8f980dd25f1c77e3536131c2c620aa32e8c13180 diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/aef36c49d7dec0dcf8cdc224d9e9221fa2cb1db0 b/test/core/end2end/fuzzers/client_fuzzer_corpus/aef36c49d7dec0dcf8cdc224d9e9221fa2cb1db0 Binary files differnew file mode 100644 index 0000000000..6b015fe66e --- /dev/null +++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/aef36c49d7dec0dcf8cdc224d9e9221fa2cb1db0 diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-14ed70cd9ea7987cdd0c8f6e39398ee7c60ee2ff b/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-14ed70cd9ea7987cdd0c8f6e39398ee7c60ee2ff Binary files differnew file mode 100644 index 0000000000..be6366049d --- /dev/null +++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/crash-14ed70cd9ea7987cdd0c8f6e39398ee7c60ee2ff diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/dcb06a6e34cbed15515e5b3581ca666f704777bd b/test/core/end2end/fuzzers/client_fuzzer_corpus/dcb06a6e34cbed15515e5b3581ca666f704777bd Binary files differnew file mode 100644 index 0000000000..92750f94a3 --- /dev/null +++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/dcb06a6e34cbed15515e5b3581ca666f704777bd diff --git a/test/core/end2end/fuzzers/client_fuzzer_corpus/ea46b684f1e67a27c231f2d536c41da631189b9c b/test/core/end2end/fuzzers/client_fuzzer_corpus/ea46b684f1e67a27c231f2d536c41da631189b9c Binary files differnew file mode 100644 index 0000000000..c891d9adc8 --- /dev/null +++ b/test/core/end2end/fuzzers/client_fuzzer_corpus/ea46b684f1e67a27c231f2d536c41da631189b9c diff --git a/test/core/end2end/gen_build_yaml.py b/test/core/end2end/gen_build_yaml.py index 3d3bec1a69..6d3d8f8d3c 100755 --- a/test/core/end2end/gen_build_yaml.py +++ b/test/core/end2end/gen_build_yaml.py @@ -89,13 +89,12 @@ END2END_TESTS = { 'binary_metadata': default_test_options, 'call_creds': default_test_options._replace(secure=True), 'cancel_after_accept': default_test_options._replace(cpu_cost=LOWCPU), - 'cancel_after_client_done': default_test_options._replace(cpu_cost=LOWCPU), + 'cancel_after_client_done': default_test_options, 'cancel_after_invoke': default_test_options._replace(cpu_cost=LOWCPU), 'cancel_before_invoke': default_test_options._replace(cpu_cost=LOWCPU), 'cancel_in_a_vacuum': default_test_options._replace(cpu_cost=LOWCPU), 'cancel_with_status': default_test_options._replace(cpu_cost=LOWCPU), - 'compressed_payload': default_test_options._replace(proxyable=False, - cpu_cost=LOWCPU), + 'compressed_payload': default_test_options._replace(proxyable=False), 'connectivity': connectivity_test_options._replace(proxyable=False, cpu_cost=LOWCPU), 'default_host': default_test_options._replace(needs_fullstack=True, @@ -111,22 +110,23 @@ END2END_TESTS = { 'invoke_large_request': default_test_options, 'large_metadata': default_test_options, 'max_concurrent_streams': default_test_options._replace(proxyable=False), - 'max_message_length': default_test_options._replace(cpu_cost=LOWCPU), + 'max_message_length': default_test_options, 'negative_deadline': default_test_options, 'no_op': default_test_options, - 'payload': default_test_options._replace(cpu_cost=LOWCPU), + 'payload': default_test_options, 'ping_pong_streaming': default_test_options, 'ping': connectivity_test_options._replace(proxyable=False), 'registered_call': default_test_options, - 'request_with_flags': default_test_options._replace(proxyable=False), + 'request_with_flags': default_test_options._replace( + proxyable=False, cpu_cost=LOWCPU), 'request_with_payload': default_test_options, 'server_finishes_request': default_test_options, 'shutdown_finishes_calls': default_test_options, 'shutdown_finishes_tags': default_test_options, - 'simple_delayed_request': connectivity_test_options._replace( - cpu_cost=LOWCPU), + 'simple_delayed_request': connectivity_test_options, 'simple_metadata': default_test_options, 'simple_request': default_test_options, + 'streaming_error_response': default_test_options, 'trailing_metadata': default_test_options, } diff --git a/test/core/end2end/goaway_server_test.c b/test/core/end2end/goaway_server_test.c index 3266793137..67cc24c74c 100644 --- a/test/core/end2end/goaway_server_test.c +++ b/test/core/end2end/goaway_server_test.c @@ -46,8 +46,9 @@ static void *tag(intptr_t i) { return (void *)i; } static gpr_mu g_mu; static int g_resolve_port = -1; -static grpc_resolved_addresses *(*iomgr_resolve_address)( - const char *name, const char *default_port); +static grpc_error *(*iomgr_resolve_address)(const char *name, + const char *default_port, + grpc_resolved_addresses **addrs); static void set_resolve_port(int port) { gpr_mu_lock(&g_mu); @@ -55,28 +56,28 @@ static void set_resolve_port(int port) { gpr_mu_unlock(&g_mu); } -static grpc_resolved_addresses *my_resolve_address(const char *name, - const char *addr) { +static grpc_error *my_resolve_address(const char *name, const char *addr, + grpc_resolved_addresses **addrs) { if (0 != strcmp(name, "test")) { - return iomgr_resolve_address(name, addr); + return iomgr_resolve_address(name, addr, addrs); } gpr_mu_lock(&g_mu); if (g_resolve_port < 0) { gpr_mu_unlock(&g_mu); - return NULL; + return GRPC_ERROR_CREATE("Forced Failure"); } else { - grpc_resolved_addresses *addrs = gpr_malloc(sizeof(*addrs)); - addrs->naddrs = 1; - addrs->addrs = gpr_malloc(sizeof(*addrs->addrs)); - memset(addrs->addrs, 0, sizeof(*addrs->addrs)); - struct sockaddr_in *sa = (struct sockaddr_in *)addrs->addrs[0].addr; + *addrs = gpr_malloc(sizeof(**addrs)); + (*addrs)->naddrs = 1; + (*addrs)->addrs = gpr_malloc(sizeof(*(*addrs)->addrs)); + memset((*addrs)->addrs, 0, sizeof(*(*addrs)->addrs)); + struct sockaddr_in *sa = (struct sockaddr_in *)(*addrs)->addrs[0].addr; sa->sin_family = AF_INET; sa->sin_addr.s_addr = htonl(0x7f000001); sa->sin_port = htons((uint16_t)g_resolve_port); - addrs->addrs[0].len = sizeof(*sa); + (*addrs)->addrs[0].len = sizeof(*sa); gpr_mu_unlock(&g_mu); - return addrs; + return GRPC_ERROR_NONE; } } diff --git a/test/core/end2end/tests/filter_causes_close.c b/test/core/end2end/tests/filter_causes_close.c index e6edb213cc..526c05ca3e 100644 --- a/test/core/end2end/tests/filter_causes_close.c +++ b/test/core/end2end/tests/filter_causes_close.c @@ -176,7 +176,7 @@ static void test_request(grpc_end2end_test_config config) { cq_verify(cqv); GPR_ASSERT(status == GRPC_STATUS_PERMISSION_DENIED); - GPR_ASSERT(0 == strcmp(details, "Random failure that's not preventable.")); + GPR_ASSERT(0 == strcmp(details, "Failure that's not preventable.")); gpr_free(details); grpc_metadata_array_destroy(&initial_metadata_recv); @@ -203,20 +203,23 @@ typedef struct { grpc_closure *recv_im_ready; } call_data; typedef struct { uint8_t unused; } channel_data; -static void recv_im_ready(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void recv_im_ready(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { grpc_call_element *elem = arg; call_data *calld = elem->call_data; - if (success) { + if (error == GRPC_ERROR_NONE) { // close the stream with an error. gpr_slice message = - gpr_slice_from_copied_string("Random failure that's not preventable."); + gpr_slice_from_copied_string("Failure that's not preventable."); grpc_transport_stream_op op; memset(&op, 0, sizeof(op)); grpc_transport_stream_op_add_close(&op, GRPC_STATUS_PERMISSION_DENIED, &message); grpc_call_next_op(exec_ctx, elem, &op); } - calld->recv_im_ready->cb(exec_ctx, calld->recv_im_ready->cb_arg, false); + grpc_exec_ctx_sched( + exec_ctx, calld->recv_im_ready, + GRPC_ERROR_CREATE_REFERENCING("Forced call to close", &error, 1), NULL); } static void start_transport_stream_op(grpc_exec_ctx *exec_ctx, diff --git a/test/core/end2end/tests/hpack_size.c b/test/core/end2end/tests/hpack_size.c index ee889b77a1..7ff0461f5f 100644 --- a/test/core/end2end/tests/hpack_size.c +++ b/test/core/end2end/tests/hpack_size.c @@ -49,187 +49,142 @@ static void *tag(intptr_t t) { return (void *)t; } -const char *hobbits[][2] = {{"Adaldrida", "Brandybuck"}, - {"Adamanta", "Took"}, - {"Adalgrim", "Took"}, - {"Adelard", "Took"}, - {"Amaranth", "Brandybuck"}, - {"Andwise", "Roper"}, - {"Angelica", "Baggins"}, - {"Asphodel", "Burrows"}, - {"Balbo", "Baggins"}, - {"Bandobras", "Took"}, - {"Belba", "Bolger"}, - {"Bell", "Gamgee"}, - {"Belladonna", "Baggins"}, - {"Berylla", "Baggins"}, - {"Bilbo", "Baggins"}, - {"Bilbo", "Gardner"}, - {"Bill", "Butcher"}, - {"Bingo", "Baggins"}, - {"Bodo", "Proudfoot"}, - {"Bowman", "Cotton"}, - {"Bungo", "Baggins"}, - {"Camellia", "Sackville"}, - {"Carl", "Cotton"}, - {"Celandine", "Brandybuck"}, - {"Chica", "Baggins"}, - {"Daddy", "Twofoot"}, - {"Daisy", "Boffin"}, - {"Diamond", "Took"}, - {"Dinodas", "Brandybuck"}, - {"Doderic", "Brandybuck"}, - {"Dodinas", "Brandybuck"}, - {"Donnamira", "Boffin"}, - {"Dora", "Baggins"}, - {"Drogo", "Baggins"}, - {"Dudo", "Baggins"}, - {"Eglantine", "Took"}, - {"Elanor", "Fairbairn"}, - {"Elfstan", "Fairbairn"}, - {"Esmeralda", "Brandybuck"}, - {"Estella", "Brandybuck"}, - {"Everard", "Took"}, - {"Falco", "Chubb-Baggins"}, - {"Faramir", "Took"}, - {"Farmer", "Maggot"}, - {"Fastolph", "Bolger"}, - {"Ferdibrand", "Took"}, - {"Ferdinand", "Took"}, - {"Ferumbras", "Took"}, - {"Ferumbras", "Took"}, - {"Filibert", "Bolger"}, - {"Firiel", "Fairbairn"}, - {"Flambard", "Took"}, - {"Folco", "Boffin"}, - {"Fortinbras", "Took"}, - {"Fortinbras", "Took"}, - {"Fosco", "Baggins"}, - {"Fredegar", "Bolger"}, - {"Frodo", "Baggins"}, - {"Frodo", "Gardner"}, - {"Gerontius", "Took"}, - {"Gilly", "Baggins"}, - {"Goldilocks", "Took"}, - {"Gorbadoc", "Brandybuck"}, - {"Gorbulas", "Brandybuck"}, - {"Gorhendad", "Brandybuck"}, - {"Gormadoc", "Brandybuck"}, - {"Griffo", "Boffin"}, - {"Halfast", "Gamgee"}, - {"Halfred", "Gamgee"}, - {"Halfred", "Greenhand"}, - {"Hanna", "Brandybuck"}, - {"Hamfast", "Gamgee"}, - {"Hamfast", "Gardner"}, - {"Hamson", "Gamgee"}, - {"Harding", "Gardner"}, - {"Hilda", "Brandybuck"}, - {"Hildibrand", "Took"}, - {"Hildifons", "Took"}, - {"Hildigard", "Took"}, - {"Hildigrim", "Took"}, - {"Hob", "Gammidge"}, - {"Hob", "Hayward"}, - {"Hobson", "Gamgee"}, - {"Holfast", "Gardner"}, - {"Holman", "Cotton"}, - {"Holman", "Greenhand"}, - {"Hugo", "Boffin"}, - {"Hugo", "Bracegirdle"}, - {"Ilberic", "Brandybuck"}, - {"Isembard", "Took"}, - {"Isembold", "Took"}, - {"Isengar", "Took"}, - {"Isengrim", "Took"}, - {"Isengrim", "Took"}, - {"Isumbras", "Took"}, - {"Isumbras", "Took"}, - {"Jolly", "Cotton"}, - {"Lalia", "Took"}, - {"Largo", "Baggins"}, - {"Laura", "Baggins"}, - {"Lily", "Goodbody"}, - {"Lily", "Cotton"}, - {"Linda", "Proudfoot"}, - {"Lobelia", "Sackville-Baggins"}, - {"Longo", "Baggins"}, - {"Lotho", "Sackville-Baggins"}, - {"Madoc", "Brandybuck"}, - {"Malva", "Brandybuck"}, - {"Marigold", "Cotton"}, - {"Marmadas", "Brandybuck"}, - {"Marmadoc", "Brandybuck"}, - {"Marroc", "Brandybuck"}, - {"May", "Gamgee"}, - {"Melilot", "Brandybuck"}, - {"Menegilda", "Brandybuck"}, - {"Mentha", "Brandybuck"}, - {"Meriadoc", "Brandybuck"}, - {"Merimac", "Brandybuck"}, - {"Merimas", "Brandybuck"}, - {"Merry", "Gardner"}, - {"Milo", "Burrows"}, - {"Mimosa", "Baggins"}, - {"Minto", "Burrows"}, - {"Mirabella", "Brandybuck"}, - {"Moro", "Burrows"}, - {"Mosco", "Burrows"}, - {"Mungo", "Baggins"}, - {"Myrtle", "Burrows"}, - {"Odo", "Proudfoot"}, - {"Odovacar", "Bolger"}, - {"Olo", "Proudfoot"}, - {"Orgulas", "Brandybuck"}, - {"Otho", "Sackville-Baggins"}, - {"Paladin", "Took"}, - {"Pansy", "Bolger"}, - {"Pearl", "Took"}, - {"Peony", "Burrows"}, - {"Peregrin", "Took"}, - {"Pervinca", "Took"}, - {"Pimpernel", "Took"}, - {"Pippin", "Gardner"}, - {"Polo", "Baggins"}, - {"Ponto", "Baggins"}, - {"Porto", "Baggins"}, - {"Posco", "Baggins"}, - {"Poppy", "Bolger"}, - {"Primrose", "Gardner"}, - {"Primula", "Baggins"}, - {"Prisca", "Bolger"}, - {"Reginard", "Took"}, - {"Robin", "Smallburrow"}, - {"Robin", "Gardner"}, - {"Rorimac", "Brandybuck"}, - {"Rosa", "Took"}, - {"Rosamunda", "Bolger"}, - {"Rose", "Gardner"}, - {"Ruby", "Baggins"}, - {"Ruby", "Gardner"}, - {"Rudigar", "Bolger"}, - {"Rufus", "Burrows"}, - {"Sadoc", "Brandybuck"}, - {"Salvia", "Bolger"}, - {"Samwise", "Gamgee"}, - {"Sancho", "Proudfoot"}, - {"Saradas", "Brandybuck"}, - {"Saradoc", "Brandybuck"}, - {"Seredic", "Brandybuck"}, - {"Sigismond", "Took"}, - {"Smeagol", "Gollum"}, - {"Tanta", "Baggins"}, - {"Ted", "Sandyman"}, - {"Tobold", "Hornblower"}, - {"Togo", "Goodbody"}, - {"Tolman", "Cotton"}, - {"Tolman", "Gardner"}, - {"Widow", "Rumble"}, - {"Wilcome", "Cotton"}, - {"Wilcome", "Cotton"}, - {"Wilibald", "Bolger"}, - {"Will", "Whitfoot"}, - {"Wiseman", "Gamwich"}}; +const char *hobbits[][2] = { + {"Adaldrida", "Brandybuck"}, {"Adamanta", "Took"}, + {"Adalgrim", "Took"}, {"Adelard", "Took"}, + {"Amaranth", "Brandybuck"}, {"Andwise", "Roper"}, + {"Angelica", "Baggins"}, {"Asphodel", "Burrows"}, + {"Balbo", "Baggins"}, {"Bandobras", "Took"}, + {"Belba", "Bolger"}, {"Bell", "Gamgee"}, + {"Belladonna", "Baggins"}, {"Berylla", "Baggins"}, + {"Bilbo", "Baggins"}, {"Bilbo", "Gardner"}, + {"Bill", "Butcher"}, {"Bingo", "Baggins"}, + {"Bodo", "Proudfoot"}, {"Bowman", "Cotton"}, + {"Bungo", "Baggins"}, {"Camellia", "Sackville"}, + {"Carl", "Cotton"}, {"Celandine", "Brandybuck"}, + {"Chica", "Baggins"}, {"Daddy", "Twofoot"}, + {"Daisy", "Boffin"}, {"Diamond", "Took"}, + {"Dinodas", "Brandybuck"}, {"Doderic", "Brandybuck"}, + {"Dodinas", "Brandybuck"}, {"Donnamira", "Boffin"}, + {"Dora", "Baggins"}, {"Drogo", "Baggins"}, + {"Dudo", "Baggins"}, {"Eglantine", "Took"}, + {"Elanor", "Fairbairn"}, {"Elfstan", "Fairbairn"}, + {"Esmeralda", "Brandybuck"}, {"Estella", "Brandybuck"}, + {"Everard", "Took"}, {"Falco", "Chubb-Baggins"}, + {"Faramir", "Took"}, {"Farmer", "Maggot"}, + {"Fastolph", "Bolger"}, {"Ferdibrand", "Took"}, + {"Ferdinand", "Took"}, {"Ferumbras", "Took"}, + {"Ferumbras", "Took"}, {"Filibert", "Bolger"}, + {"Firiel", "Fairbairn"}, {"Flambard", "Took"}, + {"Folco", "Boffin"}, {"Fortinbras", "Took"}, + {"Fortinbras", "Took"}, {"Fosco", "Baggins"}, + {"Fredegar", "Bolger"}, {"Frodo", "Baggins"}, + {"Frodo", "Gardner"}, {"Gerontius", "Took"}, + {"Gilly", "Baggins"}, {"Goldilocks", "Took"}, + {"Gorbadoc", "Brandybuck"}, {"Gorbulas", "Brandybuck"}, + {"Gorhendad", "Brandybuck"}, {"Gormadoc", "Brandybuck"}, + {"Griffo", "Boffin"}, {"Halfast", "Gamgee"}, + {"Halfred", "Gamgee"}, {"Halfred", "Greenhand"}, + {"Hanna", "Brandybuck"}, {"Hamfast", "Gamgee"}, + {"Hamfast", "Gardner"}, {"Hamson", "Gamgee"}, + {"Harding", "Gardner"}, {"Hilda", "Brandybuck"}, + {"Hildibrand", "Took"}, {"Hildifons", "Took"}, + {"Hildigard", "Took"}, {"Hildigrim", "Took"}, + {"Hob", "Gammidge"}, {"Hob", "Hayward"}, + {"Hobson", "Gamgee"}, {"Holfast", "Gardner"}, + {"Holman", "Cotton"}, {"Holman", "Greenhand"}, + {"Hugo", "Boffin"}, {"Hugo", "Bracegirdle"}, + {"Ilberic", "Brandybuck"}, {"Isembard", "Took"}, + {"Isembold", "Took"}, {"Isengar", "Took"}, + {"Isengrim", "Took"}, {"Isengrim", "Took"}, + {"Isumbras", "Took"}, {"Isumbras", "Took"}, + {"Jolly", "Cotton"}, + /* + {"Lalia", "Took"}, + {"Largo", "Baggins"}, + {"Laura", "Baggins"}, + {"Lily", "Goodbody"}, + {"Lily", "Cotton"}, + {"Linda", "Proudfoot"}, + {"Lobelia", "Sackville-Baggins"}, + {"Longo", "Baggins"}, + {"Lotho", "Sackville-Baggins"}, + {"Madoc", "Brandybuck"}, + {"Malva", "Brandybuck"}, + {"Marigold", "Cotton"}, + {"Marmadas", "Brandybuck"}, + {"Marmadoc", "Brandybuck"}, + {"Marroc", "Brandybuck"}, + {"May", "Gamgee"}, + {"Melilot", "Brandybuck"}, + {"Menegilda", "Brandybuck"}, + {"Mentha", "Brandybuck"}, + {"Meriadoc", "Brandybuck"}, + {"Merimac", "Brandybuck"}, + {"Merimas", "Brandybuck"}, + {"Merry", "Gardner"}, + {"Milo", "Burrows"}, + {"Mimosa", "Baggins"}, + {"Minto", "Burrows"}, + {"Mirabella", "Brandybuck"}, + {"Moro", "Burrows"}, + {"Mosco", "Burrows"}, + {"Mungo", "Baggins"}, + {"Myrtle", "Burrows"}, + {"Odo", "Proudfoot"}, + {"Odovacar", "Bolger"}, + {"Olo", "Proudfoot"}, + {"Orgulas", "Brandybuck"}, + {"Otho", "Sackville-Baggins"}, + {"Paladin", "Took"}, + {"Pansy", "Bolger"}, + {"Pearl", "Took"}, + {"Peony", "Burrows"}, + {"Peregrin", "Took"}, + {"Pervinca", "Took"}, + {"Pimpernel", "Took"}, + {"Pippin", "Gardner"}, + {"Polo", "Baggins"}, + {"Ponto", "Baggins"}, + {"Porto", "Baggins"}, + {"Posco", "Baggins"}, + {"Poppy", "Bolger"}, + {"Primrose", "Gardner"}, + {"Primula", "Baggins"}, + {"Prisca", "Bolger"}, + {"Reginard", "Took"}, + {"Robin", "Smallburrow"}, + {"Robin", "Gardner"}, + {"Rorimac", "Brandybuck"}, + {"Rosa", "Took"}, + {"Rosamunda", "Bolger"}, + {"Rose", "Gardner"}, + {"Ruby", "Baggins"}, + {"Ruby", "Gardner"}, + {"Rudigar", "Bolger"}, + {"Rufus", "Burrows"}, + {"Sadoc", "Brandybuck"}, + {"Salvia", "Bolger"}, + {"Samwise", "Gamgee"}, + {"Sancho", "Proudfoot"}, + {"Saradas", "Brandybuck"}, + {"Saradoc", "Brandybuck"}, + {"Seredic", "Brandybuck"}, + {"Sigismond", "Took"}, + {"Smeagol", "Gollum"}, + {"Tanta", "Baggins"}, + {"Ted", "Sandyman"}, + {"Tobold", "Hornblower"}, + {"Togo", "Goodbody"}, + {"Tolman", "Cotton"}, + {"Tolman", "Gardner"}, + {"Widow", "Rumble"}, + {"Wilcome", "Cotton"}, + {"Wilcome", "Cotton"}, + {"Wilibald", "Bolger"}, + {"Will", "Whitfoot"}, + {"Wiseman", "Gamwich"}*/ +}; const char *dragons[] = {"Ancalagon", "Glaurung", "Scatha", "Smaug the Magnificent"}; diff --git a/test/core/end2end/tests/streaming_error_response.c b/test/core/end2end/tests/streaming_error_response.c new file mode 100644 index 0000000000..e15c132d63 --- /dev/null +++ b/test/core/end2end/tests/streaming_error_response.c @@ -0,0 +1,278 @@ +/* + * + * 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 <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 "test/core/end2end/cq_verifier.h" + +enum { TIMEOUT = 200000 }; + +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, + bool request_status_early) { + grpc_end2end_test_fixture f; + gpr_log(GPR_INFO, "%s/%s/request_status_early=%s", test_name, config.name, + request_status_early ? "true" : "false"); + 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); +} + +/* Client sends a request with payload, server reads then returns status. */ +static void test(grpc_end2end_test_config config, bool request_status_early) { + grpc_call *c; + grpc_call *s; + gpr_slice response_payload1_slice = gpr_slice_from_copied_string("hello"); + grpc_byte_buffer *response_payload1 = + grpc_raw_byte_buffer_create(&response_payload1_slice, 1); + gpr_slice response_payload2_slice = gpr_slice_from_copied_string("world"); + grpc_byte_buffer *response_payload2 = + grpc_raw_byte_buffer_create(&response_payload2_slice, 1); + gpr_timespec deadline = five_seconds_time(); + grpc_end2end_test_fixture f = begin_test(config, "streaming_error_response", + NULL, NULL, request_status_early); + 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 *response_payload1_recv = NULL; + grpc_byte_buffer *response_payload2_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; + + 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++; + op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; + op++; + op->op = GRPC_OP_RECV_INITIAL_METADATA; + op->data.recv_initial_metadata = &initial_metadata_recv; + op++; + op->op = GRPC_OP_RECV_MESSAGE; + op->data.recv_message = &response_payload1_recv; + op++; + if (request_status_early) { + 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++; + } + error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(1), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call( + f.server, &s, &call_details, + &request_metadata_recv, f.cq, f.cq, tag(101))); + 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++; + op->op = GRPC_OP_SEND_MESSAGE; + op->data.send_message = response_payload1; + 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_verify(cqv); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_SEND_MESSAGE; + op->data.send_message = response_payload2; + op++; + error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + cq_expect_completion(cqv, tag(103), 1); + if (!request_status_early) { + cq_expect_completion(cqv, tag(1), 1); + } + cq_verify(cqv); + + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; + op->data.recv_close_on_server.cancelled = &was_cancelled; + 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_FAILED_PRECONDITION; + op->data.send_status_from_server.status_details = "xyz"; + op++; + error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(104), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + if (!request_status_early) { + memset(ops, 0, sizeof(ops)); + op = ops; + op->op = GRPC_OP_RECV_MESSAGE; + op->data.recv_message = &response_payload2_recv; + op++; + error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(2), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + } + + cq_expect_completion(cqv, tag(104), 1); + if (request_status_early) { + cq_expect_completion(cqv, tag(1), 1); + } else { + cq_expect_completion(cqv, tag(2), 1); + } + cq_verify(cqv); + + if (!request_status_early) { + memset(ops, 0, sizeof(ops)); + op = ops; + 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++; + error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(3), NULL); + GPR_ASSERT(GRPC_CALL_OK == error); + + cq_expect_completion(cqv, tag(3), 1); + cq_verify(cqv); + + GPR_ASSERT(response_payload1_recv != NULL); + GPR_ASSERT(response_payload2_recv != NULL); + } + + GPR_ASSERT(status == GRPC_STATUS_FAILED_PRECONDITION); + GPR_ASSERT(0 == strcmp(details, "xyz")); + GPR_ASSERT(0 == strcmp(call_details.method, "/foo")); + GPR_ASSERT(0 == strcmp(call_details.host, "foo.test.google.fr")); + GPR_ASSERT(was_cancelled == 1); + + 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(c); + grpc_call_destroy(s); + + cq_verifier_destroy(cqv); + + grpc_byte_buffer_destroy(response_payload1); + grpc_byte_buffer_destroy(response_payload2); + grpc_byte_buffer_destroy(response_payload1_recv); + grpc_byte_buffer_destroy(response_payload2_recv); + + end_test(&f); + config.tear_down_data(&f); +} + +void streaming_error_response(grpc_end2end_test_config config) { + test(config, false); + test(config, true); +} + +void streaming_error_response_pre_init(void) {} diff --git a/test/core/fling/client.c b/test/core/fling/client.c index 123f2b5bbe..bcc195a92f 100644 --- a/test/core/fling/client.c +++ b/test/core/fling/client.c @@ -177,12 +177,17 @@ int main(int argc, char **argv) { fake_argv[0] = argv[0]; grpc_test_init(1, fake_argv); + int warmup_seconds = 1; + int benchmark_seconds = 5; + cl = gpr_cmdline_create("fling client"); gpr_cmdline_add_int(cl, "payload_size", "Size of the payload to send", &payload_size); gpr_cmdline_add_string(cl, "target", "Target host:port", &target); gpr_cmdline_add_flag(cl, "secure", "Run with security?", &secure); gpr_cmdline_add_string(cl, "scenario", "Scenario", &scenario_name); + gpr_cmdline_add_int(cl, "warmup", "Warmup seconds", &warmup_seconds); + gpr_cmdline_add_int(cl, "benchmark", "Benchmark seconds", &benchmark_seconds); gpr_cmdline_parse(cl, argc, argv); gpr_cmdline_destroy(cl); @@ -206,8 +211,9 @@ int main(int argc, char **argv) { sc.init(); - gpr_timespec end_warmup = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(3); - gpr_timespec end_profiling = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(30); + gpr_timespec end_warmup = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(warmup_seconds); + gpr_timespec end_profiling = + GRPC_TIMEOUT_SECONDS_TO_DEADLINE(warmup_seconds + benchmark_seconds); while (gpr_time_cmp(gpr_now(end_warmup.clock_type), end_warmup) < 0) { sc.do_one_step(); diff --git a/test/core/http/httpcli_test.c b/test/core/http/httpcli_test.c index 6c27ea2651..38b32a3867 100644 --- a/test/core/http/httpcli_test.c +++ b/test/core/http/httpcli_test.c @@ -54,19 +54,20 @@ static gpr_timespec n_seconds_time(int seconds) { return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(seconds); } -static void on_finish(grpc_exec_ctx *exec_ctx, void *arg, - const grpc_httpcli_response *response) { +static void on_finish(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { const char *expect = "<html><head><title>Hello world!</title></head>" "<body><p>This is a test</p></body></html>"; - GPR_ASSERT(arg == (void *)42); + grpc_http_response *response = arg; GPR_ASSERT(response); GPR_ASSERT(response->status == 200); GPR_ASSERT(response->body_length == strlen(expect)); GPR_ASSERT(0 == memcmp(expect, response->body, response->body_length)); gpr_mu_lock(g_mu); g_done = 1; - grpc_pollset_kick(grpc_polling_entity_pollset(&g_pops), NULL); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_kick", + grpc_pollset_kick(grpc_polling_entity_pollset(&g_pops), NULL))); gpr_mu_unlock(g_mu); } @@ -86,19 +87,25 @@ static void test_get(int port) { req.http.path = "/get"; req.handshaker = &grpc_httpcli_plaintext; + grpc_http_response response; + memset(&response, 0, sizeof(response)); grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, &req, n_seconds_time(15), - on_finish, (void *)42); + grpc_closure_create(on_finish, &response), &response); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&g_pops), &worker, - gpr_now(GPR_CLOCK_MONOTONIC), n_seconds_time(20)); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&g_pops), + &worker, gpr_now(GPR_CLOCK_MONOTONIC), + n_seconds_time(20)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); } gpr_mu_unlock(g_mu); gpr_free(host); + grpc_http_response_destroy(&response); } static void test_post(int port) { @@ -117,22 +124,29 @@ static void test_post(int port) { req.http.path = "/post"; req.handshaker = &grpc_httpcli_plaintext; + grpc_http_response response; + memset(&response, 0, sizeof(response)); grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, &req, "hello", 5, - n_seconds_time(15), on_finish, (void *)42); + n_seconds_time(15), + grpc_closure_create(on_finish, &response), &response); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&g_pops), &worker, - gpr_now(GPR_CLOCK_MONOTONIC), n_seconds_time(20)); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&g_pops), + &worker, gpr_now(GPR_CLOCK_MONOTONIC), + n_seconds_time(20)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); } gpr_mu_unlock(g_mu); gpr_free(host); + grpc_http_response_destroy(&response); } -static void destroy_pops(grpc_exec_ctx *exec_ctx, void *p, bool success) { +static void destroy_pops(grpc_exec_ctx *exec_ctx, void *p, grpc_error *error) { grpc_pollset_destroy(grpc_polling_entity_pollset(p)); } diff --git a/test/core/http/httpscli_test.c b/test/core/http/httpscli_test.c index 1b0bc60048..359e557689 100644 --- a/test/core/http/httpscli_test.c +++ b/test/core/http/httpscli_test.c @@ -54,19 +54,20 @@ static gpr_timespec n_seconds_time(int seconds) { return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(seconds); } -static void on_finish(grpc_exec_ctx *exec_ctx, void *arg, - const grpc_httpcli_response *response) { +static void on_finish(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { const char *expect = "<html><head><title>Hello world!</title></head>" "<body><p>This is a test</p></body></html>"; - GPR_ASSERT(arg == (void *)42); + grpc_http_response *response = arg; GPR_ASSERT(response); GPR_ASSERT(response->status == 200); GPR_ASSERT(response->body_length == strlen(expect)); GPR_ASSERT(0 == memcmp(expect, response->body, response->body_length)); gpr_mu_lock(g_mu); g_done = 1; - grpc_pollset_kick(grpc_polling_entity_pollset(&g_pops), NULL); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_kick", + grpc_pollset_kick(grpc_polling_entity_pollset(&g_pops), NULL))); gpr_mu_unlock(g_mu); } @@ -87,19 +88,25 @@ static void test_get(int port) { req.http.path = "/get"; req.handshaker = &grpc_httpcli_ssl; + grpc_http_response response; + memset(&response, 0, sizeof(response)); grpc_httpcli_get(&exec_ctx, &g_context, &g_pops, &req, n_seconds_time(15), - on_finish, (void *)42); + grpc_closure_create(on_finish, &response), &response); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&g_pops), &worker, - gpr_now(GPR_CLOCK_MONOTONIC), n_seconds_time(20)); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&g_pops), + &worker, gpr_now(GPR_CLOCK_MONOTONIC), + n_seconds_time(20)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); } gpr_mu_unlock(g_mu); gpr_free(host); + grpc_http_response_destroy(&response); } static void test_post(int port) { @@ -119,22 +126,29 @@ static void test_post(int port) { req.http.path = "/post"; req.handshaker = &grpc_httpcli_ssl; + grpc_http_response response; + memset(&response, 0, sizeof(response)); grpc_httpcli_post(&exec_ctx, &g_context, &g_pops, &req, "hello", 5, - n_seconds_time(15), on_finish, (void *)42); + n_seconds_time(15), + grpc_closure_create(on_finish, &response), &response); gpr_mu_lock(g_mu); while (!g_done) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&g_pops), &worker, - gpr_now(GPR_CLOCK_MONOTONIC), n_seconds_time(20)); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&g_pops), + &worker, gpr_now(GPR_CLOCK_MONOTONIC), + n_seconds_time(20)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); } gpr_mu_unlock(g_mu); gpr_free(host); + grpc_http_response_destroy(&response); } -static void destroy_pops(grpc_exec_ctx *exec_ctx, void *p, bool success) { +static void destroy_pops(grpc_exec_ctx *exec_ctx, void *p, grpc_error *error) { grpc_pollset_destroy(grpc_polling_entity_pollset(p)); } diff --git a/test/core/http/parser_test.c b/test/core/http/parser_test.c index 7fdf60cc2b..d645d2879c 100644 --- a/test/core/http/parser_test.c +++ b/test/core/http/parser_test.c @@ -44,38 +44,39 @@ #include "test/core/util/test_config.h" static void test_request_succeeds(grpc_slice_split_mode split_mode, - char *request, char *expect_method, + char *request_text, char *expect_method, grpc_http_version expect_version, char *expect_path, char *expect_body, ...) { grpc_http_parser parser; - gpr_slice input_slice = gpr_slice_from_copied_string(request); + gpr_slice input_slice = gpr_slice_from_copied_string(request_text); size_t num_slices; size_t i; gpr_slice *slices; va_list args; + grpc_http_request request; + memset(&request, 0, sizeof(request)); grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices); gpr_slice_unref(input_slice); - grpc_http_parser_init(&parser); + grpc_http_parser_init(&parser, GRPC_HTTP_REQUEST, &request); for (i = 0; i < num_slices; i++) { - GPR_ASSERT(grpc_http_parser_parse(&parser, slices[i])); + GPR_ASSERT(grpc_http_parser_parse(&parser, slices[i]) == GRPC_ERROR_NONE); gpr_slice_unref(slices[i]); } - GPR_ASSERT(grpc_http_parser_eof(&parser)); + GPR_ASSERT(grpc_http_parser_eof(&parser) == GRPC_ERROR_NONE); GPR_ASSERT(GRPC_HTTP_REQUEST == parser.type); - GPR_ASSERT(0 == strcmp(expect_method, parser.http.request.method)); - GPR_ASSERT(0 == strcmp(expect_path, parser.http.request.path)); - GPR_ASSERT(expect_version == parser.http.request.version); + GPR_ASSERT(0 == strcmp(expect_method, request.method)); + GPR_ASSERT(0 == strcmp(expect_path, request.path)); + GPR_ASSERT(expect_version == request.version); if (expect_body != NULL) { - GPR_ASSERT(strlen(expect_body) == parser.http.request.body_length); - GPR_ASSERT(0 == memcmp(expect_body, parser.http.request.body, - parser.http.request.body_length)); + GPR_ASSERT(strlen(expect_body) == request.body_length); + GPR_ASSERT(0 == memcmp(expect_body, request.body, request.body_length)); } else { - GPR_ASSERT(parser.http.request.body_length == 0); + GPR_ASSERT(request.body_length == 0); } va_start(args, expect_body); @@ -85,48 +86,50 @@ static void test_request_succeeds(grpc_slice_split_mode split_mode, char *expect_value; expect_key = va_arg(args, char *); if (!expect_key) break; - GPR_ASSERT(i < parser.http.request.hdr_count); + GPR_ASSERT(i < request.hdr_count); expect_value = va_arg(args, char *); GPR_ASSERT(expect_value); - GPR_ASSERT(0 == strcmp(expect_key, parser.http.request.hdrs[i].key)); - GPR_ASSERT(0 == strcmp(expect_value, parser.http.request.hdrs[i].value)); + GPR_ASSERT(0 == strcmp(expect_key, request.hdrs[i].key)); + GPR_ASSERT(0 == strcmp(expect_value, request.hdrs[i].value)); i++; } va_end(args); - GPR_ASSERT(i == parser.http.request.hdr_count); + GPR_ASSERT(i == request.hdr_count); + grpc_http_request_destroy(&request); grpc_http_parser_destroy(&parser); gpr_free(slices); } -static void test_succeeds(grpc_slice_split_mode split_mode, char *response, +static void test_succeeds(grpc_slice_split_mode split_mode, char *response_text, int expect_status, char *expect_body, ...) { grpc_http_parser parser; - gpr_slice input_slice = gpr_slice_from_copied_string(response); + gpr_slice input_slice = gpr_slice_from_copied_string(response_text); size_t num_slices; size_t i; gpr_slice *slices; va_list args; + grpc_http_response response; + memset(&response, 0, sizeof(response)); grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices); gpr_slice_unref(input_slice); - grpc_http_parser_init(&parser); + grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response); for (i = 0; i < num_slices; i++) { - GPR_ASSERT(grpc_http_parser_parse(&parser, slices[i])); + GPR_ASSERT(grpc_http_parser_parse(&parser, slices[i]) == GRPC_ERROR_NONE); gpr_slice_unref(slices[i]); } - GPR_ASSERT(grpc_http_parser_eof(&parser)); + GPR_ASSERT(grpc_http_parser_eof(&parser) == GRPC_ERROR_NONE); GPR_ASSERT(GRPC_HTTP_RESPONSE == parser.type); - GPR_ASSERT(expect_status == parser.http.response.status); + GPR_ASSERT(expect_status == response.status); if (expect_body != NULL) { - GPR_ASSERT(strlen(expect_body) == parser.http.response.body_length); - GPR_ASSERT(0 == memcmp(expect_body, parser.http.response.body, - parser.http.response.body_length)); + GPR_ASSERT(strlen(expect_body) == response.body_length); + GPR_ASSERT(0 == memcmp(expect_body, response.body, response.body_length)); } else { - GPR_ASSERT(parser.http.response.body_length == 0); + GPR_ASSERT(response.body_length == 0); } va_start(args, expect_body); @@ -136,77 +139,84 @@ static void test_succeeds(grpc_slice_split_mode split_mode, char *response, char *expect_value; expect_key = va_arg(args, char *); if (!expect_key) break; - GPR_ASSERT(i < parser.http.response.hdr_count); + GPR_ASSERT(i < response.hdr_count); expect_value = va_arg(args, char *); GPR_ASSERT(expect_value); - GPR_ASSERT(0 == strcmp(expect_key, parser.http.response.hdrs[i].key)); - GPR_ASSERT(0 == strcmp(expect_value, parser.http.response.hdrs[i].value)); + GPR_ASSERT(0 == strcmp(expect_key, response.hdrs[i].key)); + GPR_ASSERT(0 == strcmp(expect_value, response.hdrs[i].value)); i++; } va_end(args); - GPR_ASSERT(i == parser.http.response.hdr_count); + GPR_ASSERT(i == response.hdr_count); + grpc_http_response_destroy(&response); grpc_http_parser_destroy(&parser); gpr_free(slices); } -static void test_fails(grpc_slice_split_mode split_mode, char *response) { +static void test_fails(grpc_slice_split_mode split_mode, char *response_text) { grpc_http_parser parser; - gpr_slice input_slice = gpr_slice_from_copied_string(response); + gpr_slice input_slice = gpr_slice_from_copied_string(response_text); size_t num_slices; size_t i; gpr_slice *slices; - int done = 0; + grpc_error *error = GRPC_ERROR_NONE; + grpc_http_response response; + memset(&response, 0, sizeof(response)); grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices); gpr_slice_unref(input_slice); - grpc_http_parser_init(&parser); + grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response); for (i = 0; i < num_slices; i++) { - if (!done && !grpc_http_parser_parse(&parser, slices[i])) { - done = 1; + if (GRPC_ERROR_NONE == error) { + error = grpc_http_parser_parse(&parser, slices[i]); } gpr_slice_unref(slices[i]); } - if (!done && !grpc_http_parser_eof(&parser)) { - done = 1; + if (GRPC_ERROR_NONE == error) { + error = grpc_http_parser_eof(&parser); } - GPR_ASSERT(done); + GPR_ASSERT(error != GRPC_ERROR_NONE); + GRPC_ERROR_UNREF(error); + grpc_http_response_destroy(&response); grpc_http_parser_destroy(&parser); gpr_free(slices); } -static const uint8_t failed_test1[] = { - 0x9e, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x4a, - 0x48, 0x54, 0x54, 0x30, 0x32, 0x16, 0xa, 0x2f, 0x48, 0x20, - 0x31, 0x2e, 0x31, 0x20, 0x32, 0x30, 0x31, 0x54, 0x54, 0xb9, - 0x32, 0x31, 0x2e, 0x20, 0x32, 0x30, 0x20, -}; - -typedef struct { - const char *name; - const uint8_t *data; - size_t length; -} failed_test; - -#define FAILED_TEST(name) \ - { #name, name, sizeof(name) } - -failed_test failed_tests[] = { - FAILED_TEST(failed_test1), -}; - -static void test_doesnt_crash(failed_test t) { - gpr_log(GPR_DEBUG, "Run previously failed test: %s", t.name); - grpc_http_parser p; - grpc_http_parser_init(&p); - gpr_slice slice = - gpr_slice_from_copied_buffer((const char *)t.data, t.length); - grpc_http_parser_parse(&p, slice); - gpr_slice_unref(slice); - grpc_http_parser_destroy(&p); +static void test_request_fails(grpc_slice_split_mode split_mode, + char *request_text) { + grpc_http_parser parser; + gpr_slice input_slice = gpr_slice_from_copied_string(request_text); + size_t num_slices; + size_t i; + gpr_slice *slices; + grpc_error *error = GRPC_ERROR_NONE; + grpc_http_request request; + memset(&request, 0, sizeof(request)); + + grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices); + gpr_slice_unref(input_slice); + + grpc_http_parser_init(&parser, GRPC_HTTP_REQUEST, &request); + + for (i = 0; i < num_slices; i++) { + if (error == GRPC_ERROR_NONE) { + error = grpc_http_parser_parse(&parser, slices[i]); + } + gpr_slice_unref(slices[i]); + } + if (error == GRPC_ERROR_NONE) { + error = grpc_http_parser_eof(&parser); + } + GPR_ASSERT(error != GRPC_ERROR_NONE); + GRPC_ERROR_UNREF(error); + + grpc_http_request_destroy(&request); + grpc_http_parser_destroy(&parser); + gpr_free(slices); } int main(int argc, char **argv) { @@ -217,10 +227,6 @@ int main(int argc, char **argv) { grpc_test_init(argc, argv); - for (i = 0; i < GPR_ARRAY_SIZE(failed_tests); i++) { - test_doesnt_crash(failed_tests[i]); - } - for (i = 0; i < GPR_ARRAY_SIZE(split_modes); i++) { test_succeeds(split_modes[i], "HTTP/1.0 200 OK\r\n" @@ -286,12 +292,12 @@ int main(int argc, char **argv) { " def\r\n" "\r\n" "hello world!"); - test_fails(split_modes[i], "GET\r\n"); - test_fails(split_modes[i], "GET /\r\n"); - test_fails(split_modes[i], "GET / HTTP/0.0\r\n"); - test_fails(split_modes[i], "GET / ____/1.0\r\n"); - test_fails(split_modes[i], "GET / HTTP/1.2\r\n"); - test_fails(split_modes[i], "GET / HTTP/1.0\n"); + test_request_fails(split_modes[i], "GET\r\n"); + test_request_fails(split_modes[i], "GET /\r\n"); + test_request_fails(split_modes[i], "GET / HTTP/0.0\r\n"); + test_request_fails(split_modes[i], "GET / ____/1.0\r\n"); + test_request_fails(split_modes[i], "GET / HTTP/1.2\r\n"); + test_request_fails(split_modes[i], "GET / HTTP/1.0\n"); tmp1 = gpr_malloc(2 * GRPC_HTTP_PARSER_MAX_HEADER_LENGTH); memset(tmp1, 'a', 2 * GRPC_HTTP_PARSER_MAX_HEADER_LENGTH - 1); diff --git a/test/core/http/corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427 b/test/core/http/request_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427 index 3d6face56a..3d6face56a 100644 --- a/test/core/http/corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427 +++ b/test/core/http/request_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427 diff --git a/test/core/http/corpus/05e613853d64a9669ea3cf41b0de777dc24931ba b/test/core/http/request_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba index 5cbaf2e460..5cbaf2e460 100644 --- a/test/core/http/corpus/05e613853d64a9669ea3cf41b0de777dc24931ba +++ b/test/core/http/request_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba diff --git a/test/core/http/corpus/069352518a1d1baa05f317c677d275cefda2ac97 b/test/core/http/request_corpus/069352518a1d1baa05f317c677d275cefda2ac97 index 8831f0786b..8831f0786b 100644 --- a/test/core/http/corpus/069352518a1d1baa05f317c677d275cefda2ac97 +++ b/test/core/http/request_corpus/069352518a1d1baa05f317c677d275cefda2ac97 diff --git a/test/core/http/corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34 b/test/core/http/request_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34 index 10967d975c..10967d975c 100644 --- a/test/core/http/corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34 +++ b/test/core/http/request_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34 diff --git a/test/core/http/corpus/0c5b7c2569410b526605e308309a7f36574e530d b/test/core/http/request_corpus/0c5b7c2569410b526605e308309a7f36574e530d index c79e456904..c79e456904 100644 --- a/test/core/http/corpus/0c5b7c2569410b526605e308309a7f36574e530d +++ b/test/core/http/request_corpus/0c5b7c2569410b526605e308309a7f36574e530d diff --git a/test/core/http/corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf b/test/core/http/request_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf index 7b979b5e10..7b979b5e10 100644 --- a/test/core/http/corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf +++ b/test/core/http/request_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf diff --git a/test/core/http/corpus/1e1273f90187fdf5df3625764245610f86af6aa4 b/test/core/http/request_corpus/1e1273f90187fdf5df3625764245610f86af6aa4 index 67382b4f3a..67382b4f3a 100644 --- a/test/core/http/corpus/1e1273f90187fdf5df3625764245610f86af6aa4 +++ b/test/core/http/request_corpus/1e1273f90187fdf5df3625764245610f86af6aa4 diff --git a/test/core/http/corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55 b/test/core/http/request_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55 index deb8265a30..deb8265a30 100644 --- a/test/core/http/corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55 +++ b/test/core/http/request_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55 diff --git a/test/core/http/corpus/24756c396bc72894fd720092bb6f9c03e66b469f b/test/core/http/request_corpus/24756c396bc72894fd720092bb6f9c03e66b469f index 9f2e0e4a25..9f2e0e4a25 100644 --- a/test/core/http/corpus/24756c396bc72894fd720092bb6f9c03e66b469f +++ b/test/core/http/request_corpus/24756c396bc72894fd720092bb6f9c03e66b469f diff --git a/test/core/http/corpus/276def41311933421ae7a9ee42e906c85b6a4d3f b/test/core/http/request_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f index 4db04b260a..4db04b260a 100644 --- a/test/core/http/corpus/276def41311933421ae7a9ee42e906c85b6a4d3f +++ b/test/core/http/request_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f diff --git a/test/core/http/corpus/29daa75432381937fd005cb25e314e328de6e9f9 b/test/core/http/request_corpus/29daa75432381937fd005cb25e314e328de6e9f9 index cee70bfe71..cee70bfe71 100644 --- a/test/core/http/corpus/29daa75432381937fd005cb25e314e328de6e9f9 +++ b/test/core/http/request_corpus/29daa75432381937fd005cb25e314e328de6e9f9 diff --git a/test/core/http/corpus/2a75204bc492084ad853682f8de3fb137d5907bc b/test/core/http/request_corpus/2a75204bc492084ad853682f8de3fb137d5907bc index e76b00e34c..e76b00e34c 100644 --- a/test/core/http/corpus/2a75204bc492084ad853682f8de3fb137d5907bc +++ b/test/core/http/request_corpus/2a75204bc492084ad853682f8de3fb137d5907bc diff --git a/test/core/http/corpus/2d34ba249b755a880525cf53c665633a5e359305 b/test/core/http/request_corpus/2d34ba249b755a880525cf53c665633a5e359305 index 7435f52ea5..7435f52ea5 100644 --- a/test/core/http/corpus/2d34ba249b755a880525cf53c665633a5e359305 +++ b/test/core/http/request_corpus/2d34ba249b755a880525cf53c665633a5e359305 diff --git a/test/core/http/corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2 b/test/core/http/request_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2 index cce8ded71a..cce8ded71a 100644 --- a/test/core/http/corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2 +++ b/test/core/http/request_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2 diff --git a/test/core/http/corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b b/test/core/http/request_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b index 57efa3cabc..57efa3cabc 100644 --- a/test/core/http/corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b +++ b/test/core/http/request_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b diff --git a/test/core/http/corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece b/test/core/http/request_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece index 8df43e4dce..8df43e4dce 100644 --- a/test/core/http/corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece +++ b/test/core/http/request_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece diff --git a/test/core/http/corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf b/test/core/http/request_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf index 4efa386f3b..4efa386f3b 100644 --- a/test/core/http/corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf +++ b/test/core/http/request_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf diff --git a/test/core/http/corpus/3953688866ccb3b4f371f1a858570d6afdb6452d b/test/core/http/request_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d index f85f1df035..f85f1df035 100644 --- a/test/core/http/corpus/3953688866ccb3b4f371f1a858570d6afdb6452d +++ b/test/core/http/request_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d diff --git a/test/core/http/corpus/39b19c41ba537f37511eff7727733715db432e76 b/test/core/http/request_corpus/39b19c41ba537f37511eff7727733715db432e76 index fefa4512a8..fefa4512a8 100644 --- a/test/core/http/corpus/39b19c41ba537f37511eff7727733715db432e76 +++ b/test/core/http/request_corpus/39b19c41ba537f37511eff7727733715db432e76 diff --git a/test/core/http/corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac b/test/core/http/request_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac index b967b57614..b967b57614 100644 --- a/test/core/http/corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac +++ b/test/core/http/request_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac diff --git a/test/core/http/corpus/3f03265921120c6ffa61b944e213e062a5538d4b b/test/core/http/request_corpus/3f03265921120c6ffa61b944e213e062a5538d4b index 8af90071c3..8af90071c3 100644 --- a/test/core/http/corpus/3f03265921120c6ffa61b944e213e062a5538d4b +++ b/test/core/http/request_corpus/3f03265921120c6ffa61b944e213e062a5538d4b diff --git a/test/core/http/corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046 b/test/core/http/request_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046 index 7d20266703..7d20266703 100644 --- a/test/core/http/corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046 +++ b/test/core/http/request_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046 diff --git a/test/core/http/corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9 b/test/core/http/request_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9 index 5996b9a75c..5996b9a75c 100644 --- a/test/core/http/corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9 +++ b/test/core/http/request_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9 diff --git a/test/core/http/corpus/487725eb38511c79a9340bf4560a1411061fa6fa b/test/core/http/request_corpus/487725eb38511c79a9340bf4560a1411061fa6fa index c59c4d2246..c59c4d2246 100644 --- a/test/core/http/corpus/487725eb38511c79a9340bf4560a1411061fa6fa +++ b/test/core/http/request_corpus/487725eb38511c79a9340bf4560a1411061fa6fa diff --git a/test/core/http/corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5 b/test/core/http/request_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5 index 8ac7ceb2d5..8ac7ceb2d5 100644 --- a/test/core/http/corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5 +++ b/test/core/http/request_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5 diff --git a/test/core/http/corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55 b/test/core/http/request_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55 index 49d1c8f1d2..49d1c8f1d2 100644 --- a/test/core/http/corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55 +++ b/test/core/http/request_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55 diff --git a/test/core/http/corpus/5028c56a5116a186b7343ff59567b47347a0796d b/test/core/http/request_corpus/5028c56a5116a186b7343ff59567b47347a0796d index 5f2c4dfef0..5f2c4dfef0 100644 --- a/test/core/http/corpus/5028c56a5116a186b7343ff59567b47347a0796d +++ b/test/core/http/request_corpus/5028c56a5116a186b7343ff59567b47347a0796d diff --git a/test/core/http/corpus/533f62b3f495ce704babf3ee8d840f196a714dff b/test/core/http/request_corpus/533f62b3f495ce704babf3ee8d840f196a714dff index 6313cd967a..6313cd967a 100644 --- a/test/core/http/corpus/533f62b3f495ce704babf3ee8d840f196a714dff +++ b/test/core/http/request_corpus/533f62b3f495ce704babf3ee8d840f196a714dff diff --git a/test/core/http/corpus/5892cbb284771fc9761caae37b19cd6e27dbc104 b/test/core/http/request_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104 index fee5512152..fee5512152 100644 --- a/test/core/http/corpus/5892cbb284771fc9761caae37b19cd6e27dbc104 +++ b/test/core/http/request_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104 diff --git a/test/core/http/corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee b/test/core/http/request_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee index bd7e239537..bd7e239537 100644 --- a/test/core/http/corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee +++ b/test/core/http/request_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee diff --git a/test/core/http/corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5 b/test/core/http/request_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5 index 9a15ab025f..9a15ab025f 100644 --- a/test/core/http/corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5 +++ b/test/core/http/request_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5 diff --git a/test/core/http/corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0 b/test/core/http/request_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0 index 480708e033..480708e033 100644 --- a/test/core/http/corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0 +++ b/test/core/http/request_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0 diff --git a/test/core/http/corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e b/test/core/http/request_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e index 0ed0dfadec..0ed0dfadec 100644 --- a/test/core/http/corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e +++ b/test/core/http/request_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e diff --git a/test/core/http/corpus/657368df512ca6294b9df16adf935a3f374a8be2 b/test/core/http/request_corpus/657368df512ca6294b9df16adf935a3f374a8be2 index 1f14f69103..1f14f69103 100644 --- a/test/core/http/corpus/657368df512ca6294b9df16adf935a3f374a8be2 +++ b/test/core/http/request_corpus/657368df512ca6294b9df16adf935a3f374a8be2 diff --git a/test/core/http/corpus/7fc4520094902ce2c760d70eaad5b674d2817337 b/test/core/http/request_corpus/7fc4520094902ce2c760d70eaad5b674d2817337 index 8fc481d92b..8fc481d92b 100644 --- a/test/core/http/corpus/7fc4520094902ce2c760d70eaad5b674d2817337 +++ b/test/core/http/request_corpus/7fc4520094902ce2c760d70eaad5b674d2817337 diff --git a/test/core/http/corpus/81f59a12b458ec3604035cb962165c604d1355e6 b/test/core/http/request_corpus/81f59a12b458ec3604035cb962165c604d1355e6 index d4223ccf81..d4223ccf81 100644 --- a/test/core/http/corpus/81f59a12b458ec3604035cb962165c604d1355e6 +++ b/test/core/http/request_corpus/81f59a12b458ec3604035cb962165c604d1355e6 diff --git a/test/core/http/corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9 b/test/core/http/request_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9 index 99e2c48bbd..99e2c48bbd 100644 --- a/test/core/http/corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9 +++ b/test/core/http/request_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9 diff --git a/test/core/http/corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c b/test/core/http/request_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c index 776253d750..776253d750 100644 --- a/test/core/http/corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c +++ b/test/core/http/request_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c diff --git a/test/core/http/corpus/97e4499d450c95660de86747f527e670f2012548 b/test/core/http/request_corpus/97e4499d450c95660de86747f527e670f2012548 index b1927fbf63..b1927fbf63 100644 --- a/test/core/http/corpus/97e4499d450c95660de86747f527e670f2012548 +++ b/test/core/http/request_corpus/97e4499d450c95660de86747f527e670f2012548 diff --git a/test/core/http/corpus/9a996857196e0998a1278994a9bab3d35526e7f1 b/test/core/http/request_corpus/9a996857196e0998a1278994a9bab3d35526e7f1 index 0eb2c0da3a..0eb2c0da3a 100644 --- a/test/core/http/corpus/9a996857196e0998a1278994a9bab3d35526e7f1 +++ b/test/core/http/request_corpus/9a996857196e0998a1278994a9bab3d35526e7f1 diff --git a/test/core/http/corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8 b/test/core/http/request_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8 index f93b9a08e3..f93b9a08e3 100644 --- a/test/core/http/corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8 +++ b/test/core/http/request_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8 diff --git a/test/core/http/corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1 b/test/core/http/request_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1 index 4ea07dc137..4ea07dc137 100644 --- a/test/core/http/corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1 +++ b/test/core/http/request_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1 diff --git a/test/core/http/corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85 b/test/core/http/request_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85 index 2e95bac35c..2e95bac35c 100644 --- a/test/core/http/corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85 +++ b/test/core/http/request_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85 diff --git a/test/core/http/corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441 b/test/core/http/request_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441 index 837449dda3..837449dda3 100644 --- a/test/core/http/corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441 +++ b/test/core/http/request_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441 diff --git a/test/core/http/corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0 b/test/core/http/request_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0 index 6075d0a5d7..6075d0a5d7 100644 --- a/test/core/http/corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0 +++ b/test/core/http/request_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0 diff --git a/test/core/http/corpus/b04fea5c041c707db0ad9c09a81672557b52cc47 b/test/core/http/request_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47 index 10905bed39..10905bed39 100644 --- a/test/core/http/corpus/b04fea5c041c707db0ad9c09a81672557b52cc47 +++ b/test/core/http/request_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47 diff --git a/test/core/http/corpus/c4acff8aa2ff886f35439f72625d05002990c940 b/test/core/http/request_corpus/c4acff8aa2ff886f35439f72625d05002990c940 index 4539d9f012..4539d9f012 100644 --- a/test/core/http/corpus/c4acff8aa2ff886f35439f72625d05002990c940 +++ b/test/core/http/request_corpus/c4acff8aa2ff886f35439f72625d05002990c940 diff --git a/test/core/http/corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8 b/test/core/http/request_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8 index 2704e4fb39..2704e4fb39 100644 --- a/test/core/http/corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8 +++ b/test/core/http/request_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8 diff --git a/test/core/http/corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2 b/test/core/http/request_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2 index f5cbbc69e7..f5cbbc69e7 100644 --- a/test/core/http/corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2 +++ b/test/core/http/request_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2 diff --git a/test/core/http/corpus/cce734f1b263de6994f7950e0df7bf0c81449f70 b/test/core/http/request_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70 index f6ea09c41b..f6ea09c41b 100644 --- a/test/core/http/corpus/cce734f1b263de6994f7950e0df7bf0c81449f70 +++ b/test/core/http/request_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70 diff --git a/test/core/http/corpus/d39c8ee11a697634a09b309460c0bbd967e7effa b/test/core/http/request_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa index e241a0c01c..e241a0c01c 100644 --- a/test/core/http/corpus/d39c8ee11a697634a09b309460c0bbd967e7effa +++ b/test/core/http/request_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa diff --git a/test/core/http/corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453 b/test/core/http/request_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453 index be33d81102..be33d81102 100644 --- a/test/core/http/corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453 +++ b/test/core/http/request_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453 diff --git a/test/core/http/corpus/d51f7fcc089f269c7afecaaca51966bab5fde629 b/test/core/http/request_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629 index e81a59f30b..e81a59f30b 100644 --- a/test/core/http/corpus/d51f7fcc089f269c7afecaaca51966bab5fde629 +++ b/test/core/http/request_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629 diff --git a/test/core/http/corpus/d936dad71c129cf659097dc3db64550c4dd467f4 b/test/core/http/request_corpus/d936dad71c129cf659097dc3db64550c4dd467f4 index ccf918751d..ccf918751d 100644 --- a/test/core/http/corpus/d936dad71c129cf659097dc3db64550c4dd467f4 +++ b/test/core/http/request_corpus/d936dad71c129cf659097dc3db64550c4dd467f4 diff --git a/test/core/http/corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b b/test/core/http/request_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b index b6fc095920..b6fc095920 100644 --- a/test/core/http/corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b +++ b/test/core/http/request_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b diff --git a/test/core/http/corpus/e5c364b205855a2991ce07482aebb2a3a6147089 b/test/core/http/request_corpus/e5c364b205855a2991ce07482aebb2a3a6147089 index 98b5f62b2a..98b5f62b2a 100644 --- a/test/core/http/corpus/e5c364b205855a2991ce07482aebb2a3a6147089 +++ b/test/core/http/request_corpus/e5c364b205855a2991ce07482aebb2a3a6147089 diff --git a/test/core/http/corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb b/test/core/http/request_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb index 78b36c913b..78b36c913b 100644 --- a/test/core/http/corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb +++ b/test/core/http/request_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb diff --git a/test/core/http/corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066 b/test/core/http/request_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066 index 06f1a3b800..06f1a3b800 100644 --- a/test/core/http/corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066 +++ b/test/core/http/request_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066 diff --git a/test/core/http/corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b b/test/core/http/request_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b index eb63d31fa5..eb63d31fa5 100644 --- a/test/core/http/corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b +++ b/test/core/http/request_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b diff --git a/test/core/http/corpus/request1.txt b/test/core/http/request_corpus/request1.txt index 16a750fbf9..16a750fbf9 100644 --- a/test/core/http/corpus/request1.txt +++ b/test/core/http/request_corpus/request1.txt diff --git a/test/core/http/corpus/request2.txt b/test/core/http/request_corpus/request2.txt index 897a28406c..897a28406c 100644 --- a/test/core/http/corpus/request2.txt +++ b/test/core/http/request_corpus/request2.txt diff --git a/test/core/http/corpus/request3.txt b/test/core/http/request_corpus/request3.txt index aaa75bbb52..aaa75bbb52 100644 --- a/test/core/http/corpus/request3.txt +++ b/test/core/http/request_corpus/request3.txt diff --git a/test/core/http/corpus/request4.txt b/test/core/http/request_corpus/request4.txt index 593f6fa7b6..593f6fa7b6 100644 --- a/test/core/http/corpus/request4.txt +++ b/test/core/http/request_corpus/request4.txt diff --git a/test/core/http/corpus/request5.txt b/test/core/http/request_corpus/request5.txt index 19fb244355..19fb244355 100644 --- a/test/core/http/corpus/request5.txt +++ b/test/core/http/request_corpus/request5.txt diff --git a/test/core/http/corpus/response1.txt b/test/core/http/request_corpus/response1.txt index a17139982e..a17139982e 100644 --- a/test/core/http/corpus/response1.txt +++ b/test/core/http/request_corpus/response1.txt diff --git a/test/core/http/corpus/response2.txt b/test/core/http/request_corpus/response2.txt index 1b86449bb6..1b86449bb6 100644 --- a/test/core/http/corpus/response2.txt +++ b/test/core/http/request_corpus/response2.txt diff --git a/test/core/http/corpus/response3.txt b/test/core/http/request_corpus/response3.txt index 9e5b046c59..9e5b046c59 100644 --- a/test/core/http/corpus/response3.txt +++ b/test/core/http/request_corpus/response3.txt diff --git a/test/core/http/corpus/response4.txt b/test/core/http/request_corpus/response4.txt index b237b01fe0..b237b01fe0 100644 --- a/test/core/http/corpus/response4.txt +++ b/test/core/http/request_corpus/response4.txt diff --git a/test/core/http/corpus/response5.txt b/test/core/http/request_corpus/response5.txt index 2630595713..2630595713 100644 --- a/test/core/http/corpus/response5.txt +++ b/test/core/http/request_corpus/response5.txt diff --git a/test/core/http/corpus/response6.txt b/test/core/http/request_corpus/response6.txt index 797b6ee773..797b6ee773 100644 --- a/test/core/http/corpus/response6.txt +++ b/test/core/http/request_corpus/response6.txt diff --git a/test/core/http/corpus/toolong.txt b/test/core/http/request_corpus/toolong.txt index 9a9d5e2fc3..9a9d5e2fc3 100644 --- a/test/core/http/corpus/toolong.txt +++ b/test/core/http/request_corpus/toolong.txt diff --git a/test/core/http/fuzzer.c b/test/core/http/request_fuzzer.c index c3c634f281..5941401867 100644 --- a/test/core/http/fuzzer.c +++ b/test/core/http/request_fuzzer.c @@ -44,11 +44,14 @@ bool leak_check = true; int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_http_parser parser; - grpc_http_parser_init(&parser); + grpc_http_request request; + memset(&request, 0, sizeof(request)); + grpc_http_parser_init(&parser, GRPC_HTTP_REQUEST, &request); gpr_slice slice = gpr_slice_from_copied_buffer((const char *)data, size); - grpc_http_parser_parse(&parser, slice); - grpc_http_parser_eof(&parser); + GRPC_ERROR_UNREF(grpc_http_parser_parse(&parser, slice)); + GRPC_ERROR_UNREF(grpc_http_parser_eof(&parser)); gpr_slice_unref(slice); grpc_http_parser_destroy(&parser); + grpc_http_request_destroy(&request); return 0; } diff --git a/test/core/http/response_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427 b/test/core/http/response_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427 new file mode 100644 index 0000000000..3d6face56a --- /dev/null +++ b/test/core/http/response_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427 @@ -0,0 +1,2 @@ +HTTP/1.1 …200 OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba b/test/core/http/response_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba new file mode 100644 index 0000000000..5cbaf2e460 --- /dev/null +++ b/test/core/http/response_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba @@ -0,0 +1,2 @@ +HTTP/1.1 8) pMKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/069352518a1d1baa05f317c677d275cefda2ac97 b/test/core/http/response_corpus/069352518a1d1baa05f317c677d275cefda2ac97 new file mode 100644 index 0000000000..8831f0786b --- /dev/null +++ b/test/core/http/response_corpus/069352518a1d1baa05f317c677d275cefda2ac97 @@ -0,0 +1,2 @@ +HTTP/1.1 80) OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34 b/test/core/http/response_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34 new file mode 100644 index 0000000000..10967d975c --- /dev/null +++ b/test/core/http/response_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34 @@ -0,0 +1,2 @@ +„HTT/21. 200 HT!TP/1OKH.1HTTP 200 OKH
+tHT//1T0P.1y 2001.
\ No newline at end of file diff --git a/test/core/http/response_corpus/0c5b7c2569410b526605e308309a7f36574e530d b/test/core/http/response_corpus/0c5b7c2569410b526605e308309a7f36574e530d new file mode 100644 index 0000000000..c79e456904 --- /dev/null +++ b/test/core/http/response_corpus/0c5b7c2569410b526605e308309a7f36574e530d @@ -0,0 +1,4 @@ +H
TTP/16.1 200 OK +test: h!ello + +abcd diff --git a/test/core/http/response_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf b/test/core/http/response_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf new file mode 100644 index 0000000000..7b979b5e10 --- /dev/null +++ b/test/core/http/response_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf @@ -0,0 +1,3 @@ +HTTP/1.1 200 OKH
+tHTTP/01.021 Oes,H
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/1e1273f90187fdf5df3625764245610f86af6aa4 b/test/core/http/response_corpus/1e1273f90187fdf5df3625764245610f86af6aa4 new file mode 100644 index 0000000000..67382b4f3a --- /dev/null +++ b/test/core/http/response_corpus/1e1273f90187fdf5df3625764245610f86af6aa4 @@ -0,0 +1,3 @@ +HTTP/1.1 200 OKHHTTP‰/1.200 OKH
+
+tHTHTTP/0 20T:tes/01.
\ No newline at end of file diff --git a/test/core/http/response_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55 b/test/core/http/response_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55 new file mode 100644 index 0000000000..deb8265a30 --- /dev/null +++ b/test/core/http/response_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55 @@ -0,0 +1,3 @@ +JHTT/21. 2è0 HTTP/1.1 200 OKHHTTP‰/1.200 OKH
+
+tHTHTHTJHTTPT
\ No newline at end of file diff --git a/test/core/http/response_corpus/24756c396bc72894fd720092bb6f9c03e66b469f b/test/core/http/response_corpus/24756c396bc72894fd720092bb6f9c03e66b469f new file mode 100644 index 0000000000..9f2e0e4a25 --- /dev/null +++ b/test/core/http/response_corpus/24756c396bc72894fd720092bb6f9c03e66b469f @@ -0,0 +1,2 @@ +JHTT/21. 200œHTT/0OKH.1 HTTP/200 OKH
+tH1.T
\ No newline at end of file diff --git a/test/core/http/response_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f b/test/core/http/response_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f new file mode 100644 index 0000000000..4db04b260a --- /dev/null +++ b/test/core/http/response_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f @@ -0,0 +1,2 @@ +ITTP/11 …20O HTTP/11 2*0 OKH
+ HTDP/01.021 : OesHK
,H
diff --git a/test/core/http/response_corpus/29daa75432381937fd005cb25e314e328de6e9f9 b/test/core/http/response_corpus/29daa75432381937fd005cb25e314e328de6e9f9 new file mode 100644 index 0000000000..cee70bfe71 --- /dev/null +++ b/test/core/http/response_corpus/29daa75432381937fd005cb25e314e328de6e9f9 @@ -0,0 +1,2 @@ +JHTT¹21. 200HTT/0OKH1 HTTP/100 OKH
+tH1.T
\ No newline at end of file diff --git a/test/core/http/response_corpus/2a75204bc492084ad853682f8de3fb137d5907bc b/test/core/http/response_corpus/2a75204bc492084ad853682f8de3fb137d5907bc new file mode 100644 index 0000000000..e76b00e34c --- /dev/null +++ b/test/core/http/response_corpus/2a75204bc492084ad853682f8de3fb137d5907bc @@ -0,0 +1,2 @@ +GET / HTTHTTP/1.1 200 OKH
+t10H
\ No newline at end of file diff --git a/test/core/http/response_corpus/2d34ba249b755a880525cf53c665633a5e359305 b/test/core/http/response_corpus/2d34ba249b755a880525cf53c665633a5e359305 new file mode 100644 index 0000000000..7435f52ea5 --- /dev/null +++ b/test/core/http/response_corpus/2d34ba249b755a880525cf53c665633a5e359305 @@ -0,0 +1,2 @@ +ITTP/11 …20O HTTP/22 2*0 OKH
+ HTDP/01.021 : OesHK
,H
diff --git a/test/core/http/response_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2 b/test/core/http/response_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2 new file mode 100644 index 0000000000..cce8ded71a --- /dev/null +++ b/test/core/http/response_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2 @@ -0,0 +1,2 @@ +HTTP/1*9y 200 OKm
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b b/test/core/http/response_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b new file mode 100644 index 0000000000..57efa3cabc --- /dev/null +++ b/test/core/http/response_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b @@ -0,0 +1,4 @@ +JHTT/21. 200 HTTP/0OKH.1 200 OKH
+tHTTP/01.021 Oes,H
+t
+t
\ No newline at end of file diff --git a/test/core/http/response_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece b/test/core/http/response_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece new file mode 100644 index 0000000000..8df43e4dce --- /dev/null +++ b/test/core/http/response_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece @@ -0,0 +1,2 @@ +HTTP/1.9y 200 OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf b/test/core/http/response_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf new file mode 100644 index 0000000000..4efa386f3b --- /dev/null +++ b/test/core/http/response_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf @@ -0,0 +1,9 @@ +HTTP/1.1 200 OKH
TTP/16.1 200 OK +tesH
+tHTTP/00.021 :Oe¶,H
+test: h!eHTTP/1.1 200 OKH
+llo + +abcdtH +TTP/01.021 : Oes,H
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d b/test/core/http/response_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d new file mode 100644 index 0000000000..f85f1df035 --- /dev/null +++ b/test/core/http/response_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d @@ -0,0 +1,3 @@ +žHTTP/1.1 200 HH +OK
TDP/01.021 : Oe:,H
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/39b19c41ba537f37511eff7727733715db432e76 b/test/core/http/response_corpus/39b19c41ba537f37511eff7727733715db432e76 new file mode 100644 index 0000000000..fefa4512a8 --- /dev/null +++ b/test/core/http/response_corpus/39b19c41ba537f37511eff7727733715db432e76 @@ -0,0 +1,2 @@ +HTTP/1.1 000 OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac b/test/core/http/response_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac new file mode 100644 index 0000000000..b967b57614 --- /dev/null +++ b/test/core/http/response_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac @@ -0,0 +1,3 @@ +HTTP/1.1 200 OKH
+tHTTP/01.021 : Oes,H
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/3f03265921120c6ffa61b944e213e062a5538d4b b/test/core/http/response_corpus/3f03265921120c6ffa61b944e213e062a5538d4b new file mode 100644 index 0000000000..8af90071c3 --- /dev/null +++ b/test/core/http/response_corpus/3f03265921120c6ffa61b944e213e062a5538d4b @@ -0,0 +1,2 @@ +@TTP/1.1y 002ÿOKH
+ves
\ No newline at end of file diff --git a/test/core/http/response_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046 b/test/core/http/response_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046 new file mode 100644 index 0000000000..7d20266703 --- /dev/null +++ b/test/core/http/response_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046 @@ -0,0 +1,2 @@ +HTTP/1.1y 200 OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9 b/test/core/http/response_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9 new file mode 100644 index 0000000000..5996b9a75c --- /dev/null +++ b/test/core/http/response_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9 @@ -0,0 +1,4 @@ +JHTTP/1.1 +00 HTTP/1.1 200 OKHHTTPOKH
‰/1. +200 OKtH
+
+tHTH
\ No newline at end of file diff --git a/test/core/http/response_corpus/487725eb38511c79a9340bf4560a1411061fa6fa b/test/core/http/response_corpus/487725eb38511c79a9340bf4560a1411061fa6fa new file mode 100644 index 0000000000..c59c4d2246 --- /dev/null +++ b/test/core/http/response_corpus/487725eb38511c79a9340bf4560a1411061fa6fa @@ -0,0 +1,2 @@ +HTTP/01.021 O,H
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5 b/test/core/http/response_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5 new file mode 100644 index 0000000000..8ac7ceb2d5 --- /dev/null +++ b/test/core/http/response_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5 @@ -0,0 +1,2 @@ +ITTP/11 …20O HK
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55 b/test/core/http/response_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55 new file mode 100644 index 0000000000..49d1c8f1d2 --- /dev/null +++ b/test/core/http/response_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55 @@ -0,0 +1,2 @@ +HTTP/1.1 200 OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/5028c56a5116a186b7343ff59567b47347a0796d b/test/core/http/response_corpus/5028c56a5116a186b7343ff59567b47347a0796d new file mode 100644 index 0000000000..5f2c4dfef0 --- /dev/null +++ b/test/core/http/response_corpus/5028c56a5116a186b7343ff59567b47347a0796d @@ -0,0 +1,3 @@ +HTTP/1.1 200 OKH
+ HTDP/01.021 : Oes,H
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/533f62b3f495ce704babf3ee8d840f196a714dff b/test/core/http/response_corpus/533f62b3f495ce704babf3ee8d840f196a714dff new file mode 100644 index 0000000000..6313cd967a --- /dev/null +++ b/test/core/http/response_corpus/533f62b3f495ce704babf3ee8d840f196a714dff @@ -0,0 +1,4 @@ +JHTT/21. 200 HTTP/1OKH.1 200 OKH
+tHTTP/01.021 Oes,H
+t
+t
\ No newline at end of file diff --git a/test/core/http/response_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104 b/test/core/http/response_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104 new file mode 100644 index 0000000000..fee5512152 --- /dev/null +++ b/test/core/http/response_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104 @@ -0,0 +1,2 @@ +JÏHTTP‰/1.200:OKHHTã/21. 2è0 HTTP/
+1.1 200 OKHHTtTP‰
\ No newline at end of file diff --git a/test/core/http/response_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee b/test/core/http/response_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee new file mode 100644 index 0000000000..bd7e239537 --- /dev/null +++ b/test/core/http/response_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee @@ -0,0 +1,2 @@ +ITTP/11 …20O HTTP/11 2*0 OKH
+ HTDP/01.021 : OesHK
,H
diff --git a/test/core/http/response_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5 b/test/core/http/response_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5 new file mode 100644 index 0000000000..9a15ab025f --- /dev/null +++ b/test/core/http/response_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5 @@ -0,0 +1,2 @@ +HTTP/1. 200 OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0 b/test/core/http/response_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0 new file mode 100644 index 0000000000..480708e033 --- /dev/null +++ b/test/core/http/response_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0 @@ -0,0 +1,2 @@ +@TTP/1.1y 00'JHTTP/1.1 +00ÿOïH HTTP/
+ve1.1 200s
\ No newline at end of file diff --git a/test/core/http/response_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e b/test/core/http/response_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e new file mode 100644 index 0000000000..0ed0dfadec --- /dev/null +++ b/test/core/http/response_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e @@ -0,0 +1,2 @@ +ITTP/11 …20O HTTP/1.1 200 OKH
+ HTDP/01.021 : OesHK
,H
diff --git a/test/core/http/response_corpus/657368df512ca6294b9df16adf935a3f374a8be2 b/test/core/http/response_corpus/657368df512ca6294b9df16adf935a3f374a8be2 new file mode 100644 index 0000000000..1f14f69103 --- /dev/null +++ b/test/core/http/response_corpus/657368df512ca6294b9df16adf935a3f374a8be2 @@ -0,0 +1,3 @@ +HTT +/1.1 201 OKH
+des
\ No newline at end of file diff --git a/test/core/http/response_corpus/7fc4520094902ce2c760d70eaad5b674d2817337 b/test/core/http/response_corpus/7fc4520094902ce2c760d70eaad5b674d2817337 new file mode 100644 index 0000000000..8fc481d92b --- /dev/null +++ b/test/core/http/response_corpus/7fc4520094902ce2c760d70eaad5b674d2817337 @@ -0,0 +1,5 @@ +JHTTP/1.GET / HTTP/1.0 +1 200 OKH
+ + +t
\ No newline at end of file diff --git a/test/core/http/response_corpus/81f59a12b458ec3604035cb962165c604d1355e6 b/test/core/http/response_corpus/81f59a12b458ec3604035cb962165c604d1355e6 new file mode 100644 index 0000000000..d4223ccf81 --- /dev/null +++ b/test/core/http/response_corpus/81f59a12b458ec3604035cb962165c604d1355e6 @@ -0,0 +1,2 @@ +HTTP/1.1 8p) )MKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9 b/test/core/http/response_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9 new file mode 100644 index 0000000000..99e2c48bbd --- /dev/null +++ b/test/core/http/response_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9 @@ -0,0 +1,4 @@ +HTTP/1.1 200 OKH
+tHTHTTP/1. 20TP/01.020(: Oes,H0 OKH
+
+tteses
\ No newline at end of file diff --git a/test/core/http/response_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c b/test/core/http/response_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c new file mode 100644 index 0000000000..776253d750 --- /dev/null +++ b/test/core/http/response_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c @@ -0,0 +1,2 @@ +ITTp/11 …20O HTTP/*1.1 200 OKH
+ HTDP/02.021 : OesHK
,H
diff --git a/test/core/http/response_corpus/97e4499d450c95660de86747f527e670f2012548 b/test/core/http/response_corpus/97e4499d450c95660de86747f527e670f2012548 new file mode 100644 index 0000000000..b1927fbf63 --- /dev/null +++ b/test/core/http/response_corpus/97e4499d450c95660de86747f527e670f2012548 @@ -0,0 +1,3 @@ +HTHHTT`TT +/1.1 201 P*/OKH
+des1.1 2T
\ No newline at end of file diff --git a/test/core/http/response_corpus/9a996857196e0998a1278994a9bab3d35526e7f1 b/test/core/http/response_corpus/9a996857196e0998a1278994a9bab3d35526e7f1 new file mode 100644 index 0000000000..0eb2c0da3a --- /dev/null +++ b/test/core/http/response_corpus/9a996857196e0998a1278994a9bab3d35526e7f1 @@ -0,0 +1,2 @@ +@TTP/1.1y 002ÿOKH
+ves
\ No newline at end of file diff --git a/test/core/http/response_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8 b/test/core/http/response_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8 new file mode 100644 index 0000000000..f93b9a08e3 --- /dev/null +++ b/test/core/http/response_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8 @@ -0,0 +1,3 @@ +„HTT/21. 200 HTTP/1.1 HT!TP/1OKH.1HTTP 200 OKH
+tHT/:/80 OKH
+1
\ No newline at end of file diff --git a/test/core/http/response_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1 b/test/core/http/response_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1 new file mode 100644 index 0000000000..4ea07dc137 --- /dev/null +++ b/test/core/http/response_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1 @@ -0,0 +1,5 @@ +JHTTP/1>GET / HTTP/2.0 +1 200 OKH
+ + +t
\ No newline at end of file diff --git a/test/core/http/response_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85 b/test/core/http/response_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85 new file mode 100644 index 0000000000..2e95bac35c --- /dev/null +++ b/test/core/http/response_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85 @@ -0,0 +1,3 @@ +„HTT/21. 200 HTTP/1.1 HT!TP/1OKH.1HTTP 200 OKH
+tHT//80) OKH
+1
\ No newline at end of file diff --git a/test/core/http/response_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441 b/test/core/http/response_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441 new file mode 100644 index 0000000000..837449dda3 --- /dev/null +++ b/test/core/http/response_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441 @@ -0,0 +1,2 @@ +HTTP/1.1 80î OH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0 b/test/core/http/response_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0 new file mode 100644 index 0000000000..6075d0a5d7 --- /dev/null +++ b/test/core/http/response_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0 @@ -0,0 +1,17 @@ +HTTP/1.1 200 OKH
TTP/16.1 200 OK +tesH
+tHHTTP/1.1 20TTP/00.021 :Oe¶,H
+test: h!eHTTP/1.1 200 OKH
+llo + +abcdtH +TTP/01.021 : Oes,0 OKH
TTP/16.1 200 OK +tesH
+tHTTP/00.021 :Oe¶,H
+test: h!eHTTP/1.1 200 OKH
+llo + +abcdtH +TTP/01.021 : Oes,H
+Ht
+teses
\ No newline at end of file diff --git a/test/core/http/response_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47 b/test/core/http/response_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47 new file mode 100644 index 0000000000..10905bed39 --- /dev/null +++ b/test/core/http/response_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47 @@ -0,0 +1,2 @@ +JHTTP/1.1 200 OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/c4acff8aa2ff886f35439f72625d05002990c940 b/test/core/http/response_corpus/c4acff8aa2ff886f35439f72625d05002990c940 new file mode 100644 index 0000000000..4539d9f012 --- /dev/null +++ b/test/core/http/response_corpus/c4acff8aa2ff886f35439f72625d05002990c940 @@ -0,0 +1,4 @@ +JHTT/21. 200 HTTP/2OKH.1 200 OKH
+tHTTP/01.021 Oes,H
+t
+t
\ No newline at end of file diff --git a/test/core/http/response_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8 b/test/core/http/response_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8 new file mode 100644 index 0000000000..2704e4fb39 --- /dev/null +++ b/test/core/http/response_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8 @@ -0,0 +1,2 @@ +HTTP/1.1 767) OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2 b/test/core/http/response_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2 new file mode 100644 index 0000000000..f5cbbc69e7 --- /dev/null +++ b/test/core/http/response_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2 @@ -0,0 +1,3 @@ +HJHTHHTT`TT +/1.1 201 P*HHTT/T1/OKH
+des1.1 2.1T 20T1
\ No newline at end of file diff --git a/test/core/http/response_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70 b/test/core/http/response_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70 new file mode 100644 index 0000000000..f6ea09c41b --- /dev/null +++ b/test/core/http/response_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70 @@ -0,0 +1,3 @@ +JHTT/21. 200 HTTPHTTP/1.1 80î OH/1OKH.0 200 OKH
+tHTTP/0
+te
\ No newline at end of file diff --git a/test/core/http/response_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa b/test/core/http/response_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa new file mode 100644 index 0000000000..e241a0c01c --- /dev/null +++ b/test/core/http/response_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa @@ -0,0 +1,17 @@ +HTTP/1.1 200 OKH
TTP/16.1 200 OK +tesHTTP/1.1 200 OKH
TTP/16.1 200 OK +tesH
+tHTTP/00.021 :Oe¶,H
+test: h!eHTTP/1.1 200H
+tHTTP/00.010 :Oe¶,H
+test: h!eHTTP/1.… 200 OKH
+llo + +abcdtH +TTP/01.02 : Oes,H OKH
+llo + +abcdtH +TTP/01.021 : Oes
, +H
+tteess
\ No newline at end of file diff --git a/test/core/http/response_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453 b/test/core/http/response_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453 new file mode 100644 index 0000000000..be33d81102 --- /dev/null +++ b/test/core/http/response_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453 @@ -0,0 +1,3 @@ +HTTP/1.1 200 OKH
+ HTTP/01.021 : Oes,H
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629 b/test/core/http/response_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629 new file mode 100644 index 0000000000..e81a59f30b --- /dev/null +++ b/test/core/http/response_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629 @@ -0,0 +1,2 @@ +ÏHTTP‰/1.200:OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/d936dad71c129cf659097dc3db64550c4dd467f4 b/test/core/http/response_corpus/d936dad71c129cf659097dc3db64550c4dd467f4 new file mode 100644 index 0000000000..ccf918751d --- /dev/null +++ b/test/core/http/response_corpus/d936dad71c129cf659097dc3db64550c4dd467f4 @@ -0,0 +1,2 @@ +HTTP‰/1.200 OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b b/test/core/http/response_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b new file mode 100644 index 0000000000..b6fc095920 --- /dev/null +++ b/test/core/http/response_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b @@ -0,0 +1,3 @@ +JHTT/21. 200 HTTRHTTP/1.1 0î OL/1OKH.0 200 OKH
+tHTTP/0
+te
\ No newline at end of file diff --git a/test/core/http/response_corpus/e5c364b205855a2991ce07482aebb2a3a6147089 b/test/core/http/response_corpus/e5c364b205855a2991ce07482aebb2a3a6147089 new file mode 100644 index 0000000000..98b5f62b2a --- /dev/null +++ b/test/core/http/response_corpus/e5c364b205855a2991ce07482aebb2a3a6147089 @@ -0,0 +1,2 @@ +TTHP‰/1.200 OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb b/test/core/http/response_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb new file mode 100644 index 0000000000..78b36c913b --- /dev/null +++ b/test/core/http/response_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb @@ -0,0 +1,2 @@ +ITHTTTPHT/12 …2S HTKP/1.1 767) OKH
+tes
\ No newline at end of file diff --git a/test/core/http/response_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066 b/test/core/http/response_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066 new file mode 100644 index 0000000000..06f1a3b800 --- /dev/null +++ b/test/core/http/response_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066 @@ -0,0 +1 @@ +HH
\ No newline at end of file diff --git a/test/core/http/response_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b b/test/core/http/response_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b new file mode 100644 index 0000000000..eb63d31fa5 --- /dev/null +++ b/test/core/http/response_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b @@ -0,0 +1,2 @@ +ITTP/11 …20O HTTP/1.1 200 OKH
+HT DP/01021 : OesHK
,H
diff --git a/test/core/http/response_corpus/request1.txt b/test/core/http/response_corpus/request1.txt new file mode 100644 index 0000000000..16a750fbf9 --- /dev/null +++ b/test/core/http/response_corpus/request1.txt @@ -0,0 +1,3 @@ +GET / HTTP/1.0 + + diff --git a/test/core/http/response_corpus/request2.txt b/test/core/http/response_corpus/request2.txt new file mode 100644 index 0000000000..897a28406c --- /dev/null +++ b/test/core/http/response_corpus/request2.txt @@ -0,0 +1,3 @@ +GET / HTTP/1.0 +Content-Length: 128 + diff --git a/test/core/http/response_corpus/request3.txt b/test/core/http/response_corpus/request3.txt new file mode 100644 index 0000000000..aaa75bbb52 --- /dev/null +++ b/test/core/http/response_corpus/request3.txt @@ -0,0 +1,3 @@ +GET / HTTP/1.1 +Content-Length: 128 + diff --git a/test/core/http/response_corpus/request4.txt b/test/core/http/response_corpus/request4.txt new file mode 100644 index 0000000000..593f6fa7b6 --- /dev/null +++ b/test/core/http/response_corpus/request4.txt @@ -0,0 +1,3 @@ +GET /foo.bar HTTP/1.1 +Content-Length: 128 + diff --git a/test/core/http/response_corpus/request5.txt b/test/core/http/response_corpus/request5.txt new file mode 100644 index 0000000000..19fb244355 --- /dev/null +++ b/test/core/http/response_corpus/request5.txt @@ -0,0 +1,3 @@ +POST / HTTP/1.0 + +asdlfkjadsfl;akdjsfasdf diff --git a/test/core/http/response_corpus/response1.txt b/test/core/http/response_corpus/response1.txt new file mode 100644 index 0000000000..a17139982e --- /dev/null +++ b/test/core/http/response_corpus/response1.txt @@ -0,0 +1,4 @@ +HTTP/1.1 200 OK +test: hello + +abcd diff --git a/test/core/http/response_corpus/response2.txt b/test/core/http/response_corpus/response2.txt new file mode 100644 index 0000000000..1b86449bb6 --- /dev/null +++ b/test/core/http/response_corpus/response2.txt @@ -0,0 +1,4 @@ +HTTP/0.9 200 OK +test: hello + +abcd diff --git a/test/core/http/response_corpus/response3.txt b/test/core/http/response_corpus/response3.txt new file mode 100644 index 0000000000..9e5b046c59 --- /dev/null +++ b/test/core/http/response_corpus/response3.txt @@ -0,0 +1,5 @@ +HTTP/0.9 200 OK +test: hello +content-length: 102384398 + +abcd diff --git a/test/core/http/response_corpus/response4.txt b/test/core/http/response_corpus/response4.txt new file mode 100644 index 0000000000..b237b01fe0 --- /dev/null +++ b/test/core/http/response_corpus/response4.txt @@ -0,0 +1,2 @@ +HTTP/1.1 404 Not Found + diff --git a/test/core/http/response_corpus/response5.txt b/test/core/http/response_corpus/response5.txt new file mode 100644 index 0000000000..2630595713 --- /dev/null +++ b/test/core/http/response_corpus/response5.txt @@ -0,0 +1,5 @@ +HTTP/0.9 200 OK +test: hello +content-length: 4 + +abcd diff --git a/test/core/http/response_corpus/response6.txt b/test/core/http/response_corpus/response6.txt new file mode 100644 index 0000000000..797b6ee773 --- /dev/null +++ b/test/core/http/response_corpus/response6.txt @@ -0,0 +1,5 @@ +HTTP/0.9 200 OK +test: hello +content-length: 6 + +abcd diff --git a/test/core/http/response_corpus/toolong.txt b/test/core/http/response_corpus/toolong.txt new file mode 100644 index 0000000000..9a9d5e2fc3 --- /dev/null +++ b/test/core/http/response_corpus/toolong.txt @@ -0,0 +1,2 @@ +GET / HTTP/1.1 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb diff --git a/test/core/http/response_fuzzer.c b/test/core/http/response_fuzzer.c new file mode 100644 index 0000000000..acde7c80a4 --- /dev/null +++ b/test/core/http/response_fuzzer.c @@ -0,0 +1,56 @@ +/* + * + * 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 <stdint.h> +#include <string.h> + +#include <grpc/support/alloc.h> + +#include "src/core/lib/http/parser.h" + +bool squelch = true; +bool leak_check = true; + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + grpc_http_parser parser; + grpc_http_response response; + memset(&response, 0, sizeof(response)); + grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response); + gpr_slice slice = gpr_slice_from_copied_buffer((const char *)data, size); + GRPC_ERROR_UNREF(grpc_http_parser_parse(&parser, slice)); + GRPC_ERROR_UNREF(grpc_http_parser_eof(&parser)); + gpr_slice_unref(slice); + grpc_http_parser_destroy(&parser); + grpc_http_response_destroy(&response); + return 0; +} diff --git a/test/core/internal_api_canaries/iomgr.c b/test/core/internal_api_canaries/iomgr.c index f87a80cd90..5e86c42309 100644 --- a/test/core/internal_api_canaries/iomgr.c +++ b/test/core/internal_api_canaries/iomgr.c @@ -54,7 +54,7 @@ static void test_code(void) { grpc_closure closure; closure.cb = NULL; closure.cb_arg = NULL; - closure.final_data = 0; + closure.next_data.scratch = 0; grpc_closure_list closure_list = GRPC_CLOSURE_LIST_INIT; closure_list.head = NULL; @@ -65,15 +65,14 @@ static void test_code(void) { grpc_closure_create(NULL, NULL); grpc_closure_list_move(NULL, NULL); - grpc_closure_list_add(NULL, NULL, true); - bool x = grpc_closure_list_empty(closure_list); - grpc_closure_next(&closure); + grpc_closure_list_append(NULL, NULL, GRPC_ERROR_CREATE("Foo")); + grpc_closure_list_empty(closure_list); /* exec_ctx.h */ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_exec_ctx_flush(&exec_ctx); grpc_exec_ctx_finish(&exec_ctx); - grpc_exec_ctx_enqueue(&exec_ctx, &closure, x, NULL); + grpc_exec_ctx_sched(&exec_ctx, &closure, GRPC_ERROR_CREATE("Foo"), NULL); grpc_exec_ctx_enqueue_list(&exec_ctx, &closure_list, NULL); /* endpoint.h */ @@ -95,7 +94,7 @@ static void test_code(void) { /* executor.h */ grpc_executor_init(); - grpc_executor_enqueue(&closure, x); + grpc_executor_push(&closure, GRPC_ERROR_CREATE("Phi")); grpc_executor_shutdown(); /* pollset.h */ @@ -104,9 +103,10 @@ static void test_code(void) { grpc_pollset_shutdown(NULL, NULL, NULL); grpc_pollset_reset(NULL); grpc_pollset_destroy(NULL); - grpc_pollset_work(NULL, NULL, NULL, gpr_now(GPR_CLOCK_REALTIME), - gpr_now(GPR_CLOCK_MONOTONIC)); - grpc_pollset_kick(NULL, NULL); + GRPC_ERROR_UNREF(grpc_pollset_work(NULL, NULL, NULL, + gpr_now(GPR_CLOCK_REALTIME), + gpr_now(GPR_CLOCK_MONOTONIC))); + GRPC_ERROR_UNREF(grpc_pollset_kick(NULL, NULL)); } int main(void) { diff --git a/test/core/internal_api_canaries/support.c b/test/core/internal_api_canaries/support.c index c51cbf2522..e992d2a66a 100644 --- a/test/core/internal_api_canaries/support.c +++ b/test/core/internal_api_canaries/support.c @@ -39,15 +39,15 @@ * This test is NOT expected to be run directly. ******************************************************************************/ +#include "src/core/lib/iomgr/load_file.h" #include "src/core/lib/support/env.h" -#include "src/core/lib/support/load_file.h" #include "src/core/lib/support/tmpfile.h" static void test_code(void) { /* env.h */ gpr_set_env("abc", gpr_getenv("xyz")); /* load_file.h */ - gpr_load_file("abc", 1, NULL); + grpc_load_file("abc", 1, NULL); /* tmpfile.h */ fclose(gpr_tmpfile("foo", NULL)); } diff --git a/test/core/iomgr/endpoint_pair_test.c b/test/core/iomgr/endpoint_pair_test.c index 0df94a878f..99b86b6213 100644 --- a/test/core/iomgr/endpoint_pair_test.c +++ b/test/core/iomgr/endpoint_pair_test.c @@ -64,7 +64,8 @@ static grpc_endpoint_test_config configs[] = { {"tcp/tcp_socketpair", create_fixture_endpoint_pair, clean_up}, }; -static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) { +static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, + grpc_error *error) { grpc_pollset_destroy(p); } diff --git a/test/core/iomgr/endpoint_tests.c b/test/core/iomgr/endpoint_tests.c index 6d15ecf141..b79c22e42a 100644 --- a/test/core/iomgr/endpoint_tests.c +++ b/test/core/iomgr/endpoint_tests.c @@ -33,6 +33,7 @@ #include "test/core/iomgr/endpoint_tests.h" +#include <stdbool.h> #include <sys/types.h> #include <grpc/support/alloc.h> @@ -128,30 +129,30 @@ struct read_and_write_test_state { }; static void read_and_write_test_read_handler(grpc_exec_ctx *exec_ctx, - void *data, bool success) { + void *data, grpc_error *error) { struct read_and_write_test_state *state = data; state->bytes_read += count_slices( state->incoming.slices, state->incoming.count, &state->current_read_data); - if (state->bytes_read == state->target_bytes || !success) { + if (state->bytes_read == state->target_bytes || error != GRPC_ERROR_NONE) { gpr_log(GPR_INFO, "Read handler done"); gpr_mu_lock(g_mu); - state->read_done = 1 + success; - grpc_pollset_kick(g_pollset, NULL); + state->read_done = 1 + (error == GRPC_ERROR_NONE); + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL)); gpr_mu_unlock(g_mu); - } else if (success) { + } else if (error == GRPC_ERROR_NONE) { grpc_endpoint_read(exec_ctx, state->read_ep, &state->incoming, &state->done_read); } } static void read_and_write_test_write_handler(grpc_exec_ctx *exec_ctx, - void *data, bool success) { + void *data, grpc_error *error) { struct read_and_write_test_state *state = data; gpr_slice *slices = NULL; size_t nslices; - if (success) { + if (error == GRPC_ERROR_NONE) { state->bytes_written += state->current_write_size; if (state->target_bytes - state->bytes_written < state->current_write_size) { @@ -171,8 +172,8 @@ static void read_and_write_test_write_handler(grpc_exec_ctx *exec_ctx, gpr_log(GPR_INFO, "Write handler done"); gpr_mu_lock(g_mu); - state->write_done = 1 + success; - grpc_pollset_kick(g_pollset, NULL); + state->write_done = 1 + (error == GRPC_ERROR_NONE); + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL)); gpr_mu_unlock(g_mu); } @@ -182,7 +183,7 @@ static void read_and_write_test_write_handler(grpc_exec_ctx *exec_ctx, */ static void read_and_write_test(grpc_endpoint_test_config config, size_t num_bytes, size_t write_size, - size_t slice_size, int shutdown) { + size_t slice_size, bool shutdown) { struct read_and_write_test_state state; gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(20); grpc_endpoint_test_fixture f = @@ -221,8 +222,8 @@ static void read_and_write_test(grpc_endpoint_test_config config, for the first iteration as for later iterations. It does the right thing even when bytes_written is unsigned. */ state.bytes_written -= state.current_write_size; - read_and_write_test_write_handler(&exec_ctx, &state, 1); - grpc_exec_ctx_finish(&exec_ctx); + read_and_write_test_write_handler(&exec_ctx, &state, GRPC_ERROR_NONE); + grpc_exec_ctx_flush(&exec_ctx); grpc_endpoint_read(&exec_ctx, state.read_ep, &state.incoming, &state.done_read); @@ -233,17 +234,19 @@ static void read_and_write_test(grpc_endpoint_test_config config, gpr_log(GPR_DEBUG, "shutdown write"); grpc_endpoint_shutdown(&exec_ctx, state.write_ep); } - grpc_exec_ctx_finish(&exec_ctx); + grpc_exec_ctx_flush(&exec_ctx); gpr_mu_lock(g_mu); while (!state.read_done || !state.write_done) { grpc_pollset_worker *worker = NULL; GPR_ASSERT(gpr_time_cmp(gpr_now(GPR_CLOCK_MONOTONIC), deadline) < 0); - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), deadline); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), deadline))); } gpr_mu_unlock(g_mu); - grpc_exec_ctx_finish(&exec_ctx); + grpc_exec_ctx_flush(&exec_ctx); end_test(config); gpr_slice_buffer_destroy(&state.outgoing); @@ -253,16 +256,73 @@ static void read_and_write_test(grpc_endpoint_test_config config, grpc_exec_ctx_finish(&exec_ctx); } +static void inc_on_failure(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + *(int *)arg += (error != GRPC_ERROR_NONE); +} + +static void wait_for_fail_count(grpc_exec_ctx *exec_ctx, int *fail_count, + int want_fail_count) { + grpc_exec_ctx_flush(exec_ctx); + for (int i = 0; i < 5 && *fail_count < want_fail_count; i++) { + grpc_pollset_worker *worker = NULL; + gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME); + gpr_timespec deadline = + gpr_time_add(now, gpr_time_from_seconds(1, GPR_TIMESPAN)); + gpr_mu_lock(g_mu); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(exec_ctx, g_pollset, &worker, now, deadline))); + gpr_mu_unlock(g_mu); + grpc_exec_ctx_flush(exec_ctx); + } + GPR_ASSERT(*fail_count == want_fail_count); +} + +static void multiple_shutdown_test(grpc_endpoint_test_config config) { + grpc_endpoint_test_fixture f = + begin_test(config, "multiple_shutdown_test", 128); + int fail_count = 0; + + gpr_slice_buffer slice_buffer; + gpr_slice_buffer_init(&slice_buffer); + + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_endpoint_add_to_pollset(&exec_ctx, f.client_ep, g_pollset); + grpc_endpoint_read(&exec_ctx, f.client_ep, &slice_buffer, + grpc_closure_create(inc_on_failure, &fail_count)); + wait_for_fail_count(&exec_ctx, &fail_count, 0); + grpc_endpoint_shutdown(&exec_ctx, f.client_ep); + wait_for_fail_count(&exec_ctx, &fail_count, 1); + grpc_endpoint_read(&exec_ctx, f.client_ep, &slice_buffer, + grpc_closure_create(inc_on_failure, &fail_count)); + wait_for_fail_count(&exec_ctx, &fail_count, 2); + gpr_slice_buffer_add(&slice_buffer, gpr_slice_from_copied_string("a")); + grpc_endpoint_write(&exec_ctx, f.client_ep, &slice_buffer, + grpc_closure_create(inc_on_failure, &fail_count)); + wait_for_fail_count(&exec_ctx, &fail_count, 3); + grpc_endpoint_shutdown(&exec_ctx, f.client_ep); + wait_for_fail_count(&exec_ctx, &fail_count, 3); + + gpr_slice_buffer_destroy(&slice_buffer); + + grpc_endpoint_destroy(&exec_ctx, f.client_ep); + grpc_endpoint_destroy(&exec_ctx, f.server_ep); + grpc_exec_ctx_finish(&exec_ctx); +} + void grpc_endpoint_tests(grpc_endpoint_test_config config, grpc_pollset *pollset, gpr_mu *mu) { size_t i; g_pollset = pollset; g_mu = mu; - read_and_write_test(config, 10000000, 100000, 8192, 0); - read_and_write_test(config, 1000000, 100000, 1, 0); - read_and_write_test(config, 100000000, 100000, 1, 1); + multiple_shutdown_test(config); + read_and_write_test(config, 10000000, 100000, 8192, false); + read_and_write_test(config, 1000000, 100000, 1, false); + read_and_write_test(config, 100000000, 100000, 1, true); for (i = 1; i < 1000; i = GPR_MAX(i + 1, i * 5 / 4)) { - read_and_write_test(config, 40320, i, i, 0); + read_and_write_test(config, 40320, i, i, false); } g_pollset = NULL; + g_mu = NULL; } diff --git a/test/core/iomgr/fd_posix_test.c b/test/core/iomgr/fd_posix_test.c index 24ba474680..62dc24d85a 100644 --- a/test/core/iomgr/fd_posix_test.c +++ b/test/core/iomgr/fd_posix_test.c @@ -76,8 +76,8 @@ static void create_test_socket(int port, int *socket_fd, setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); /* Reset the size of socket send buffer to the minimal value to facilitate buffer filling up and triggering notify_on_write */ - GPR_ASSERT(grpc_set_socket_sndbuf(fd, buffer_size_bytes)); - GPR_ASSERT(grpc_set_socket_rcvbuf(fd, buffer_size_bytes)); + GPR_ASSERT(grpc_set_socket_sndbuf(fd, buffer_size_bytes) == GRPC_ERROR_NONE); + GPR_ASSERT(grpc_set_socket_rcvbuf(fd, buffer_size_bytes) == GRPC_ERROR_NONE); /* Make fd non-blocking */ flags = fcntl(fd, F_GETFL, 0); GPR_ASSERT(fcntl(fd, F_SETFL, flags | O_NONBLOCK) == 0); @@ -132,14 +132,14 @@ static void session_shutdown_cb(grpc_exec_ctx *exec_ctx, void *arg, /*session */ /* Called when data become readable in a session. */ static void session_read_cb(grpc_exec_ctx *exec_ctx, void *arg, /*session */ - bool success) { + grpc_error *error) { session *se = arg; int fd = grpc_fd_wrapped_fd(se->em_fd); ssize_t read_once = 0; ssize_t read_total = 0; - if (!success) { + if (error != GRPC_ERROR_NONE) { session_shutdown_cb(exec_ctx, arg, 1); return; } @@ -184,13 +184,14 @@ static void listen_shutdown_cb(grpc_exec_ctx *exec_ctx, void *arg /*server */, gpr_mu_lock(g_mu); sv->done = 1; - grpc_pollset_kick(g_pollset, NULL); + GPR_ASSERT( + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL))); gpr_mu_unlock(g_mu); } /* Called when a new TCP connection request arrives in the listening port. */ static void listen_cb(grpc_exec_ctx *exec_ctx, void *arg, /*=sv_arg*/ - bool success) { + grpc_error *error) { server *sv = arg; int fd; int flags; @@ -199,7 +200,7 @@ static void listen_cb(grpc_exec_ctx *exec_ctx, void *arg, /*=sv_arg*/ socklen_t slen = sizeof(ss); grpc_fd *listen_em_fd = sv->em_fd; - if (!success) { + if (error != GRPC_ERROR_NONE) { listen_shutdown_cb(exec_ctx, arg, 1); return; } @@ -256,9 +257,11 @@ static void server_wait_and_shutdown(server *sv) { while (!sv->done) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), - gpr_inf_future(GPR_CLOCK_MONOTONIC)); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), + gpr_inf_future(GPR_CLOCK_MONOTONIC)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); @@ -299,17 +302,18 @@ static void client_session_shutdown_cb(grpc_exec_ctx *exec_ctx, client *cl = arg; grpc_fd_orphan(exec_ctx, cl->em_fd, NULL, NULL, "c"); cl->done = 1; - grpc_pollset_kick(g_pollset, NULL); + GPR_ASSERT( + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL))); } /* Write as much as possible, then register notify_on_write. */ static void client_session_write(grpc_exec_ctx *exec_ctx, void *arg, /*client */ - bool success) { + grpc_error *error) { client *cl = arg; int fd = grpc_fd_wrapped_fd(cl->em_fd); ssize_t write_once = 0; - if (!success) { + if (error != GRPC_ERROR_NONE) { gpr_mu_lock(g_mu); client_session_shutdown_cb(exec_ctx, arg, 1); gpr_mu_unlock(g_mu); @@ -362,7 +366,7 @@ static void client_start(grpc_exec_ctx *exec_ctx, client *cl, int port) { cl->em_fd = grpc_fd_create(fd, "client"); grpc_pollset_add_fd(exec_ctx, g_pollset, cl->em_fd); - client_session_write(exec_ctx, cl, 1); + client_session_write(exec_ctx, cl, GRPC_ERROR_NONE); } /* Wait for the signal to shutdown a client. */ @@ -371,9 +375,11 @@ static void client_wait_and_shutdown(client *cl) { while (!cl->done) { grpc_pollset_worker *worker = NULL; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), - gpr_inf_future(GPR_CLOCK_MONOTONIC)); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), + gpr_inf_future(GPR_CLOCK_MONOTONIC)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); @@ -410,22 +416,26 @@ void init_change_data(fd_change_data *fdc) { fdc->cb_that_ran = NULL; } void destroy_change_data(fd_change_data *fdc) {} static void first_read_callback(grpc_exec_ctx *exec_ctx, - void *arg /* fd_change_data */, bool success) { + void *arg /* fd_change_data */, + grpc_error *error) { fd_change_data *fdc = arg; gpr_mu_lock(g_mu); fdc->cb_that_ran = first_read_callback; - grpc_pollset_kick(g_pollset, NULL); + GPR_ASSERT( + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL))); gpr_mu_unlock(g_mu); } static void second_read_callback(grpc_exec_ctx *exec_ctx, - void *arg /* fd_change_data */, bool success) { + void *arg /* fd_change_data */, + grpc_error *error) { fd_change_data *fdc = arg; gpr_mu_lock(g_mu); fdc->cb_that_ran = second_read_callback; - grpc_pollset_kick(g_pollset, NULL); + GPR_ASSERT( + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL))); gpr_mu_unlock(g_mu); } @@ -471,9 +481,11 @@ static void test_grpc_fd_change(void) { gpr_mu_lock(g_mu); while (a.cb_that_ran == NULL) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), - gpr_inf_future(GPR_CLOCK_MONOTONIC)); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), + gpr_inf_future(GPR_CLOCK_MONOTONIC)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); @@ -495,9 +507,11 @@ static void test_grpc_fd_change(void) { gpr_mu_lock(g_mu); while (b.cb_that_ran == NULL) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), - gpr_inf_future(GPR_CLOCK_MONOTONIC)); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), + gpr_inf_future(GPR_CLOCK_MONOTONIC)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); @@ -513,7 +527,8 @@ static void test_grpc_fd_change(void) { close(sv[1]); } -static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) { +static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, + grpc_error *error) { grpc_pollset_destroy(p); } diff --git a/test/core/support/load_file_test.c b/test/core/iomgr/load_file_test.c index 0125fd94fd..f70295a81c 100644 --- a/test/core/support/load_file_test.c +++ b/test/core/iomgr/load_file_test.c @@ -38,7 +38,7 @@ #include <grpc/support/log.h> #include <grpc/support/slice.h> -#include "src/core/lib/support/load_file.h" +#include "src/core/lib/iomgr/load_file.h" #include "src/core/lib/support/string.h" #include "src/core/lib/support/tmpfile.h" #include "test/core/util/test_config.h" @@ -51,7 +51,7 @@ static void test_load_empty_file(void) { FILE *tmp = NULL; gpr_slice slice; gpr_slice slice_with_null_term; - int success; + grpc_error *error; char *tmp_name; LOG_TEST_NAME("test_load_empty_file"); @@ -61,12 +61,12 @@ static void test_load_empty_file(void) { GPR_ASSERT(tmp != NULL); fclose(tmp); - slice = gpr_load_file(tmp_name, 0, &success); - GPR_ASSERT(success == 1); + error = grpc_load_file(tmp_name, 0, &slice); + GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(GPR_SLICE_LENGTH(slice) == 0); - slice_with_null_term = gpr_load_file(tmp_name, 1, &success); - GPR_ASSERT(success == 1); + error = grpc_load_file(tmp_name, 1, &slice_with_null_term); + GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(GPR_SLICE_LENGTH(slice_with_null_term) == 1); GPR_ASSERT(GPR_SLICE_START_PTR(slice_with_null_term)[0] == 0); @@ -79,7 +79,7 @@ static void test_load_empty_file(void) { static void test_load_failure(void) { FILE *tmp = NULL; gpr_slice slice; - int success; + grpc_error *error; char *tmp_name; LOG_TEST_NAME("test_load_failure"); @@ -90,8 +90,9 @@ static void test_load_failure(void) { fclose(tmp); remove(tmp_name); - slice = gpr_load_file(tmp_name, 0, &success); - GPR_ASSERT(success == 0); + error = grpc_load_file(tmp_name, 0, &slice); + GPR_ASSERT(error != GRPC_ERROR_NONE); + GRPC_ERROR_UNREF(error); GPR_ASSERT(GPR_SLICE_LENGTH(slice) == 0); gpr_free(tmp_name); gpr_slice_unref(slice); @@ -101,7 +102,7 @@ static void test_load_small_file(void) { FILE *tmp = NULL; gpr_slice slice; gpr_slice slice_with_null_term; - int success; + grpc_error *error; char *tmp_name; const char *blah = "blah"; @@ -113,13 +114,13 @@ static void test_load_small_file(void) { GPR_ASSERT(fwrite(blah, 1, strlen(blah), tmp) == strlen(blah)); fclose(tmp); - slice = gpr_load_file(tmp_name, 0, &success); - GPR_ASSERT(success == 1); + error = grpc_load_file(tmp_name, 0, &slice); + GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(GPR_SLICE_LENGTH(slice) == strlen(blah)); GPR_ASSERT(!memcmp(GPR_SLICE_START_PTR(slice), blah, strlen(blah))); - slice_with_null_term = gpr_load_file(tmp_name, 1, &success); - GPR_ASSERT(success == 1); + error = grpc_load_file(tmp_name, 1, &slice_with_null_term); + GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(GPR_SLICE_LENGTH(slice_with_null_term) == (strlen(blah) + 1)); GPR_ASSERT(strcmp((const char *)GPR_SLICE_START_PTR(slice_with_null_term), blah) == 0); @@ -133,7 +134,7 @@ static void test_load_small_file(void) { static void test_load_big_file(void) { FILE *tmp = NULL; gpr_slice slice; - int success; + grpc_error *error; char *tmp_name; static const size_t buffer_size = 124631; unsigned char *buffer = gpr_malloc(buffer_size); @@ -150,8 +151,8 @@ static void test_load_big_file(void) { GPR_ASSERT(fwrite(buffer, 1, buffer_size, tmp) == buffer_size); fclose(tmp); - slice = gpr_load_file(tmp_name, 0, &success); - GPR_ASSERT(success == 1); + error = grpc_load_file(tmp_name, 0, &slice); + GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(GPR_SLICE_LENGTH(slice) == buffer_size); current = GPR_SLICE_START_PTR(slice); for (i = 0; i < buffer_size; i++) { diff --git a/test/core/iomgr/resolve_address_test.c b/test/core/iomgr/resolve_address_test.c index c3ede1801d..4417d96043 100644 --- a/test/core/iomgr/resolve_address_test.c +++ b/test/core/iomgr/resolve_address_test.c @@ -42,54 +42,74 @@ static gpr_timespec test_deadline(void) { return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(100); } -static void must_succeed(grpc_exec_ctx *exec_ctx, void *evp, - grpc_resolved_addresses *p) { - GPR_ASSERT(p); - GPR_ASSERT(p->naddrs >= 1); - grpc_resolved_addresses_destroy(p); - gpr_event_set(evp, (void *)1); +typedef struct args_struct { + gpr_event ev; + grpc_resolved_addresses *addrs; +} args_struct; + +void args_init(args_struct *args) { + gpr_event_init(&args->ev); + args->addrs = NULL; +} + +void args_finish(args_struct *args) { + GPR_ASSERT(gpr_event_wait(&args->ev, test_deadline())); + grpc_resolved_addresses_destroy(args->addrs); +} + +static void must_succeed(grpc_exec_ctx *exec_ctx, void *argsp, + grpc_error *err) { + args_struct *args = argsp; + GPR_ASSERT(err == GRPC_ERROR_NONE); + GPR_ASSERT(args->addrs != NULL); + GPR_ASSERT(args->addrs->naddrs > 0); + gpr_event_set(&args->ev, (void *)1); } -static void must_fail(grpc_exec_ctx *exec_ctx, void *evp, - grpc_resolved_addresses *p) { - GPR_ASSERT(!p); - gpr_event_set(evp, (void *)1); +static void must_fail(grpc_exec_ctx *exec_ctx, void *argsp, grpc_error *err) { + args_struct *args = argsp; + GPR_ASSERT(err != GRPC_ERROR_NONE); + gpr_event_set(&args->ev, (void *)1); } static void test_localhost(void) { - gpr_event ev; - gpr_event_init(&ev); + args_struct args; + args_init(&args); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resolve_address(&exec_ctx, "localhost:1", NULL, must_succeed, &ev); + grpc_resolve_address(&exec_ctx, "localhost:1", NULL, + grpc_closure_create(must_succeed, &args), &args.addrs); grpc_exec_ctx_finish(&exec_ctx); - GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); + args_finish(&args); } static void test_default_port(void) { - gpr_event ev; - gpr_event_init(&ev); + args_struct args; + args_init(&args); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resolve_address(&exec_ctx, "localhost", "1", must_succeed, &ev); + grpc_resolve_address(&exec_ctx, "localhost", "1", + grpc_closure_create(must_succeed, &args), &args.addrs); grpc_exec_ctx_finish(&exec_ctx); - GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); + args_finish(&args); } static void test_missing_default_port(void) { - gpr_event ev; - gpr_event_init(&ev); + args_struct args; + args_init(&args); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resolve_address(&exec_ctx, "localhost", NULL, must_fail, &ev); + grpc_resolve_address(&exec_ctx, "localhost", NULL, + grpc_closure_create(must_fail, &args), &args.addrs); grpc_exec_ctx_finish(&exec_ctx); - GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); + args_finish(&args); } static void test_ipv6_with_port(void) { - gpr_event ev; - gpr_event_init(&ev); + args_struct args; + args_init(&args); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resolve_address(&exec_ctx, "[2001:db8::1]:1", NULL, must_succeed, &ev); + grpc_resolve_address(&exec_ctx, "[2001:db8::1]:1", NULL, + grpc_closure_create(must_succeed, &args), &args.addrs); grpc_exec_ctx_finish(&exec_ctx); - GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); + args_finish(&args); } static void test_ipv6_without_port(void) { @@ -98,12 +118,13 @@ static void test_ipv6_without_port(void) { }; unsigned i; for (i = 0; i < sizeof(kCases) / sizeof(*kCases); i++) { - gpr_event ev; - gpr_event_init(&ev); + args_struct args; + args_init(&args); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resolve_address(&exec_ctx, kCases[i], "80", must_succeed, &ev); + grpc_resolve_address(&exec_ctx, kCases[i], "80", + grpc_closure_create(must_succeed, &args), &args.addrs); grpc_exec_ctx_finish(&exec_ctx); - GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); + args_finish(&args); } } @@ -113,12 +134,13 @@ static void test_invalid_ip_addresses(void) { }; unsigned i; for (i = 0; i < sizeof(kCases) / sizeof(*kCases); i++) { - gpr_event ev; - gpr_event_init(&ev); + args_struct args; + args_init(&args); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resolve_address(&exec_ctx, kCases[i], NULL, must_fail, &ev); + grpc_resolve_address(&exec_ctx, kCases[i], NULL, + grpc_closure_create(must_fail, &args), &args.addrs); grpc_exec_ctx_finish(&exec_ctx); - GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); + args_finish(&args); } } @@ -128,12 +150,13 @@ static void test_unparseable_hostports(void) { }; unsigned i; for (i = 0; i < sizeof(kCases) / sizeof(*kCases); i++) { - gpr_event ev; - gpr_event_init(&ev); + args_struct args; + args_init(&args); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resolve_address(&exec_ctx, kCases[i], "1", must_fail, &ev); + grpc_resolve_address(&exec_ctx, kCases[i], "1", + grpc_closure_create(must_fail, &args), &args.addrs); grpc_exec_ctx_finish(&exec_ctx); - GPR_ASSERT(gpr_event_wait(&ev, test_deadline())); + args_finish(&args); } } diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c index 85c027a978..297531c44d 100644 --- a/test/core/iomgr/socket_utils_test.c +++ b/test/core/iomgr/socket_utils_test.c @@ -47,14 +47,22 @@ int main(int argc, char **argv) { sock = socket(PF_INET, SOCK_STREAM, 0); GPR_ASSERT(sock > 0); - GPR_ASSERT(grpc_set_socket_nonblocking(sock, 1)); - GPR_ASSERT(grpc_set_socket_nonblocking(sock, 0)); - GPR_ASSERT(grpc_set_socket_cloexec(sock, 1)); - GPR_ASSERT(grpc_set_socket_cloexec(sock, 0)); - GPR_ASSERT(grpc_set_socket_reuse_addr(sock, 1)); - GPR_ASSERT(grpc_set_socket_reuse_addr(sock, 0)); - GPR_ASSERT(grpc_set_socket_low_latency(sock, 1)); - GPR_ASSERT(grpc_set_socket_low_latency(sock, 0)); + GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_nonblocking", + grpc_set_socket_nonblocking(sock, 1))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_nonblocking", + grpc_set_socket_nonblocking(sock, 0))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_cloexec", + grpc_set_socket_cloexec(sock, 1))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_cloexec", + grpc_set_socket_cloexec(sock, 0))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_reuse_addr", + grpc_set_socket_reuse_addr(sock, 1))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_reuse_addr", + grpc_set_socket_reuse_addr(sock, 0))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_low_latency", + grpc_set_socket_low_latency(sock, 1))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_low_latency", + grpc_set_socket_low_latency(sock, 0))); close(sock); diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c index 22dc9366c3..d0c1047423 100644 --- a/test/core/iomgr/tcp_client_posix_test.c +++ b/test/core/iomgr/tcp_client_posix_test.c @@ -63,22 +63,24 @@ static gpr_timespec test_deadline(void) { static void finish_connection() { gpr_mu_lock(g_mu); g_connections_complete++; - grpc_pollset_kick(g_pollset, NULL); + GPR_ASSERT( + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL))); gpr_mu_unlock(g_mu); } -static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { GPR_ASSERT(g_connecting != NULL); - GPR_ASSERT(success); + GPR_ASSERT(error == GRPC_ERROR_NONE); grpc_endpoint_shutdown(exec_ctx, g_connecting); grpc_endpoint_destroy(exec_ctx, g_connecting); g_connecting = NULL; finish_connection(); } -static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { GPR_ASSERT(g_connecting == NULL); - GPR_ASSERT(!success); + GPR_ASSERT(error != GRPC_ERROR_NONE); finish_connection(); } @@ -125,9 +127,11 @@ void test_succeeds(void) { while (g_connections_complete == connections_complete_before) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), - GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5)); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), + GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_flush(&exec_ctx); gpr_mu_lock(g_mu); @@ -168,7 +172,9 @@ void test_fails(void) { gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC); gpr_timespec polling_deadline = test_deadline(); if (!grpc_timer_check(&exec_ctx, now, &polling_deadline)) { - grpc_pollset_work(&exec_ctx, g_pollset, &worker, now, polling_deadline); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", grpc_pollset_work(&exec_ctx, g_pollset, &worker, now, + polling_deadline))); } gpr_mu_unlock(g_mu); grpc_exec_ctx_flush(&exec_ctx); @@ -179,7 +185,8 @@ void test_fails(void) { grpc_exec_ctx_finish(&exec_ctx); } -static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) { +static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, + grpc_error *error) { grpc_pollset_destroy(p); } diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c index 19ba258303..42614567ca 100644 --- a/test/core/iomgr/tcp_posix_test.c +++ b/test/core/iomgr/tcp_posix_test.c @@ -139,12 +139,13 @@ static size_t count_slices(gpr_slice *slices, size_t nslices, return num_bytes; } -static void read_cb(grpc_exec_ctx *exec_ctx, void *user_data, bool success) { +static void read_cb(grpc_exec_ctx *exec_ctx, void *user_data, + grpc_error *error) { struct read_socket_state *state = (struct read_socket_state *)user_data; size_t read_bytes; int current_data; - GPR_ASSERT(success); + GPR_ASSERT(error == GRPC_ERROR_NONE); gpr_mu_lock(g_mu); current_data = state->read_bytes % 256; @@ -192,8 +193,10 @@ static void read_test(size_t num_bytes, size_t slice_size) { gpr_mu_lock(g_mu); while (state.read_bytes < state.target_read_bytes) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), deadline); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), deadline))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); @@ -238,8 +241,10 @@ static void large_read_test(size_t slice_size) { gpr_mu_lock(g_mu); while (state.read_bytes < state.target_read_bytes) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), deadline); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), deadline))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); @@ -281,13 +286,15 @@ static gpr_slice *allocate_blocks(size_t num_bytes, size_t slice_size, } static void write_done(grpc_exec_ctx *exec_ctx, - void *user_data /* write_socket_state */, bool success) { + void *user_data /* write_socket_state */, + grpc_error *error) { struct write_socket_state *state = (struct write_socket_state *)user_data; gpr_log(GPR_INFO, "Write done callback called"); gpr_mu_lock(g_mu); gpr_log(GPR_INFO, "Signalling write done"); state->write_done = 1; - grpc_pollset_kick(g_pollset, NULL); + GPR_ASSERT( + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL))); gpr_mu_unlock(g_mu); } @@ -306,9 +313,11 @@ void drain_socket_blocking(int fd, size_t num_bytes, size_t read_size) { for (;;) { grpc_pollset_worker *worker = NULL; gpr_mu_lock(g_mu); - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), - GRPC_TIMEOUT_MILLIS_TO_DEADLINE(10)); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), + GRPC_TIMEOUT_MILLIS_TO_DEADLINE(10)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); do { @@ -371,8 +380,10 @@ static void write_test(size_t num_bytes, size_t slice_size) { if (state.write_done) { break; } - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), deadline); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), deadline))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); @@ -385,10 +396,11 @@ static void write_test(size_t num_bytes, size_t slice_size) { grpc_exec_ctx_finish(&exec_ctx); } -void on_fd_released(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +void on_fd_released(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *errors) { int *done = arg; *done = 1; - grpc_pollset_kick(g_pollset, NULL); + GPR_ASSERT( + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL))); } /* Do a read_test, then release fd and try to read/write again. Verify that @@ -429,8 +441,10 @@ static void release_fd_test(size_t num_bytes, size_t slice_size) { gpr_mu_lock(g_mu); while (state.read_bytes < state.target_read_bytes) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), deadline); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), deadline))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(g_mu); @@ -443,8 +457,10 @@ static void release_fd_test(size_t num_bytes, size_t slice_size) { gpr_mu_lock(g_mu); while (!fd_released_done) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), deadline); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), deadline))); } gpr_mu_unlock(g_mu); GPR_ASSERT(fd_released_done == 1); @@ -506,7 +522,8 @@ static grpc_endpoint_test_config configs[] = { {"tcp/tcp_socketpair", create_fixture_tcp_socketpair, clean_up}, }; -static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) { +static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, + grpc_error *error) { grpc_pollset_destroy(p); } @@ -517,8 +534,8 @@ int main(int argc, char **argv) { grpc_init(); g_pollset = gpr_malloc(grpc_pollset_size()); grpc_pollset_init(g_pollset, &g_mu); - run_tests(); grpc_endpoint_tests(configs[0], g_pollset, g_mu); + run_tests(); grpc_closure_init(&destroyed, destroy_pollset, g_pollset); grpc_pollset_shutdown(&exec_ctx, g_pollset, &destroyed); grpc_exec_ctx_finish(&exec_ctx); diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c index 222ae774fc..eda774fca5 100644 --- a/test/core/iomgr/tcp_server_posix_test.c +++ b/test/core/iomgr/tcp_server_posix_test.c @@ -90,7 +90,7 @@ static void on_connect_result_set(on_connect_result *result, } static void server_weak_ref_shutdown(grpc_exec_ctx *exec_ctx, void *arg, - bool success) { + grpc_error *error) { server_weak_ref *weak_ref = arg; weak_ref->server = NULL; } @@ -121,20 +121,23 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp, gpr_mu_lock(g_mu); on_connect_result_set(&g_result, acceptor); g_nconnects++; - grpc_pollset_kick(g_pollset, NULL); + GPR_ASSERT( + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL))); gpr_mu_unlock(g_mu); } static void test_no_op(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_tcp_server *s = grpc_tcp_server_create(NULL); + grpc_tcp_server *s; + GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, &s)); grpc_tcp_server_unref(&exec_ctx, s); grpc_exec_ctx_finish(&exec_ctx); } static void test_no_op_with_start(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_tcp_server *s = grpc_tcp_server_create(NULL); + grpc_tcp_server *s; + GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, &s)); LOG_TEST("test_no_op_with_start"); grpc_tcp_server_start(&exec_ctx, s, NULL, 0, on_connect, NULL); grpc_tcp_server_unref(&exec_ctx, s); @@ -144,13 +147,16 @@ static void test_no_op_with_start(void) { static void test_no_op_with_port(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; struct sockaddr_in addr; - grpc_tcp_server *s = grpc_tcp_server_create(NULL); + grpc_tcp_server *s; + GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, &s)); LOG_TEST("test_no_op_with_port"); memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; - GPR_ASSERT( - grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr)) > 0); + int port; + GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr), + &port) == GRPC_ERROR_NONE && + port > 0); grpc_tcp_server_unref(&exec_ctx, s); grpc_exec_ctx_finish(&exec_ctx); @@ -159,13 +165,16 @@ static void test_no_op_with_port(void) { static void test_no_op_with_port_and_start(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; struct sockaddr_in addr; - grpc_tcp_server *s = grpc_tcp_server_create(NULL); + grpc_tcp_server *s; + GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, &s)); LOG_TEST("test_no_op_with_port_and_start"); + int port; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; - GPR_ASSERT( - grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr)) > 0); + GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr), + &port) == GRPC_ERROR_NONE && + port > 0); grpc_tcp_server_start(&exec_ctx, s, NULL, 0, on_connect, NULL); @@ -189,8 +198,10 @@ static void tcp_connect(grpc_exec_ctx *exec_ctx, const struct sockaddr *remote, while (g_nconnects == nconnects_before && gpr_time_cmp(deadline, gpr_now(deadline.clock_type)) > 0) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(exec_ctx, g_pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), deadline); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(exec_ctx, g_pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), deadline))); gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(exec_ctx); gpr_mu_lock(g_mu); @@ -214,7 +225,8 @@ static void test_connect(unsigned n) { int svr_port; unsigned svr1_fd_count; int svr1_port; - grpc_tcp_server *s = grpc_tcp_server_create(NULL); + grpc_tcp_server *s; + GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, &s)); unsigned i; server_weak_ref weak_ref; server_weak_ref_init(&weak_ref); @@ -223,14 +235,17 @@ static void test_connect(unsigned n) { memset(&addr, 0, sizeof(addr)); memset(&addr1, 0, sizeof(addr1)); addr.ss_family = addr1.ss_family = AF_INET; - svr_port = grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len); + GPR_ASSERT(GRPC_ERROR_NONE == + grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len, + &svr_port)); GPR_ASSERT(svr_port > 0); /* Cannot use wildcard (port==0), because add_port() will try to reuse the same port as a previous add_port(). */ svr1_port = grpc_pick_unused_port_or_die(); grpc_sockaddr_set_port((struct sockaddr *)&addr1, svr1_port); - GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr1, addr_len) == - svr1_port); + GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr1, addr_len, + &svr_port) == GRPC_ERROR_NONE && + svr_port == svr1_port); /* Bad port_index. */ GPR_ASSERT(grpc_tcp_server_port_fd_count(s, 2) == 0); @@ -306,7 +321,8 @@ static void test_connect(unsigned n) { grpc_exec_ctx_finish(&exec_ctx); } -static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) { +static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, + grpc_error *error) { grpc_pollset_destroy(p); } diff --git a/test/core/iomgr/timer_list_test.c b/test/core/iomgr/timer_list_test.c index 2e0f5c8701..be8988ab75 100644 --- a/test/core/iomgr/timer_list_test.c +++ b/test/core/iomgr/timer_list_test.c @@ -42,8 +42,8 @@ static int cb_called[MAX_CB][2]; -static void cb(grpc_exec_ctx *exec_ctx, void *arg, bool success) { - cb_called[(intptr_t)arg][success]++; +static void cb(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + cb_called[(intptr_t)arg][error == GRPC_ERROR_NONE]++; } static void add_test(void) { diff --git a/test/core/iomgr/workqueue_test.c b/test/core/iomgr/workqueue_test.c index 953cc35ee6..76ecfae74b 100644 --- a/test/core/iomgr/workqueue_test.c +++ b/test/core/iomgr/workqueue_test.c @@ -42,17 +42,20 @@ static gpr_mu *g_mu; static grpc_pollset *g_pollset; -static void must_succeed(grpc_exec_ctx *exec_ctx, void *p, bool success) { - GPR_ASSERT(success == 1); +static void must_succeed(grpc_exec_ctx *exec_ctx, void *p, grpc_error *error) { + GPR_ASSERT(error == GRPC_ERROR_NONE); gpr_mu_lock(g_mu); *(int *)p = 1; - grpc_pollset_kick(g_pollset, NULL); + GPR_ASSERT( + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(g_pollset, NULL))); gpr_mu_unlock(g_mu); } static void test_ref_unref(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_workqueue *wq = grpc_workqueue_create(&exec_ctx); + grpc_workqueue *wq; + GPR_ASSERT(GRPC_LOG_IF_ERROR("grpc_workqueue_create", + grpc_workqueue_create(&exec_ctx, &wq))); GRPC_WORKQUEUE_REF(wq, "test"); GRPC_WORKQUEUE_UNREF(&exec_ctx, wq, "test"); GRPC_WORKQUEUE_UNREF(&exec_ctx, wq, "destroy"); @@ -63,19 +66,23 @@ static void test_add_closure(void) { grpc_closure c; int done = 0; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_workqueue *wq = grpc_workqueue_create(&exec_ctx); + grpc_workqueue *wq; + GPR_ASSERT(GRPC_LOG_IF_ERROR("grpc_workqueue_create", + grpc_workqueue_create(&exec_ctx, &wq))); gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5); grpc_pollset_worker *worker = NULL; grpc_closure_init(&c, must_succeed, &done); - grpc_workqueue_push(wq, &c, 1); + grpc_workqueue_enqueue(&exec_ctx, wq, &c, GRPC_ERROR_NONE); grpc_workqueue_add_to_pollset(&exec_ctx, wq, g_pollset); gpr_mu_lock(g_mu); GPR_ASSERT(!done); while (!done) { - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(deadline.clock_type), deadline); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(deadline.clock_type), deadline))); } gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); @@ -89,19 +96,24 @@ static void test_flush(void) { grpc_closure c; int done = 0; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_workqueue *wq = grpc_workqueue_create(&exec_ctx); + grpc_workqueue *wq; + GPR_ASSERT(GRPC_LOG_IF_ERROR("grpc_workqueue_create", + grpc_workqueue_create(&exec_ctx, &wq))); gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5); grpc_pollset_worker *worker = NULL; grpc_closure_init(&c, must_succeed, &done); - grpc_exec_ctx_enqueue(&exec_ctx, &c, true, NULL); + grpc_exec_ctx_sched(&exec_ctx, &c, GRPC_ERROR_NONE, NULL); grpc_workqueue_flush(&exec_ctx, wq); grpc_workqueue_add_to_pollset(&exec_ctx, wq, g_pollset); gpr_mu_lock(g_mu); + GPR_ASSERT(!done); while (!done) { - grpc_pollset_work(&exec_ctx, g_pollset, &worker, - gpr_now(deadline.clock_type), deadline); + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, g_pollset, &worker, + gpr_now(deadline.clock_type), deadline))); } gpr_mu_unlock(g_mu); grpc_exec_ctx_finish(&exec_ctx); @@ -111,7 +123,8 @@ static void test_flush(void) { grpc_exec_ctx_finish(&exec_ctx); } -static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) { +static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, + grpc_error *error) { grpc_pollset_destroy(p); } diff --git a/test/core/security/create_jwt.c b/test/core/security/create_jwt.c index 3c36b767d3..1bd135f175 100644 --- a/test/core/security/create_jwt.c +++ b/test/core/security/create_jwt.c @@ -34,8 +34,8 @@ #include <stdio.h> #include <string.h> +#include "src/core/lib/iomgr/load_file.h" #include "src/core/lib/security/credentials/jwt/jwt_credentials.h" -#include "src/core/lib/support/load_file.h" #include <grpc/support/alloc.h> #include <grpc/support/cmdline.h> @@ -45,13 +45,10 @@ void create_jwt(const char *json_key_file_path, const char *service_url, const char *scope) { grpc_auth_json_key key; - int ok = 0; char *jwt; - gpr_slice json_key_data = gpr_load_file(json_key_file_path, 1, &ok); - if (!ok) { - fprintf(stderr, "Could not read %s.\n", json_key_file_path); - exit(1); - } + gpr_slice json_key_data; + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "load_file", grpc_load_file(json_key_file_path, 1, &json_key_data))); key = grpc_auth_json_key_create_from_string( (const char *)GPR_SLICE_START_PTR(json_key_data)); gpr_slice_unref(json_key_data); diff --git a/test/core/security/credentials_test.c b/test/core/security/credentials_test.c index 31e06372b9..e703dbdeb6 100644 --- a/test/core/security/credentials_test.c +++ b/test/core/security/credentials_test.c @@ -157,7 +157,7 @@ static grpc_httpcli_response http_response(int status, const char *body) { grpc_httpcli_response response; memset(&response, 0, sizeof(grpc_httpcli_response)); response.status = status; - response.body = (char *)body; + response.body = gpr_strdup((char *)body); response.body_length = strlen(body); return response; } @@ -247,6 +247,7 @@ static void test_oauth2_token_fetcher_creds_parsing_ok(void) { "Bearer ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_") == 0); grpc_credentials_md_store_unref(token_md); + grpc_http_response_destroy(&response); } static void test_oauth2_token_fetcher_creds_parsing_bad_http_status(void) { @@ -257,6 +258,7 @@ static void test_oauth2_token_fetcher_creds_parsing_bad_http_status(void) { GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response( &response, &token_md, &token_lifetime) == GRPC_CREDENTIALS_ERROR); + grpc_http_response_destroy(&response); } static void test_oauth2_token_fetcher_creds_parsing_empty_http_body(void) { @@ -266,6 +268,7 @@ static void test_oauth2_token_fetcher_creds_parsing_empty_http_body(void) { GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response( &response, &token_md, &token_lifetime) == GRPC_CREDENTIALS_ERROR); + grpc_http_response_destroy(&response); } static void test_oauth2_token_fetcher_creds_parsing_invalid_json(void) { @@ -279,6 +282,7 @@ static void test_oauth2_token_fetcher_creds_parsing_invalid_json(void) { GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response( &response, &token_md, &token_lifetime) == GRPC_CREDENTIALS_ERROR); + grpc_http_response_destroy(&response); } static void test_oauth2_token_fetcher_creds_parsing_missing_token(void) { @@ -291,6 +295,7 @@ static void test_oauth2_token_fetcher_creds_parsing_missing_token(void) { GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response( &response, &token_md, &token_lifetime) == GRPC_CREDENTIALS_ERROR); + grpc_http_response_destroy(&response); } static void test_oauth2_token_fetcher_creds_parsing_missing_token_type(void) { @@ -304,6 +309,7 @@ static void test_oauth2_token_fetcher_creds_parsing_missing_token_type(void) { GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response( &response, &token_md, &token_lifetime) == GRPC_CREDENTIALS_ERROR); + grpc_http_response_destroy(&response); } static void test_oauth2_token_fetcher_creds_parsing_missing_token_lifetime( @@ -317,6 +323,7 @@ static void test_oauth2_token_fetcher_creds_parsing_missing_token_lifetime( GPR_ASSERT(grpc_oauth2_token_fetcher_credentials_parse_server_response( &response, &token_md, &token_lifetime) == GRPC_CREDENTIALS_ERROR); + grpc_http_response_destroy(&response); } static void check_metadata(expected_md *expected, grpc_credentials_md *md_elems, @@ -549,37 +556,37 @@ static void validate_compute_engine_http_request( static int compute_engine_httpcli_get_success_override( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, - gpr_timespec deadline, grpc_httpcli_response_cb on_response, - void *user_data) { - grpc_httpcli_response response = - http_response(200, valid_oauth2_json_response); + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response) { validate_compute_engine_http_request(request); - on_response(exec_ctx, user_data, &response); + *response = http_response(200, valid_oauth2_json_response); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } static int compute_engine_httpcli_get_failure_override( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, - gpr_timespec deadline, grpc_httpcli_response_cb on_response, - void *user_data) { - grpc_httpcli_response response = http_response(403, "Not Authorized."); + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response) { validate_compute_engine_http_request(request); - on_response(exec_ctx, user_data, &response); + *response = http_response(403, "Not Authorized."); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } static int httpcli_post_should_not_be_called( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, gpr_timespec deadline, - grpc_httpcli_response_cb on_response, void *user_data) { + grpc_closure *on_done, grpc_httpcli_response *response) { GPR_ASSERT("HTTP POST should not be called" == NULL); return 1; } -static int httpcli_get_should_not_be_called( - grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, - gpr_timespec deadline, grpc_httpcli_response_cb on_response, - void *user_data) { +static int httpcli_get_should_not_be_called(grpc_exec_ctx *exec_ctx, + const grpc_httpcli_request *request, + gpr_timespec deadline, + grpc_closure *on_done, + grpc_httpcli_response *response) { GPR_ASSERT("HTTP GET should not be called" == NULL); return 1; } @@ -653,21 +660,20 @@ static void validate_refresh_token_http_request( static int refresh_token_httpcli_post_success( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, const char *body, size_t body_size, gpr_timespec deadline, - grpc_httpcli_response_cb on_response, void *user_data) { - grpc_httpcli_response response = - http_response(200, valid_oauth2_json_response); + grpc_closure *on_done, grpc_httpcli_response *response) { validate_refresh_token_http_request(request, body, body_size); - on_response(exec_ctx, user_data, &response); + *response = http_response(200, valid_oauth2_json_response); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } static int refresh_token_httpcli_post_failure( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, const char *body, size_t body_size, gpr_timespec deadline, - grpc_httpcli_response_cb on_response, void *user_data) { - grpc_httpcli_response response = http_response(403, "Not Authorized."); + grpc_closure *on_done, grpc_httpcli_response *response) { validate_refresh_token_http_request(request, body, body_size); - on_response(exec_ctx, user_data, &response); + *response = http_response(403, "Not Authorized."); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } @@ -899,17 +905,17 @@ static void test_google_default_creds_refresh_token(void) { static int default_creds_gce_detection_httpcli_get_success_override( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, - gpr_timespec deadline, grpc_httpcli_response_cb on_response, - void *user_data) { - grpc_httpcli_response response = http_response(200, ""); - grpc_http_header header; - header.key = "Metadata-Flavor"; - header.value = "Google"; - response.hdr_count = 1; - response.hdrs = &header; + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response) { + *response = http_response(200, ""); + grpc_http_header *headers = gpr_malloc(sizeof(*headers) * 1); + headers[0].key = gpr_strdup("Metadata-Flavor"); + headers[0].value = gpr_strdup("Google"); + response->hdr_count = 1; + response->hdrs = headers; GPR_ASSERT(strcmp(request->http.path, "/") == 0); GPR_ASSERT(strcmp(request->host, "metadata.google.internal") == 0); - on_response(exec_ctx, user_data, &response); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } @@ -961,13 +967,13 @@ static void test_google_default_creds_gce(void) { static int default_creds_gce_detection_httpcli_get_failure_override( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, - gpr_timespec deadline, grpc_httpcli_response_cb on_response, - void *user_data) { + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response) { /* No magic header. */ - grpc_httpcli_response response = http_response(200, ""); GPR_ASSERT(strcmp(request->http.path, "/") == 0); GPR_ASSERT(strcmp(request->host, "metadata.google.internal") == 0); - on_response(exec_ctx, user_data, &response); + *response = http_response(200, ""); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } diff --git a/test/core/security/fetch_oauth2.c b/test/core/security/fetch_oauth2.c index 2a102fb139..292f59a7c1 100644 --- a/test/core/security/fetch_oauth2.c +++ b/test/core/security/fetch_oauth2.c @@ -42,19 +42,16 @@ #include <grpc/support/slice.h> #include <grpc/support/sync.h> +#include "src/core/lib/iomgr/load_file.h" #include "src/core/lib/security/credentials/credentials.h" -#include "src/core/lib/support/load_file.h" #include "test/core/security/oauth2_utils.h" static grpc_call_credentials *create_refresh_token_creds( const char *json_refresh_token_file_path) { - int success; - gpr_slice refresh_token = - gpr_load_file(json_refresh_token_file_path, 1, &success); - if (!success) { - gpr_log(GPR_ERROR, "Could not read file %s.", json_refresh_token_file_path); - exit(1); - } + gpr_slice refresh_token; + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "load_file", + grpc_load_file(json_refresh_token_file_path, 1, &refresh_token))); return grpc_google_refresh_token_credentials_create( (const char *)GPR_SLICE_START_PTR(refresh_token), NULL); } diff --git a/test/core/security/jwt_verifier_test.c b/test/core/security/jwt_verifier_test.c index 7f4f4ffadf..36b331a777 100644 --- a/test/core/security/jwt_verifier_test.c +++ b/test/core/security/jwt_verifier_test.c @@ -278,24 +278,23 @@ static grpc_httpcli_response http_response(int status, char *body) { static int httpcli_post_should_not_be_called( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, gpr_timespec deadline, - grpc_httpcli_response_cb on_response, void *user_data) { + grpc_closure *on_done, grpc_httpcli_response *response) { GPR_ASSERT("HTTP POST should not be called" == NULL); return 1; } static int httpcli_get_google_keys_for_email( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, - gpr_timespec deadline, grpc_httpcli_response_cb on_response, - void *user_data) { - grpc_httpcli_response response = http_response(200, good_google_email_keys()); + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response) { + *response = http_response(200, good_google_email_keys()); GPR_ASSERT(request->handshaker == &grpc_httpcli_ssl); GPR_ASSERT(strcmp(request->host, "www.googleapis.com") == 0); GPR_ASSERT(strcmp(request->http.path, "/robot/v1/metadata/x509/" "777-abaslkan11hlb6nmim3bpspl31ud@developer." "gserviceaccount.com") == 0); - on_response(exec_ctx, user_data, &response); - gpr_free(response.body); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } @@ -325,22 +324,21 @@ static void test_jwt_verifier_google_email_issuer_success(void) { GPR_ASSERT(jwt != NULL); grpc_jwt_verifier_verify(&exec_ctx, verifier, NULL, jwt, expected_audience, on_verification_success, (void *)expected_user_data); + grpc_exec_ctx_finish(&exec_ctx); gpr_free(jwt); grpc_jwt_verifier_destroy(verifier); grpc_httpcli_set_override(NULL, NULL); - grpc_exec_ctx_finish(&exec_ctx); } static int httpcli_get_custom_keys_for_email( grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, - gpr_timespec deadline, grpc_httpcli_response_cb on_response, - void *user_data) { - grpc_httpcli_response response = http_response(200, gpr_strdup(good_jwk_set)); + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response) { + *response = http_response(200, gpr_strdup(good_jwk_set)); GPR_ASSERT(request->handshaker == &grpc_httpcli_ssl); GPR_ASSERT(strcmp(request->host, "keys.bar.com") == 0); GPR_ASSERT(strcmp(request->http.path, "/jwk/foo@bar.com") == 0); - on_response(exec_ctx, user_data, &response); - gpr_free(response.body); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } @@ -360,40 +358,36 @@ static void test_jwt_verifier_custom_email_issuer_success(void) { GPR_ASSERT(jwt != NULL); grpc_jwt_verifier_verify(&exec_ctx, verifier, NULL, jwt, expected_audience, on_verification_success, (void *)expected_user_data); + grpc_exec_ctx_finish(&exec_ctx); gpr_free(jwt); grpc_jwt_verifier_destroy(verifier); grpc_httpcli_set_override(NULL, NULL); - grpc_exec_ctx_finish(&exec_ctx); } static int httpcli_get_jwk_set(grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, - gpr_timespec deadline, - grpc_httpcli_response_cb on_response, - void *user_data) { - grpc_httpcli_response response = http_response(200, gpr_strdup(good_jwk_set)); + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response) { + *response = http_response(200, gpr_strdup(good_jwk_set)); GPR_ASSERT(request->handshaker == &grpc_httpcli_ssl); GPR_ASSERT(strcmp(request->host, "www.googleapis.com") == 0); GPR_ASSERT(strcmp(request->http.path, "/oauth2/v3/certs") == 0); - on_response(exec_ctx, user_data, &response); - gpr_free(response.body); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } static int httpcli_get_openid_config(grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, gpr_timespec deadline, - grpc_httpcli_response_cb on_response, - void *user_data) { - grpc_httpcli_response response = - http_response(200, gpr_strdup(good_openid_config)); + grpc_closure *on_done, + grpc_httpcli_response *response) { + *response = http_response(200, gpr_strdup(good_openid_config)); GPR_ASSERT(request->handshaker == &grpc_httpcli_ssl); GPR_ASSERT(strcmp(request->host, "accounts.google.com") == 0); GPR_ASSERT(strcmp(request->http.path, GRPC_OPENID_CONFIG_URL_SUFFIX) == 0); grpc_httpcli_set_override(httpcli_get_jwk_set, httpcli_post_should_not_be_called); - on_response(exec_ctx, user_data, &response); - gpr_free(response.body); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } @@ -413,10 +407,10 @@ static void test_jwt_verifier_url_issuer_success(void) { GPR_ASSERT(jwt != NULL); grpc_jwt_verifier_verify(&exec_ctx, verifier, NULL, jwt, expected_audience, on_verification_success, (void *)expected_user_data); + grpc_exec_ctx_finish(&exec_ctx); gpr_free(jwt); grpc_jwt_verifier_destroy(verifier); grpc_httpcli_set_override(NULL, NULL); - grpc_exec_ctx_finish(&exec_ctx); } static void on_verification_key_retrieval_error(void *user_data, @@ -429,14 +423,11 @@ static void on_verification_key_retrieval_error(void *user_data, static int httpcli_get_bad_json(grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, - gpr_timespec deadline, - grpc_httpcli_response_cb on_response, - void *user_data) { - grpc_httpcli_response response = - http_response(200, gpr_strdup("{\"bad\": \"stuff\"}")); + gpr_timespec deadline, grpc_closure *on_done, + grpc_httpcli_response *response) { + *response = http_response(200, gpr_strdup("{\"bad\": \"stuff\"}")); GPR_ASSERT(request->handshaker == &grpc_httpcli_ssl); - on_response(exec_ctx, user_data, &response); - gpr_free(response.body); + grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); return 1; } @@ -457,10 +448,10 @@ static void test_jwt_verifier_url_issuer_bad_config(void) { grpc_jwt_verifier_verify(&exec_ctx, verifier, NULL, jwt, expected_audience, on_verification_key_retrieval_error, (void *)expected_user_data); + grpc_exec_ctx_finish(&exec_ctx); gpr_free(jwt); grpc_jwt_verifier_destroy(verifier); grpc_httpcli_set_override(NULL, NULL); - grpc_exec_ctx_finish(&exec_ctx); } static void test_jwt_verifier_bad_json_key(void) { @@ -480,10 +471,10 @@ static void test_jwt_verifier_bad_json_key(void) { grpc_jwt_verifier_verify(&exec_ctx, verifier, NULL, jwt, expected_audience, on_verification_key_retrieval_error, (void *)expected_user_data); + grpc_exec_ctx_finish(&exec_ctx); gpr_free(jwt); grpc_jwt_verifier_destroy(verifier); grpc_httpcli_set_override(NULL, NULL); - grpc_exec_ctx_finish(&exec_ctx); } static void corrupt_jwt_sig(char *jwt) { @@ -529,16 +520,17 @@ static void test_jwt_verifier_bad_signature(void) { grpc_jwt_verifier_verify(&exec_ctx, verifier, NULL, jwt, expected_audience, on_verification_bad_signature, (void *)expected_user_data); + grpc_exec_ctx_finish(&exec_ctx); gpr_free(jwt); grpc_jwt_verifier_destroy(verifier); grpc_httpcli_set_override(NULL, NULL); - grpc_exec_ctx_finish(&exec_ctx); } -static int httpcli_get_should_not_be_called( - grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, - gpr_timespec deadline, grpc_httpcli_response_cb on_response, - void *user_data) { +static int httpcli_get_should_not_be_called(grpc_exec_ctx *exec_ctx, + const grpc_httpcli_request *request, + gpr_timespec deadline, + grpc_closure *on_done, + grpc_httpcli_response *response) { GPR_ASSERT(0); return 1; } @@ -559,9 +551,9 @@ static void test_jwt_verifier_bad_format(void) { grpc_jwt_verifier_verify(&exec_ctx, verifier, NULL, "bad jwt", expected_audience, on_verification_bad_format, (void *)expected_user_data); + grpc_exec_ctx_finish(&exec_ctx); grpc_jwt_verifier_destroy(verifier); grpc_httpcli_set_override(NULL, NULL); - grpc_exec_ctx_finish(&exec_ctx); } /* find verification key: bad jks, cannot find key in jks */ diff --git a/test/core/security/oauth2_utils.c b/test/core/security/oauth2_utils.c index cb27a1a564..a334edc32d 100644 --- a/test/core/security/oauth2_utils.c +++ b/test/core/security/oauth2_utils.c @@ -70,11 +70,14 @@ static void on_oauth2_response(grpc_exec_ctx *exec_ctx, void *user_data, gpr_mu_lock(request->mu); request->is_done = 1; request->token = token; - grpc_pollset_kick(grpc_polling_entity_pollset(&request->pops), NULL); + GRPC_LOG_IF_ERROR( + "pollset_kick", + grpc_pollset_kick(grpc_polling_entity_pollset(&request->pops), NULL)); gpr_mu_unlock(request->mu); } -static void do_nothing(grpc_exec_ctx *exec_ctx, void *unused, bool success) {} +static void do_nothing(grpc_exec_ctx *exec_ctx, void *unused, + grpc_error *error) {} char *grpc_test_fetch_oauth2_token_with_credentials( grpc_call_credentials *creds) { @@ -98,9 +101,14 @@ char *grpc_test_fetch_oauth2_token_with_credentials( gpr_mu_lock(request.mu); while (!request.is_done) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&request.pops), - &worker, gpr_now(GPR_CLOCK_MONOTONIC), - gpr_inf_future(GPR_CLOCK_MONOTONIC)); + if (!GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, + grpc_polling_entity_pollset(&request.pops), + &worker, gpr_now(GPR_CLOCK_MONOTONIC), + gpr_inf_future(GPR_CLOCK_MONOTONIC)))) { + request.is_done = 1; + } } gpr_mu_unlock(request.mu); diff --git a/test/core/security/print_google_default_creds_token.c b/test/core/security/print_google_default_creds_token.c index 07c8c58d41..18fbc3c41c 100644 --- a/test/core/security/print_google_default_creds_token.c +++ b/test/core/security/print_google_default_creds_token.c @@ -67,7 +67,9 @@ static void on_metadata_response(grpc_exec_ctx *exec_ctx, void *user_data, } gpr_mu_lock(sync->mu); sync->is_done = 1; - grpc_pollset_kick(grpc_polling_entity_pollset(&sync->pops), NULL); + GRPC_LOG_IF_ERROR( + "pollset_kick", + grpc_pollset_kick(grpc_polling_entity_pollset(&sync->pops), NULL)); gpr_mu_unlock(sync->mu); } @@ -106,9 +108,13 @@ int main(int argc, char **argv) { gpr_mu_lock(sync.mu); while (!sync.is_done) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&sync.pops), - &worker, gpr_now(GPR_CLOCK_MONOTONIC), - gpr_inf_future(GPR_CLOCK_MONOTONIC)); + if (!GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, + grpc_polling_entity_pollset(&sync.pops), &worker, + gpr_now(GPR_CLOCK_MONOTONIC), + gpr_inf_future(GPR_CLOCK_MONOTONIC)))) + sync.is_done = 1; gpr_mu_unlock(sync.mu); grpc_exec_ctx_flush(&exec_ctx); gpr_mu_lock(sync.mu); diff --git a/test/core/security/secure_endpoint_test.c b/test/core/security/secure_endpoint_test.c index 6aba21a98c..1d2bf73bb1 100644 --- a/test/core/security/secure_endpoint_test.c +++ b/test/core/security/secure_endpoint_test.c @@ -139,7 +139,8 @@ static grpc_endpoint_test_config configs[] = { secure_endpoint_create_fixture_tcp_socketpair_leftover, clean_up}, }; -static void inc_call_ctr(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +static void inc_call_ctr(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { ++*(int *)arg; } @@ -172,7 +173,8 @@ static void test_leftover(grpc_endpoint_test_config config, size_t slice_size) { clean_up(); } -static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) { +static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, + grpc_error *error) { grpc_pollset_destroy(p); } diff --git a/test/core/security/verify_jwt.c b/test/core/security/verify_jwt.c index ecb873b655..728d2d637a 100644 --- a/test/core/security/verify_jwt.c +++ b/test/core/security/verify_jwt.c @@ -81,7 +81,7 @@ static void on_jwt_verification_done(void *user_data, gpr_mu_lock(sync->mu); sync->is_done = 1; - grpc_pollset_kick(sync->pollset, NULL); + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(sync->pollset, NULL)); gpr_mu_unlock(sync->mu); } @@ -115,9 +115,12 @@ int main(int argc, char **argv) { gpr_mu_lock(sync.mu); while (!sync.is_done) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, sync.pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), - gpr_inf_future(GPR_CLOCK_MONOTONIC)); + if (!GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, sync.pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), + gpr_inf_future(GPR_CLOCK_MONOTONIC)))) + sync.is_done = true; gpr_mu_unlock(sync.mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(sync.mu); diff --git a/test/core/support/log_test.c b/test/core/support/log_test.c index 0ae298aa4c..807a8175d7 100644 --- a/test/core/support/log_test.c +++ b/test/core/support/log_test.c @@ -78,11 +78,13 @@ int main(int argc, char **argv) { gpr_set_log_function(test_callback); gpr_log_message(GPR_INFO, "hello 1 2 3"); gpr_log(GPR_INFO, "hello %d %d %d", 1, 2, 3); + gpr_set_log_function(NULL); /* gpr_log_verbosity_init() will be effective only once, and only before * gpr_set_log_verbosity() is called */ gpr_setenv("GRPC_VERBOSITY", "ERROR"); gpr_log_verbosity_init(); + test_log_function_reached(GPR_ERROR); test_log_function_unreached(GPR_INFO); test_log_function_unreached(GPR_DEBUG); diff --git a/test/core/support/tls_test.c b/test/core/support/tls_test.c index 7b732ee10e..2acc302ef2 100644 --- a/test/core/support/tls_test.c +++ b/test/core/support/tls_test.c @@ -50,7 +50,7 @@ static void thd_body(void *arg) { GPR_ASSERT(gpr_tls_get(&test_var) == 0); - for (i = 0; i < 10000000; i++) { + for (i = 0; i < 100000; i++) { gpr_tls_set(&test_var, i); GPR_ASSERT(gpr_tls_get(&test_var) == i); } diff --git a/test/core/surface/completion_queue_test.c b/test/core/surface/completion_queue_test.c index 2fcd7f5a93..1486d2508f 100644 --- a/test/core/surface/completion_queue_test.c +++ b/test/core/surface/completion_queue_test.c @@ -96,8 +96,8 @@ static void test_cq_end_op(void) { cc = grpc_completion_queue_create(NULL); grpc_cq_begin_op(cc, tag); - grpc_cq_end_op(&exec_ctx, cc, tag, 1, do_nothing_end_completion, NULL, - &completion); + grpc_cq_end_op(&exec_ctx, cc, tag, GRPC_ERROR_NONE, do_nothing_end_completion, + NULL, &completion); ev = grpc_completion_queue_next(cc, gpr_inf_past(GPR_CLOCK_REALTIME), NULL); GPR_ASSERT(ev.type == GRPC_OP_COMPLETE); @@ -155,8 +155,8 @@ static void test_pluck(void) { for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) { grpc_cq_begin_op(cc, tags[i]); - grpc_cq_end_op(&exec_ctx, cc, tags[i], 1, do_nothing_end_completion, NULL, - &completions[i]); + grpc_cq_end_op(&exec_ctx, cc, tags[i], GRPC_ERROR_NONE, + do_nothing_end_completion, NULL, &completions[i]); } for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) { @@ -167,8 +167,8 @@ static void test_pluck(void) { for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) { grpc_cq_begin_op(cc, tags[i]); - grpc_cq_end_op(&exec_ctx, cc, tags[i], 1, do_nothing_end_completion, NULL, - &completions[i]); + grpc_cq_end_op(&exec_ctx, cc, tags[i], GRPC_ERROR_NONE, + do_nothing_end_completion, NULL, &completions[i]); } for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) { @@ -240,8 +240,8 @@ static void test_too_many_plucks(void) { for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) { grpc_cq_begin_op(cc, tags[i]); - grpc_cq_end_op(&exec_ctx, cc, tags[i], 1, do_nothing_end_completion, NULL, - &completions[i]); + grpc_cq_end_op(&exec_ctx, cc, tags[i], GRPC_ERROR_NONE, + do_nothing_end_completion, NULL, &completions[i]); } for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) { @@ -294,8 +294,9 @@ static void producer_thread(void *arg) { gpr_log(GPR_INFO, "producer %d phase 2", opt->id); for (i = 0; i < TEST_THREAD_EVENTS; i++) { - grpc_cq_end_op(&exec_ctx, opt->cc, (void *)(intptr_t)1, 1, free_completion, - NULL, gpr_malloc(sizeof(grpc_cq_completion))); + grpc_cq_end_op(&exec_ctx, opt->cc, (void *)(intptr_t)1, GRPC_ERROR_NONE, + free_completion, NULL, + gpr_malloc(sizeof(grpc_cq_completion))); opt->events_triggered++; grpc_exec_ctx_finish(&exec_ctx); } diff --git a/test/core/surface/concurrent_connectivity_test.c b/test/core/surface/concurrent_connectivity_test.c index de9ba8d27b..f447a68887 100644 --- a/test/core/surface/concurrent_connectivity_test.c +++ b/test/core/surface/concurrent_connectivity_test.c @@ -1,35 +1,35 @@ /* -* -* 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. -* -*/ + * + * 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 <memory.h> #include <stdio.h> @@ -102,7 +102,7 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *vargs, grpc_endpoint *tcp, (void)acceptor; grpc_endpoint_shutdown(exec_ctx, tcp); grpc_endpoint_destroy(exec_ctx, tcp); - grpc_pollset_kick(args->pollset, NULL); + GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(args->pollset, NULL)); } void bad_server_thread(void *vargs) { @@ -112,10 +112,14 @@ void bad_server_thread(void *vargs) { struct sockaddr_storage addr; socklen_t addr_len = sizeof(addr); int port; - grpc_tcp_server *s = grpc_tcp_server_create(NULL); + grpc_tcp_server *s; + grpc_error *error = grpc_tcp_server_create(NULL, &s); + GPR_ASSERT(error == GRPC_ERROR_NONE); memset(&addr, 0, sizeof(addr)); addr.ss_family = AF_INET; - port = grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len); + error = + grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len, &port); + GPR_ASSERT(GRPC_LOG_IF_ERROR("grpc_tcp_server_add_port", error)); GPR_ASSERT(port > 0); gpr_asprintf(&args->addr, "localhost:%d", port); @@ -129,7 +133,11 @@ void bad_server_thread(void *vargs) { gpr_time_add(now, gpr_time_from_millis(100, GPR_TIMESPAN)); grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, args->pollset, &worker, now, deadline); + if (!GRPC_LOG_IF_ERROR("pollset_work", + grpc_pollset_work(&exec_ctx, args->pollset, &worker, + now, deadline))) { + gpr_atm_rel_store(&args->stop, 1); + } gpr_mu_unlock(args->mu); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(args->mu); @@ -144,7 +152,7 @@ void bad_server_thread(void *vargs) { } static void done_pollset_shutdown(grpc_exec_ctx *exec_ctx, void *pollset, - bool success) { + grpc_error *error) { grpc_pollset_destroy(pollset); gpr_free(pollset); } diff --git a/test/core/surface/lame_client_test.c b/test/core/surface/lame_client_test.c index edd50568d6..f36f980575 100644 --- a/test/core/surface/lame_client_test.c +++ b/test/core/surface/lame_client_test.c @@ -47,13 +47,14 @@ grpc_closure transport_op_cb; static void *tag(intptr_t x) { return (void *)x; } -void verify_connectivity(grpc_exec_ctx *exec_ctx, void *arg, bool success) { +void verify_connectivity(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { grpc_transport_op *op = arg; GPR_ASSERT(GRPC_CHANNEL_SHUTDOWN == *op->connectivity_state); - GPR_ASSERT(success); + GPR_ASSERT(error == GRPC_ERROR_NONE); } -void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, bool success) {} +void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {} void test_transport_op(grpc_channel *channel) { grpc_transport_op op; diff --git a/test/core/surface/sequential_connectivity_test.c b/test/core/surface/sequential_connectivity_test.c new file mode 100644 index 0000000000..2fba3927ba --- /dev/null +++ b/test/core/surface/sequential_connectivity_test.c @@ -0,0 +1,179 @@ +/* + * + * 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/alloc.h> +#include <grpc/support/host_port.h> +#include <grpc/support/log.h> +#include <grpc/support/thd.h> + +#include "src/core/lib/channel/channel_args.h" +#include "test/core/end2end/data/ssl_test_data.h" +#include "test/core/util/port.h" +#include "test/core/util/test_config.h" + +typedef struct test_fixture { + const char *name; + void (*add_server_port)(grpc_server *server, const char *addr); + grpc_channel *(*create_channel)(const char *addr); +} test_fixture; + +#define NUM_CONNECTIONS 1000 + +typedef struct { + grpc_server *server; + grpc_completion_queue *cq; +} server_thread_args; + +static void server_thread_func(void *args) { + server_thread_args *a = args; + grpc_event ev = grpc_completion_queue_next( + a->cq, gpr_inf_future(GPR_CLOCK_REALTIME), NULL); + GPR_ASSERT(ev.type == GRPC_OP_COMPLETE); + GPR_ASSERT(ev.tag == NULL); + GPR_ASSERT(ev.success == true); +} + +static void run_test(const test_fixture *fixture) { + gpr_log(GPR_INFO, "TEST: %s", fixture->name); + + grpc_init(); + + char *addr; + gpr_join_host_port(&addr, "localhost", grpc_pick_unused_port_or_die()); + + grpc_server *server = grpc_server_create(NULL, NULL); + fixture->add_server_port(server, addr); + grpc_completion_queue *server_cq = grpc_completion_queue_create(NULL); + grpc_server_register_completion_queue(server, server_cq, NULL); + grpc_server_start(server); + + server_thread_args sta = {server, server_cq}; + gpr_thd_id server_thread; + gpr_thd_options thdopt = gpr_thd_options_default(); + gpr_thd_options_set_joinable(&thdopt); + gpr_thd_new(&server_thread, server_thread_func, &sta, &thdopt); + + grpc_completion_queue *cq = grpc_completion_queue_create(NULL); + grpc_channel *channels[NUM_CONNECTIONS]; + for (size_t i = 0; i < NUM_CONNECTIONS; i++) { + channels[i] = fixture->create_channel(addr); + + gpr_timespec connect_deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(30); + grpc_connectivity_state state; + while ((state = grpc_channel_check_connectivity_state(channels[i], 1)) != + GRPC_CHANNEL_READY) { + grpc_channel_watch_connectivity_state(channels[i], state, + connect_deadline, cq, NULL); + grpc_event ev = grpc_completion_queue_next( + cq, gpr_inf_future(GPR_CLOCK_REALTIME), NULL); + GPR_ASSERT(ev.type == GRPC_OP_COMPLETE); + GPR_ASSERT(ev.tag == NULL); + GPR_ASSERT(ev.success == true); + } + } + + grpc_server_shutdown_and_notify(server, server_cq, NULL); + gpr_thd_join(server_thread); + + grpc_completion_queue_shutdown(server_cq); + grpc_completion_queue_shutdown(cq); + + while (grpc_completion_queue_next(server_cq, + gpr_inf_future(GPR_CLOCK_REALTIME), NULL) + .type != GRPC_QUEUE_SHUTDOWN) + ; + while ( + grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_REALTIME), NULL) + .type != GRPC_QUEUE_SHUTDOWN) + ; + + for (size_t i = 0; i < NUM_CONNECTIONS; i++) { + grpc_channel_destroy(channels[i]); + } + + grpc_server_destroy(server); + grpc_completion_queue_destroy(server_cq); + grpc_completion_queue_destroy(cq); + + grpc_shutdown(); + gpr_free(addr); +} + +static void insecure_test_add_port(grpc_server *server, const char *addr) { + grpc_server_add_insecure_http2_port(server, addr); +} + +static grpc_channel *insecure_test_create_channel(const char *addr) { + return grpc_insecure_channel_create(addr, NULL, NULL); +} + +static const test_fixture insecure_test = { + "insecure", insecure_test_add_port, insecure_test_create_channel, +}; + +static void secure_test_add_port(grpc_server *server, const char *addr) { + grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key, + test_server1_cert}; + grpc_server_credentials *ssl_creds = + grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1, 0, NULL); + grpc_server_add_secure_http2_port(server, addr, ssl_creds); + grpc_server_credentials_release(ssl_creds); +} + +static grpc_channel *secure_test_create_channel(const char *addr) { + grpc_channel_credentials *ssl_creds = + grpc_ssl_credentials_create(NULL, NULL, NULL); + grpc_arg ssl_name_override = {GRPC_ARG_STRING, + GRPC_SSL_TARGET_NAME_OVERRIDE_ARG, + {"foo.test.google.fr"}}; + grpc_channel_args *new_client_args = + grpc_channel_args_copy_and_add(NULL, &ssl_name_override, 1); + grpc_channel *channel = + grpc_secure_channel_create(ssl_creds, addr, new_client_args, NULL); + grpc_channel_args_destroy(new_client_args); + grpc_channel_credentials_release(ssl_creds); + return channel; +} + +static const test_fixture secure_test = { + "secure", secure_test_add_port, secure_test_create_channel, +}; + +int main(int argc, char **argv) { + grpc_test_init(argc, argv); + + run_test(&insecure_test); + run_test(&secure_test); +} diff --git a/test/core/surface/server_test.c b/test/core/surface/server_test.c index 1e94c5a41b..02eb432e2d 100644 --- a/test/core/surface/server_test.c +++ b/test/core/surface/server_test.c @@ -32,9 +32,13 @@ */ #include <grpc/grpc.h> +#include <grpc/grpc_security.h> #include <grpc/support/alloc.h> +#include <grpc/support/host_port.h> #include <grpc/support/log.h> #include <grpc/support/string_util.h> +#include "src/core/lib/iomgr/resolve_address.h" +#include "src/core/lib/security/credentials/fake/fake_credentials.h" #include "test/core/util/port.h" #include "test/core/util/test_config.h" @@ -86,8 +90,13 @@ void test_bind_server_twice(void) { gpr_asprintf(&addr, "[::]:%d", port); grpc_server_register_completion_queue(server1, cq, NULL); grpc_server_register_completion_queue(server2, cq, NULL); + GPR_ASSERT(0 == grpc_server_add_secure_http2_port(server2, addr, NULL)); GPR_ASSERT(port == grpc_server_add_insecure_http2_port(server1, addr)); GPR_ASSERT(0 == grpc_server_add_insecure_http2_port(server2, addr)); + grpc_server_credentials *fake_creds = + grpc_fake_transport_security_server_credentials_create(); + GPR_ASSERT(0 == grpc_server_add_secure_http2_port(server2, addr, fake_creds)); + grpc_server_credentials_release(fake_creds); grpc_server_shutdown_and_notify(server1, cq, NULL); grpc_server_shutdown_and_notify(server2, cq, NULL); grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_MONOTONIC), NULL); @@ -98,12 +107,68 @@ void test_bind_server_twice(void) { gpr_free(addr); } +void test_bind_server_to_addr(const char *host, bool secure) { + int port = grpc_pick_unused_port_or_die(); + char *addr; + gpr_join_host_port(&addr, host, port); + gpr_log(GPR_INFO, "Test bind to %s", addr); + + grpc_server *server = grpc_server_create(NULL, NULL); + if (secure) { + grpc_server_credentials *fake_creds = + grpc_fake_transport_security_server_credentials_create(); + GPR_ASSERT(grpc_server_add_secure_http2_port(server, addr, fake_creds)); + grpc_server_credentials_release(fake_creds); + } else { + GPR_ASSERT(grpc_server_add_insecure_http2_port(server, addr)); + } + grpc_completion_queue *cq = grpc_completion_queue_create(NULL); + grpc_server_register_completion_queue(server, cq, NULL); + grpc_server_start(server); + grpc_server_shutdown_and_notify(server, cq, NULL); + grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_MONOTONIC), NULL); + grpc_server_destroy(server); + grpc_completion_queue_destroy(cq); + gpr_free(addr); +} + +static int external_dns_works(const char *host) { + grpc_resolved_addresses *res; + grpc_error *error = grpc_blocking_resolve_address(host, "80", &res); + GRPC_ERROR_UNREF(error); + if (res != NULL) { + grpc_resolved_addresses_destroy(res); + return 1; + } + return 0; +} + +static void test_bind_server_to_addrs(const char **addrs, size_t n) { + for (size_t i = 0; i < n; i++) { + test_bind_server_to_addr(addrs[i], false); + test_bind_server_to_addr(addrs[i], true); + } +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); test_register_method_fail(); test_request_call_on_no_server_cq(); test_bind_server_twice(); + + static const char *addrs[] = { + "::1", "127.0.0.1", "::ffff:127.0.0.1", "localhost", "0.0.0.0", "::", + }; + test_bind_server_to_addrs(addrs, GPR_ARRAY_SIZE(addrs)); + + if (external_dns_works("loopback46.unittest.grpc.io")) { + static const char *dns_addrs[] = { + "loopback46.unittest.grpc.io", "loopback4.unittest.grpc.io", + }; + test_bind_server_to_addrs(dns_addrs, GPR_ARRAY_SIZE(dns_addrs)); + } + grpc_shutdown(); return 0; } diff --git a/test/core/transport/chttp2/hpack_parser_fuzzer_test.c b/test/core/transport/chttp2/hpack_parser_fuzzer_test.c index 1e3d2d39d8..b7f68e0dd4 100644 --- a/test/core/transport/chttp2/hpack_parser_fuzzer_test.c +++ b/test/core/transport/chttp2/hpack_parser_fuzzer_test.c @@ -53,7 +53,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_chttp2_hpack_parser parser; grpc_chttp2_hpack_parser_init(&parser); parser.on_header = onhdr; - grpc_chttp2_hpack_parser_parse(&parser, data, data + size); + GRPC_ERROR_UNREF(grpc_chttp2_hpack_parser_parse(&parser, data, data + size)); grpc_chttp2_hpack_parser_destroy(&parser); grpc_shutdown(); return 0; diff --git a/test/core/transport/chttp2/hpack_parser_test.c b/test/core/transport/chttp2/hpack_parser_test.c index 51bf48dc09..9ddceb8981 100644 --- a/test/core/transport/chttp2/hpack_parser_test.c +++ b/test/core/transport/chttp2/hpack_parser_test.c @@ -76,7 +76,8 @@ static void test_vector(grpc_chttp2_hpack_parser *parser, for (i = 0; i < nslices; i++) { GPR_ASSERT(grpc_chttp2_hpack_parser_parse( - parser, GPR_SLICE_START_PTR(slices[i]), GPR_SLICE_END_PTR(slices[i]))); + parser, GPR_SLICE_START_PTR(slices[i]), + GPR_SLICE_END_PTR(slices[i])) == GRPC_ERROR_NONE); } for (i = 0; i < nslices; i++) { diff --git a/test/core/transport/chttp2/hpack_table_test.c b/test/core/transport/chttp2/hpack_table_test.c index 73e59f1536..75b0ef4629 100644 --- a/test/core/transport/chttp2/hpack_table_test.c +++ b/test/core/transport/chttp2/hpack_table_test.c @@ -139,12 +139,12 @@ static void test_many_additions(void) { grpc_chttp2_hptbl_init(&tbl); - for (i = 0; i < 1000000; i++) { + for (i = 0; i < 100000; i++) { grpc_mdelem *elem; gpr_asprintf(&key, "K:%d", i); gpr_asprintf(&value, "VALUE:%d", i); elem = grpc_mdelem_from_strings(key, value); - GPR_ASSERT(grpc_chttp2_hptbl_add(&tbl, elem)); + GPR_ASSERT(grpc_chttp2_hptbl_add(&tbl, elem) == GRPC_ERROR_NONE); GRPC_MDELEM_UNREF(elem); assert_index(&tbl, 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY, key, value); gpr_free(key); @@ -181,13 +181,13 @@ static void test_find(void) { grpc_chttp2_hptbl_init(&tbl); elem = grpc_mdelem_from_strings("abc", "xyz"); - GPR_ASSERT(grpc_chttp2_hptbl_add(&tbl, elem)); + GPR_ASSERT(grpc_chttp2_hptbl_add(&tbl, elem) == GRPC_ERROR_NONE); GRPC_MDELEM_UNREF(elem); elem = grpc_mdelem_from_strings("abc", "123"); - GPR_ASSERT(grpc_chttp2_hptbl_add(&tbl, elem)); + GPR_ASSERT(grpc_chttp2_hptbl_add(&tbl, elem) == GRPC_ERROR_NONE); GRPC_MDELEM_UNREF(elem); elem = grpc_mdelem_from_strings("x", "1"); - GPR_ASSERT(grpc_chttp2_hptbl_add(&tbl, elem)); + GPR_ASSERT(grpc_chttp2_hptbl_add(&tbl, elem) == GRPC_ERROR_NONE); GRPC_MDELEM_UNREF(elem); r = find_simple(&tbl, "abc", "123"); @@ -238,7 +238,7 @@ static void test_find(void) { for (i = 0; i < 10000; i++) { int64_ttoa(i, buffer); elem = grpc_mdelem_from_strings("test", buffer); - GPR_ASSERT(grpc_chttp2_hptbl_add(&tbl, elem)); + GPR_ASSERT(grpc_chttp2_hptbl_add(&tbl, elem) == GRPC_ERROR_NONE); GRPC_MDELEM_UNREF(elem); } diff --git a/test/core/transport/connectivity_state_test.c b/test/core/transport/connectivity_state_test.c index 38dea01cc6..1050059eff 100644 --- a/test/core/transport/connectivity_state_test.c +++ b/test/core/transport/connectivity_state_test.c @@ -43,14 +43,15 @@ int g_counter; -static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg, bool success) { - GPR_ASSERT(success); +static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg, + grpc_error *error) { + GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(arg == THE_ARG); g_counter++; } -static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, bool success) { - GPR_ASSERT(!success); +static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + GPR_ASSERT(error != GRPC_ERROR_NONE); GPR_ASSERT(arg == THE_ARG); g_counter++; } @@ -67,15 +68,18 @@ static void test_connectivity_state_name(void) { 0 == strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_TRANSIENT_FAILURE), "TRANSIENT_FAILURE")); GPR_ASSERT(0 == strcmp(grpc_connectivity_state_name(GRPC_CHANNEL_SHUTDOWN), - "FATAL_FAILURE")); + "SHUTDOWN")); } static void test_check(void) { grpc_connectivity_state_tracker tracker; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_error *error; gpr_log(GPR_DEBUG, "test_check"); grpc_connectivity_state_init(&tracker, GRPC_CHANNEL_IDLE, "xxx"); - GPR_ASSERT(grpc_connectivity_state_check(&tracker) == GRPC_CHANNEL_IDLE); + GPR_ASSERT(grpc_connectivity_state_check(&tracker, &error) == + GRPC_CHANNEL_IDLE); + GPR_ASSERT(error == GRPC_ERROR_NONE); grpc_connectivity_state_destroy(&exec_ctx, &tracker); grpc_exec_ctx_finish(&exec_ctx); } diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index 7768413095..ed9545e9df 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -51,7 +51,7 @@ static void me_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, gpr_mu_lock(&m->mu); if (m->read_buffer.count > 0) { gpr_slice_buffer_swap(&m->read_buffer, slices); - grpc_exec_ctx_enqueue(exec_ctx, cb, true, NULL); + grpc_exec_ctx_sched(exec_ctx, cb, GRPC_ERROR_NONE, NULL); } else { m->on_read = cb; m->on_read_out = slices; @@ -65,7 +65,7 @@ static void me_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, for (size_t i = 0; i < slices->count; i++) { m->on_write(slices->slices[i]); } - grpc_exec_ctx_enqueue(exec_ctx, cb, true, NULL); + grpc_exec_ctx_sched(exec_ctx, cb, GRPC_ERROR_NONE, NULL); } static void me_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, @@ -78,7 +78,8 @@ static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; gpr_mu_lock(&m->mu); if (m->on_read) { - grpc_exec_ctx_enqueue(exec_ctx, m->on_read, false, NULL); + grpc_exec_ctx_sched(exec_ctx, m->on_read, + GRPC_ERROR_CREATE("Endpoint Shutdown"), NULL); m->on_read = NULL; } gpr_mu_unlock(&m->mu); @@ -115,7 +116,7 @@ void grpc_mock_endpoint_put_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, gpr_mu_lock(&m->mu); if (m->on_read != NULL) { gpr_slice_buffer_add(m->on_read_out, slice); - grpc_exec_ctx_enqueue(exec_ctx, m->on_read, true, NULL); + grpc_exec_ctx_sched(exec_ctx, m->on_read, GRPC_ERROR_NONE, NULL); m->on_read = NULL; } else { gpr_slice_buffer_add(&m->read_buffer, slice); diff --git a/test/core/util/one_corpus_entry_fuzzer.c b/test/core/util/one_corpus_entry_fuzzer.c index be32a8a2cf..95ae4cf706 100644 --- a/test/core/util/one_corpus_entry_fuzzer.c +++ b/test/core/util/one_corpus_entry_fuzzer.c @@ -34,7 +34,7 @@ #include <stdbool.h> #include <grpc/support/log.h> -#include "src/core/lib/support/load_file.h" +#include "src/core/lib/iomgr/load_file.h" extern int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); @@ -42,11 +42,11 @@ extern bool squelch; extern bool leak_check; int main(int argc, char **argv) { - int ok = 0; + gpr_slice buffer; squelch = false; leak_check = false; - gpr_slice buffer = gpr_load_file(argv[1], 0, &ok); - GPR_ASSERT(ok); + GPR_ASSERT( + GRPC_LOG_IF_ERROR("load_file", grpc_load_file(argv[1], 0, &buffer))); LLVMFuzzerTestOneInput(GPR_SLICE_START_PTR(buffer), GPR_SLICE_LENGTH(buffer)); gpr_slice_unref(buffer); return 0; diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c index ae955b1f68..a39f3dd66e 100644 --- a/test/core/util/passthru_endpoint.c +++ b/test/core/util/passthru_endpoint.c @@ -59,10 +59,11 @@ static void me_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, half *m = (half *)ep; gpr_mu_lock(&m->parent->mu); if (m->parent->shutdown) { - grpc_exec_ctx_enqueue(exec_ctx, cb, false, NULL); + grpc_exec_ctx_sched(exec_ctx, cb, GRPC_ERROR_CREATE("Already shutdown"), + NULL); } else if (m->read_buffer.count > 0) { gpr_slice_buffer_swap(&m->read_buffer, slices); - grpc_exec_ctx_enqueue(exec_ctx, cb, true, NULL); + grpc_exec_ctx_sched(exec_ctx, cb, GRPC_ERROR_NONE, NULL); } else { m->on_read = cb; m->on_read_out = slices; @@ -79,14 +80,14 @@ static void me_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, gpr_slice_buffer *slices, grpc_closure *cb) { half *m = other_half((half *)ep); gpr_mu_lock(&m->parent->mu); - bool ok = true; + grpc_error *error = GRPC_ERROR_NONE; if (m->parent->shutdown) { - ok = false; + error = GRPC_ERROR_CREATE("Endpoint already shutdown"); } else if (m->on_read != NULL) { for (size_t i = 0; i < slices->count; i++) { gpr_slice_buffer_add(m->on_read_out, gpr_slice_ref(slices->slices[i])); } - grpc_exec_ctx_enqueue(exec_ctx, m->on_read, true, NULL); + grpc_exec_ctx_sched(exec_ctx, m->on_read, GRPC_ERROR_NONE, NULL); m->on_read = NULL; } else { for (size_t i = 0; i < slices->count; i++) { @@ -94,7 +95,7 @@ static void me_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, } } gpr_mu_unlock(&m->parent->mu); - grpc_exec_ctx_enqueue(exec_ctx, cb, ok, NULL); + grpc_exec_ctx_sched(exec_ctx, cb, error, NULL); } static void me_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, @@ -108,12 +109,14 @@ static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { gpr_mu_lock(&m->parent->mu); m->parent->shutdown = true; if (m->on_read) { - grpc_exec_ctx_enqueue(exec_ctx, m->on_read, false, NULL); + grpc_exec_ctx_sched(exec_ctx, m->on_read, GRPC_ERROR_CREATE("Shutdown"), + NULL); m->on_read = NULL; } m = other_half(m); if (m->on_read) { - grpc_exec_ctx_enqueue(exec_ctx, m->on_read, false, NULL); + grpc_exec_ctx_sched(exec_ctx, m->on_read, GRPC_ERROR_CREATE("Shutdown"), + NULL); m->on_read = NULL; } gpr_mu_unlock(&m->parent->mu); diff --git a/test/core/util/port_server_client.c b/test/core/util/port_server_client.c index f924d553d5..a5c8c49650 100644 --- a/test/core/util/port_server_client.c +++ b/test/core/util/port_server_client.c @@ -56,7 +56,7 @@ typedef struct freereq { } freereq; static void destroy_pops_and_shutdown(grpc_exec_ctx *exec_ctx, void *p, - bool success) { + grpc_error *error) { grpc_pollset *pollset = grpc_polling_entity_pollset(p); grpc_pollset_destroy(pollset); gpr_free(pollset); @@ -64,17 +64,20 @@ static void destroy_pops_and_shutdown(grpc_exec_ctx *exec_ctx, void *p, } static void freed_port_from_server(grpc_exec_ctx *exec_ctx, void *arg, - const grpc_httpcli_response *response) { + grpc_error *error) { freereq *pr = arg; gpr_mu_lock(pr->mu); pr->done = 1; - grpc_pollset_kick(grpc_polling_entity_pollset(&pr->pops), NULL); + GRPC_LOG_IF_ERROR( + "pollset_kick", + grpc_pollset_kick(grpc_polling_entity_pollset(&pr->pops), NULL)); gpr_mu_unlock(pr->mu); } void grpc_free_port_using_server(char *server, int port) { grpc_httpcli_context context; grpc_httpcli_request req; + grpc_httpcli_response rsp; freereq pr; char *path; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -84,6 +87,7 @@ void grpc_free_port_using_server(char *server, int port) { memset(&pr, 0, sizeof(pr)); memset(&req, 0, sizeof(req)); + memset(&rsp, 0, sizeof(rsp)); grpc_pollset *pollset = gpr_malloc(grpc_pollset_size()); grpc_pollset_init(pollset, &pr.mu); @@ -96,14 +100,18 @@ void grpc_free_port_using_server(char *server, int port) { grpc_httpcli_context_init(&context); grpc_httpcli_get(&exec_ctx, &context, &pr.pops, &req, - GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), freed_port_from_server, - &pr); + GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), + grpc_closure_create(freed_port_from_server, &pr), &rsp); gpr_mu_lock(pr.mu); while (!pr.done) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&pr.pops), &worker, - gpr_now(GPR_CLOCK_MONOTONIC), - GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1)); + if (!GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&pr.pops), + &worker, gpr_now(GPR_CLOCK_MONOTONIC), + GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1)))) { + pr.done = 1; + } } gpr_mu_unlock(pr.mu); @@ -113,6 +121,7 @@ void grpc_free_port_using_server(char *server, int port) { shutdown_closure); grpc_exec_ctx_finish(&exec_ctx); gpr_free(path); + grpc_http_response_destroy(&rsp); } typedef struct portreq { @@ -122,19 +131,22 @@ typedef struct portreq { int retries; char *server; grpc_httpcli_context *ctx; + grpc_httpcli_response response; } portreq; static void got_port_from_server(grpc_exec_ctx *exec_ctx, void *arg, - const grpc_httpcli_response *response) { + grpc_error *error) { size_t i; int port = 0; portreq *pr = arg; int failed = 0; + grpc_httpcli_response *response = &pr->response; - if (!response) { + if (error != GRPC_ERROR_NONE) { failed = 1; - gpr_log(GPR_DEBUG, - "failed port pick from server: retrying [response=NULL]"); + const char *msg = grpc_error_string(error); + gpr_log(GPR_DEBUG, "failed port pick from server: retrying [%s]", msg); + grpc_error_free_string(msg); } else if (response->status != 200) { failed = 1; gpr_log(GPR_DEBUG, "failed port pick from server: status=%d", @@ -153,9 +165,12 @@ static void got_port_from_server(grpc_exec_ctx *exec_ctx, void *arg, pr->retries++; req.host = pr->server; req.http.path = "/get"; + grpc_http_response_destroy(&pr->response); + memset(&pr->response, 0, sizeof(pr->response)); grpc_httpcli_get(exec_ctx, pr->ctx, &pr->pops, &req, - GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), got_port_from_server, - pr); + GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), + grpc_closure_create(got_port_from_server, pr), + &pr->response); return; } GPR_ASSERT(response); @@ -167,7 +182,9 @@ static void got_port_from_server(grpc_exec_ctx *exec_ctx, void *arg, GPR_ASSERT(port > 1024); gpr_mu_lock(pr->mu); pr->port = port; - grpc_pollset_kick(grpc_polling_entity_pollset(&pr->pops), NULL); + GRPC_LOG_IF_ERROR( + "pollset_kick", + grpc_pollset_kick(grpc_polling_entity_pollset(&pr->pops), NULL)); gpr_mu_unlock(pr->mu); } @@ -194,19 +211,24 @@ int grpc_pick_port_using_server(char *server) { req.http.path = "/get"; grpc_httpcli_context_init(&context); - grpc_httpcli_get(&exec_ctx, &context, &pr.pops, &req, - GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), got_port_from_server, - &pr); + grpc_httpcli_get( + &exec_ctx, &context, &pr.pops, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), + grpc_closure_create(got_port_from_server, &pr), &pr.response); grpc_exec_ctx_finish(&exec_ctx); gpr_mu_lock(pr.mu); while (pr.port == -1) { grpc_pollset_worker *worker = NULL; - grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&pr.pops), &worker, - gpr_now(GPR_CLOCK_MONOTONIC), - GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1)); + if (!GRPC_LOG_IF_ERROR( + "pollset_work", + grpc_pollset_work(&exec_ctx, grpc_polling_entity_pollset(&pr.pops), + &worker, gpr_now(GPR_CLOCK_MONOTONIC), + GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1)))) { + pr.port = 0; + } } gpr_mu_unlock(pr.mu); + grpc_http_response_destroy(&pr.response); grpc_httpcli_context_destroy(&context); grpc_pollset_shutdown(&exec_ctx, grpc_polling_entity_pollset(&pr.pops), shutdown_closure); diff --git a/test/core/util/test_tcp_server.c b/test/core/util/test_tcp_server.c index e39a95712c..27c16fc764 100644 --- a/test/core/util/test_tcp_server.c +++ b/test/core/util/test_tcp_server.c @@ -46,7 +46,7 @@ #include "test/core/util/port.h" static void on_server_destroyed(grpc_exec_ctx *exec_ctx, void *data, - bool success) { + grpc_error *error) { test_tcp_server *server = data; server->shutdown = 1; } @@ -72,9 +72,12 @@ void test_tcp_server_start(test_tcp_server *server, int port) { addr.sin_port = htons((uint16_t)port); memset(&addr.sin_addr, 0, sizeof(addr.sin_addr)); - server->tcp_server = grpc_tcp_server_create(&server->shutdown_complete); - port_added = - grpc_tcp_server_add_port(server->tcp_server, &addr, sizeof(addr)); + grpc_error *error = + grpc_tcp_server_create(&server->shutdown_complete, &server->tcp_server); + GPR_ASSERT(error == GRPC_ERROR_NONE); + error = grpc_tcp_server_add_port(server->tcp_server, &addr, sizeof(addr), + &port_added); + GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(port_added == port); grpc_tcp_server_start(&exec_ctx, server->tcp_server, &server->pollset, 1, @@ -91,13 +94,14 @@ void test_tcp_server_poll(test_tcp_server *server, int seconds) { gpr_time_from_seconds(seconds, GPR_TIMESPAN)); grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; gpr_mu_lock(server->mu); - grpc_pollset_work(&exec_ctx, server->pollset, &worker, - gpr_now(GPR_CLOCK_MONOTONIC), deadline); + GRPC_LOG_IF_ERROR("pollset_work", + grpc_pollset_work(&exec_ctx, server->pollset, &worker, + gpr_now(GPR_CLOCK_MONOTONIC), deadline)); gpr_mu_unlock(server->mu); grpc_exec_ctx_finish(&exec_ctx); } -static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, bool success) {} +static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {} void test_tcp_server_destroy(test_tcp_server *server) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index 8229bda6bf..6c7eae53a4 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -31,6 +31,7 @@ * */ +#include <cinttypes> #include <memory> #include <thread> @@ -207,12 +208,11 @@ class ServerBuilderSyncPluginDisabler : public ::grpc::ServerBuilderOption { public: void UpdateArguments(ChannelArguments* arg) GRPC_OVERRIDE {} - void UpdatePlugins( - std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin>>* plugins) + void UpdatePlugins(std::vector<std::unique_ptr<ServerBuilderPlugin>>* plugins) GRPC_OVERRIDE { auto plugin = plugins->begin(); while (plugin != plugins->end()) { - if ((*plugin).second->has_sync_methods()) { + if ((*plugin)->has_sync_methods()) { plugins->erase(plugin++); } else { plugin++; @@ -235,8 +235,11 @@ class TestScenario { disable_blocking, credentials_type.c_str(), message_content.size()); } bool disable_blocking; - const grpc::string credentials_type; - const grpc::string message_content; + // Although the below grpc::string's are logically const, we can't declare + // them const because of a limitation in the way old compilers (e.g., gcc-4.4) + // manage vector insertion using a copy constructor + grpc::string credentials_type; + grpc::string message_content; }; class AsyncEnd2endTest : public ::testing::TestWithParam<TestScenario> { @@ -940,7 +943,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { // Client sends 3 messages (tags 3, 4 and 5) for (int tag_idx = 3; tag_idx <= 5; tag_idx++) { - send_request.set_message("Ping " + std::to_string(tag_idx)); + send_request.set_message("Ping " + grpc::to_string(tag_idx)); cli_stream->Write(send_request, tag(tag_idx)); Verifier(GetParam().disable_blocking) .Expect(tag_idx, true) @@ -1106,7 +1109,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { // Server sends three messages (tags 3, 4 and 5) // But if want_done tag is true, we might also see tag 11 for (int tag_idx = 3; tag_idx <= 5; tag_idx++) { - send_response.set_message("Pong " + std::to_string(tag_idx)); + send_response.set_message("Pong " + grpc::to_string(tag_idx)); srv_stream.Write(send_response, tag(tag_idx)); // Note that we'll add something to the verifier and verify that // something was seen, but it might be tag 11 and not what we @@ -1397,9 +1400,9 @@ std::vector<TestScenario> CreateTestScenarios(bool test_disable_blocking, for (auto cred = credentials_types.begin(); cred != credentials_types.end(); ++cred) { for (auto msg = messages.begin(); msg != messages.end(); msg++) { - scenarios.push_back(TestScenario(false, *cred, *msg)); + scenarios.emplace_back(false, *cred, *msg); if (test_disable_blocking) { - scenarios.push_back(TestScenario(true, *cred, *msg)); + scenarios.emplace_back(true, *cred, *msg); } } } diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index e3667cf26b..8de9d339f6 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -199,7 +199,10 @@ class TestScenario { credentials_type.c_str()); } bool use_proxy; - const grpc::string credentials_type; + // Although the below grpc::string is logically const, we can't declare + // them const because of a limitation in the way old compilers (e.g., gcc-4.4) + // manage vector insertion using a copy constructor + grpc::string credentials_type; }; class End2endTest : public ::testing::TestWithParam<TestScenario> { @@ -329,7 +332,7 @@ class End2endServerTryCancelTest : public End2endTest { // Send server_try_cancel value in the client metadata context.AddMetadata(kServerTryCancelRequest, - std::to_string(server_try_cancel)); + grpc::to_string(server_try_cancel)); auto stream = stub_->RequestStream(&context, &response); @@ -402,7 +405,7 @@ class End2endServerTryCancelTest : public End2endTest { // Send server_try_cancel in the client metadata context.AddMetadata(kServerTryCancelRequest, - std::to_string(server_try_cancel)); + grpc::to_string(server_try_cancel)); request.set_message("hello"); auto stream = stub_->ResponseStream(&context, request); @@ -413,7 +416,7 @@ class End2endServerTryCancelTest : public End2endTest { break; } EXPECT_EQ(response.message(), - request.message() + std::to_string(num_msgs_read)); + request.message() + grpc::to_string(num_msgs_read)); num_msgs_read++; } gpr_log(GPR_INFO, "Read %d messages", num_msgs_read); @@ -479,14 +482,14 @@ class End2endServerTryCancelTest : public End2endTest { // Send server_try_cancel in the client metadata context.AddMetadata(kServerTryCancelRequest, - std::to_string(server_try_cancel)); + grpc::to_string(server_try_cancel)); auto stream = stub_->BidiStream(&context); int num_msgs_read = 0; int num_msgs_sent = 0; while (num_msgs_sent < num_messages) { - request.set_message("hello " + std::to_string(num_msgs_sent)); + request.set_message("hello " + grpc::to_string(num_msgs_sent)); if (!stream->Write(request)) { break; } @@ -548,7 +551,7 @@ TEST_P(End2endServerTryCancelTest, RequestEchoServerCancel) { ClientContext context; context.AddMetadata(kServerTryCancelRequest, - std::to_string(CANCEL_BEFORE_PROCESSING)); + grpc::to_string(CANCEL_BEFORE_PROCESSING)); Status s = stub_->Echo(&context, request, &response); EXPECT_FALSE(s.ok()); EXPECT_EQ(grpc::StatusCode::CANCELLED, s.error_code()); @@ -1431,9 +1434,9 @@ std::vector<TestScenario> CreateTestScenarios(bool use_proxy, } for (auto it = credentials_types.begin(); it != credentials_types.end(); ++it) { - scenarios.push_back(TestScenario(false, *it)); + scenarios.emplace_back(false, *it); if (use_proxy) { - scenarios.push_back(TestScenario(true, *it)); + scenarios.emplace_back(true, *it); } } return scenarios; diff --git a/test/cpp/end2end/hybrid_end2end_test.cc b/test/cpp/end2end/hybrid_end2end_test.cc index 2c05db345b..7e0c0e8a7c 100644 --- a/test/cpp/end2end/hybrid_end2end_test.cc +++ b/test/cpp/end2end/hybrid_end2end_test.cc @@ -347,47 +347,50 @@ class HybridEnd2endTest : public ::testing::Test { } grpc::testing::UnimplementedService::Service unimplemented_service_; - std::vector<std::unique_ptr<ServerCompletionQueue> > cqs_; + std::vector<std::unique_ptr<ServerCompletionQueue>> cqs_; std::unique_ptr<grpc::testing::EchoTestService::Stub> stub_; std::unique_ptr<Server> server_; std::ostringstream server_address_; }; TEST_F(HybridEnd2endTest, AsyncEcho) { - EchoTestService::WithAsyncMethod_Echo<TestServiceImpl> service; + typedef EchoTestService::WithAsyncMethod_Echo<TestServiceImpl> SType; + SType service; SetUpServer(&service, nullptr, nullptr); ResetStub(); - std::thread echo_handler_thread( - [this, &service] { HandleEcho(&service, cqs_[0].get(), false); }); + std::thread echo_handler_thread(HandleEcho<SType>, &service, cqs_[0].get(), + false); TestAllMethods(); echo_handler_thread.join(); } TEST_F(HybridEnd2endTest, AsyncEchoRequestStream) { - EchoTestService::WithAsyncMethod_RequestStream< - EchoTestService::WithAsyncMethod_Echo<TestServiceImpl> > - service; + typedef EchoTestService::WithAsyncMethod_RequestStream< + EchoTestService::WithAsyncMethod_Echo<TestServiceImpl>> + SType; + SType service; SetUpServer(&service, nullptr, nullptr); ResetStub(); - std::thread echo_handler_thread( - [this, &service] { HandleEcho(&service, cqs_[0].get(), false); }); - std::thread request_stream_handler_thread( - [this, &service] { HandleClientStreaming(&service, cqs_[1].get()); }); + std::thread echo_handler_thread(HandleEcho<SType>, &service, cqs_[0].get(), + false); + std::thread request_stream_handler_thread(HandleClientStreaming<SType>, + &service, cqs_[1].get()); TestAllMethods(); echo_handler_thread.join(); request_stream_handler_thread.join(); } TEST_F(HybridEnd2endTest, AsyncRequestStreamResponseStream) { - EchoTestService::WithAsyncMethod_RequestStream< - EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl> > - service; + typedef EchoTestService::WithAsyncMethod_RequestStream< + EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>> + SType; + SType service; SetUpServer(&service, nullptr, nullptr); ResetStub(); - std::thread response_stream_handler_thread( - [this, &service] { HandleServerStreaming(&service, cqs_[0].get()); }); - std::thread request_stream_handler_thread( - [this, &service] { HandleClientStreaming(&service, cqs_[1].get()); }); + std::thread response_stream_handler_thread(HandleServerStreaming<SType>, + &service, cqs_[0].get()); + std::thread request_stream_handler_thread(HandleClientStreaming<SType>, + &service, cqs_[1].get()); TestAllMethods(); response_stream_handler_thread.join(); request_stream_handler_thread.join(); @@ -395,16 +398,17 @@ TEST_F(HybridEnd2endTest, AsyncRequestStreamResponseStream) { // Add a second service with one sync method. TEST_F(HybridEnd2endTest, AsyncRequestStreamResponseStream_SyncDupService) { - EchoTestService::WithAsyncMethod_RequestStream< - EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl> > - service; + typedef EchoTestService::WithAsyncMethod_RequestStream< + EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>> + SType; + SType service; TestServiceImplDupPkg dup_service; SetUpServer(&service, &dup_service, nullptr); ResetStub(); - std::thread response_stream_handler_thread( - [this, &service] { HandleServerStreaming(&service, cqs_[0].get()); }); - std::thread request_stream_handler_thread( - [this, &service] { HandleClientStreaming(&service, cqs_[1].get()); }); + std::thread response_stream_handler_thread(HandleServerStreaming<SType>, + &service, cqs_[0].get()); + std::thread request_stream_handler_thread(HandleClientStreaming<SType>, + &service, cqs_[1].get()); TestAllMethods(); SendEchoToDupService(); response_stream_handler_thread.join(); @@ -413,18 +417,20 @@ TEST_F(HybridEnd2endTest, AsyncRequestStreamResponseStream_SyncDupService) { // Add a second service with one async method. TEST_F(HybridEnd2endTest, AsyncRequestStreamResponseStream_AsyncDupService) { - EchoTestService::WithAsyncMethod_RequestStream< - EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl> > - service; + typedef EchoTestService::WithAsyncMethod_RequestStream< + EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>> + SType; + SType service; duplicate::EchoTestService::AsyncService dup_service; SetUpServer(&service, &dup_service, nullptr); ResetStub(); - std::thread response_stream_handler_thread( - [this, &service] { HandleServerStreaming(&service, cqs_[0].get()); }); - std::thread request_stream_handler_thread( - [this, &service] { HandleClientStreaming(&service, cqs_[1].get()); }); + std::thread response_stream_handler_thread(HandleServerStreaming<SType>, + &service, cqs_[0].get()); + std::thread request_stream_handler_thread(HandleClientStreaming<SType>, + &service, cqs_[1].get()); std::thread echo_handler_thread( - [this, &dup_service] { HandleEcho(&dup_service, cqs_[2].get(), true); }); + HandleEcho<duplicate::EchoTestService::AsyncService>, &dup_service, + cqs_[2].get(), true); TestAllMethods(); SendEchoToDupService(); response_stream_handler_thread.join(); @@ -437,25 +443,24 @@ TEST_F(HybridEnd2endTest, GenericEcho) { AsyncGenericService generic_service; SetUpServer(&service, nullptr, &generic_service); ResetStub(); - std::thread generic_handler_thread([this, &generic_service] { - HandleGenericCall(&generic_service, cqs_[0].get()); - }); + std::thread generic_handler_thread(HandleGenericCall, &generic_service, + cqs_[0].get()); TestAllMethods(); generic_handler_thread.join(); } TEST_F(HybridEnd2endTest, GenericEchoAsyncRequestStream) { - EchoTestService::WithAsyncMethod_RequestStream< - EchoTestService::WithGenericMethod_Echo<TestServiceImpl> > - service; + typedef EchoTestService::WithAsyncMethod_RequestStream< + EchoTestService::WithGenericMethod_Echo<TestServiceImpl>> + SType; + SType service; AsyncGenericService generic_service; SetUpServer(&service, nullptr, &generic_service); ResetStub(); - std::thread generic_handler_thread([this, &generic_service] { - HandleGenericCall(&generic_service, cqs_[0].get()); - }); - std::thread request_stream_handler_thread( - [this, &service] { HandleClientStreaming(&service, cqs_[1].get()); }); + std::thread generic_handler_thread(HandleGenericCall, &generic_service, + cqs_[0].get()); + std::thread request_stream_handler_thread(HandleClientStreaming<SType>, + &service, cqs_[1].get()); TestAllMethods(); generic_handler_thread.join(); request_stream_handler_thread.join(); @@ -463,18 +468,18 @@ TEST_F(HybridEnd2endTest, GenericEchoAsyncRequestStream) { // Add a second service with one sync method. TEST_F(HybridEnd2endTest, GenericEchoAsyncRequestStream_SyncDupService) { - EchoTestService::WithAsyncMethod_RequestStream< - EchoTestService::WithGenericMethod_Echo<TestServiceImpl> > - service; + typedef EchoTestService::WithAsyncMethod_RequestStream< + EchoTestService::WithGenericMethod_Echo<TestServiceImpl>> + SType; + SType service; AsyncGenericService generic_service; TestServiceImplDupPkg dup_service; SetUpServer(&service, &dup_service, &generic_service); ResetStub(); - std::thread generic_handler_thread([this, &generic_service] { - HandleGenericCall(&generic_service, cqs_[0].get()); - }); - std::thread request_stream_handler_thread( - [this, &service] { HandleClientStreaming(&service, cqs_[1].get()); }); + std::thread generic_handler_thread(HandleGenericCall, &generic_service, + cqs_[0].get()); + std::thread request_stream_handler_thread(HandleClientStreaming<SType>, + &service, cqs_[1].get()); TestAllMethods(); SendEchoToDupService(); generic_handler_thread.join(); @@ -483,20 +488,21 @@ TEST_F(HybridEnd2endTest, GenericEchoAsyncRequestStream_SyncDupService) { // Add a second service with one async method. TEST_F(HybridEnd2endTest, GenericEchoAsyncRequestStream_AsyncDupService) { - EchoTestService::WithAsyncMethod_RequestStream< - EchoTestService::WithGenericMethod_Echo<TestServiceImpl> > - service; + typedef EchoTestService::WithAsyncMethod_RequestStream< + EchoTestService::WithGenericMethod_Echo<TestServiceImpl>> + SType; + SType service; AsyncGenericService generic_service; duplicate::EchoTestService::AsyncService dup_service; SetUpServer(&service, &dup_service, &generic_service); ResetStub(); - std::thread generic_handler_thread([this, &generic_service] { - HandleGenericCall(&generic_service, cqs_[0].get()); - }); - std::thread request_stream_handler_thread( - [this, &service] { HandleClientStreaming(&service, cqs_[1].get()); }); + std::thread generic_handler_thread(HandleGenericCall, &generic_service, + cqs_[0].get()); + std::thread request_stream_handler_thread(HandleClientStreaming<SType>, + &service, cqs_[1].get()); std::thread echo_handler_thread( - [this, &dup_service] { HandleEcho(&dup_service, cqs_[2].get(), true); }); + HandleEcho<duplicate::EchoTestService::AsyncService>, &dup_service, + cqs_[2].get(), true); TestAllMethods(); SendEchoToDupService(); generic_handler_thread.join(); @@ -505,20 +511,20 @@ TEST_F(HybridEnd2endTest, GenericEchoAsyncRequestStream_AsyncDupService) { } TEST_F(HybridEnd2endTest, GenericEchoAsyncRequestStreamResponseStream) { - EchoTestService::WithAsyncMethod_RequestStream< + typedef EchoTestService::WithAsyncMethod_RequestStream< EchoTestService::WithGenericMethod_Echo< - EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl> > > - service; + EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>>> + SType; + SType service; AsyncGenericService generic_service; SetUpServer(&service, nullptr, &generic_service); ResetStub(); - std::thread generic_handler_thread([this, &generic_service] { - HandleGenericCall(&generic_service, cqs_[0].get()); - }); - std::thread request_stream_handler_thread( - [this, &service] { HandleClientStreaming(&service, cqs_[1].get()); }); - std::thread response_stream_handler_thread( - [this, &service] { HandleServerStreaming(&service, cqs_[2].get()); }); + std::thread generic_handler_thread(HandleGenericCall, &generic_service, + cqs_[0].get()); + std::thread request_stream_handler_thread(HandleClientStreaming<SType>, + &service, cqs_[1].get()); + std::thread response_stream_handler_thread(HandleServerStreaming<SType>, + &service, cqs_[2].get()); TestAllMethods(); generic_handler_thread.join(); request_stream_handler_thread.join(); @@ -526,21 +532,20 @@ TEST_F(HybridEnd2endTest, GenericEchoAsyncRequestStreamResponseStream) { } TEST_F(HybridEnd2endTest, GenericEchoRequestStreamAsyncResponseStream) { - EchoTestService::WithGenericMethod_RequestStream< + typedef EchoTestService::WithGenericMethod_RequestStream< EchoTestService::WithGenericMethod_Echo< - EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl> > > - service; + EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>>> + SType; + SType service; AsyncGenericService generic_service; SetUpServer(&service, nullptr, &generic_service); ResetStub(); - std::thread generic_handler_thread([this, &generic_service] { - HandleGenericCall(&generic_service, cqs_[0].get()); - }); - std::thread generic_handler_thread2([this, &generic_service] { - HandleGenericCall(&generic_service, cqs_[1].get()); - }); - std::thread response_stream_handler_thread( - [this, &service] { HandleServerStreaming(&service, cqs_[2].get()); }); + std::thread generic_handler_thread(HandleGenericCall, &generic_service, + cqs_[0].get()); + std::thread generic_handler_thread2(HandleGenericCall, &generic_service, + cqs_[1].get()); + std::thread response_stream_handler_thread(HandleServerStreaming<SType>, + &service, cqs_[2].get()); TestAllMethods(); generic_handler_thread.join(); generic_handler_thread2.join(); @@ -552,7 +557,7 @@ TEST_F(HybridEnd2endTest, GenericEchoRequestStreamAsyncResponseStream) { TEST_F(HybridEnd2endTest, GenericMethodWithoutGenericService) { EchoTestService::WithGenericMethod_RequestStream< EchoTestService::WithGenericMethod_Echo< - EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl> > > + EchoTestService::WithAsyncMethod_ResponseStream<TestServiceImpl>>> service; SetUpServer(&service, nullptr, nullptr); EXPECT_EQ(nullptr, server_.get()); diff --git a/test/cpp/end2end/server_builder_plugin_test.cc b/test/cpp/end2end/server_builder_plugin_test.cc index 1c1095087a..75f23b64a7 100644 --- a/test/cpp/end2end/server_builder_plugin_test.cc +++ b/test/cpp/end2end/server_builder_plugin_test.cc @@ -113,15 +113,14 @@ class InsertPluginServerBuilderOption : public ServerBuilderOption { void UpdateArguments(ChannelArguments* arg) GRPC_OVERRIDE {} - void UpdatePlugins( - std::map<grpc::string, std::unique_ptr<ServerBuilderPlugin>>* plugins) + void UpdatePlugins(std::vector<std::unique_ptr<ServerBuilderPlugin>>* plugins) GRPC_OVERRIDE { plugins->clear(); std::unique_ptr<TestServerBuilderPlugin> plugin( new TestServerBuilderPlugin()); if (register_service_) plugin->SetRegisterService(); - (*plugins)[plugin->name()] = std::move(plugin); + plugins->emplace_back(std::move(plugin)); } void SetRegisterService() { register_service_ = true; } @@ -162,7 +161,7 @@ class ServerBuilderPluginTest : public ::testing::TestWithParam<bool> { void InsertPlugin() { if (GetParam()) { // Add ServerBuilder plugin in static initialization - EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr); + CheckPresent(); } else { // Add ServerBuilder plugin using ServerBuilder::SetOption() builder_->SetOption(std::unique_ptr<ServerBuilderOption>( @@ -173,10 +172,8 @@ class ServerBuilderPluginTest : public ::testing::TestWithParam<bool> { void InsertPluginWithTestService() { if (GetParam()) { // Add ServerBuilder plugin in static initialization - EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr); - auto plugin = static_cast<TestServerBuilderPlugin*>( - builder_->plugins_[PLUGIN_NAME].get()); - EXPECT_TRUE(plugin != nullptr); + auto plugin = CheckPresent(); + EXPECT_TRUE(plugin); plugin->SetRegisterService(); } else { // Add ServerBuilder plugin using ServerBuilder::SetOption() @@ -192,7 +189,7 @@ class ServerBuilderPluginTest : public ::testing::TestWithParam<bool> { builder_->AddListeningPort(server_address, InsecureServerCredentials()); cq_ = builder_->AddCompletionQueue(); server_ = builder_->BuildAndStart(); - EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr); + EXPECT_TRUE(CheckPresent()); } void ResetStub() { @@ -202,10 +199,8 @@ class ServerBuilderPluginTest : public ::testing::TestWithParam<bool> { } void TearDown() GRPC_OVERRIDE { - EXPECT_TRUE(builder_->plugins_[PLUGIN_NAME] != nullptr); - auto plugin = static_cast<TestServerBuilderPlugin*>( - builder_->plugins_[PLUGIN_NAME].get()); - EXPECT_TRUE(plugin != nullptr); + auto plugin = CheckPresent(); + EXPECT_TRUE(plugin); EXPECT_TRUE(plugin->init_server_is_called()); EXPECT_TRUE(plugin->finish_is_called()); server_->Shutdown(); @@ -230,6 +225,19 @@ class ServerBuilderPluginTest : public ::testing::TestWithParam<bool> { std::unique_ptr<Server> server_; TestServiceImpl service_; int port_; + + private: + TestServerBuilderPlugin* CheckPresent() { + auto it = builder_->plugins_.begin(); + for (; it != builder_->plugins_.end(); it++) { + if ((*it)->name() == PLUGIN_NAME) break; + } + if (it != builder_->plugins_.end()) { + return static_cast<TestServerBuilderPlugin*>(it->get()); + } else { + return nullptr; + } + } }; TEST_P(ServerBuilderPluginTest, PluginWithoutServiceTest) { diff --git a/test/cpp/end2end/test_service_impl.cc b/test/cpp/end2end/test_service_impl.cc index cbaee92228..52abd80d69 100644 --- a/test/cpp/end2end/test_service_impl.cc +++ b/test/cpp/end2end/test_service_impl.cc @@ -33,6 +33,7 @@ #include "test/cpp/end2end/test_service_impl.h" +#include <string> #include <thread> #include <grpc++/security/credentials.h> @@ -253,7 +254,7 @@ Status TestServiceImpl::ResponseStream(ServerContext* context, } for (int i = 0; i < kNumResponseStreamsMsgs; i++) { - response.set_message(request->message() + std::to_string(i)); + response.set_message(request->message() + grpc::to_string(i)); writer->Write(response); } diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc index 94541f9a45..b021b34523 100644 --- a/test/cpp/end2end/thread_stress_test.cc +++ b/test/cpp/end2end/thread_stress_test.cc @@ -230,7 +230,7 @@ class CommonStressTestSyncServer : public CommonStressTest<TestServiceImpl> { }; class CommonStressTestAsyncServer - : public CommonStressTest<::grpc::testing::EchoTestService::AsyncService> { + : public CommonStressTest<grpc::testing::EchoTestService::AsyncService> { public: void SetUp() GRPC_OVERRIDE { shutting_down_ = false; @@ -394,7 +394,7 @@ class AsyncClientEnd2endTest : public ::testing::Test { for (int i = 0; i < num_rpcs; ++i) { AsyncClientCall* call = new AsyncClientCall; EchoRequest request; - request.set_message("Hello: " + std::to_string(i)); + request.set_message("Hello: " + grpc::to_string(i)); call->response_reader = common_.GetStub()->AsyncEcho(&call->context, request, &cq_); call->response_reader->Finish(&call->response, &call->status, diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc index 0bf1fd6f73..608f902d6f 100644 --- a/test/cpp/interop/interop_client.cc +++ b/test/cpp/interop/interop_client.cc @@ -31,10 +31,8 @@ * */ -#include "test/cpp/interop/interop_client.h" - #include <unistd.h> - +#include <cinttypes> #include <fstream> #include <memory> @@ -51,6 +49,7 @@ #include "src/proto/grpc/testing/messages.grpc.pb.h" #include "src/proto/grpc/testing/test.grpc.pb.h" #include "test/cpp/interop/client_helper.h" +#include "test/cpp/interop/interop_client.h" namespace grpc { namespace testing { diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h index ae75762bb8..c8d6810c12 100644 --- a/test/cpp/interop/interop_client.h +++ b/test/cpp/interop/interop_client.h @@ -45,9 +45,9 @@ namespace grpc { namespace testing { // Function pointer for custom checks. -using CheckerFn = - std::function<void(const InteropClientContextInspector&, - const SimpleRequest*, const SimpleResponse*)>; +typedef std::function<void(const InteropClientContextInspector&, + const SimpleRequest*, const SimpleResponse*)> + CheckerFn; class InteropClient { public: diff --git a/test/cpp/interop/server_main.cc b/test/cpp/interop/server_main.cc index bbedda14d2..062857f3d6 100644 --- a/test/cpp/interop/server_main.cc +++ b/test/cpp/interop/server_main.cc @@ -181,6 +181,14 @@ class TestServiceImpl : public TestService::Service { response.mutable_payload())) { return Status(grpc::StatusCode::INTERNAL, "Error creating payload."); } + int time_us; + if ((time_us = request->response_parameters(i).interval_us()) > 0) { + // Sleep before response if needed + gpr_timespec sleep_time = + gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), + gpr_time_from_micros(time_us, GPR_TIMESPAN)); + gpr_sleep_until(sleep_time); + } write_success = writer->Write(response); } if (write_success) { @@ -218,6 +226,14 @@ class TestServiceImpl : public TestService::Service { response.mutable_payload()->set_type(request.payload().type()); response.mutable_payload()->set_body( grpc::string(request.response_parameters(0).size(), '\0')); + int time_us; + if ((time_us = request.response_parameters(0).interval_us()) > 0) { + // Sleep before response if needed + gpr_timespec sleep_time = + gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), + gpr_time_from_micros(time_us, GPR_TIMESPAN)); + gpr_sleep_until(sleep_time); + } write_success = stream->Write(response); } } diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h index 2a89eb8018..047bd16408 100644 --- a/test/cpp/qps/client.h +++ b/test/cpp/qps/client.h @@ -125,13 +125,15 @@ class Client { if (reset) { Histogram* to_merge = new Histogram[threads_.size()]; for (size_t i = 0; i < threads_.size(); i++) { - threads_[i]->Swap(&to_merge[i]); - latencies.Merge(to_merge[i]); + threads_[i]->BeginSwap(&to_merge[i]); } - delete[] to_merge; - std::unique_ptr<UsageTimer> timer(new UsageTimer); timer_.swap(timer); + for (size_t i = 0; i < threads_.size(); i++) { + threads_[i]->EndSwap(); + latencies.Merge(to_merge[i]); + } + delete[] to_merge; timer_result = timer->Mark(); } else { // merge snapshots of each thread histogram @@ -213,6 +215,7 @@ class Client { public: Thread(Client* client, size_t idx) : done_(false), + new_stats_(nullptr), client_(client), idx_(idx), impl_(&Thread::ThreadFunc, this) {} @@ -225,9 +228,16 @@ class Client { impl_.join(); } - void Swap(Histogram* n) { + void BeginSwap(Histogram* n) { std::lock_guard<std::mutex> g(mu_); - n->Swap(&histogram_); + new_stats_ = n; + } + + void EndSwap() { + std::unique_lock<std::mutex> g(mu_); + while (new_stats_ != nullptr) { + cv_.wait(g); + }; } void MergeStatsInto(Histogram* hist) { @@ -241,11 +251,10 @@ class Client { void ThreadFunc() { for (;;) { - // lock since the thread should only be doing one thing at a time - std::lock_guard<std::mutex> g(mu_); // run the loop body const bool thread_still_ok = client_->ThreadFunc(&histogram_, idx_); - // see if we're done + // lock, see if we're done + std::lock_guard<std::mutex> g(mu_); if (!thread_still_ok) { gpr_log(GPR_ERROR, "Finishing client thread due to RPC error"); done_ = true; @@ -253,11 +262,19 @@ class Client { if (done_) { return; } + // check if we're resetting stats, swap out the histogram if so + if (new_stats_) { + new_stats_->Swap(&histogram_); + new_stats_ = nullptr; + cv_.notify_one(); + } } } std::mutex mu_; + std::condition_variable cv_; bool done_; + Histogram* new_stats_; Histogram histogram_; Client* client_; const size_t idx_; diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc index 6ad4c320b5..3d98ab0939 100644 --- a/test/cpp/qps/client_async.cc +++ b/test/cpp/qps/client_async.cc @@ -249,7 +249,8 @@ class AsyncUnaryClient GRPC_FINAL : public AsyncClient<BenchmarkService::Stub, SimpleRequest> { public: explicit AsyncUnaryClient(const ClientConfig& config) - : AsyncClient(config, SetupCtx, BenchmarkStubCreator) { + : AsyncClient<BenchmarkService::Stub, SimpleRequest>( + config, SetupCtx, BenchmarkStubCreator) { StartThreads(num_async_threads_); } ~AsyncUnaryClient() GRPC_OVERRIDE { EndThreads(); } @@ -376,7 +377,8 @@ class AsyncStreamingClient GRPC_FINAL : public AsyncClient<BenchmarkService::Stub, SimpleRequest> { public: explicit AsyncStreamingClient(const ClientConfig& config) - : AsyncClient(config, SetupCtx, BenchmarkStubCreator) { + : AsyncClient<BenchmarkService::Stub, SimpleRequest>( + config, SetupCtx, BenchmarkStubCreator) { StartThreads(num_async_threads_); } @@ -511,7 +513,8 @@ class GenericAsyncStreamingClient GRPC_FINAL : public AsyncClient<grpc::GenericStub, ByteBuffer> { public: explicit GenericAsyncStreamingClient(const ClientConfig& config) - : AsyncClient(config, SetupCtx, GenericStubCreator) { + : AsyncClient<grpc::GenericStub, ByteBuffer>(config, SetupCtx, + GenericStubCreator) { StartThreads(num_async_threads_); } diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index 83dbdc3e59..08bf045883 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -31,6 +31,7 @@ * */ +#include <cinttypes> #include <deque> #include <list> #include <thread> diff --git a/test/cpp/util/metrics_server.cc b/test/cpp/util/metrics_server.cc index cc6b39b753..1c7cd6382a 100644 --- a/test/cpp/util/metrics_server.cc +++ b/test/cpp/util/metrics_server.cc @@ -99,7 +99,7 @@ std::shared_ptr<QpsGauge> MetricsServiceImpl::CreateQpsGauge( std::lock_guard<std::mutex> lock(mu_); std::shared_ptr<QpsGauge> qps_gauge(new QpsGauge()); - const auto p = qps_gauges_.emplace(name, qps_gauge); + const auto p = qps_gauges_.insert(std::make_pair(name, qps_gauge)); // p.first is an iterator pointing to <name, shared_ptr<QpsGauge>> pair. // p.second is a boolean which is set to 'true' if the QpsGauge is @@ -114,7 +114,7 @@ std::shared_ptr<QpsGauge> MetricsServiceImpl::CreateQpsGauge( std::unique_ptr<grpc::Server> MetricsServiceImpl::StartServer(int port) { gpr_log(GPR_INFO, "Building metrics server.."); - const grpc::string address = "0.0.0.0:" + std::to_string(port); + const grpc::string address = "0.0.0.0:" + grpc::to_string(port); ServerBuilder builder; builder.AddListeningPort(address, grpc::InsecureServerCredentials()); diff --git a/test/cpp/util/proto_reflection_descriptor_database.cc b/test/cpp/util/proto_reflection_descriptor_database.cc index 6907d97bd5..25b720aee0 100644 --- a/test/cpp/util/proto_reflection_descriptor_database.cc +++ b/test/cpp/util/proto_reflection_descriptor_database.cc @@ -298,7 +298,7 @@ void ProtoReflectionDescriptorDatabase::AddFileFromResponse( const std::shared_ptr<ProtoReflectionDescriptorDatabase::ClientStream> ProtoReflectionDescriptorDatabase::GetStream() { - if (stream_ == nullptr) { + if (!stream_) { stream_ = stub_->ServerReflectionInfo(&ctx_); } return stream_; diff --git a/test/cpp/util/test_credentials_provider.cc b/test/cpp/util/test_credentials_provider.cc index 9c09a73115..6e68f59e6a 100644 --- a/test/cpp/util/test_credentials_provider.cc +++ b/test/cpp/util/test_credentials_provider.cc @@ -41,15 +41,9 @@ #include "test/core/end2end/data/ssl_test_data.h" +namespace grpc { namespace { -using grpc::ChannelArguments; -using grpc::ChannelCredentials; -using grpc::InsecureChannelCredentials; -using grpc::InsecureServerCredentials; -using grpc::ServerCredentials; -using grpc::SslCredentialsOptions; -using grpc::SslServerCredentialsOptions; using grpc::testing::CredentialTypeProvider; // Provide test credentials. Thread-safe. @@ -69,19 +63,27 @@ class CredentialsProvider { class DefaultCredentialsProvider : public CredentialsProvider { public: - ~DefaultCredentialsProvider() override {} + ~DefaultCredentialsProvider() GRPC_OVERRIDE {} - void AddSecureType( - const grpc::string& type, - std::unique_ptr<CredentialTypeProvider> type_provider) override { + void AddSecureType(const grpc::string& type, + std::unique_ptr<CredentialTypeProvider> type_provider) + GRPC_OVERRIDE { // This clobbers any existing entry for type, except the defaults, which // can't be clobbered. grpc::unique_lock<grpc::mutex> lock(mu_); - added_secure_types_[type] = std::move(type_provider); + auto it = std::find(added_secure_type_names_.begin(), + added_secure_type_names_.end(), type); + if (it == added_secure_type_names_.end()) { + added_secure_type_names_.push_back(type); + added_secure_type_providers_.push_back(std::move(type_provider)); + } else { + added_secure_type_providers_[it - added_secure_type_names_.begin()] = + std::move(type_provider); + } } std::shared_ptr<ChannelCredentials> GetChannelCredentials( - const grpc::string& type, ChannelArguments* args) override { + const grpc::string& type, ChannelArguments* args) GRPC_OVERRIDE { if (type == grpc::testing::kInsecureCredentialsType) { return InsecureChannelCredentials(); } else if (type == grpc::testing::kTlsCredentialsType) { @@ -90,17 +92,19 @@ class DefaultCredentialsProvider : public CredentialsProvider { return SslCredentials(ssl_opts); } else { grpc::unique_lock<grpc::mutex> lock(mu_); - auto it(added_secure_types_.find(type)); - if (it == added_secure_types_.end()) { + auto it(std::find(added_secure_type_names_.begin(), + added_secure_type_names_.end(), type)); + if (it == added_secure_type_names_.end()) { gpr_log(GPR_ERROR, "Unsupported credentials type %s.", type.c_str()); return nullptr; } - return it->second->GetChannelCredentials(args); + return added_secure_type_providers_[it - added_secure_type_names_.begin()] + ->GetChannelCredentials(args); } } std::shared_ptr<ServerCredentials> GetServerCredentials( - const grpc::string& type) override { + const grpc::string& type) GRPC_OVERRIDE { if (type == grpc::testing::kInsecureCredentialsType) { return InsecureServerCredentials(); } else if (type == grpc::testing::kTlsCredentialsType) { @@ -112,28 +116,32 @@ class DefaultCredentialsProvider : public CredentialsProvider { return SslServerCredentials(ssl_opts); } else { grpc::unique_lock<grpc::mutex> lock(mu_); - auto it(added_secure_types_.find(type)); - if (it == added_secure_types_.end()) { + auto it(std::find(added_secure_type_names_.begin(), + added_secure_type_names_.end(), type)); + if (it == added_secure_type_names_.end()) { gpr_log(GPR_ERROR, "Unsupported credentials type %s.", type.c_str()); return nullptr; } - return it->second->GetServerCredentials(); + return added_secure_type_providers_[it - added_secure_type_names_.begin()] + ->GetServerCredentials(); } } - std::vector<grpc::string> GetSecureCredentialsTypeList() override { + std::vector<grpc::string> GetSecureCredentialsTypeList() GRPC_OVERRIDE { std::vector<grpc::string> types; types.push_back(grpc::testing::kTlsCredentialsType); grpc::unique_lock<grpc::mutex> lock(mu_); - for (const auto& type_pair : added_secure_types_) { - types.push_back(type_pair.first); + for (auto it = added_secure_type_names_.begin(); + it != added_secure_type_names_.end(); it++) { + types.push_back(*it); } return types; } private: grpc::mutex mu_; - std::unordered_map<grpc::string, std::unique_ptr<CredentialTypeProvider> > - added_secure_types_; + std::vector<grpc::string> added_secure_type_names_; + std::vector<std::unique_ptr<CredentialTypeProvider>> + added_secure_type_providers_; }; gpr_once g_once_init_provider = GPR_ONCE_INIT; @@ -148,7 +156,6 @@ CredentialsProvider* GetProvider() { } // namespace -namespace grpc { namespace testing { void AddSecureType(const grpc::string& type, diff --git a/third_party/protobuf b/third_party/protobuf -Subproject 3470b6895aa659b7559ed678e029a5338e535f1 +Subproject d4d13a4349e4e59d67f311185ddcc1890d956d7 diff --git a/tools/buildgen/plugins/make_fuzzer_tests.py b/tools/buildgen/plugins/make_fuzzer_tests.py index 7c6fd53570..1d215e9fe0 100644 --- a/tools/buildgen/plugins/make_fuzzer_tests.py +++ b/tools/buildgen/plugins/make_fuzzer_tests.py @@ -49,7 +49,7 @@ def mako_plugin(dictionary): tests.append({ 'name': new_target['name'], 'args': [fn], - 'exclude_configs': [], + 'exclude_configs': ['tsan'], 'uses_polling': False, 'platforms': ['linux'], 'ci_platforms': ['linux'], diff --git a/tools/dockerfile/interoptest/grpc_interop_php/build_interop.sh b/tools/dockerfile/interoptest/grpc_interop_php/build_interop.sh index 87262f1d62..a84a450221 100755 --- a/tools/dockerfile/interoptest/grpc_interop_php/build_interop.sh +++ b/tools/dockerfile/interoptest/grpc_interop_php/build_interop.sh @@ -40,8 +40,6 @@ cp -r /var/local/jenkins/service_account $HOME || true cd /var/local/git/grpc rvm --default use ruby-2.1 -make install-certs - # gRPC core and protobuf need to be installed make install diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile b/tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile new file mode 100644 index 0000000000..c29aaf7c3f --- /dev/null +++ b/tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile @@ -0,0 +1,140 @@ +# 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. + +FROM debian:jessie + +# Install Git and basic packages. +RUN apt-get update && apt-get install -y \ + autoconf \ + autotools-dev \ + build-essential \ + bzip2 \ + ccache \ + curl \ + gcc \ + gcc-multilib \ + git \ + golang \ + gyp \ + lcov \ + libc6 \ + libc6-dbg \ + libc6-dev \ + libgtest-dev \ + libtool \ + make \ + perl \ + strace \ + python-dev \ + python-setuptools \ + python-yaml \ + telnet \ + unzip \ + wget \ + zip && apt-get clean + +#================ +# Build profiling +RUN apt-get update && apt-get install -y time && apt-get clean + +#================== +# Ruby dependencies + +# Install rvm +RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 +RUN \curl -sSL https://get.rvm.io | bash -s stable + +# Install Ruby 2.1 +RUN /bin/bash -l -c "rvm install ruby-2.1" +RUN /bin/bash -l -c "rvm use --default ruby-2.1" +RUN /bin/bash -l -c "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc" +RUN /bin/bash -l -c "echo 'export PATH=/usr/local/rvm/bin:$PATH' >> ~/.bashrc" +RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.1' >> ~/.bashrc" +RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc" + +# Google Cloud platform API libraries +RUN apt-get update && apt-get install -y python-pip && apt-get clean +RUN pip install --upgrade google-api-python-client + + +#================= +# PHP dependencies + +# Install dependencies + +RUN /bin/bash -l -c "echo 'deb http://packages.dotdeb.org wheezy-php55 all' \ + >> /etc/apt/sources.list.d/dotdeb.list" +RUN /bin/bash -l -c "echo 'deb-src http://packages.dotdeb.org wheezy-php55 all' \ + >> /etc/apt/sources.list.d/dotdeb.list" +RUN wget http://www.dotdeb.org/dotdeb.gpg -O- | apt-key add - + +RUN apt-get update && apt-get install -y \ + git php5 php5-dev phpunit unzip + +# Prepare ccache +RUN ln -s /usr/bin/ccache /usr/local/bin/gcc +RUN ln -s /usr/bin/ccache /usr/local/bin/g++ +RUN ln -s /usr/bin/ccache /usr/local/bin/cc +RUN ln -s /usr/bin/ccache /usr/local/bin/c++ +RUN ln -s /usr/bin/ccache /usr/local/bin/clang +RUN ln -s /usr/bin/ccache /usr/local/bin/clang++ + +#====================== +# Zookeeper dependencies +# TODO(jtattermusch): is zookeeper still needed? +RUN apt-get install -y libzookeeper-mt-dev + +RUN mkdir /var/local/jenkins + +# ronn: a ruby tool used to convert markdown to man pages, used during the +# install of Protobuf extensions +# +# rake: a ruby version of make used to build the PHP Protobuf extension +RUN /bin/bash -l -c "rvm all do gem install ronn rake" + +# Install composer +RUN curl -sS https://getcomposer.org/installer | php +RUN mv composer.phar /usr/local/bin/composer + +# As an attempt to work around #4212, try to prefetch Protobuf-PHP dependency +# into composer cache to prevent "composer install" from cloning on each build. +RUN git clone --mirror https://github.com/stanley-cheung/Protobuf-PHP.git \ + /root/.composer/cache/vcs/git-github.com-stanley-cheung-Protobuf-PHP.git/ + +# Download the patched PHP protobuf so that PHP gRPC clients can be generated +# from proto3 schemas. +RUN git clone https://github.com/stanley-cheung/Protobuf-PHP.git /var/local/git/protobuf-php + +RUN /bin/bash -l -c "rvm use ruby-2.1 \ + && cd /var/local/git/protobuf-php \ + && rvm all do rake pear:package version=1.0 \ + && pear install Protobuf-1.0.tgz" + +# Define the default command. +CMD ["bash"] diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_php/build_interop_stress.sh b/tools/dockerfile/stress_test/grpc_interop_stress_php/build_interop_stress.sh new file mode 100755 index 0000000000..87262f1d62 --- /dev/null +++ b/tools/dockerfile/stress_test/grpc_interop_stress_php/build_interop_stress.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# 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. +# +# Builds PHP interop server and client in a base image. +set -ex + +mkdir -p /var/local/git +git clone --recursive /var/local/jenkins/grpc /var/local/git/grpc + +# copy service account keys if available +cp -r /var/local/jenkins/service_account $HOME || true + +cd /var/local/git/grpc +rvm --default use ruby-2.1 + +make install-certs + +# gRPC core and protobuf need to be installed +make install + +(cd src/php/ext/grpc && phpize && ./configure && make) + +(cd third_party/protobuf && make install) + +(cd src/php && composer install) + +(cd src/php && protoc-gen-php -i tests/interop/ -o tests/interop/ tests/interop/test.proto) diff --git a/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile b/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile index 1e43e6b25c..5982c9783e 100644 --- a/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile +++ b/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile @@ -67,14 +67,6 @@ RUN apt-get update && apt-get install -y time && apt-get clean # C++ dependencies RUN apt-get update && apt-get -y install libgflags-dev libgtest-dev libc++-dev clang && apt-get clean -# Prepare ccache -RUN ln -s /usr/bin/ccache /usr/local/bin/gcc -RUN ln -s /usr/bin/ccache /usr/local/bin/g++ -RUN ln -s /usr/bin/ccache /usr/local/bin/cc -RUN ln -s /usr/bin/ccache /usr/local/bin/c++ -RUN ln -s /usr/bin/ccache /usr/local/bin/clang -RUN ln -s /usr/bin/ccache /usr/local/bin/clang++ - #====================== # Zookeeper dependencies # TODO(jtattermusch): is zookeeper still needed? diff --git a/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile b/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile index 6f330f9166..dd9a79b1ed 100644 --- a/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile +++ b/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile @@ -70,7 +70,9 @@ RUN apt-get update && apt-get -y install libgflags-dev libgtest-dev libc++-dev c RUN apt-get update && apt-get install -y \ gcc-4.4 \ - gcc-4.4-multilib + gcc-4.4-multilib \ + g++-4.4 \ + g++-4.4-multilib RUN wget https://openssl.org/source/old/1.0.2/openssl-1.0.2f.tar.gz diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index aee866adf4..e1555930e9 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -807,6 +807,7 @@ src/core/lib/http/parser.h \ src/core/lib/iomgr/closure.h \ src/core/lib/iomgr/endpoint.h \ src/core/lib/iomgr/endpoint_pair.h \ +src/core/lib/iomgr/error.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 \ @@ -816,6 +817,7 @@ src/core/lib/iomgr/iocp_windows.h \ src/core/lib/iomgr/iomgr.h \ src/core/lib/iomgr/iomgr_internal.h \ src/core/lib/iomgr/iomgr_posix.h \ +src/core/lib/iomgr/load_file.h \ src/core/lib/iomgr/polling_entity.h \ src/core/lib/iomgr/pollset.h \ src/core/lib/iomgr/pollset_set.h \ @@ -903,6 +905,7 @@ src/core/lib/security/transport/auth_filters.h \ src/core/lib/security/transport/handshake.h \ src/core/lib/security/transport/secure_endpoint.h \ src/core/lib/security/transport/security_connector.h \ +src/core/lib/security/transport/tsi_error.h \ src/core/lib/security/util/b64.h \ src/core/lib/security/util/json_util.h \ src/core/lib/tsi/fake_transport_security.h \ @@ -959,6 +962,7 @@ src/core/lib/iomgr/closure.c \ src/core/lib/iomgr/endpoint.c \ src/core/lib/iomgr/endpoint_pair_posix.c \ src/core/lib/iomgr/endpoint_pair_windows.c \ +src/core/lib/iomgr/error.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 \ @@ -968,6 +972,7 @@ src/core/lib/iomgr/iocp_windows.c \ src/core/lib/iomgr/iomgr.c \ src/core/lib/iomgr/iomgr_posix.c \ src/core/lib/iomgr/iomgr_windows.c \ +src/core/lib/iomgr/load_file.c \ src/core/lib/iomgr/polling_entity.c \ src/core/lib/iomgr/pollset_set_windows.c \ src/core/lib/iomgr/pollset_windows.c \ @@ -1070,6 +1075,7 @@ src/core/lib/security/transport/handshake.c \ src/core/lib/security/transport/secure_endpoint.c \ src/core/lib/security/transport/security_connector.c \ src/core/lib/security/transport/server_auth_filter.c \ +src/core/lib/security/transport/tsi_error.c \ src/core/lib/security/util/b64.c \ src/core/lib/security/util/json_util.c \ src/core/lib/surface/init_secure.c \ @@ -1168,7 +1174,6 @@ src/core/lib/profiling/timers.h \ src/core/lib/support/backoff.h \ src/core/lib/support/block_annotate.h \ src/core/lib/support/env.h \ -src/core/lib/support/load_file.h \ src/core/lib/support/murmur_hash.h \ src/core/lib/support/stack_lockfree.h \ src/core/lib/support/string.h \ @@ -1191,7 +1196,6 @@ src/core/lib/support/env_posix.c \ src/core/lib/support/env_windows.c \ src/core/lib/support/histogram.c \ src/core/lib/support/host_port.c \ -src/core/lib/support/load_file.c \ src/core/lib/support/log.c \ src/core/lib/support/log_android.c \ src/core/lib/support/log_linux.c \ diff --git a/tools/fuzzer/runners/http_fuzzer_test.sh b/tools/fuzzer/runners/http_request_fuzzer_test.sh index d8dde1491e..250a761ac8 100644 --- a/tools/fuzzer/runners/http_fuzzer_test.sh +++ b/tools/fuzzer/runners/http_request_fuzzer_test.sh @@ -42,4 +42,4 @@ then flags="-use_traces=1 $flags" fi -bins/$config/http_fuzzer_test $flags fuzzer_output test/core/http/corpus +bins/$config/http_request_fuzzer_test $flags fuzzer_output test/core/http/corpus diff --git a/tools/fuzzer/runners/http_response_fuzzer_test.sh b/tools/fuzzer/runners/http_response_fuzzer_test.sh new file mode 100644 index 0000000000..f747739ae2 --- /dev/null +++ b/tools/fuzzer/runners/http_response_fuzzer_test.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/http_response_fuzzer_test $flags fuzzer_output test/core/http/corpus diff --git a/tools/profiling/latency_profile/run_latency_profile.sh b/tools/profiling/latency_profile/run_latency_profile.sh index 54a25a9cb7..40c6fcb431 100755 --- a/tools/profiling/latency_profile/run_latency_profile.sh +++ b/tools/profiling/latency_profile/run_latency_profile.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2015, Google Inc. +# Copyright 2016, Google Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -28,17 +28,61 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# format argument via +# $ echo '{...}' | python -mjson.tool +read -r -d '' SCENARIOS_JSON_ARG <<'EOF' +{ + "scenarios": [ + { + "benchmark_seconds": 5, + "client_config": { + "client_channels": 1, + "client_type": "SYNC_CLIENT", + "histogram_params": { + "max_possible": 60000000000.0, + "resolution": 0.01 + }, + "load_params": { + "closed_loop": {} + }, + "outstanding_rpcs_per_channel": 1, + "payload_config": { + "simple_params": { + "req_size": 0, + "resp_size": 0 + } + }, + "rpc_type": "UNARY", + "security_params": { + "server_host_override": "foo.test.google.fr", + "use_test_ca": true + } + }, + "name": "cpp_protobuf_sync_unary_ping_pong_secure", + "num_clients": 1, + "num_servers": 1, + "server_config": { + "core_limit": 1, + "security_params": { + "server_host_override": "foo.test.google.fr", + "use_test_ca": true + }, + "server_type": "SYNC_SERVER" + }, + "spawn_local_worker_count": 2, + "warmup_seconds": 5 + } + ] +} + +EOF + set -ex cd $(dirname $0)/../../.. -BINS="sync_unary_ping_pong_test sync_streaming_ping_pong_test" CPUS=`python -c 'import multiprocessing; print multiprocessing.cpu_count()'` -make CONFIG=basicprof -j$CPUS $BINS - -mkdir -p reports - # try to use pypy for generating reports # each trace dumps 7-8gig of text to disk, and processing this into a report is # heavyweight - so any speed boost is worthwhile @@ -49,35 +93,13 @@ else PYTHON=python2.7 fi -# start processes, interleaving report index generation +make CONFIG=basicprof -j$CPUS qps_json_driver + +mkdir -p reports echo '<html><head></head><body>' > reports/index.html -for bin in $BINS -do - bins/basicprof/$bin - mv latency_trace.txt $bin.trace - echo "<a href='$bin.txt'>$bin</a><br/>" >> reports/index.html -done -pids="" -# generate report pages... this will take some time -# run them in parallel: they take 1 cpu each -for bin in $BINS -do - $PYTHON tools/profiling/latency_profile/profile_analyzer.py \ - --source=$bin.trace --fmt=simple > reports/$bin.txt & - pids+=" $!" -done +bins/basicprof/qps_json_driver --scenarios_json="$SCENARIOS_JSON_ARG" +echo '<pre>' >> reports/index.html +$PYTHON tools/profiling/latency_profile/profile_analyzer.py \ + --source=latency_trace.txt --fmt=simple >> reports/index.html +echo '</pre>' >> reports/index.html echo '</body></html>' >> reports/index.html - -# make sure we kill the report generation if something goes wrong -trap "kill $pids || true" 0 - -# finally, wait for the background report generation to finish -for pid in $pids -do - if wait $pid - then - echo "Finished $pid" - else - exit 1 - fi -done diff --git a/tools/run_tests/build_package_node.sh b/tools/run_tests/build_package_node.sh index 4646072a54..6f7211b53f 100755 --- a/tools/run_tests/build_package_node.sh +++ b/tools/run_tests/build_package_node.sh @@ -58,6 +58,8 @@ tools_version=$(npm list | grep -oP '(?<=grpc-tools@)\S+') output_dir=$artifacts/grpc-precompiled-binaries/node/grpc-tools/v$tools_version mkdir -p $output_dir +well_known_protos=( any api compiler/plugin descriptor duration empty field_mask source_context struct timestamp type wrappers ) + for arch in {x86,x64}; do case arch in x86) @@ -79,10 +81,14 @@ for arch in {x86,x64}; do node_plat=$plat ;; esac - rm bin/* + rm -r bin/* input_dir="$EXTERNAL_GIT_ROOT/architecture=$arch,language=protoc,platform=$plat/artifacts" cp $input_dir/protoc* bin/ cp $input_dir/grpc_node_plugin* bin/ + mkdir -p bin/google/protobuf + for proto in "${well_known_protos[@]}"; do + cp $base/third_party/protobuf/src/google/protobuf/$proto.proto bin/google/protobuf/$proto.proto + done tar -czf $output_dir/$node_plat-$node_arch.tar.gz bin/ done done diff --git a/tools/run_tests/build_package_ruby.sh b/tools/run_tests/build_package_ruby.sh index e44428bf7e..4116e29deb 100755 --- a/tools/run_tests/build_package_ruby.sh +++ b/tools/run_tests/build_package_ruby.sh @@ -40,6 +40,8 @@ mkdir -p artifacts/ # and we only collect them here to deliver them to the distribtest phase. cp -r $EXTERNAL_GIT_ROOT/architecture={x86,x64},language=ruby,platform={windows,linux,macos}/artifacts/* artifacts/ || true +well_known_protos=( any api compiler/plugin descriptor duration empty field_mask source_context struct timestamp type wrappers ) + # TODO: all the artifact builder configurations generate a grpc-VERSION.gem # source distribution package, and only one of them will end up # in the artifacts/ directory. They should be all equivalent though. @@ -56,9 +58,12 @@ for arch in {x86,x64}; do for plat in {windows,linux,macos}; do input_dir="$EXTERNAL_GIT_ROOT/architecture=$arch,language=protoc,platform=$plat/artifacts" output_dir="$base/src/ruby/tools/bin/${ruby_arch}-${plat}" - mkdir -p $output_dir + mkdir -p $output_dir/google/protobuf cp $input_dir/protoc* $output_dir/ cp $input_dir/grpc_ruby_plugin* $output_dir/ + for proto in "${well_known_protos[@]}"; do + cp $base/third_party/protobuf/src/google/protobuf/$proto.proto $output_dir/google/protobuf/$proto.proto + done done done diff --git a/tools/run_tests/performance/kill_workers.sh b/tools/run_tests/performance/kill_workers.sh index f306f0c991..279cc7df29 100755 --- a/tools/run_tests/performance/kill_workers.sh +++ b/tools/run_tests/performance/kill_workers.sh @@ -39,19 +39,19 @@ cd $(dirname $0)/../../.. killall -9 qps_worker || true # C# -ps -C mono -o pid=,cmd= | grep QpsWorker | awk '{print $1}' | xargs kill -9 +ps -C mono -o pid=,cmd= | grep QpsWorker | awk '{print $1}' | xargs kill -9 || true # Ruby -ps -C ruby -o pid=,cmd= | grep 'qps/worker.rb' | awk '{print $1}' | xargs kill -9 +ps -C ruby -o pid=,cmd= | grep 'qps/worker.rb' | awk '{print $1}' | xargs kill -9 || true # Node -ps -C node -o pid=,cmd= | grep 'performance/worker.js' | awk '{print $1}' | xargs kill -9 +ps -C node -o pid=,cmd= | grep 'performance/worker.js' | awk '{print $1}' | xargs kill -9 || true # Python -ps -C python -o pid=,cmd= | grep 'qps_worker.py' | awk '{print $1}' | xargs kill -9 +ps -C python -o pid=,cmd= | grep 'qps_worker.py' | awk '{print $1}' | xargs kill -9 || true # Java -jps | grep LoadWorker | awk '{print $1}' | xargs kill -9 +jps | grep LoadWorker | awk '{print $1}' | xargs kill -9 || true # Go killall -9 worker || true diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 5aaefb1ae1..0787637d75 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -252,7 +252,7 @@ class PHPLanguage: return {} def unimplemented_test_cases(self): - return _SKIP_ADVANCED + _SKIP_COMPRESSION + return _SKIP_COMPRESSION def unimplemented_test_cases_server(self): return [] diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 3080d19c8d..9ef12c5b07 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -62,6 +62,11 @@ os.chdir(_ROOT) _FORCE_ENVIRON_FOR_WRAPPERS = {} +_POLLING_STRATEGIES = { + 'linux': ['poll', 'legacy'] +} + + def platform_string(): return jobset.platform_string() @@ -153,14 +158,8 @@ class CLanguage(object): def test_specs(self): out = [] binaries = get_c_tests(self.args.travis, self.test_lang) - POLLING_STRATEGIES = { - 'windows': ['all'], - 'mac': ['all'], - 'posix': ['all'], - 'linux': ['poll', 'legacy'] - } for target in binaries: - polling_strategies = (POLLING_STRATEGIES[self.platform] + polling_strategies = (_POLLING_STRATEGIES.get(self.platform, ['all']) if target.get('uses_polling', True) else ['all']) for polling_strategy in polling_strategies: @@ -395,7 +394,7 @@ class PythonLanguage(object): tests_json = json.load(tests_json_file) environment = dict(_FORCE_ENVIRON_FOR_WRAPPERS) environment['PYTHONPATH'] = '{}:{}'.format( - os.path.abspath('src/python/gens'), + os.path.abspath('src/python/gens'), os.path.abspath('src/python/grpcio_health_checking')) if self.config.build_config != 'gcov': return [self.config.job_spec( @@ -794,6 +793,7 @@ argp.add_argument('-n', '--runs_per_test', default=1, type=runs_per_test_type, help='A positive integer or "inf". If "inf", all tests will run in an ' 'infinite loop. Especially useful in combination with "-f"') argp.add_argument('-r', '--regex', default='.*', type=str) +argp.add_argument('--regex_exclude', default='', type=str) argp.add_argument('-j', '--jobs', default=multiprocessing.cpu_count(), type=int) argp.add_argument('-s', '--slowdown', default=1.0, type=float) argp.add_argument('-f', '--forever', @@ -854,8 +854,13 @@ argp.add_argument('--update_submodules', default=[], nargs='*', argp.add_argument('-a', '--antagonists', default=0, type=int) argp.add_argument('-x', '--xml_report', default=None, type=str, help='Generates a JUnit-compatible XML report') +argp.add_argument('--force_default_poller', default=False, action='store_const', const=True, + help='Dont try to iterate over many polling strategies when they exist') args = argp.parse_args() +if args.force_default_poller: + _POLLING_STRATEGIES = {} + jobset.measure_cpu_costs = args.measure_cpu_costs # update submodules if necessary @@ -1205,7 +1210,9 @@ def _build_and_run( spec for language in languages for spec in language.test_specs() - if re.search(args.regex, spec.shortname)) + if (re.search(args.regex, spec.shortname) and + (args.regex_exclude == '' or + not re.search(args.regex_exclude, spec.shortname)))) # When running on travis, we want out test runs to be as similar as possible # for reproducibility purposes. if args.travis: @@ -1228,7 +1235,7 @@ def _build_and_run( cache=cache if not xml_report else None, add_env={'GRPC_TEST_PORT_SERVER': 'localhost:%d' % port_server_port}) if resultset: - for k, v in resultset.iteritems(): + for k, v in sorted(resultset.items()): num_runs, num_failures = _calculate_num_runs_failures(v) if num_failures == num_runs: # what about infinite_runs??? jobset.message('FAILED', k, do_newline=True) diff --git a/tools/run_tests/sanity/check_submodules.sh b/tools/run_tests/sanity/check_submodules.sh index 6e858fa9c9..f2d7a1429e 100755 --- a/tools/run_tests/sanity/check_submodules.sh +++ b/tools/run_tests/sanity/check_submodules.sh @@ -41,11 +41,11 @@ want_submodules=`mktemp /tmp/submXXXXXX` git submodule | awk '{ print $1 }' | sort > $submodules cat << EOF | awk '{ print $1 }' | sort > $want_submodules - c880e42ba1c8032d4cdde2aba0541d8a9d9fa2e9 third_party/boringssl (heads/2661) + c880e42ba1c8032d4cdde2aba0541d8a9d9fa2e9 third_party/boringssl (version_for_cocoapods_2.0-100-gc880e42) 05b155ff59114735ec8cd089f669c4c3d8f59029 third_party/gflags (v2.1.0-45-g05b155f) c99458533a9b4c743ed51537e25989ea55944908 third_party/googletest (release-1.7.0) f8ac463766281625ad710900479130c7fcb4d63b third_party/nanopb (nanopb-0.3.4-29-gf8ac463) - 3470b6895aa659b7559ed678e029a5338e535f14 third_party/protobuf (v3.0.0-beta-2-441-g3470b68) + d4d13a4349e4e59d67f311185ddcc1890d956d7a third_party/protobuf (v3.0.0-beta-3.2) 50893291621658f355bc5b4d450a8d06a563053d third_party/zlib (v1.2.8) EOF diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 4aad52c69d..750d98b0be 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -557,20 +557,6 @@ ], "headers": [], "language": "c", - "name": "gpr_load_file_test", - "src": [ - "test/core/support/load_file_test.c" - ], - "third_party": false, - "type": "target" - }, - { - "deps": [ - "gpr", - "gpr_test_util" - ], - "headers": [], - "language": "c", "name": "gpr_log_test", "src": [ "test/core/support/log_test.c" @@ -1001,9 +987,9 @@ ], "headers": [], "language": "c", - "name": "http_fuzzer_test", + "name": "http_parser_test", "src": [ - "test/core/http/fuzzer.c" + "test/core/http/parser_test.c" ], "third_party": false, "type": "target" @@ -1017,9 +1003,25 @@ ], "headers": [], "language": "c", - "name": "http_parser_test", + "name": "http_request_fuzzer_test", "src": [ - "test/core/http/parser_test.c" + "test/core/http/request_fuzzer.c" + ], + "third_party": false, + "type": "target" + }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "language": "c", + "name": "http_response_fuzzer_test", + "src": [ + "test/core/http/response_fuzzer.c" ], "third_party": false, "type": "target" @@ -1271,6 +1273,22 @@ ], "headers": [], "language": "c", + "name": "load_file_test", + "src": [ + "test/core/iomgr/load_file_test.c" + ], + "third_party": false, + "type": "target" + }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "language": "c", "name": "low_level_ping_pong_benchmark", "src": [ "test/core/network_benchmarks/low_level_ping_pong.c" @@ -1445,6 +1463,22 @@ ], "headers": [], "language": "c", + "name": "sequential_connectivity_test", + "src": [ + "test/core/surface/sequential_connectivity_test.c" + ], + "third_party": false, + "type": "target" + }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "language": "c", "name": "server_chttp2_test", "src": [ "test/core/surface/server_chttp2_test.c" @@ -2710,28 +2744,6 @@ { "deps": [ "gpr", - "gpr_test_util", - "grpc", - "grpc++", - "grpc++_test_util", - "grpc_test_util", - "grpc_zookeeper" - ], - "headers": [ - "src/proto/grpc/testing/echo.grpc.pb.h", - "src/proto/grpc/testing/echo.pb.h" - ], - "language": "c++", - "name": "zookeeper_test", - "src": [ - "test/cpp/end2end/zookeeper_test.cc" - ], - "third_party": false, - "type": "target" - }, - { - "deps": [ - "gpr", "grpc" ], "headers": [], @@ -4026,9 +4038,26 @@ ], "headers": [], "language": "c", - "name": "http_fuzzer_test_one_entry", + "name": "http_request_fuzzer_test_one_entry", + "src": [ + "test/core/http/request_fuzzer.c", + "test/core/util/one_corpus_entry_fuzzer.c" + ], + "third_party": false, + "type": "target" + }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "language": "c", + "name": "http_response_fuzzer_test_one_entry", "src": [ - "test/core/http/fuzzer.c", + "test/core/http/response_fuzzer.c", "test/core/util/one_corpus_entry_fuzzer.c" ], "third_party": false, @@ -4267,23 +4296,6 @@ { "deps": [ "gpr", - "grpc" - ], - "headers": [ - "include/grpc/grpc_zookeeper.h" - ], - "language": "c", - "name": "grpc_zookeeper", - "src": [ - "include/grpc/grpc_zookeeper.h", - "src/core/ext/resolver/zookeeper/zookeeper_resolver.c" - ], - "third_party": false, - "type": "lib" - }, - { - "deps": [ - "gpr", "gpr_test_util", "grpc", "grpc_test_util", @@ -5388,6 +5400,7 @@ "test/core/end2end/tests/simple_delayed_request.c", "test/core/end2end/tests/simple_metadata.c", "test/core/end2end/tests/simple_request.c", + "test/core/end2end/tests/streaming_error_response.c", "test/core/end2end/tests/trailing_metadata.c" ], "third_party": false, @@ -5446,6 +5459,7 @@ "test/core/end2end/tests/simple_delayed_request.c", "test/core/end2end/tests/simple_metadata.c", "test/core/end2end/tests/simple_request.c", + "test/core/end2end/tests/streaming_error_response.c", "test/core/end2end/tests/trailing_metadata.c" ], "third_party": false, @@ -5529,7 +5543,6 @@ "src/core/lib/support/backoff.h", "src/core/lib/support/block_annotate.h", "src/core/lib/support/env.h", - "src/core/lib/support/load_file.h", "src/core/lib/support/murmur_hash.h", "src/core/lib/support/stack_lockfree.h", "src/core/lib/support/string.h", @@ -5588,8 +5601,6 @@ "src/core/lib/support/env_windows.c", "src/core/lib/support/histogram.c", "src/core/lib/support/host_port.c", - "src/core/lib/support/load_file.c", - "src/core/lib/support/load_file.h", "src/core/lib/support/log.c", "src/core/lib/support/log_android.c", "src/core/lib/support/log_linux.c", @@ -5712,6 +5723,7 @@ "src/core/lib/iomgr/closure.h", "src/core/lib/iomgr/endpoint.h", "src/core/lib/iomgr/endpoint_pair.h", + "src/core/lib/iomgr/error.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", @@ -5721,6 +5733,7 @@ "src/core/lib/iomgr/iomgr.h", "src/core/lib/iomgr/iomgr_internal.h", "src/core/lib/iomgr/iomgr_posix.h", + "src/core/lib/iomgr/load_file.h", "src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/pollset.h", "src/core/lib/iomgr/pollset_set.h", @@ -5814,6 +5827,8 @@ "src/core/lib/iomgr/endpoint_pair.h", "src/core/lib/iomgr/endpoint_pair_posix.c", "src/core/lib/iomgr/endpoint_pair_windows.c", + "src/core/lib/iomgr/error.c", + "src/core/lib/iomgr/error.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", @@ -5832,6 +5847,8 @@ "src/core/lib/iomgr/iomgr_posix.c", "src/core/lib/iomgr/iomgr_posix.h", "src/core/lib/iomgr/iomgr_windows.c", + "src/core/lib/iomgr/load_file.c", + "src/core/lib/iomgr/load_file.h", "src/core/lib/iomgr/polling_entity.c", "src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/pollset.h", @@ -6162,6 +6179,7 @@ "src/core/lib/security/transport/handshake.h", "src/core/lib/security/transport/secure_endpoint.h", "src/core/lib/security/transport/security_connector.h", + "src/core/lib/security/transport/tsi_error.h", "src/core/lib/security/util/b64.h", "src/core/lib/security/util/json_util.h" ], @@ -6207,6 +6225,8 @@ "src/core/lib/security/transport/security_connector.c", "src/core/lib/security/transport/security_connector.h", "src/core/lib/security/transport/server_auth_filter.c", + "src/core/lib/security/transport/tsi_error.c", + "src/core/lib/security/transport/tsi_error.h", "src/core/lib/security/util/b64.c", "src/core/lib/security/util/b64.h", "src/core/lib/security/util/json_util.c", diff --git a/tools/run_tests/stress_test/configs/php-cxx.json b/tools/run_tests/stress_test/configs/php-cxx.json new file mode 100644 index 0000000000..03254b368c --- /dev/null +++ b/tools/run_tests/stress_test/configs/php-cxx.json @@ -0,0 +1,93 @@ +{ + "dockerImages": { + "grpc_stress_cxx_opt" : { + "buildScript": "tools/run_tests/dockerize/build_interop_stress_image.sh", + "dockerFileDir": "grpc_interop_stress_cxx", + "buildType": "opt" + }, + "grpc_stress_php": { + "buildScript": "tools/run_tests/dockerize/build_interop_stress_image.sh", + "dockerFileDir": "grpc_interop_stress_php" + } + }, + + "clientTemplates": { + "baseTemplates": { + "default": { + "wrapperScriptPath": "/var/local/git/grpc/tools/gcp/stress_test/run_client.py", + "pollIntervalSecs": 60, + "clientArgs": { + "num_channels_per_server":5, + "num_stubs_per_channel":10, + "test_cases": "empty_unary:1,large_unary:1,client_streaming:1,server_streaming:1,empty_stream:1", + "metrics_port": 8081 + }, + "metricsPort": 8081, + "metricsArgs": { + "metrics_server_address": "localhost:8081" + } + } + }, + "templates": { + "php_client": { + "baseTemplate": "default", + "stressClientCmd": [ + "/var/local/git/grpc/src/php/bin/stress_client.sh" + ], + "metricsClientCmd": [ + "php", + "/var/local/git/grpc/src/php/tests/interop/metrics_client.php" + ] + } + } + }, + + "serverTemplates": { + "baseTemplates":{ + "default": { + "wrapperScriptPath": "/var/local/git/grpc/tools/gcp/stress_test/run_server.py", + "serverPort": 8080, + "serverArgs": { + "port": 8080 + } + } + }, + "templates": { + "cxx_server_opt": { + "baseTemplate": "default", + "stressServerCmd": ["/var/local/git/grpc/bins/opt/interop_server"] + } + } + }, + + "testMatrix": { + "serverPodSpecs": { + "stress-server-cxx-php": { + "serverTemplate": "cxx_server_opt", + "dockerImage": "grpc_stress_cxx_opt", + "numInstances": 1 + } + }, + + "clientPodSpecs": { + "stress-client-php": { + "clientTemplate": "php_client", + "dockerImage": "grpc_stress_php", + "numInstances": 20, + "serverPodSpec": "stress-server-cxx-php" + } + } + }, + + "globalSettings": { + "buildDockerImages": true, + "pollIntervalSecs": 60, + "testDurationSecs": 7200, + "kubernetesProxyPort": 8010, + "datasetIdNamePrefix": "stress_test_php_cxx_opt", + "summaryTableId": "summary", + "qpsTableId": "qps", + "podWarmupSecs": 60 + } +} + diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 5a84a41b63..c62058ede4 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -422,7 +422,7 @@ "mac", "posix" ], - "cpu_cost": 2, + "cpu_cost": 1.5, "exclude_configs": [], "flaky": false, "gtest": false, @@ -441,7 +441,7 @@ "mac", "posix" ], - "cpu_cost": 2, + "cpu_cost": 1.5, "exclude_configs": [], "flaky": false, "gtest": false, @@ -632,27 +632,6 @@ "flaky": false, "gtest": false, "language": "c", - "name": "gpr_load_file_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "gtest": false, - "language": "c", "name": "gpr_log_test", "platforms": [ "linux", @@ -711,7 +690,7 @@ "posix", "windows" ], - "cpu_cost": 10, + "cpu_cost": 7, "exclude_configs": [], "flaky": false, "gtest": false, @@ -753,7 +732,7 @@ "posix", "windows" ], - "cpu_cost": 10, + "cpu_cost": 3, "exclude_configs": [], "flaky": false, "gtest": false, @@ -774,7 +753,7 @@ "posix", "windows" ], - "cpu_cost": 10, + "cpu_cost": 1, "exclude_configs": [], "flaky": false, "gtest": false, @@ -1226,7 +1205,7 @@ "posix", "windows" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "gtest": false, @@ -1357,6 +1336,27 @@ "flaky": false, "gtest": false, "language": "c", + "name": "load_file_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "gtest": false, + "language": "c", "name": "message_compress_test", "platforms": [ "linux", @@ -1525,6 +1525,27 @@ "flaky": false, "gtest": false, "language": "c", + "name": "sequential_connectivity_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "gtest": false, + "language": "c", "name": "server_chttp2_test", "platforms": [ "linux", @@ -1662,7 +1683,7 @@ "mac", "posix" ], - "cpu_cost": 0.5, + "cpu_cost": 0.2, "exclude_configs": [], "flaky": false, "gtest": false, @@ -4449,7 +4470,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -4559,7 +4580,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -4845,7 +4866,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -4911,7 +4932,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -4999,7 +5020,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -5109,7 +5130,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -5167,6 +5188,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_census_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -5285,7 +5328,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -5395,7 +5438,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -5681,7 +5724,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -5747,7 +5790,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -5835,7 +5878,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -5945,7 +5988,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -6003,6 +6046,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_compress_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -6116,7 +6181,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -6221,7 +6286,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -6494,7 +6559,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -6557,7 +6622,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -6641,7 +6706,7 @@ "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -6746,7 +6811,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -6802,6 +6867,27 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_fakesec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -6910,7 +6996,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -7010,7 +7096,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -7210,7 +7296,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -7270,7 +7356,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -7330,7 +7416,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -7463,6 +7549,26 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_fd_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -7579,7 +7685,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -7689,7 +7795,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -7975,7 +8081,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -8041,7 +8147,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -8129,7 +8235,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -8239,7 +8345,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -8297,6 +8403,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -8388,7 +8516,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -8468,7 +8596,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -8676,7 +8804,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -8724,7 +8852,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -8788,7 +8916,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -8868,7 +8996,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -8911,6 +9039,22 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+pipe_test", + "platforms": [ + "linux" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -9023,7 +9167,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -9133,7 +9277,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -9397,7 +9541,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -9463,7 +9607,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -9551,7 +9695,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -9661,7 +9805,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -9719,6 +9863,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+trace_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -9837,7 +10003,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -9947,7 +10113,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -10233,7 +10399,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -10299,7 +10465,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -10387,7 +10553,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -10497,7 +10663,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -10555,6 +10721,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_loadreporting_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -10668,7 +10856,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -10773,7 +10961,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -11046,7 +11234,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -11109,7 +11297,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -11193,7 +11381,7 @@ "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -11298,7 +11486,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -11354,6 +11542,27 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_oauth2_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -11466,7 +11675,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -11760,7 +11969,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -11823,7 +12032,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -11970,7 +12179,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -12026,6 +12235,27 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -12138,7 +12368,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -12243,7 +12473,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -12453,7 +12683,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -12516,7 +12746,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -12579,7 +12809,7 @@ "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -12719,6 +12949,27 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -12831,7 +13082,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -12936,7 +13187,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -13125,7 +13376,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -13188,7 +13439,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -13251,7 +13502,7 @@ "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -13391,6 +13642,27 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair+trace_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -13503,7 +13775,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -13608,7 +13880,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -13818,7 +14090,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -13881,7 +14153,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -13944,7 +14216,7 @@ "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -14084,6 +14356,27 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_1byte_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -14201,7 +14494,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -14311,7 +14604,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -14597,7 +14890,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -14663,7 +14956,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -14751,7 +15044,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -14861,7 +15154,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -14919,6 +15212,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -15037,7 +15352,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -15147,7 +15462,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -15433,7 +15748,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -15499,7 +15814,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -15587,7 +15902,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -15697,7 +16012,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -15755,6 +16070,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_cert_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -15868,7 +16205,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -16162,7 +16499,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -16225,7 +16562,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -16372,7 +16709,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -16428,6 +16765,27 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_proxy_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -16536,7 +16894,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -16636,7 +16994,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -16876,7 +17234,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -16936,7 +17294,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -17016,7 +17374,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -17116,7 +17474,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -17169,6 +17527,26 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_uds_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -17263,7 +17641,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -17373,7 +17751,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -17659,7 +18037,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -17725,7 +18103,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -17813,7 +18191,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -17923,7 +18301,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -17981,6 +18359,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_census_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -18077,7 +18477,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -18187,7 +18587,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -18473,7 +18873,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -18539,7 +18939,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -18627,7 +19027,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -18737,7 +19137,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -18795,6 +19195,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_compress_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -18884,7 +19306,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -18984,7 +19406,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -19184,7 +19606,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -19244,7 +19666,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -19304,7 +19726,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -19437,6 +19859,26 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_fd_nosec_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -19531,7 +19973,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -19641,7 +20083,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -19927,7 +20369,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -19993,7 +20435,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -20081,7 +20523,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -20191,7 +20633,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -20249,6 +20691,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -20324,7 +20788,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -20404,7 +20868,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -20612,7 +21076,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -20660,7 +21124,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -20724,7 +21188,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -20804,7 +21268,7 @@ "ci_platforms": [ "linux" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -20847,6 +21311,22 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+pipe_nosec_test", + "platforms": [ + "linux" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -20937,7 +21417,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -21047,7 +21527,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -21311,7 +21791,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -21377,7 +21857,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -21465,7 +21945,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -21575,7 +22055,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -21633,6 +22113,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_full+trace_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -21729,7 +22231,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -21839,7 +22341,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -22125,7 +22627,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -22191,7 +22693,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -22279,7 +22781,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -22389,7 +22891,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -22447,6 +22949,28 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_loadreporting_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -22539,7 +23063,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -22833,7 +23357,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -22896,7 +23420,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -23043,7 +23567,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -23099,6 +23623,27 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_proxy_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -23190,7 +23735,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -23295,7 +23840,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -23505,7 +24050,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -23568,7 +24113,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -23631,7 +24176,7 @@ "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -23771,6 +24316,27 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -23862,7 +24428,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -23967,7 +24533,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -24156,7 +24722,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -24219,7 +24785,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -24282,7 +24848,7 @@ "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -24422,6 +24988,27 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_sockpair+trace_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -24519,7 +25106,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [ "msan" ], @@ -24634,7 +25221,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [ "msan" ], @@ -24864,7 +25451,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [ "msan" ], @@ -24933,7 +25520,7 @@ "linux", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [ "msan" ], @@ -25002,7 +25589,7 @@ "linux", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [ "msan" ], @@ -25156,6 +25743,29 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "windows", + "linux", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [ + "msan" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_1byte_nosec_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -25246,7 +25856,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -25346,7 +25956,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -25586,7 +26196,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -25646,7 +26256,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -25726,7 +26336,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "flaky": false, "language": "c", @@ -25826,7 +26436,7 @@ "mac", "posix" ], - "cpu_cost": 0.1, + "cpu_cost": 1.0, "exclude_configs": [], "flaky": false, "language": "c", @@ -25879,6 +26489,26 @@ }, { "args": [ + "streaming_error_response" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "h2_uds_nosec_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ "trailing_metadata" ], "ci_platforms": [ @@ -26321,7 +26951,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26338,7 +26970,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26355,7 +26989,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26372,7 +27008,66 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0170e921ff5d052b228a26529116ea47fe9d3f0b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/01a344a0256386cc8abb8dcb65cb55e1244f7f97" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/01c59f0a030fa11c4af1b7c0cc85846e9ef3f6b9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26389,7 +27084,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26406,7 +27103,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26423,7 +27122,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26440,7 +27141,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26457,7 +27160,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26474,7 +27179,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26491,7 +27198,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26508,7 +27217,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26525,7 +27236,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26542,7 +27255,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26559,7 +27274,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26576,7 +27293,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26593,7 +27312,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26610,7 +27331,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26627,7 +27350,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26644,7 +27369,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26661,7 +27388,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26678,7 +27407,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26695,7 +27426,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26712,7 +27445,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26729,7 +27464,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26746,7 +27483,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26763,7 +27502,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26780,7 +27521,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26797,7 +27540,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26814,7 +27559,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26831,7 +27578,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/06b63ac01c261518e291461fb4707cb29d74e9c5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26848,7 +27616,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/06eced19ea6819d7b0855c62da49a193b50067ab" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/06eee533524c6723881c1591956edf704e0180d9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26865,7 +27673,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26882,7 +27692,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26899,7 +27711,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26916,7 +27730,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0783c943aa7cdb8fdef5f7b1cf73e2bb2daf17f4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26933,7 +27768,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26950,7 +27787,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26967,7 +27806,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -26984,7 +27825,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27001,7 +27844,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27018,7 +27863,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27035,7 +27882,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27052,7 +27901,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27069,7 +27920,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27086,7 +27939,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27103,7 +27958,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0963f5f7578c64e9c17d0ad9e4a99ced875cf813" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27120,7 +27996,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27137,7 +28015,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27154,7 +28034,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27171,7 +28053,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27188,7 +28072,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0a90826e3173642be15ea005c2cbe8ca36ac1c3d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27205,7 +28110,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27222,7 +28129,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27239,7 +28148,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0b151bf8080f87bd38c9b8521b3b96c40c708463" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27256,7 +28186,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27273,7 +28205,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27290,7 +28224,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0bf51cb435845a49311a7ddc7341b5cfc8e5ab10" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27307,7 +28262,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27324,7 +28281,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27341,7 +28300,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27358,7 +28319,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27375,7 +28338,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27392,7 +28357,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27409,7 +28376,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27426,7 +28395,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27443,7 +28414,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27460,7 +28433,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0deeaca17aa93f66291407d3d2438685be5b85ba" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27477,7 +28471,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0dfd0ea582476b3861106c143c70d7af0f3d1357" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27494,7 +28509,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27511,7 +28528,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27528,7 +28547,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27545,7 +28566,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/0e91ce40cf8882adc75b8b532556d48a2b605ced" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27562,7 +28604,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27579,7 +28623,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27596,7 +28642,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27613,7 +28661,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27630,7 +28680,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27647,7 +28699,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27664,7 +28718,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27681,7 +28737,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/10f53c34f02d8c051fe0b8759aec08057433a497" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27698,7 +28775,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/110e019793b395202dfd8b499edc372cdaccff21" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27715,7 +28813,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27732,7 +28832,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27749,7 +28851,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27766,7 +28870,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27783,7 +28889,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1239eef13562df4ff59856900eee2f871a2fd0f3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27800,7 +28927,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27817,7 +28946,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27834,7 +28965,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27851,7 +28984,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27868,7 +29003,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27885,7 +29022,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27902,7 +29041,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27919,7 +29060,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27936,7 +29079,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27953,7 +29098,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27970,7 +29117,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -27987,7 +29136,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28004,7 +29155,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28021,7 +29174,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28038,7 +29193,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28055,7 +29212,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/15890f893ee7bddcc08f831d684b10d19c369def" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28072,7 +29250,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28089,7 +29269,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28106,7 +29288,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28123,7 +29307,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28140,7 +29326,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28157,7 +29345,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28174,7 +29364,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28191,7 +29383,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28208,7 +29402,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28225,7 +29421,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1727c0f6369bfb17d1b40ffa3d3f6b8be8a45c62" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28242,7 +29459,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/179817dab786637b3621ace60a9ab4c7c79432a4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28259,7 +29497,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28276,7 +29516,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/17fa8e029e35c88857b7abcad88609cf2d1ca9a4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28293,7 +29554,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28310,7 +29573,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1870298c7042983e7716097018a031d105e397fd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28327,7 +29611,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28344,7 +29630,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28361,7 +29649,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28378,7 +29668,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1917c5996ac82e13143a414eb9448f171fdd751a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28395,7 +29706,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/19549ded404f9a9581d32a1827da96ff1420f0ae" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28412,7 +29744,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28429,7 +29763,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28446,7 +29782,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28463,7 +29801,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28480,7 +29820,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28497,7 +29839,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1b09a1e5994952cda58b8339492f6850936a61f4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28514,7 +29877,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28531,7 +29896,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28548,7 +29915,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28565,7 +29934,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28582,7 +29953,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28599,7 +29972,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28616,7 +29991,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28633,7 +30010,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28650,7 +30029,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28667,7 +30048,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28684,7 +30067,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28701,7 +30086,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1cd257e53b8d5a57c9feabcfd9f8f22c30cdb4a8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28718,7 +30124,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28735,7 +30143,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28752,7 +30162,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28769,7 +30181,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28786,7 +30200,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28803,7 +30219,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28820,7 +30238,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28837,7 +30257,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28854,7 +30276,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28871,7 +30295,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28888,7 +30314,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/1fd33a83549fb9fc5e7d05a2c308a044b7c9b167" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28905,7 +30352,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28922,7 +30371,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/202a15693f991889b5fdd97f016a5410778b07e1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28939,7 +30409,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28956,7 +30428,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28973,7 +30447,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -28990,7 +30466,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/20a10c9a0c8cc48fd6317000f70070a0b2451e60" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/21357c3613a47180eb668b1c6c849ce9096a46eb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29007,7 +30523,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29024,7 +30542,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29041,7 +30561,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29058,7 +30580,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29075,7 +30599,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2372fe3d96fda1dae8846a781905c6c408555d3a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/23982956d17d2f55e61a5d9111b1c0c7ee530214" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29092,7 +30656,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29109,7 +30675,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29126,7 +30694,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29143,7 +30713,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29160,7 +30732,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29177,7 +30751,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29194,7 +30770,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29211,7 +30789,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29228,7 +30808,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29245,7 +30827,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/25a2c5d4f55a083d2535b46a82e295fb169ffb32" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29262,7 +30865,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29279,7 +30884,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29296,7 +30903,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29313,7 +30922,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2721f5503254227af744243957ee859fa903e066" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29330,7 +30960,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29347,7 +30979,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29364,7 +30998,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29381,7 +31017,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/282003073c8b88d7ad43ce75677777cdb754228c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29398,7 +31055,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2858613c057a236dbe306cca44df29232f6b48b3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29415,7 +31093,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29432,7 +31112,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29449,7 +31131,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29466,7 +31150,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29483,7 +31169,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29500,7 +31188,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/295d24a7705fe1821606f9224f241a7596481bed" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29517,7 +31226,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29534,7 +31245,66 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2a08eb351e08f0e6ac1e1416b43ff962a4e3735c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2a1d70b04f4aba0ec93899485f0807a209a4b207" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2a2ca2f6a1c03067f87bad61515688edc234bacc" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29551,7 +31321,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29568,7 +31340,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2aaee068ca624dcb746af9dc14591b24db033ffc" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29585,7 +31378,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29602,7 +31397,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29619,7 +31416,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29636,7 +31435,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29653,7 +31454,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29670,7 +31473,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29687,7 +31492,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29704,7 +31511,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29721,7 +31530,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29738,7 +31549,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29755,7 +31568,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2ce30739d22f5380f96400f261fd26e95cc33927" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29772,7 +31606,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29789,7 +31625,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29806,7 +31644,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29823,7 +31663,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29840,7 +31682,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29857,7 +31701,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29874,7 +31720,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29891,7 +31739,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29908,7 +31758,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2e40d861a9fec3742c31971b583e28bf40e28dbe" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29925,7 +31796,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29942,7 +31815,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29959,7 +31834,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2ec78409a7d3625126387512a1c58cae2ff0bcf7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29976,7 +31872,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -29993,7 +31891,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30010,7 +31910,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30027,7 +31929,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30044,7 +31948,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30061,7 +31967,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30078,7 +31986,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30095,7 +32005,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/2ffb878075ebb3d2d778c8aabcb0e96cb51060f0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30112,7 +32043,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30129,7 +32062,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30146,7 +32081,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30163,7 +32100,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30180,7 +32119,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/30c74b7b5c92bb602d26c3d703c267e288b432a2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30197,7 +32157,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30214,7 +32176,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30231,7 +32195,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30248,7 +32214,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30265,7 +32233,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/31498be283beb45294fb96f15b3af4e7de0ce584" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/314ea0a2c481639b6559b063399299259c43c9bb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30282,7 +32290,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/31ef9c4ed85ae1b4e8a027fc5a1d3037dbbf3b3a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30299,7 +32328,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30316,7 +32347,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30333,7 +32366,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/327e5a755e3307b121700f1ba23000a844e70596" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30350,7 +32404,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30367,7 +32423,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30384,7 +32442,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30401,7 +32461,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3396a31b1075465bf358eb7836e6f5347a0be591" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30418,7 +32499,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30435,7 +32518,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30452,7 +32537,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30469,7 +32556,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30486,7 +32575,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30503,7 +32594,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30520,7 +32613,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/350a1f6d0fe784667d7ae78e1ed783cdf2263bfd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30537,7 +32651,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/35cf9a1a6f81db0829d854fd3716916bae081c8c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30554,7 +32689,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30571,7 +32708,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30588,7 +32727,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/368f9368e43f7e743653d46360836b3db1b1ba8a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/36dea0ab5bc764c2eb2f428bcbe2786e64da8bd3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30605,7 +32784,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/376f42635e918cc28706b82ad8923cc7401aa9e6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30622,7 +32822,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/37cf256347732e86fa92089847b7381e964cc83f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30639,7 +32860,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30656,7 +32879,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30673,7 +32898,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30690,7 +32917,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30707,7 +32936,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/38eb06643f87fff21483433dc4169e0388b0c9e1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30724,7 +32974,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30741,7 +32993,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30758,7 +33012,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30775,7 +33031,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30792,7 +33050,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30809,7 +33069,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30826,7 +33088,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30843,7 +33107,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30860,7 +33126,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30877,7 +33145,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3b114f7e66bf6cbf256a5e656ab6620e3f31277f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30894,7 +33183,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30911,7 +33202,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30928,7 +33221,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30945,7 +33240,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30962,7 +33259,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30979,7 +33278,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -30996,7 +33297,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31013,7 +33316,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31030,7 +33335,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31047,7 +33354,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31064,7 +33373,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3db644687c6a09fae4267f05b63a969f28024f87" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3dc1bcb27ed0616a2b905025a8898759d94a934d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31081,7 +33430,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31098,7 +33449,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31115,7 +33468,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31132,7 +33487,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3f2e5f90e1a93df61a1c9c09b8c9116149eec526" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/3f31d328c16207904d201406f7e9708360d5799b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31149,7 +33544,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31166,7 +33563,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31183,7 +33582,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31200,7 +33601,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31217,7 +33620,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4141d93d6c387967967844423a6a83ad1793010a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31234,7 +33658,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31251,7 +33677,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31268,7 +33696,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31285,7 +33715,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31302,7 +33734,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31319,7 +33753,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31336,7 +33772,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31353,7 +33791,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31370,7 +33810,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31387,7 +33829,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31404,7 +33848,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31421,7 +33867,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31438,7 +33886,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31455,7 +33905,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31472,7 +33924,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31489,7 +33943,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31506,7 +33962,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31523,7 +33981,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31540,7 +34000,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31557,7 +34019,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31574,7 +34038,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31591,7 +34057,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31608,7 +34076,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31625,7 +34095,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31642,7 +34114,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31659,7 +34133,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31676,7 +34152,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31693,7 +34171,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31710,7 +34190,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31727,7 +34209,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31744,7 +34228,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31761,7 +34247,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31778,7 +34266,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31795,7 +34285,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31812,7 +34304,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31829,7 +34323,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31846,7 +34342,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31863,7 +34361,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31880,7 +34380,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31897,7 +34399,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31914,7 +34418,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31931,7 +34437,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31948,7 +34456,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31965,7 +34475,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31982,7 +34494,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -31999,7 +34513,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32016,7 +34532,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32033,7 +34551,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32050,7 +34570,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32067,7 +34589,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32084,7 +34608,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32101,7 +34627,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4a4675803915c9dafe85b8026c93a0ca9c498233" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32118,7 +34665,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32135,7 +34684,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32152,7 +34703,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32169,7 +34722,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32186,7 +34741,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32203,7 +34760,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32220,7 +34779,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32237,7 +34798,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32254,7 +34817,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4d345f45f808c5b0541976b5dff98c603611e9ab" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32271,7 +34855,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32288,7 +34874,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4d5e7091c1c67867f2760543d9a8a7256007bdef" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32305,7 +34912,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32322,7 +34931,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32339,7 +34950,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32356,7 +34969,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4e8dbf3eb7d11a4fdb994f281454be2a7ebb091c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32373,7 +35007,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/4eedb47e422ce761fc5b279582e56c7d1f3ed180" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32390,7 +35045,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32407,7 +35064,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32424,7 +35083,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32441,7 +35102,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32458,7 +35121,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32475,7 +35140,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32492,7 +35159,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5109721ea8f74b08d455968fce90dd74c29aa95a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32509,7 +35197,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/51be7e2267e32f2eb8079349882f8247dc397d0f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32526,7 +35235,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32543,7 +35254,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/521e1e27b0997a0dc168f628e8a0497f7f93ea6d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32560,7 +35292,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32577,7 +35311,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32594,7 +35330,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32611,7 +35349,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32628,7 +35368,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32645,7 +35387,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32662,7 +35406,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32679,7 +35425,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/541e87b9d3dc75ad40cb47935ed4de83b25af5b9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32696,7 +35463,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32713,7 +35482,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32730,7 +35501,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32747,7 +35520,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32764,7 +35539,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32781,7 +35558,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32798,7 +35577,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32815,7 +35596,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5611060a04db105e03cc74da57352b8a09c411e0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32832,7 +35634,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32849,7 +35653,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/56e0bd235d4ea1de80d753b2b12d03d43cd0aa06" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32866,7 +35691,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32883,7 +35710,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32900,7 +35729,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32917,7 +35748,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32934,7 +35767,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32951,7 +35786,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/57d4ef9e72f97aa8a1e6689f3be092fc2b24315c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32968,7 +35824,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -32985,7 +35843,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33002,7 +35862,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33019,7 +35881,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33036,7 +35900,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33053,7 +35919,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33070,7 +35938,66 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5967be7b53e3bac677c726d30a513949e06e1fde" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/598c513564bc043f831876ea61cb8283d43f6726" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/59db3f98b38747d4a35524c1b3d31b5e90f53775" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33087,7 +36014,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33104,7 +36033,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33121,7 +36052,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33138,7 +36071,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33155,7 +36090,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33172,7 +36109,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33189,7 +36128,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33206,7 +36147,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33223,7 +36166,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33240,7 +36185,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33257,7 +36204,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33274,7 +36223,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5c37a2f980223e737574dba8239378f643800c28" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33291,7 +36261,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33308,7 +36280,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33325,7 +36299,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33342,7 +36318,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33359,7 +36337,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33376,7 +36356,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33393,7 +36375,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33410,7 +36394,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33427,7 +36413,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33444,7 +36432,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33461,7 +36451,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33478,7 +36470,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5ddce6103cb33bc58571c8135b620443740e3646" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33495,7 +36508,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5e31ededf3b3189d252148c450de7a8778653e72" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33512,7 +36546,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33529,7 +36565,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33546,7 +36584,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33563,7 +36603,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33580,7 +36622,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33597,7 +36641,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33614,7 +36660,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/5f61659c332f6153f9a59746bc02064155443b4a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33631,7 +36698,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33648,7 +36717,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/60ad6847b1fe72ee81decf28dcffa30ce372af6a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33665,7 +36755,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33682,7 +36774,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33699,7 +36793,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33716,7 +36812,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33733,7 +36831,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33750,7 +36850,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33767,7 +36869,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33784,7 +36888,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33801,7 +36907,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33818,7 +36926,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6245a105123761558a71a9207b3048d2f3d691f0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33835,7 +36964,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33852,7 +36983,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33869,7 +37002,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33886,7 +37021,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33903,7 +37040,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33920,7 +37059,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33937,7 +37078,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33954,7 +37097,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33971,7 +37116,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -33988,7 +37135,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34005,7 +37154,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34022,7 +37173,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34039,7 +37192,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34056,7 +37211,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34073,7 +37230,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34090,7 +37249,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34107,7 +37268,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34124,7 +37287,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6619768ddd830ebe29021e827961fddb78751086" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34141,7 +37325,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34158,7 +37344,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34175,7 +37363,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34192,7 +37382,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34209,7 +37401,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34226,7 +37420,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34243,7 +37439,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/682fdabcfc7243e9c93108d6b2d7d3e920e81970" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34260,7 +37477,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34277,7 +37496,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34294,7 +37515,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34311,7 +37534,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34328,7 +37553,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34345,7 +37572,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34362,7 +37591,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34379,7 +37610,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34396,7 +37629,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34413,7 +37648,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6ad7afcf2d12025faf0e1812ee7a0a5d754620c6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6ae8b3afc4f6e3a26fec5eaeb2bf64727927552b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34430,7 +37705,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34447,7 +37724,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6be9f2d2967566ac929c27a27de40af792a6da90" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34464,7 +37762,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34481,7 +37781,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6c34a6b47ef9e11e02f7675087d888c2c994b010" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34498,7 +37819,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34515,7 +37838,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34532,7 +37857,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34549,7 +37876,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6ce0f95767e8b1c58ff313d10f1a3eb1f9ab8496" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34566,7 +37914,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6cfe000a50ad8b908b3efa3af94c5df6382ff33d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6d6d70df4499b8595851100ffb833d397cc87a18" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34583,7 +37971,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34600,7 +37990,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34617,7 +38009,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6e3d43e98d7be45ecc1863eedfeb85a4cae4a007" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6e77e1cd328bb98d954043230716863c5133c1c4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34634,7 +38066,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34651,7 +38085,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34668,7 +38104,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34685,7 +38123,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/6f68ff31046fd15930657516873b8835fdbadfe3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34702,7 +38161,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34719,7 +38180,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34736,7 +38199,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34753,7 +38218,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34770,7 +38237,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34787,7 +38256,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34804,7 +38275,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34821,7 +38294,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34838,7 +38313,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34855,7 +38332,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34872,7 +38351,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34889,7 +38370,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34906,7 +38389,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34923,7 +38408,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34940,7 +38427,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/71f9eafe17e974062938a6a12433ce723fe07d40" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/72160b48e0995ee82f116d77a7fb23a028c10932" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34957,7 +38484,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34974,7 +38503,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -34991,7 +38522,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35008,7 +38541,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35025,7 +38560,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35042,7 +38579,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35059,7 +38598,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35076,7 +38617,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35093,7 +38636,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35110,7 +38655,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35127,7 +38674,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35144,7 +38693,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35161,7 +38712,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35178,7 +38731,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35195,7 +38750,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35212,7 +38769,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35229,7 +38788,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35246,7 +38807,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/756d77e9fb9ed9dac1db0b1c8cdcc6e05e47329b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35263,7 +38845,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35280,7 +38864,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7590589db6b56b4e7db9333fba8d723b6461e0a6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/75a242a8e6a0c453ac785fe6495d408e9650e17d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35297,7 +38921,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35314,7 +38940,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35331,7 +38959,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35348,7 +38978,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35365,7 +38997,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35382,7 +39016,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35399,7 +39035,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35416,7 +39054,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35433,7 +39073,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35450,7 +39092,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35467,7 +39111,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35484,7 +39130,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/78d8b2a1732c4528d6acdb21c236f417a0f85798" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35501,7 +39168,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35518,7 +39187,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35535,7 +39206,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/79975e5fb34f3569b0d2e40d34d6f7ab1bf82cf2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35552,7 +39244,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35569,7 +39263,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35586,7 +39282,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7b44a92a28ff5c96be7c4dae5c56a9e5fa272ad3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35603,7 +39320,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35620,7 +39339,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35637,7 +39358,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35654,7 +39377,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35671,7 +39396,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35688,7 +39415,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35705,7 +39434,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35722,7 +39453,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35739,7 +39472,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35756,7 +39491,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35773,7 +39510,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35790,7 +39529,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35807,7 +39548,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35824,7 +39567,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7cfe9fd65c3daa43067dfc99dac2814b763b9f48" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35841,7 +39605,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7d3ff63f0b0019fef80e5e3cd82de8dfbcd07103" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35858,7 +39643,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35875,7 +39662,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35892,7 +39681,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35909,7 +39700,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35926,7 +39719,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35943,7 +39738,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35960,7 +39757,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35977,7 +39776,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -35994,7 +39795,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/7f2a2a365669c88559036ed998b074b1b9a31e0b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36011,7 +39833,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36028,7 +39852,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36045,7 +39871,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36062,7 +39890,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36079,7 +39909,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36096,7 +39928,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36113,7 +39947,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/81437c61aeca9becc91003af7b835dc65a3e03e4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36130,7 +39985,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36147,7 +40004,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36164,7 +40023,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36181,7 +40042,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36198,7 +40061,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36215,7 +40080,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/8272e45483cb4cc7113b0ffad71f9218542f9cd7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36232,7 +40118,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36249,7 +40137,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/83e2bd562704e16ac57589b4273d0c61775d7c9c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36266,7 +40175,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/84505278558cc406dc36109deab239f1e4cf1518" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36283,7 +40213,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36300,7 +40232,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36317,7 +40251,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36334,7 +40270,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/8525fa2b11288eda66418be4ecfcf8d7731d75a6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36351,7 +40308,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36368,7 +40327,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/85a50177266a832eca0563d37ccb03890f12c665" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/85afba0cb1eb440ed95ee5793a70c7e5d8465148" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36385,7 +40384,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/871196ccb877b7c6c7d6cafe3324fde440706de3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36402,7 +40422,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36419,7 +40441,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36436,7 +40460,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36453,7 +40479,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36470,7 +40498,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36487,7 +40517,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36504,7 +40536,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36521,7 +40555,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36538,7 +40574,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36555,7 +40593,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36572,7 +40612,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36589,7 +40631,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36606,7 +40650,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36623,7 +40669,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36640,7 +40688,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36657,7 +40707,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36674,7 +40726,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/8a13b47235d2967f5a5419cb0ad8d241a750a365" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36691,7 +40764,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/8a6ccd18dbc530ed34afd4a73beeff0449040c25" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36708,7 +40802,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36725,7 +40821,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36742,7 +40840,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36759,7 +40859,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36776,7 +40878,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36793,7 +40897,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36810,7 +40916,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36827,7 +40935,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36844,7 +40954,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36861,7 +40973,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36878,7 +40992,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/8bdd4dc6dee56fb6965655425ca378f784a42b6a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36895,7 +41030,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36912,7 +41049,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36929,7 +41068,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36946,7 +41087,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/8c6776521d0f100708ecb9f8504e572d586b8a21" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36963,7 +41125,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36980,7 +41144,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -36997,7 +41163,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37014,7 +41182,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37031,7 +41201,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37048,7 +41220,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/8de197bbdf4deaea5bd21af25c0b5c5f03b231ae" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/8e226a7f67b7c6e9d439c3627bfa5644af992593" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37065,7 +41277,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37082,7 +41296,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37099,7 +41315,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37116,7 +41334,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37133,7 +41353,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37150,7 +41372,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37167,7 +41391,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37184,7 +41410,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37201,7 +41429,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37218,7 +41448,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37235,7 +41467,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/908b1f170a721682465838d0c0eca40810beb722" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37252,7 +41505,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37269,7 +41524,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37286,7 +41543,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/92882ccad7fc3e7bc1df7dfa5954a6d591d5dbc2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37303,7 +41581,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/92a87c7a2f2e336f92529bc40deee614dd8b4486" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37320,7 +41619,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/92e8c16eb9a816c5944ecb76cf9af08f05930aeb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37337,7 +41657,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/9345e2de4f0476428d941c53013535fbda8a2bca" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37354,7 +41695,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37371,7 +41714,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37388,7 +41733,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37405,7 +41752,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37422,7 +41771,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37439,7 +41790,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37456,7 +41809,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37473,7 +41828,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37490,7 +41847,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37507,7 +41866,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37524,7 +41885,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37541,7 +41904,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37558,7 +41923,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37575,7 +41942,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37592,7 +41961,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/97539b673cb482cfa4d876df515270611b28f22a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37609,7 +41999,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37626,7 +42018,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37643,7 +42037,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37660,7 +42056,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37677,7 +42075,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37694,7 +42094,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37711,7 +42113,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37728,7 +42132,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37745,7 +42151,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37762,7 +42170,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37779,7 +42189,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37796,7 +42208,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37813,7 +42227,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37830,7 +42246,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37847,7 +42265,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37864,7 +42284,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37881,7 +42303,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37898,7 +42322,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37915,7 +42341,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/9b014aa18fb8c033458b6d5fdb351e60d16e8bce" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37932,7 +42379,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37949,7 +42398,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/9bbb726cd811fce33aecdbcce3d287c252ed71d5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37966,7 +42436,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -37983,7 +42455,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38000,7 +42474,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38017,7 +42493,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38034,7 +42512,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38051,7 +42531,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38068,7 +42550,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38085,7 +42569,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38102,7 +42588,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38119,7 +42607,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38136,7 +42626,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/9dd5d09e1538e12b091c35d252ee43684d0f07bd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38153,7 +42664,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38170,7 +42683,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38187,7 +42702,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38204,7 +42721,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38221,7 +42740,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38238,7 +42759,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38255,7 +42778,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38272,7 +42797,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38289,7 +42816,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/9fd5c58979d17905e46ee7b76f542f7acb54d60f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/a001745aa3499a11bf1cee1af077bdc85a03ef95" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38306,7 +42873,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38323,7 +42892,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38340,7 +42911,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/a151b36f390273fb440d2e35ab93acc5540bfed6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38357,7 +42949,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/a19cc971908189b5febf6fb5e8578c91dd666715" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38374,7 +42987,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/a1b0fdbc2160dfe8c1eed409eb60042c819a843a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38391,7 +43025,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38408,7 +43044,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38425,7 +43063,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38442,7 +43082,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38459,7 +43101,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38476,7 +43120,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38493,7 +43139,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/a36a34472604c8107353872e77a84873ff8a9170" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38510,7 +43177,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38527,7 +43196,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38544,7 +43215,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38561,7 +43234,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38578,7 +43253,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/a3fcf35a54c8c88b5cc1ef76e43124bb25b61ba3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38595,7 +43291,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/a44288607b76ce6df9fe7e196138a587cf4badc9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38612,7 +43329,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38629,7 +43348,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38646,7 +43367,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38663,7 +43386,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38680,7 +43405,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38697,7 +43424,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38714,7 +43443,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38731,7 +43462,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38748,7 +43481,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38765,7 +43500,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/a7ccc1f7db49512983fe4d42c16b2160357e3585" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/a7d45318db68aea203c6f661f571394b649cfd86" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38782,7 +43557,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/a8b5f205a578696697bc1ca381e73501c3a9b185" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38799,7 +43595,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38816,7 +43614,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38833,7 +43633,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38850,7 +43652,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38867,7 +43671,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38884,7 +43690,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/aa0c7fda7faff932bf36e10d15ab2180ab1bca27" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38901,7 +43728,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38918,7 +43747,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38935,7 +43766,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38952,7 +43785,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38969,7 +43804,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -38986,7 +43823,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39003,7 +43842,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39020,7 +43861,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39037,7 +43880,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39054,7 +43899,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39071,7 +43918,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39088,7 +43937,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39105,7 +43956,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39122,7 +43975,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39139,7 +43994,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/acd5d85336bff9b38196c682864dd7a4965ac904" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39156,7 +44032,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39173,7 +44051,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39190,7 +44070,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39207,7 +44089,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39224,7 +44108,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39241,7 +44127,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39258,7 +44146,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39275,7 +44165,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39292,7 +44184,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b06102e16c740796a9d30e07b9e564b65f7513da" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39309,7 +44222,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39326,7 +44241,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b1e28018e26e6baaba5a907e5e6ff9b7a7942018" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39343,7 +44279,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39360,7 +44298,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39377,7 +44317,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39394,7 +44336,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39411,7 +44355,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b2c5f4f8e2129a4201b2525cba8723241bbd8c79" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39428,7 +44393,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39445,7 +44412,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39462,7 +44431,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39479,7 +44450,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39496,7 +44469,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39513,7 +44488,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39530,7 +44507,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39547,7 +44526,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39564,7 +44545,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39581,7 +44564,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b4b8ba878466fc6c4e1939e38c38aa64026b055b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39598,7 +44602,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b4f6d203097dcd1778f4a912cdc3af96ffb681de" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39615,7 +44640,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b51db02b904ceee344fe48179d0c784c59ca2934" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39632,7 +44678,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39649,7 +44697,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39666,7 +44716,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39683,7 +44735,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39700,7 +44754,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39717,7 +44773,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b63da75ca24aac41285dd14de6712179a3fbc0d1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39734,7 +44811,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39751,7 +44830,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b6ce8604e3c14c6867cd2a78cef144ddd2fbb4c1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39768,7 +44868,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39785,7 +44887,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39802,7 +44906,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b79553c903c06619d53395ee67896c1554def055" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b7c3f40ef32cd843e331fb49521c0d614dfbecc9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39819,7 +44963,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39836,7 +44982,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39853,7 +45001,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39870,7 +45020,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39887,7 +45039,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b8bedb9c38fd149bc494a65674a4af5e61dfb311" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39904,7 +45077,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39921,7 +45096,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39938,7 +45115,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39955,7 +45134,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39972,7 +45153,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -39989,7 +45172,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40006,7 +45191,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40023,7 +45210,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40040,7 +45229,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40057,7 +45248,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40074,7 +45267,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/b9eb50c5eb99cf0b419efa2cb8d7fdf2e71f6634" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40091,7 +45305,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/ba46bf502f75c1e66fb89e18c270da8e5a62207f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40108,7 +45343,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40125,7 +45362,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40142,7 +45381,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40159,7 +45400,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40176,7 +45419,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40193,7 +45438,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/bb74226288b9d3a163029a25857bbebe84227222" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40210,7 +45476,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40227,7 +45495,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40244,7 +45514,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40261,7 +45533,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40278,7 +45552,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40295,7 +45571,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40312,7 +45590,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40329,7 +45609,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40346,7 +45628,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40363,7 +45647,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40380,7 +45666,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40397,7 +45685,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40414,7 +45704,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40431,7 +45723,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40448,7 +45742,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40465,7 +45761,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40482,7 +45780,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40499,7 +45799,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40516,7 +45818,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40533,7 +45837,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40550,7 +45856,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40567,7 +45875,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/bdfa6991c33f312c46ac27bdd8089be1670f0ac2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40584,7 +45913,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40601,7 +45932,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40618,7 +45951,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40635,7 +45970,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40652,7 +45989,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40669,7 +46008,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40686,7 +46027,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40703,7 +46046,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40720,7 +46065,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/bf5923216eb069edaf4e135ab7ee426c04d99a25" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40737,7 +46103,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40754,7 +46122,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40771,7 +46141,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/c09288284e4859b8a85421b19d3c6d0109cdab08" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40788,7 +46179,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40805,7 +46198,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40822,7 +46217,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40839,7 +46236,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40856,7 +46255,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40873,7 +46274,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40890,7 +46293,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40907,7 +46312,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40924,7 +46331,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40941,7 +46350,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40958,7 +46369,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40975,7 +46388,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -40992,7 +46407,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41009,7 +46426,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41026,7 +46445,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41043,7 +46464,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41060,7 +46483,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41077,7 +46502,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41094,7 +46521,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41111,7 +46540,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41128,7 +46559,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41145,7 +46578,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41162,7 +46597,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41179,7 +46616,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41196,7 +46635,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41213,7 +46654,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41230,7 +46673,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41247,7 +46692,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41264,7 +46711,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41281,7 +46730,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41298,7 +46749,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/c77bd1e9d9be2b6d1362cbb15f63cf749aa113ea" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41315,7 +46787,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41332,7 +46806,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/c845faac6d4b713a232aa3a6749afdf4e58d7f6a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/c8b5d9fdb7ade3538abb794a3231d5777a1640a4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41349,7 +46863,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41366,7 +46882,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41383,7 +46901,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41400,7 +46920,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41417,7 +46939,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41434,7 +46958,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41451,7 +46977,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41468,7 +46996,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41485,7 +47015,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/ca5a1e4fccc55aa977b841d8d67e6991a4371860" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41502,7 +47053,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41519,7 +47072,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41536,7 +47091,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41553,7 +47110,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41570,7 +47129,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41587,7 +47148,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41604,7 +47167,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41621,7 +47186,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/cd4272fec464c45438dce72eb9381971ed0207de" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41638,7 +47224,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41655,7 +47243,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/cd7cf401276531cea7e4221f249f527f231a5bcb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41672,7 +47281,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41689,7 +47300,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41706,7 +47319,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/cea57d6a128cc7cd195cb2390bfde28047d6acf8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41723,7 +47357,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41740,7 +47376,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41757,7 +47395,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41774,7 +47414,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41791,7 +47433,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41808,7 +47452,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41825,7 +47471,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41842,7 +47490,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41859,7 +47509,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41876,7 +47528,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-40e0fcf83e934a4ea2d31c009e9dfc1e68f11f3a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41893,7 +47566,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41910,7 +47585,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41927,7 +47604,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41944,7 +47623,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41961,7 +47642,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41978,7 +47661,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -41995,7 +47680,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42012,7 +47699,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42029,7 +47718,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42046,7 +47737,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42063,7 +47756,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42080,7 +47775,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42097,7 +47794,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42114,7 +47813,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42131,7 +47832,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42148,7 +47851,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42165,7 +47870,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42182,7 +47889,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42199,7 +47908,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42216,7 +47927,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42233,7 +47946,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42250,7 +47965,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42267,7 +47984,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42284,7 +48003,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42301,7 +48022,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42318,7 +48041,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42335,7 +48060,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42352,7 +48079,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42369,7 +48098,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42386,7 +48117,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42403,7 +48136,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/d02fb86e7e236a2253a2eadb0599f5dc261e4048" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42420,7 +48174,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/d07965987a51541498871433e0fc6313884569d3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42437,7 +48212,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42454,7 +48231,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42471,7 +48250,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42488,7 +48269,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42505,7 +48288,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42522,7 +48307,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42539,7 +48326,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42556,7 +48345,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/d19a252c00c74403389fe9e057cffeee39a4d2e0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42573,7 +48383,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42590,7 +48402,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/d1d35a1d2148c62c6021479d4153e65511b33cc1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42607,7 +48440,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42624,7 +48459,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42641,7 +48478,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42658,7 +48497,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/d29cf6979d8d58b4cb779a629ebee62d7e42fc9b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42675,7 +48535,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42692,7 +48554,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42709,7 +48573,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42726,7 +48592,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42743,7 +48611,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42760,7 +48630,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/d425e534ec074932b5cf4dc9a6cf4fc0683fd690" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42777,7 +48668,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42794,7 +48687,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42811,7 +48706,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42828,7 +48725,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42845,7 +48744,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42862,7 +48763,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/d5d704fdb985efb36fb42f9ee8482ae473bb4695" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42879,7 +48801,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42896,7 +48820,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42913,7 +48839,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42930,7 +48858,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42947,7 +48877,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/d6d7dc448cc24272ce216dbc7365ebe6e6b7b367" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42964,7 +48915,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42981,7 +48934,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -42998,7 +48953,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/d85482b6a40d7edee97709df0ed02558dca4c079" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43015,7 +48991,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43032,7 +49010,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43049,7 +49029,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/d8f08b0e061e86e94650aa16f99cae81cd696ca3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43066,7 +49067,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43083,7 +49086,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43100,7 +49105,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43117,7 +49124,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43134,7 +49143,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43151,7 +49162,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43168,7 +49181,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43185,7 +49200,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43202,7 +49219,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43219,7 +49238,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43236,7 +49257,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43253,7 +49276,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43270,7 +49295,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43287,7 +49314,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/dbcaf0a6bd4960e8d0c518494b89bd9b941cfc8e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43304,7 +49352,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43321,7 +49371,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43338,7 +49390,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43355,7 +49409,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/ddc34d5e97ac12572e6c39a336d219d91fa992b1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43372,7 +49447,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43389,7 +49466,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/ddf932a29b8250746ec310af224f95d4a51cb745" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43406,7 +49504,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43423,7 +49523,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43440,7 +49542,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43457,7 +49561,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43474,7 +49580,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43491,7 +49599,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43508,7 +49618,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43525,7 +49637,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43542,7 +49656,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43559,7 +49675,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43576,7 +49694,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43593,7 +49713,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43610,7 +49732,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43627,7 +49751,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43644,7 +49770,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43661,7 +49789,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43678,7 +49808,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43695,7 +49827,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43712,7 +49846,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43729,7 +49865,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43746,7 +49884,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/e16a0f378b50b28dae4458b795c8c80cf869901a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/e18816dbe46249fb0160b8f06c2b71f6943d3d21" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43763,7 +49941,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43780,7 +49960,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43797,7 +49979,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43814,7 +49998,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43831,7 +50017,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43848,7 +50036,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43865,7 +50055,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43882,7 +50074,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43899,7 +50093,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43916,7 +50112,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43933,7 +50131,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43950,7 +50150,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43967,7 +50169,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -43984,7 +50188,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44001,7 +50207,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44018,7 +50226,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44035,7 +50245,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44052,7 +50264,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44069,7 +50283,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44086,7 +50302,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44103,7 +50321,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44120,7 +50340,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44137,7 +50359,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44154,7 +50378,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44171,7 +50397,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44188,7 +50416,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44205,7 +50435,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/e7d4357e2c3ac4db7a9bfece1549f0664e4d317b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44222,7 +50473,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44239,7 +50492,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/e8b1814f9a0942322aeb190ae0ad35105784e101" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/e8bc4c1b1ffb23de5af2c8fe20599c05f94567ad" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44256,7 +50549,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44273,7 +50568,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44290,7 +50587,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44307,7 +50606,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44324,7 +50625,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44341,7 +50644,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/ea421a728134ad3a95a32f081c2bafa9d989836f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44358,7 +50682,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44375,7 +50701,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/eab5589ebcdd4596996f0a6de6408a0f3e13437b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44392,7 +50739,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44409,7 +50758,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44426,7 +50777,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44443,7 +50796,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44460,7 +50815,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44477,7 +50834,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44494,7 +50853,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44511,7 +50872,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/ec56dad56975e8279b2b229288dff3bb0ceaf661" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44528,7 +50910,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44545,7 +50929,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44562,7 +50948,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44579,7 +50967,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/ed913deced10ab045fe04c783f6a0e2678f1929f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44596,7 +51005,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44613,7 +51024,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44630,7 +51043,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44647,7 +51062,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/ee624b408f8a50c79cdaebf4fb4195e6162b70da" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44664,7 +51100,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44681,7 +51119,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44698,7 +51138,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44715,7 +51157,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44732,7 +51176,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44749,7 +51195,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44766,7 +51214,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44783,7 +51233,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/f060953b52fe245eb88ee13b32a3971eaa11e40a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44800,7 +51271,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44817,7 +51290,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44834,7 +51309,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44851,7 +51328,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44868,7 +51347,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44885,7 +51366,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44902,7 +51385,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44919,7 +51404,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44936,7 +51423,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44953,7 +51442,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44970,7 +51461,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -44987,7 +51480,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45004,7 +51499,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/f2ee773064f643871134a017d35fd5d8ae74d35c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45021,7 +51537,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45038,7 +51556,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/f38d6347f6044dbc3978ef7e5d5adfb7fc8aceb9" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45055,7 +51594,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45072,7 +51613,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45089,7 +51632,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/f4b66d285bd0328e511625b1c696662a0b0b2e70" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45106,7 +51670,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45123,7 +51689,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45140,7 +51708,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45157,7 +51727,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45174,7 +51746,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45191,7 +51765,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45208,7 +51784,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45225,7 +51803,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/f6d8d78857d868c2f477da7506a1976354f2631d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45242,7 +51841,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45259,7 +51860,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45276,7 +51879,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45293,7 +51898,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45310,7 +51917,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45327,7 +51936,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45344,7 +51955,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45361,7 +51974,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45378,7 +51993,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45395,7 +52012,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45412,7 +52031,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45429,7 +52050,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45446,7 +52069,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45463,7 +52088,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45480,7 +52107,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45497,7 +52126,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45514,7 +52145,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45531,7 +52164,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45548,7 +52183,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45565,7 +52202,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45582,7 +52221,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45599,7 +52240,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45616,7 +52259,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45633,7 +52278,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45650,7 +52297,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45667,7 +52316,47 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/fb263a744a6d40e183e84ec8a81ca13859c8b5ce" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/fb324303c6d5819d6f353f78d087e29adba51836" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45684,7 +52373,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45701,7 +52392,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/fbc7dd3fbb6abc462ab0493bfe3a8505f12fe4a5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45718,7 +52430,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45735,7 +52449,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45752,7 +52468,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45769,7 +52487,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45786,7 +52506,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45803,7 +52525,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/fcc42c56cb8847716474703b5a650f41dce98b38" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45820,7 +52563,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45837,7 +52582,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45854,7 +52601,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45871,7 +52620,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45888,7 +52639,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45905,7 +52658,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45922,7 +52677,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45939,7 +52696,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45956,7 +52715,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/ff7f9df969df7fe6c9c1515528404b55f9d237b6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45973,7 +52753,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -45990,7 +52772,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46007,7 +52791,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46024,7 +52810,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46041,7 +52829,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46058,7 +52848,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46075,7 +52867,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46092,7 +52886,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46109,7 +52905,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "api_fuzzer_one_entry", @@ -46126,7 +52924,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46143,7 +52943,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46160,7 +52962,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46177,7 +52981,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46194,7 +53000,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46211,7 +53019,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46228,7 +53038,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46245,7 +53057,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46262,7 +53076,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46279,7 +53095,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46296,7 +53114,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46313,7 +53133,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46330,7 +53152,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46347,7 +53171,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46364,7 +53190,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46381,7 +53209,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46398,7 +53228,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46415,7 +53247,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46432,7 +53266,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46449,7 +53285,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46466,7 +53304,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46483,7 +53323,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46500,7 +53342,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46517,7 +53361,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46534,7 +53380,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46551,7 +53399,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46568,7 +53418,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46585,7 +53437,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46602,7 +53456,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46619,7 +53475,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46636,7 +53494,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46653,7 +53513,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46670,7 +53532,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46687,7 +53551,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46704,7 +53570,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46721,7 +53589,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46738,7 +53608,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46755,7 +53627,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46772,7 +53646,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46789,7 +53665,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46806,7 +53684,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46823,7 +53703,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46840,7 +53722,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46857,7 +53741,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46874,7 +53760,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46891,7 +53779,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46908,7 +53798,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46925,7 +53817,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46942,7 +53836,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46959,7 +53855,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46976,7 +53874,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -46993,7 +53893,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47010,7 +53912,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47027,7 +53931,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47044,7 +53950,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47061,7 +53969,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47078,7 +53988,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47095,7 +54007,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47112,7 +54026,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47129,7 +54045,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47146,7 +54064,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47163,7 +54083,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47180,7 +54102,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47197,7 +54121,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47214,7 +54140,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47231,7 +54159,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47248,7 +54178,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47265,7 +54197,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47282,7 +54216,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47299,7 +54235,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47316,7 +54254,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47333,7 +54273,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47350,7 +54292,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47367,7 +54311,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47384,7 +54330,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47401,7 +54349,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47418,7 +54368,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47435,7 +54387,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47452,7 +54406,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47469,7 +54425,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47486,7 +54444,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47503,7 +54463,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47520,7 +54482,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47537,7 +54501,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47554,7 +54520,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47571,7 +54539,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47588,7 +54558,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47605,7 +54577,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47622,7 +54596,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47639,7 +54615,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47656,7 +54634,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47673,7 +54653,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47690,7 +54672,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47707,7 +54691,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47724,7 +54710,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47741,7 +54729,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47758,7 +54748,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47775,7 +54767,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47792,7 +54786,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/2c452818a10ddef09b90c89a53db14b9b56b21f3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47809,7 +54824,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47826,7 +54843,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47843,7 +54862,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47860,7 +54881,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47877,7 +54900,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47894,7 +54919,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47911,7 +54938,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47928,7 +54957,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47945,7 +54976,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47962,7 +54995,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47979,7 +55014,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -47996,7 +55033,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48013,7 +55052,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48030,7 +55071,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48047,7 +55090,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48064,7 +55109,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48081,7 +55128,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48098,7 +55147,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48115,7 +55166,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48132,7 +55185,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48149,7 +55204,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48166,7 +55223,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48183,7 +55242,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48200,7 +55261,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48217,7 +55280,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48234,7 +55299,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48251,7 +55318,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48268,7 +55337,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48285,7 +55356,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48302,7 +55375,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48319,7 +55394,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48336,7 +55413,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48353,7 +55432,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48370,7 +55451,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48387,7 +55470,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48404,7 +55489,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48421,7 +55508,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48438,7 +55527,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48455,7 +55546,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48472,7 +55565,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48489,7 +55584,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48506,7 +55603,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/42ead79c94eccdf8a8c3d8036be73e14fa260dd5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48523,7 +55641,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48540,7 +55660,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48557,7 +55679,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48574,7 +55698,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48591,7 +55717,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48608,7 +55736,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48625,7 +55755,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48642,7 +55774,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48659,7 +55793,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48676,7 +55812,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48693,7 +55831,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48710,7 +55850,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48727,7 +55869,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48744,7 +55888,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48761,7 +55907,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48778,7 +55926,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48795,7 +55945,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48812,7 +55964,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/4e05d6cf1c3f0c04f6ee92d09a53ee0fe35c085a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48829,7 +56002,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48846,7 +56021,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48863,7 +56040,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48880,7 +56059,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48897,7 +56078,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48914,7 +56097,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48931,7 +56116,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48948,7 +56135,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48965,7 +56154,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48982,7 +56173,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -48999,7 +56192,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49016,7 +56211,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49033,7 +56230,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49050,7 +56249,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49067,7 +56268,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49084,7 +56287,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49101,7 +56306,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49118,7 +56325,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49135,7 +56344,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49152,7 +56363,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49169,7 +56382,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49186,7 +56401,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49203,7 +56420,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49220,7 +56439,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49237,7 +56458,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49254,7 +56477,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49271,7 +56496,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49288,7 +56515,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49305,7 +56534,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49322,7 +56553,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49339,7 +56572,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49356,7 +56591,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49373,7 +56610,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49390,7 +56629,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49407,7 +56648,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49424,7 +56667,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49441,7 +56686,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49458,7 +56705,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49475,7 +56724,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49492,7 +56743,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49509,7 +56762,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49526,7 +56781,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49543,7 +56800,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49560,7 +56819,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49577,7 +56838,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49594,7 +56857,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49611,7 +56876,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49628,7 +56895,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49645,7 +56914,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49662,7 +56933,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49679,7 +56952,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49696,7 +56971,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49713,7 +56990,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49730,7 +57009,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49747,7 +57028,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49764,7 +57047,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49781,7 +57066,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49798,7 +57085,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49815,7 +57104,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49832,7 +57123,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49849,7 +57142,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49866,7 +57161,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49883,7 +57180,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49900,7 +57199,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49917,7 +57218,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49934,7 +57237,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49951,7 +57256,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49968,7 +57275,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -49985,7 +57294,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50002,7 +57313,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50019,7 +57332,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50036,7 +57351,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50053,7 +57370,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50070,7 +57389,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50087,7 +57408,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50104,7 +57427,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50121,7 +57446,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50138,7 +57465,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50155,7 +57484,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50172,7 +57503,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50189,7 +57522,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50206,7 +57541,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50223,7 +57560,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50240,7 +57579,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50257,7 +57598,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50274,7 +57617,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50291,7 +57636,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50308,7 +57655,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50325,7 +57674,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50342,7 +57693,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50359,7 +57712,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50376,7 +57731,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50393,7 +57750,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50410,7 +57769,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50427,7 +57788,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50444,7 +57807,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50461,7 +57826,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50478,7 +57845,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50495,7 +57864,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50512,7 +57883,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50529,7 +57902,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/8f980dd25f1c77e3536131c2c620aa32e8c13180" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50546,7 +57940,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50563,7 +57959,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50580,7 +57978,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50597,7 +57997,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50614,7 +58016,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50631,7 +58035,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50648,7 +58054,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50665,7 +58073,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50682,7 +58092,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50699,7 +58111,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50716,7 +58130,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50733,7 +58149,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50750,7 +58168,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50767,7 +58187,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50784,7 +58206,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50801,7 +58225,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50818,7 +58244,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50835,7 +58263,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50852,7 +58282,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50869,7 +58301,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50886,7 +58320,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50903,7 +58339,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50920,7 +58358,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50937,7 +58377,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50954,7 +58396,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50971,7 +58415,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -50988,7 +58434,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51005,7 +58453,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51022,7 +58472,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51039,7 +58491,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51056,7 +58510,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51073,7 +58529,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51090,7 +58548,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51107,7 +58567,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51124,7 +58586,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51141,7 +58605,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51158,7 +58624,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51175,7 +58643,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51192,7 +58662,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51209,7 +58681,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51226,7 +58700,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51243,7 +58719,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51260,7 +58738,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51277,7 +58757,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51294,7 +58776,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51311,7 +58795,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51328,7 +58814,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51345,7 +58833,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51362,7 +58852,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51379,7 +58871,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51396,7 +58890,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51413,7 +58909,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51430,7 +58928,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51447,7 +58947,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51464,7 +58966,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51481,7 +58985,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51498,7 +59004,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51515,7 +59023,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51532,7 +59042,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51549,7 +59061,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51566,7 +59080,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51583,7 +59099,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51600,7 +59118,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51617,7 +59137,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/aef36c49d7dec0dcf8cdc224d9e9221fa2cb1db0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51634,7 +59175,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51651,7 +59194,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51668,7 +59213,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51685,7 +59232,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51702,7 +59251,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51719,7 +59270,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51736,7 +59289,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51753,7 +59308,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51770,7 +59327,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51787,7 +59346,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51804,7 +59365,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51821,7 +59384,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51838,7 +59403,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51855,7 +59422,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51872,7 +59441,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51889,7 +59460,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51906,7 +59479,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51923,7 +59498,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51940,7 +59517,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51957,7 +59536,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51974,7 +59555,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -51991,7 +59574,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52008,7 +59593,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52025,7 +59612,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52042,7 +59631,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52059,7 +59650,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52076,7 +59669,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52093,7 +59688,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52110,7 +59707,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52127,7 +59726,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52144,7 +59745,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52161,7 +59764,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52178,7 +59783,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52195,7 +59802,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52212,7 +59821,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52229,7 +59840,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52246,7 +59859,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52263,7 +59878,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52280,7 +59897,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52297,7 +59916,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52314,7 +59935,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52331,7 +59954,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52348,7 +59973,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52365,7 +59992,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52382,7 +60011,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52399,7 +60030,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52416,7 +60049,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52433,7 +60068,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52450,7 +60087,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52467,7 +60106,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52484,7 +60125,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52501,7 +60144,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52518,7 +60163,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52535,7 +60182,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52552,7 +60201,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/crash-14ed70cd9ea7987cdd0c8f6e39398ee7c60ee2ff" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52569,7 +60239,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52586,7 +60258,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52603,7 +60277,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52620,7 +60296,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52637,7 +60315,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52654,7 +60334,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52671,7 +60353,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52688,7 +60372,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52705,7 +60391,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52722,7 +60410,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52739,7 +60429,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52756,7 +60448,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52773,7 +60467,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52790,7 +60486,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52807,7 +60505,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52824,7 +60524,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52841,7 +60543,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52858,7 +60562,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52875,7 +60581,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52892,7 +60600,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52909,7 +60619,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52926,7 +60638,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52943,7 +60657,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52960,7 +60676,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52977,7 +60695,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -52994,7 +60714,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53011,7 +60733,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53028,7 +60752,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53045,7 +60771,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53062,7 +60790,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53079,7 +60809,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53096,7 +60828,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53113,7 +60847,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53130,7 +60866,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53147,7 +60885,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/dcb06a6e34cbed15515e5b3581ca666f704777bd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53164,7 +60923,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53181,7 +60942,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53198,7 +60961,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53215,7 +60980,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53232,7 +60999,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53249,7 +61018,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53266,7 +61037,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53283,7 +61056,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53300,7 +61075,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53317,7 +61094,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53334,7 +61113,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53351,7 +61132,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53368,7 +61151,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53385,7 +61170,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53402,7 +61189,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53419,7 +61208,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53436,7 +61227,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53453,7 +61246,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53470,7 +61265,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53487,7 +61284,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53504,7 +61303,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53521,7 +61322,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53538,7 +61341,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53555,7 +61360,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53572,7 +61379,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53589,7 +61398,28 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], + "flaky": false, + "language": "c", + "name": "client_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/client_fuzzer_corpus/ea46b684f1e67a27c231f2d536c41da631189b9c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53606,7 +61436,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53623,7 +61455,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53640,7 +61474,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53657,7 +61493,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53674,7 +61512,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53691,7 +61531,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53708,7 +61550,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53725,7 +61569,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53742,7 +61588,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53759,7 +61607,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53776,7 +61626,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53793,7 +61645,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53810,7 +61664,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53827,7 +61683,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53844,7 +61702,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53861,7 +61721,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53878,7 +61740,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53895,7 +61759,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53912,7 +61778,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53929,7 +61797,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53946,7 +61816,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53963,7 +61835,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53980,7 +61854,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -53997,7 +61873,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54014,7 +61892,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54031,7 +61911,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54048,7 +61930,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54065,7 +61949,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54082,7 +61968,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54099,7 +61987,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54116,7 +62006,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54133,7 +62025,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54150,7 +62044,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54167,7 +62063,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54184,7 +62082,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54201,7 +62101,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54218,7 +62120,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54235,7 +62139,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "client_fuzzer_one_entry", @@ -54252,7 +62158,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54269,7 +62177,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54286,7 +62196,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54303,7 +62215,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54320,7 +62234,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54337,7 +62253,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54354,7 +62272,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54371,7 +62291,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54388,7 +62310,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54405,7 +62329,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54422,7 +62348,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54439,7 +62367,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54456,7 +62386,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54473,7 +62405,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54490,7 +62424,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54507,7 +62443,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54524,7 +62462,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54541,7 +62481,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54558,7 +62500,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54575,7 +62519,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54592,7 +62538,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54609,7 +62557,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54626,7 +62576,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54643,7 +62595,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54660,7 +62614,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54677,7 +62633,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54694,7 +62652,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54711,7 +62671,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54728,7 +62690,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54745,7 +62709,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54762,7 +62728,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54779,7 +62747,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54796,7 +62766,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54813,7 +62785,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54830,7 +62804,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54847,7 +62823,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54864,7 +62842,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54881,7 +62861,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54898,7 +62880,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54915,7 +62899,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54932,7 +62918,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54949,7 +62937,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54966,7 +62956,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -54983,7 +62975,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55000,7 +62994,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55017,7 +63013,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55034,7 +63032,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55051,7 +63051,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55068,7 +63070,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55085,7 +63089,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55102,7 +63108,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55119,7 +63127,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55136,7 +63146,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55153,7 +63165,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55170,7 +63184,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55187,7 +63203,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55204,7 +63222,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55221,7 +63241,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55238,7 +63260,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55255,7 +63279,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55272,7 +63298,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55289,7 +63317,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55306,7 +63336,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55323,7 +63355,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55340,7 +63374,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55357,7 +63393,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55374,7 +63412,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55391,7 +63431,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55408,7 +63450,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55425,7 +63469,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55442,7 +63488,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55459,7 +63507,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55476,7 +63526,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55493,7 +63545,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55510,7 +63564,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55527,7 +63583,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55544,7 +63602,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55561,7 +63621,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55578,7 +63640,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55595,7 +63659,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55612,7 +63678,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55629,7 +63697,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55646,7 +63716,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55663,7 +63735,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55680,7 +63754,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55697,7 +63773,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55714,7 +63792,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55731,7 +63811,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55748,7 +63830,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55765,7 +63849,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55782,7 +63868,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55799,7 +63887,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55816,7 +63906,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55833,7 +63925,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55850,7 +63944,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55867,7 +63963,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55884,7 +63982,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55901,7 +64001,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55918,7 +64020,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55935,7 +64039,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55952,7 +64058,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55969,7 +64077,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -55986,7 +64096,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56003,7 +64115,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56020,7 +64134,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56037,7 +64153,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56054,7 +64172,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56071,7 +64191,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56088,7 +64210,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56105,7 +64229,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56122,7 +64248,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56139,7 +64267,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56156,7 +64286,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56173,7 +64305,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56190,7 +64324,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56207,7 +64343,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56224,7 +64362,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56241,7 +64381,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56258,7 +64400,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56275,7 +64419,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56292,7 +64438,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56309,7 +64457,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56326,7 +64476,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56343,7 +64495,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56360,7 +64514,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56377,7 +64533,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56394,7 +64552,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56411,7 +64571,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56428,7 +64590,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56445,7 +64609,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56462,7 +64628,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56479,7 +64647,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56496,7 +64666,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56513,7 +64685,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56530,7 +64704,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56547,7 +64723,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56564,7 +64742,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56581,7 +64761,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56598,7 +64780,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56615,7 +64799,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56632,7 +64818,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56649,7 +64837,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56666,7 +64856,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56683,7 +64875,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56700,7 +64894,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56717,7 +64913,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56734,7 +64932,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56751,7 +64951,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56768,7 +64970,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56785,7 +64989,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56802,7 +65008,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56819,7 +65027,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56836,7 +65046,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56853,7 +65065,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56870,7 +65084,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56887,7 +65103,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56904,7 +65122,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56921,7 +65141,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56938,7 +65160,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56955,7 +65179,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56972,7 +65198,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -56989,7 +65217,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57006,7 +65236,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57023,7 +65255,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57040,7 +65274,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57057,7 +65293,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57074,7 +65312,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57091,7 +65331,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57108,7 +65350,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57125,7 +65369,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57142,7 +65388,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57159,7 +65407,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57176,7 +65426,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57193,7 +65445,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57210,7 +65464,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57227,7 +65483,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57244,7 +65502,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57261,7 +65521,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57278,7 +65540,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57295,7 +65559,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57312,7 +65578,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57329,7 +65597,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57346,7 +65616,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57363,7 +65635,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57380,7 +65654,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57397,7 +65673,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57414,7 +65692,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57431,7 +65711,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57448,7 +65730,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57465,7 +65749,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57482,7 +65768,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57499,7 +65787,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57516,7 +65806,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57533,7 +65825,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57550,7 +65844,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57567,7 +65863,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57584,7 +65882,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57601,7 +65901,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57618,7 +65920,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57635,7 +65939,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57652,7 +65958,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57669,7 +65977,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57686,7 +65996,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57703,7 +66015,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57720,7 +66034,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57737,7 +66053,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57754,7 +66072,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57771,7 +66091,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57788,7 +66110,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57805,7 +66129,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57822,7 +66148,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57839,7 +66167,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57856,7 +66186,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57873,7 +66205,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57890,7 +66224,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57907,7 +66243,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57924,7 +66262,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57941,7 +66281,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57958,7 +66300,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57975,7 +66319,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -57992,7 +66338,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58009,7 +66357,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58026,7 +66376,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58043,7 +66395,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58060,7 +66414,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58077,7 +66433,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58094,7 +66452,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58111,7 +66471,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58128,7 +66490,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58145,7 +66509,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58162,7 +66528,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58179,7 +66547,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58196,7 +66566,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58213,7 +66585,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58230,7 +66604,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58247,7 +66623,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58264,7 +66642,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58281,7 +66661,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58298,7 +66680,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58315,7 +66699,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58332,7 +66718,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58349,7 +66737,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58366,7 +66756,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58383,7 +66775,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58400,7 +66794,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58417,7 +66813,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58434,7 +66832,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58451,7 +66851,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58468,7 +66870,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58485,7 +66889,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58502,7 +66908,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58519,7 +66927,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58536,7 +66946,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58553,7 +66965,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58570,7 +66984,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58587,7 +67003,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58604,7 +67022,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58621,7 +67041,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58638,7 +67060,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58655,7 +67079,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58672,7 +67098,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58689,7 +67117,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58706,7 +67136,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58723,7 +67155,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58740,7 +67174,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58757,7 +67193,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58774,7 +67212,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58791,7 +67231,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58808,7 +67250,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58825,7 +67269,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58842,7 +67288,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58859,7 +67307,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58876,7 +67326,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58893,7 +67345,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58910,7 +67364,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58927,7 +67383,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58944,7 +67402,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58961,7 +67421,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58978,7 +67440,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -58995,7 +67459,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59012,7 +67478,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59029,7 +67497,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59046,7 +67516,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59063,7 +67535,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59080,7 +67554,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59097,7 +67573,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59114,7 +67592,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59131,7 +67611,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59148,7 +67630,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59165,7 +67649,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59182,7 +67668,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59199,7 +67687,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59216,7 +67706,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59233,7 +67725,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59250,7 +67744,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59267,7 +67763,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59284,7 +67782,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59301,7 +67801,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59318,7 +67820,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59335,7 +67839,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59352,7 +67858,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59369,7 +67877,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59386,7 +67896,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59403,7 +67915,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59420,7 +67934,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59437,7 +67953,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59454,7 +67972,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59471,7 +67991,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59488,7 +68010,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59505,7 +68029,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59522,7 +68048,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59539,7 +68067,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59556,7 +68086,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59573,7 +68105,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59590,7 +68124,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59607,7 +68143,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59624,7 +68162,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59641,7 +68181,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59658,7 +68200,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59675,7 +68219,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59692,7 +68238,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59709,7 +68257,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59726,7 +68276,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59743,7 +68295,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59760,7 +68314,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59777,7 +68333,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59794,24 +68352,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "hpack_parser_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/transport/chttp2/hpack_parser_corpus/ff7d6ff060e63355701b2e655c802902338497de" - ], - "ci_platforms": [ - "linux" + "exclude_configs": [ + "tsan" ], - "cpu_cost": 0.1, - "exclude_configs": [], "flaky": false, "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", @@ -59822,1206 +68365,18 @@ }, { "args": [ - "test/core/http/corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/05e613853d64a9669ea3cf41b0de777dc24931ba" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/069352518a1d1baa05f317c677d275cefda2ac97" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/0c5b7c2569410b526605e308309a7f36574e530d" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/1e1273f90187fdf5df3625764245610f86af6aa4" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/24756c396bc72894fd720092bb6f9c03e66b469f" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/276def41311933421ae7a9ee42e906c85b6a4d3f" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/29daa75432381937fd005cb25e314e328de6e9f9" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/2a75204bc492084ad853682f8de3fb137d5907bc" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/2d34ba249b755a880525cf53c665633a5e359305" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/3953688866ccb3b4f371f1a858570d6afdb6452d" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/39b19c41ba537f37511eff7727733715db432e76" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/3f03265921120c6ffa61b944e213e062a5538d4b" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/487725eb38511c79a9340bf4560a1411061fa6fa" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/5028c56a5116a186b7343ff59567b47347a0796d" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/533f62b3f495ce704babf3ee8d840f196a714dff" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/5892cbb284771fc9761caae37b19cd6e27dbc104" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/657368df512ca6294b9df16adf935a3f374a8be2" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/7fc4520094902ce2c760d70eaad5b674d2817337" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/81f59a12b458ec3604035cb962165c604d1355e6" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/97e4499d450c95660de86747f527e670f2012548" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/9a996857196e0998a1278994a9bab3d35526e7f1" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/b04fea5c041c707db0ad9c09a81672557b52cc47" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/c4acff8aa2ff886f35439f72625d05002990c940" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/cce734f1b263de6994f7950e0df7bf0c81449f70" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/d39c8ee11a697634a09b309460c0bbd967e7effa" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/d51f7fcc089f269c7afecaaca51966bab5fde629" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/d936dad71c129cf659097dc3db64550c4dd467f4" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/e5c364b205855a2991ce07482aebb2a3a6147089" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/request1.txt" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/request2.txt" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/request3.txt" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/request4.txt" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/request5.txt" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/response1.txt" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/response2.txt" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/response3.txt" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/response4.txt" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/response5.txt" - ], - "ci_platforms": [ - "linux" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/response6.txt" + "test/core/transport/chttp2/hpack_parser_corpus/ff7d6ff060e63355701b2e655c802902338497de" ], "ci_platforms": [ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "http_fuzzer_test_one_entry", - "platforms": [ - "linux" - ], - "uses_polling": false - }, - { - "args": [ - "test/core/http/corpus/toolong.txt" - ], - "ci_platforms": [ - "linux" + "exclude_configs": [ + "tsan" ], - "cpu_cost": 0.1, - "exclude_configs": [], "flaky": false, "language": "c", - "name": "http_fuzzer_test_one_entry", + "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ "linux" ], @@ -61035,7 +68390,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61052,7 +68409,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61069,7 +68428,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61086,7 +68447,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61103,7 +68466,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61120,7 +68485,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61137,7 +68504,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61154,7 +68523,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61171,7 +68542,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61188,7 +68561,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61205,7 +68580,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61222,7 +68599,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61239,7 +68618,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61256,7 +68637,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61273,7 +68656,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61290,7 +68675,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61307,7 +68694,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61324,7 +68713,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61341,7 +68732,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61358,7 +68751,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61375,7 +68770,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61392,7 +68789,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61409,7 +68808,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61426,7 +68827,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61443,7 +68846,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61460,7 +68865,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61477,7 +68884,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61494,7 +68903,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61511,7 +68922,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61528,7 +68941,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61545,7 +68960,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61562,7 +68979,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61579,7 +68998,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61596,7 +69017,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61613,7 +69036,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61630,7 +69055,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61647,7 +69074,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61664,7 +69093,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61681,7 +69112,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61698,7 +69131,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61715,7 +69150,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61732,7 +69169,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61749,7 +69188,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61766,7 +69207,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61783,7 +69226,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61800,7 +69245,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61817,7 +69264,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61834,7 +69283,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61851,7 +69302,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61868,7 +69321,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61885,7 +69340,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61902,7 +69359,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61919,7 +69378,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61936,7 +69397,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61953,7 +69416,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61970,7 +69435,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -61987,7 +69454,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62004,7 +69473,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62021,7 +69492,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62038,7 +69511,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62055,7 +69530,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62072,7 +69549,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62089,7 +69568,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62106,7 +69587,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62123,7 +69606,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62140,7 +69625,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62157,7 +69644,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62174,7 +69663,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62191,7 +69682,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62208,7 +69701,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62225,7 +69720,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62242,7 +69739,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62259,7 +69758,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62276,7 +69777,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62293,7 +69796,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62310,7 +69815,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62327,7 +69834,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62344,7 +69853,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62361,7 +69872,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62378,7 +69891,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62395,7 +69910,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62412,7 +69929,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62429,7 +69948,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62446,7 +69967,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62463,7 +69986,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62480,7 +70005,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62497,7 +70024,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62514,7 +70043,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62531,7 +70062,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62548,7 +70081,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62565,7 +70100,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62582,7 +70119,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62599,7 +70138,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62616,7 +70157,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62633,7 +70176,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62650,7 +70195,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62667,7 +70214,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62684,7 +70233,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62701,7 +70252,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62718,7 +70271,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62735,7 +70290,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62752,7 +70309,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62769,7 +70328,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62786,7 +70347,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62803,7 +70366,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62820,7 +70385,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62837,7 +70404,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62854,7 +70423,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62871,7 +70442,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62888,7 +70461,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62905,7 +70480,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62922,7 +70499,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62939,7 +70518,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62956,7 +70537,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62973,7 +70556,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -62990,7 +70575,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63007,7 +70594,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63024,7 +70613,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63041,7 +70632,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63058,7 +70651,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63075,7 +70670,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63092,7 +70689,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63109,7 +70708,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63126,7 +70727,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63143,7 +70746,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63160,7 +70765,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63177,7 +70784,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63194,7 +70803,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63211,7 +70822,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63228,7 +70841,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63245,7 +70860,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63262,7 +70879,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63279,7 +70898,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63296,7 +70917,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63313,7 +70936,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63330,7 +70955,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63347,7 +70974,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63364,7 +70993,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63381,7 +71012,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63398,7 +71031,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63415,7 +71050,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63432,7 +71069,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63449,7 +71088,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63466,7 +71107,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63483,7 +71126,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63500,7 +71145,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63517,7 +71164,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63534,7 +71183,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63551,7 +71202,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63568,7 +71221,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63585,7 +71240,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63602,7 +71259,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63619,7 +71278,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63636,7 +71297,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63653,7 +71316,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63670,7 +71335,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63687,7 +71354,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63704,7 +71373,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63721,7 +71392,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63738,7 +71411,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63755,7 +71430,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63772,7 +71449,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63789,7 +71468,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63806,7 +71487,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63823,7 +71506,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63840,7 +71525,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63857,7 +71544,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63874,7 +71563,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63891,7 +71582,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63908,7 +71601,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63925,7 +71620,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63942,7 +71639,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63959,7 +71658,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63976,7 +71677,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -63993,7 +71696,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64010,7 +71715,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64027,7 +71734,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64044,7 +71753,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64061,7 +71772,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64078,7 +71791,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64095,7 +71810,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64112,7 +71829,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64129,7 +71848,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64146,7 +71867,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64163,7 +71886,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64180,7 +71905,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64197,7 +71924,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64214,7 +71943,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64231,7 +71962,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64248,7 +71981,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64265,7 +72000,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64282,7 +72019,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64299,7 +72038,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64316,7 +72057,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64333,7 +72076,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64350,7 +72095,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64367,7 +72114,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64384,7 +72133,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64401,7 +72152,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64418,7 +72171,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64435,7 +72190,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64452,7 +72209,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64469,7 +72228,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64486,7 +72247,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64503,7 +72266,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64520,7 +72285,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64537,7 +72304,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64554,7 +72323,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64571,7 +72342,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64588,7 +72361,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64605,7 +72380,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64622,7 +72399,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64639,7 +72418,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64656,7 +72437,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64673,7 +72456,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64690,7 +72475,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64707,7 +72494,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64724,7 +72513,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64741,7 +72532,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64758,7 +72551,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64775,7 +72570,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64792,7 +72589,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64809,7 +72608,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64826,7 +72627,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64843,7 +72646,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64860,7 +72665,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64877,7 +72684,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64894,7 +72703,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64911,7 +72722,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64928,7 +72741,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64945,7 +72760,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64962,7 +72779,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64979,7 +72798,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -64996,7 +72817,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65013,7 +72836,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65030,7 +72855,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65047,7 +72874,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65064,7 +72893,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65081,7 +72912,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65098,7 +72931,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65115,7 +72950,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65132,7 +72969,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65149,7 +72988,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65166,7 +73007,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65183,7 +73026,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65200,7 +73045,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65217,7 +73064,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65234,7 +73083,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65251,7 +73102,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65268,7 +73121,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65285,7 +73140,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65302,7 +73159,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65319,7 +73178,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65336,7 +73197,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65353,7 +73216,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65370,7 +73235,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65387,7 +73254,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65404,7 +73273,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65421,7 +73292,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65438,7 +73311,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65455,7 +73330,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65472,7 +73349,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65489,7 +73368,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65506,7 +73387,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65523,7 +73406,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65540,7 +73425,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65557,7 +73444,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65574,7 +73463,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65591,7 +73482,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65608,7 +73501,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65625,7 +73520,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65642,7 +73539,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65659,7 +73558,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65676,7 +73577,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65693,7 +73596,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65710,7 +73615,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65727,7 +73634,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65744,7 +73653,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65761,7 +73672,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65778,7 +73691,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65795,7 +73710,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65812,7 +73729,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65829,7 +73748,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65846,7 +73767,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65863,7 +73786,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65880,7 +73805,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65897,7 +73824,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65914,7 +73843,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65931,7 +73862,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65948,7 +73881,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65965,7 +73900,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65982,7 +73919,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -65999,7 +73938,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66016,7 +73957,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66033,7 +73976,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66050,7 +73995,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66067,7 +74014,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66084,7 +74033,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66101,7 +74052,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66118,7 +74071,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66135,7 +74090,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66152,7 +74109,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66169,7 +74128,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66186,7 +74147,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66203,7 +74166,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66220,7 +74185,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66237,7 +74204,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66254,7 +74223,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66271,7 +74242,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66288,7 +74261,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66305,7 +74280,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66322,7 +74299,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66339,7 +74318,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66356,7 +74337,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66373,7 +74356,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66390,7 +74375,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66407,7 +74394,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66424,7 +74413,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66441,7 +74432,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66458,7 +74451,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66475,7 +74470,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66492,7 +74489,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66509,7 +74508,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66526,7 +74527,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66543,7 +74546,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66560,7 +74565,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66577,7 +74584,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66594,7 +74603,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66611,7 +74622,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66628,7 +74641,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66645,7 +74660,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66662,7 +74679,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66679,7 +74698,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66696,7 +74717,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66713,7 +74736,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66730,7 +74755,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66747,7 +74774,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66764,7 +74793,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66781,7 +74812,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66798,7 +74831,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66815,7 +74850,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66832,7 +74869,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66849,7 +74888,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66866,7 +74907,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66883,7 +74926,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66900,7 +74945,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66917,7 +74964,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66934,7 +74983,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "json_fuzzer_test_one_entry", @@ -66951,7 +75002,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -66968,7 +75021,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -66985,7 +75040,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67002,7 +75059,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67019,7 +75078,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67036,7 +75097,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67053,7 +75116,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67070,7 +75135,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67087,7 +75154,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67104,7 +75173,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67121,7 +75192,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67138,7 +75211,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67155,7 +75230,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67172,7 +75249,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67189,7 +75268,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67206,7 +75287,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67223,7 +75306,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67240,7 +75325,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67257,7 +75344,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67274,7 +75363,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67291,7 +75382,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67308,7 +75401,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67325,7 +75420,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67342,7 +75439,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67359,7 +75458,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67376,7 +75477,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67393,7 +75496,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67410,7 +75515,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67427,7 +75534,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67444,7 +75553,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67461,7 +75572,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67478,7 +75591,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67495,7 +75610,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67512,7 +75629,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67529,7 +75648,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67546,7 +75667,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67563,7 +75686,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67580,7 +75705,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67597,7 +75724,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67614,7 +75743,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67631,7 +75762,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67648,7 +75781,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67665,7 +75800,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67682,7 +75819,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67699,7 +75838,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67716,7 +75857,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67733,7 +75876,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67750,7 +75895,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67767,7 +75914,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67784,7 +75933,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67801,7 +75952,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67818,7 +75971,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67835,7 +75990,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67852,7 +76009,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67869,7 +76028,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67886,7 +76047,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67903,7 +76066,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67920,7 +76085,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67937,7 +76104,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67954,7 +76123,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67971,7 +76142,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -67988,7 +76161,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -68005,7 +76180,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", @@ -68022,7 +76199,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68039,7 +76218,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68056,7 +76237,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68073,7 +76256,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68090,7 +76275,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68107,7 +76294,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68124,7 +76313,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68141,7 +76332,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68158,7 +76351,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68175,7 +76370,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68192,7 +76389,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68209,7 +76408,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68226,7 +76427,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68243,7 +76446,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68260,7 +76465,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68277,7 +76484,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68294,7 +76503,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68311,7 +76522,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68328,7 +76541,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68345,7 +76560,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68362,7 +76579,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68379,7 +76598,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68396,7 +76617,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68413,7 +76636,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68430,7 +76655,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68447,7 +76674,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68464,7 +76693,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68481,7 +76712,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68498,7 +76731,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68515,7 +76750,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68532,7 +76769,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68549,7 +76788,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68566,7 +76807,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68583,7 +76826,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68600,7 +76845,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68617,7 +76864,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68634,7 +76883,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68651,7 +76902,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68668,7 +76921,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68685,7 +76940,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68702,7 +76959,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68719,7 +76978,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68736,7 +76997,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68753,7 +77016,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68770,7 +77035,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68787,7 +77054,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68804,7 +77073,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68821,7 +77092,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68838,7 +77111,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68855,7 +77130,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68872,7 +77149,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68889,7 +77168,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68906,7 +77187,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68923,7 +77206,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68940,7 +77225,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68957,7 +77244,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68974,7 +77263,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -68991,7 +77282,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69008,7 +77301,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69025,7 +77320,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69042,7 +77339,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69059,7 +77358,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69076,7 +77377,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69093,7 +77396,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69110,7 +77415,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69127,7 +77434,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69144,7 +77453,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69161,7 +77472,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69178,7 +77491,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69195,7 +77510,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69212,7 +77529,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69229,7 +77548,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69246,7 +77567,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69263,7 +77586,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69280,7 +77605,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69297,7 +77624,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69314,7 +77643,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69331,7 +77662,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69348,7 +77681,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69365,7 +77700,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69382,7 +77719,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69399,7 +77738,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69416,7 +77757,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69433,7 +77776,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69450,7 +77795,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69467,7 +77814,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69484,7 +77833,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69501,7 +77852,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69518,7 +77871,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69535,7 +77890,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69552,7 +77909,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69569,7 +77928,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69586,7 +77947,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69603,7 +77966,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69620,7 +77985,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69637,7 +78004,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69654,7 +78023,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69671,7 +78042,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69688,7 +78061,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69705,7 +78080,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69722,7 +78099,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69739,7 +78118,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69756,7 +78137,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69773,7 +78156,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69790,7 +78175,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69807,7 +78194,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69824,7 +78213,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69841,7 +78232,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69858,7 +78251,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69875,7 +78270,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69892,7 +78289,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69909,7 +78308,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69926,7 +78327,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69943,7 +78346,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69960,7 +78365,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69977,7 +78384,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -69994,7 +78403,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70011,7 +78422,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70028,7 +78441,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70045,7 +78460,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70062,7 +78479,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70079,7 +78498,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70096,7 +78517,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70113,7 +78536,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70130,7 +78555,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70147,7 +78574,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70164,7 +78593,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70181,7 +78612,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70198,7 +78631,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70215,7 +78650,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70232,7 +78669,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70249,7 +78688,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70266,7 +78707,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70283,7 +78726,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70300,7 +78745,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70317,7 +78764,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70334,7 +78783,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70351,7 +78802,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70368,7 +78821,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70385,7 +78840,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70402,7 +78859,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70419,7 +78878,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70436,7 +78897,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70453,7 +78916,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70470,7 +78935,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70487,7 +78954,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70504,7 +78973,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70521,7 +78992,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70538,7 +79011,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70555,7 +79030,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70572,7 +79049,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70589,7 +79068,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70606,7 +79087,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70623,7 +79106,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70640,7 +79125,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70657,7 +79144,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70674,7 +79163,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70691,7 +79182,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70708,7 +79201,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70725,7 +79220,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70742,7 +79239,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70759,7 +79258,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70776,7 +79277,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70793,7 +79296,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70810,7 +79315,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70827,7 +79334,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70844,7 +79353,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70861,7 +79372,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70878,7 +79391,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70895,7 +79410,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70912,7 +79429,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70929,7 +79448,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70946,7 +79467,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70963,7 +79486,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70980,7 +79505,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -70997,7 +79524,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71014,7 +79543,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71031,7 +79562,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71048,7 +79581,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71065,7 +79600,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71082,7 +79619,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71099,7 +79638,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71116,7 +79657,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71133,7 +79676,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71150,7 +79695,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71167,7 +79714,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71184,7 +79733,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71201,7 +79752,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71218,7 +79771,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71235,7 +79790,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71252,7 +79809,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71269,7 +79828,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71286,7 +79847,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71303,7 +79866,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71320,7 +79885,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71337,7 +79904,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71354,7 +79923,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71371,7 +79942,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71388,7 +79961,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71405,7 +79980,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71422,7 +79999,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71439,7 +80018,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71456,7 +80037,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71473,7 +80056,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71490,7 +80075,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71507,7 +80094,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71524,7 +80113,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71541,7 +80132,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71558,7 +80151,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71575,7 +80170,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71592,7 +80189,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71609,7 +80208,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71626,7 +80227,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71643,7 +80246,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71660,7 +80265,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71677,7 +80284,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71694,7 +80303,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71711,7 +80322,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71728,7 +80341,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71745,7 +80360,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71762,7 +80379,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71779,7 +80398,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71796,7 +80417,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71813,7 +80436,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71830,7 +80455,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71847,7 +80474,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71864,7 +80493,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71881,7 +80512,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71898,7 +80531,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71915,7 +80550,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71932,7 +80569,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71949,7 +80588,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71966,7 +80607,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -71983,7 +80626,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72000,7 +80645,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72017,7 +80664,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72034,7 +80683,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72051,7 +80702,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72068,7 +80721,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72085,7 +80740,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72102,7 +80759,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72119,7 +80778,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72136,7 +80797,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72153,7 +80816,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72170,7 +80835,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72187,7 +80854,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72204,7 +80873,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72221,7 +80892,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72238,7 +80911,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72255,7 +80930,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72272,7 +80949,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72289,7 +80968,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72306,7 +80987,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72323,7 +81006,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72340,7 +81025,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72357,7 +81044,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72374,7 +81063,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72391,7 +81082,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72408,7 +81101,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72425,7 +81120,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72442,7 +81139,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72459,7 +81158,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72476,7 +81177,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72493,7 +81196,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72510,7 +81215,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72527,7 +81234,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72544,7 +81253,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72561,7 +81272,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72578,7 +81291,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72595,7 +81310,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72612,7 +81329,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72629,7 +81348,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", @@ -72646,7 +81367,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72663,7 +81386,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72680,7 +81405,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72697,7 +81424,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72714,7 +81443,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72731,7 +81462,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72748,7 +81481,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72765,7 +81500,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72782,7 +81519,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72799,7 +81538,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72816,7 +81557,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72833,7 +81576,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72850,7 +81595,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72867,7 +81614,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72884,7 +81633,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72901,7 +81652,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72918,7 +81671,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72935,7 +81690,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72952,7 +81709,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72969,7 +81728,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -72986,7 +81747,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73003,7 +81766,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73020,7 +81785,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73037,7 +81804,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73054,7 +81823,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73071,7 +81842,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73088,7 +81861,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73105,7 +81880,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73122,7 +81899,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73139,7 +81918,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73156,7 +81937,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73173,7 +81956,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73190,7 +81975,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73207,7 +81994,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73224,7 +82013,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73241,7 +82032,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73258,7 +82051,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73275,7 +82070,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73292,7 +82089,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73309,7 +82108,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73326,7 +82127,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73343,7 +82146,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73360,7 +82165,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73377,7 +82184,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73394,7 +82203,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73411,7 +82222,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73428,7 +82241,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73445,7 +82260,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73462,7 +82279,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73479,7 +82298,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73496,7 +82317,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73513,7 +82336,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73530,7 +82355,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73547,7 +82374,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73564,7 +82393,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73581,7 +82412,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73598,7 +82431,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73615,7 +82450,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73632,7 +82469,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73649,7 +82488,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73666,7 +82507,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73683,7 +82526,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73700,7 +82545,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73717,7 +82564,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73734,7 +82583,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73751,7 +82602,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73768,7 +82621,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73785,7 +82640,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73802,7 +82659,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73819,7 +82678,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73836,7 +82697,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73853,7 +82716,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73870,7 +82735,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73887,7 +82754,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73904,7 +82773,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73921,7 +82792,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73938,7 +82811,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73955,7 +82830,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73972,7 +82849,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -73989,7 +82868,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74006,7 +82887,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74023,7 +82906,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74040,7 +82925,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74057,7 +82944,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74074,7 +82963,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74091,7 +82982,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74108,7 +83001,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74125,7 +83020,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74142,7 +83039,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74159,7 +83058,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74176,7 +83077,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74193,7 +83096,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74210,7 +83115,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74227,7 +83134,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74244,7 +83153,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74261,7 +83172,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74278,7 +83191,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74295,7 +83210,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74312,7 +83229,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74329,7 +83248,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74346,7 +83267,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74363,7 +83286,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74380,7 +83305,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74397,7 +83324,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74414,7 +83343,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74431,7 +83362,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74448,7 +83381,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74465,7 +83400,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74482,7 +83419,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74499,7 +83438,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74516,7 +83457,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74533,7 +83476,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74550,7 +83495,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74567,7 +83514,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74584,7 +83533,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74601,7 +83552,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74618,7 +83571,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74635,7 +83590,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74652,7 +83609,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74669,7 +83628,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74686,7 +83647,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74703,7 +83666,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74720,7 +83685,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74737,7 +83704,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74754,7 +83723,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74771,7 +83742,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74788,7 +83761,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74805,7 +83780,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74822,7 +83799,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74839,7 +83818,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74856,7 +83837,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74873,7 +83856,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74890,7 +83875,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74907,7 +83894,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74924,7 +83913,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74941,7 +83932,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74958,7 +83951,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74975,7 +83970,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -74992,7 +83989,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75009,7 +84008,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75026,7 +84027,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75043,7 +84046,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75060,7 +84065,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75077,7 +84084,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75094,7 +84103,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75111,7 +84122,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75128,7 +84141,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75145,7 +84160,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75162,7 +84179,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75179,7 +84198,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75196,7 +84217,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75213,7 +84236,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75230,7 +84255,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75247,7 +84274,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75264,7 +84293,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75281,7 +84312,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75298,7 +84331,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75315,7 +84350,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75332,7 +84369,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75349,7 +84388,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75366,7 +84407,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75383,7 +84426,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75400,7 +84445,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75417,7 +84464,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75434,7 +84483,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75451,7 +84502,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75468,7 +84521,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75485,7 +84540,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75502,7 +84559,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75519,7 +84578,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75536,7 +84597,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75553,7 +84616,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75570,7 +84635,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75587,7 +84654,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75604,7 +84673,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75621,7 +84692,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75638,7 +84711,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75655,7 +84730,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75672,7 +84749,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75689,7 +84768,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75706,7 +84787,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75723,7 +84806,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75740,7 +84825,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75757,7 +84844,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75774,7 +84863,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75791,7 +84882,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75808,7 +84901,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75825,7 +84920,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75842,7 +84939,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75859,7 +84958,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75876,7 +84977,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75893,7 +84996,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75910,7 +85015,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75927,7 +85034,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75944,7 +85053,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75961,7 +85072,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75978,7 +85091,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -75995,7 +85110,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76012,7 +85129,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76029,7 +85148,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76046,7 +85167,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76063,7 +85186,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76080,7 +85205,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76097,7 +85224,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76114,7 +85243,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76131,7 +85262,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76148,7 +85281,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76165,7 +85300,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76182,7 +85319,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76199,7 +85338,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76216,7 +85357,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76233,7 +85376,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76250,7 +85395,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76267,7 +85414,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76284,7 +85433,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76301,7 +85452,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76318,7 +85471,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76335,7 +85490,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76352,7 +85509,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76369,7 +85528,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76386,7 +85547,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76403,7 +85566,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76420,7 +85585,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76437,7 +85604,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76454,7 +85623,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76471,7 +85642,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76488,7 +85661,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76505,7 +85680,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76522,7 +85699,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76539,7 +85718,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76556,7 +85737,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76573,7 +85756,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76590,7 +85775,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76607,7 +85794,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76624,7 +85813,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76641,7 +85832,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76658,7 +85851,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76675,7 +85870,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76692,7 +85889,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76709,7 +85908,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76726,7 +85927,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76743,7 +85946,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76760,7 +85965,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76777,7 +85984,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76794,7 +86003,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76811,7 +86022,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76828,7 +86041,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76845,7 +86060,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76862,7 +86079,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76879,7 +86098,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76896,7 +86117,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76913,7 +86136,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76930,7 +86155,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76947,7 +86174,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76964,7 +86193,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76981,7 +86212,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -76998,7 +86231,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77015,7 +86250,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77032,7 +86269,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77049,7 +86288,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77066,7 +86307,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77083,7 +86326,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77100,7 +86345,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77117,7 +86364,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77134,7 +86383,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77151,7 +86402,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77168,7 +86421,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77185,7 +86440,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77202,7 +86459,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77219,7 +86478,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77236,7 +86497,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77253,7 +86516,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77270,7 +86535,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77287,7 +86554,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77304,7 +86573,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77321,7 +86592,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77338,7 +86611,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77355,7 +86630,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77372,7 +86649,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77389,7 +86668,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77406,7 +86687,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77423,7 +86706,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77440,7 +86725,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77457,7 +86744,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77474,7 +86763,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77491,7 +86782,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77508,7 +86801,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77525,7 +86820,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77542,7 +86839,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77559,7 +86858,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77576,7 +86877,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77593,7 +86896,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77610,7 +86915,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77627,7 +86934,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77644,7 +86953,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77661,7 +86972,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77678,7 +86991,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77695,7 +87010,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77712,7 +87029,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77729,7 +87048,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77746,7 +87067,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77763,7 +87086,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77780,7 +87105,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77797,7 +87124,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77814,7 +87143,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77831,7 +87162,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77848,7 +87181,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77865,7 +87200,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77882,7 +87219,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77899,7 +87238,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77916,7 +87257,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77933,7 +87276,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77950,7 +87295,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77967,7 +87314,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -77984,7 +87333,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78001,7 +87352,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78018,7 +87371,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78035,7 +87390,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78052,7 +87409,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78069,7 +87428,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78086,7 +87447,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78103,7 +87466,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78120,7 +87485,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78137,7 +87504,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78154,7 +87523,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78171,7 +87542,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78188,7 +87561,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78205,7 +87580,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78222,7 +87599,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78239,7 +87618,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78256,7 +87637,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78273,7 +87656,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78290,7 +87675,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78307,7 +87694,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78324,7 +87713,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78341,7 +87732,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78358,7 +87751,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78375,7 +87770,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78392,7 +87789,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78409,7 +87808,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78426,7 +87827,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78443,7 +87846,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78460,7 +87865,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78477,7 +87884,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78494,7 +87903,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78511,7 +87922,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78528,7 +87941,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78545,7 +87960,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78562,7 +87979,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78579,7 +87998,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78596,7 +88017,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78613,7 +88036,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78630,7 +88055,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78647,7 +88074,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78664,7 +88093,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78681,7 +88112,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78698,7 +88131,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78715,7 +88150,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78732,7 +88169,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78749,7 +88188,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78766,7 +88207,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78783,7 +88226,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78800,7 +88245,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78817,7 +88264,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78834,7 +88283,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78851,7 +88302,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78868,7 +88321,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78885,7 +88340,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78902,7 +88359,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78919,7 +88378,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78936,7 +88397,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78953,7 +88416,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78970,7 +88435,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -78987,7 +88454,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79004,7 +88473,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79021,7 +88492,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79038,7 +88511,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79055,7 +88530,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79072,7 +88549,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79089,7 +88568,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79106,7 +88587,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79123,7 +88606,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79140,7 +88625,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79157,7 +88644,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79174,7 +88663,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79191,7 +88682,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79208,7 +88701,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79225,7 +88720,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79242,7 +88739,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79259,7 +88758,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79276,7 +88777,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79293,7 +88796,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79310,7 +88815,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79327,7 +88834,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79344,7 +88853,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79361,7 +88872,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79378,7 +88891,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79395,7 +88910,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79412,7 +88929,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79429,7 +88948,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79446,7 +88967,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79463,7 +88986,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79480,7 +89005,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79497,7 +89024,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79514,7 +89043,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79531,7 +89062,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79548,7 +89081,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79565,7 +89100,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79582,7 +89119,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79599,7 +89138,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79616,7 +89157,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79633,7 +89176,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79650,7 +89195,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79667,7 +89214,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79684,7 +89233,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79701,7 +89252,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79718,7 +89271,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79735,7 +89290,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79752,7 +89309,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79769,7 +89328,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79786,7 +89347,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79803,7 +89366,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79820,7 +89385,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79837,7 +89404,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79854,7 +89423,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79871,7 +89442,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79888,7 +89461,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79905,7 +89480,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79922,7 +89499,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79939,7 +89518,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "server_fuzzer_one_entry", @@ -79956,7 +89537,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -79973,7 +89556,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -79990,7 +89575,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80007,7 +89594,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80024,7 +89613,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80041,7 +89632,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80058,7 +89651,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80075,7 +89670,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80092,7 +89689,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80109,7 +89708,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80126,7 +89727,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80143,7 +89746,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80160,7 +89765,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80177,7 +89784,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80194,7 +89803,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80211,7 +89822,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80228,7 +89841,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80245,7 +89860,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80262,7 +89879,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80279,7 +89898,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80296,7 +89917,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80313,7 +89936,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80330,7 +89955,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80347,7 +89974,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80364,7 +89993,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80381,7 +90012,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80398,7 +90031,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80415,7 +90050,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80432,7 +90069,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80449,7 +90088,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80466,7 +90107,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80483,7 +90126,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80500,7 +90145,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80517,7 +90164,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80534,7 +90183,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80551,7 +90202,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80568,7 +90221,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80585,7 +90240,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80602,7 +90259,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80619,7 +90278,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80636,7 +90297,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80653,7 +90316,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80670,7 +90335,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80687,7 +90354,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80704,7 +90373,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80721,7 +90392,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80738,7 +90411,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80755,7 +90430,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80772,7 +90449,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80789,7 +90468,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80806,7 +90487,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80823,7 +90506,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80840,7 +90525,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80857,7 +90544,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80874,7 +90563,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80891,7 +90582,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80908,7 +90601,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80925,7 +90620,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80942,7 +90639,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80959,7 +90658,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80976,7 +90677,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -80993,7 +90696,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", @@ -81010,7 +90715,9 @@ "linux" ], "cpu_cost": 0.1, - "exclude_configs": [], + "exclude_configs": [ + "tsan" + ], "flaky": false, "language": "c", "name": "uri_fuzzer_test_one_entry", diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln index 3a214a4ad4..a847add773 100644 --- a/vsprojects/buildtests_c.sln +++ b/vsprojects/buildtests_c.sln @@ -345,15 +345,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gpr_host_port_test", "vcxpr {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gpr_load_file_test", "vcxproj\test\gpr_load_file_test\gpr_load_file_test.vcxproj", "{B36DE5B4-8B73-1194-7539-974D9524D609}" - ProjectSection(myProperties) = preProject - lib = "False" - EndProjectSection - ProjectSection(ProjectDependencies) = postProject - {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} - {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gpr_log_test", "vcxproj\test\gpr_log_test\gpr_log_test.vcxproj", "{38797EE3-62CC-3CBF-18D5-009ED6DD0BEC}" ProjectSection(myProperties) = preProject lib = "False" @@ -1130,6 +1121,17 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lb_policies_test", "vcxproj {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "load_file_test", "vcxproj\test\load_file_test\load_file_test.vcxproj", "{DC76C089-0D55-DF19-7CCA-49DAE5D29E49}" + ProjectSection(myProperties) = preProject + lib = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "message_compress_test", "vcxproj\test\message_compress_test\message_compress_test.vcxproj", "{07170557-CCB0-D23C-8018-C2909D115DF9}" ProjectSection(myProperties) = preProject lib = "False" @@ -1216,6 +1218,17 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "secure_endpoint_test", "vcx {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sequential_connectivity_test", "vcxproj\test\sequential_connectivity_test\sequential_connectivity_test.vcxproj", "{F164F666-C866-D607-E1DF-E7BF3CF98255}" + ProjectSection(myProperties) = preProject + lib = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "server_chttp2_test", "vcxproj\test\server_chttp2_test\server_chttp2_test.vcxproj", "{BF9F909B-8266-6AAC-A81B-05F8210AA8CA}" ProjectSection(myProperties) = preProject lib = "False" @@ -1975,22 +1988,6 @@ Global {64728265-92F9-103E-6720-8935385458DF}.Release-DLL|Win32.Build.0 = Release|Win32 {64728265-92F9-103E-6720-8935385458DF}.Release-DLL|x64.ActiveCfg = Release|x64 {64728265-92F9-103E-6720-8935385458DF}.Release-DLL|x64.Build.0 = Release|x64 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Debug|Win32.ActiveCfg = Debug|Win32 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Debug|x64.ActiveCfg = Debug|x64 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Release|Win32.ActiveCfg = Release|Win32 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Release|x64.ActiveCfg = Release|x64 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Debug|Win32.Build.0 = Debug|Win32 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Debug|x64.Build.0 = Debug|x64 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Release|Win32.Build.0 = Release|Win32 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Release|x64.Build.0 = Release|x64 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Debug-DLL|Win32.Build.0 = Debug|Win32 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Debug-DLL|x64.ActiveCfg = Debug|x64 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Debug-DLL|x64.Build.0 = Debug|x64 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Release-DLL|Win32.ActiveCfg = Release|Win32 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Release-DLL|Win32.Build.0 = Release|Win32 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Release-DLL|x64.ActiveCfg = Release|x64 - {B36DE5B4-8B73-1194-7539-974D9524D609}.Release-DLL|x64.Build.0 = Release|x64 {38797EE3-62CC-3CBF-18D5-009ED6DD0BEC}.Debug|Win32.ActiveCfg = Debug|Win32 {38797EE3-62CC-3CBF-18D5-009ED6DD0BEC}.Debug|x64.ActiveCfg = Debug|x64 {38797EE3-62CC-3CBF-18D5-009ED6DD0BEC}.Release|Win32.ActiveCfg = Release|Win32 @@ -3127,6 +3124,22 @@ Global {62D58A08-3B5E-D6A8-ABBB-77995AA0A8C6}.Release-DLL|Win32.Build.0 = Release|Win32 {62D58A08-3B5E-D6A8-ABBB-77995AA0A8C6}.Release-DLL|x64.ActiveCfg = Release|x64 {62D58A08-3B5E-D6A8-ABBB-77995AA0A8C6}.Release-DLL|x64.Build.0 = Release|x64 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Debug|Win32.ActiveCfg = Debug|Win32 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Debug|x64.ActiveCfg = Debug|x64 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Release|Win32.ActiveCfg = Release|Win32 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Release|x64.ActiveCfg = Release|x64 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Debug|Win32.Build.0 = Debug|Win32 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Debug|x64.Build.0 = Debug|x64 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Release|Win32.Build.0 = Release|Win32 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Release|x64.Build.0 = Release|x64 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Debug-DLL|x64.Build.0 = Debug|x64 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Release-DLL|Win32.Build.0 = Release|Win32 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Release-DLL|x64.ActiveCfg = Release|x64 + {DC76C089-0D55-DF19-7CCA-49DAE5D29E49}.Release-DLL|x64.Build.0 = Release|x64 {07170557-CCB0-D23C-8018-C2909D115DF9}.Debug|Win32.ActiveCfg = Debug|Win32 {07170557-CCB0-D23C-8018-C2909D115DF9}.Debug|x64.ActiveCfg = Debug|x64 {07170557-CCB0-D23C-8018-C2909D115DF9}.Release|Win32.ActiveCfg = Release|Win32 @@ -3255,6 +3268,22 @@ Global {A7747106-A6BC-62D4-2A21-04A4F0CC2683}.Release-DLL|Win32.Build.0 = Release|Win32 {A7747106-A6BC-62D4-2A21-04A4F0CC2683}.Release-DLL|x64.ActiveCfg = Release|x64 {A7747106-A6BC-62D4-2A21-04A4F0CC2683}.Release-DLL|x64.Build.0 = Release|x64 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Debug|Win32.ActiveCfg = Debug|Win32 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Debug|x64.ActiveCfg = Debug|x64 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Release|Win32.ActiveCfg = Release|Win32 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Release|x64.ActiveCfg = Release|x64 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Debug|Win32.Build.0 = Debug|Win32 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Debug|x64.Build.0 = Debug|x64 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Release|Win32.Build.0 = Release|Win32 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Release|x64.Build.0 = Release|x64 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Debug-DLL|x64.Build.0 = Debug|x64 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Release-DLL|Win32.Build.0 = Release|Win32 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Release-DLL|x64.ActiveCfg = Release|x64 + {F164F666-C866-D607-E1DF-E7BF3CF98255}.Release-DLL|x64.Build.0 = Release|x64 {BF9F909B-8266-6AAC-A81B-05F8210AA8CA}.Debug|Win32.ActiveCfg = Debug|Win32 {BF9F909B-8266-6AAC-A81B-05F8210AA8CA}.Debug|x64.ActiveCfg = Debug|x64 {BF9F909B-8266-6AAC-A81B-05F8210AA8CA}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/vcxproj/gpr/gpr.vcxproj b/vsprojects/vcxproj/gpr/gpr.vcxproj index 2e403c2267..db8594e745 100644 --- a/vsprojects/vcxproj/gpr/gpr.vcxproj +++ b/vsprojects/vcxproj/gpr/gpr.vcxproj @@ -195,7 +195,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\backoff.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\block_annotate.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\env.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\load_file.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\murmur_hash.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\stack_lockfree.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\string.h" /> @@ -235,8 +234,6 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\host_port.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\load_file.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\log.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\log_android.c"> diff --git a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters index c952a78dab..9bab373513 100644 --- a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters +++ b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters @@ -46,9 +46,6 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\host_port.c"> <Filter>src\core\lib\support</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\load_file.c"> - <Filter>src\core\lib\support</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\log.c"> <Filter>src\core\lib\support</Filter> </ClCompile> @@ -281,9 +278,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\env.h"> <Filter>src\core\lib\support</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\load_file.h"> - <Filter>src\core\lib\support</Filter> - </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\murmur_hash.h"> <Filter>src\core\lib\support</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index ec0c984f2e..84e03f7056 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -316,6 +316,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\closure.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint.h" /> <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_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" /> @@ -325,6 +326,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_internal.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_posix.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set.h" /> @@ -412,6 +414,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\transport\handshake.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\transport\secure_endpoint.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\transport\security_connector.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\transport\tsi_error.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\util\b64.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\util\json_util.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\tsi\fake_transport_security.h" /> @@ -488,6 +491,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_windows.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\error.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"> @@ -506,6 +511,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_windows.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.c"> @@ -710,6 +717,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\transport\server_auth_filter.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\transport\tsi_error.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\util\b64.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\util\json_util.c"> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 273f73b2a3..0f817e0562 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -55,6 +55,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_windows.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\error.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> @@ -82,6 +85,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_windows.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -388,6 +394,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\transport\server_auth_filter.c"> <Filter>src\core\lib\security\transport</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\transport\tsi_error.c"> + <Filter>src\core\lib\security\transport</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\security\util\b64.c"> <Filter>src\core\lib\security\util</Filter> </ClCompile> @@ -689,6 +698,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\error.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> @@ -716,6 +728,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_posix.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.h"> + <Filter>src\core\lib\iomgr</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> @@ -977,6 +992,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\transport\security_connector.h"> <Filter>src\core\lib\security\transport</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\transport\tsi_error.h"> + <Filter>src\core\lib\security\transport</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\util\b64.h"> <Filter>src\core\lib\security\util</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index bba099d803..ac9bb186b7 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -305,6 +305,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\closure.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint.h" /> <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_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" /> @@ -314,6 +315,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_internal.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_posix.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set.h" /> @@ -456,6 +458,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_windows.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\error.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"> @@ -474,6 +478,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_windows.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\pollset_set_windows.c"> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 78a8777f94..1341474142 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -58,6 +58,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair_windows.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\error.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> @@ -85,6 +88,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_windows.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -599,6 +605,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\endpoint_pair.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\error.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> @@ -626,6 +635,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\iomgr_posix.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\load_file.h"> + <Filter>src\core\lib\iomgr</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\polling_entity.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> 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 22cd102d11..923c1d1ab4 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 @@ -225,6 +225,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\simple_request.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\streaming_error_response.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\trailing_metadata.c"> </ClCompile> </ItemGroup> 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 1bb208bba8..6533eaa057 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 @@ -112,6 +112,9 @@ <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\simple_request.c"> <Filter>test\core\end2end\tests</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\streaming_error_response.c"> + <Filter>test\core\end2end\tests</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\trailing_metadata.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 bfd437e871..0b859e25ce 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj @@ -227,6 +227,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\simple_request.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\streaming_error_response.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\trailing_metadata.c"> </ClCompile> </ItemGroup> 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 61c065f77c..ea1c5e3c23 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 @@ -115,6 +115,9 @@ <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\simple_request.c"> <Filter>test\core\end2end\tests</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\streaming_error_response.c"> + <Filter>test\core\end2end\tests</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\core\end2end\tests\trailing_metadata.c"> <Filter>test\core\end2end\tests</Filter> </ClCompile> diff --git a/vsprojects/vcxproj/test/gpr_load_file_test/gpr_load_file_test.vcxproj b/vsprojects/vcxproj/test/load_file_test/load_file_test.vcxproj index 4182969f50..52fbcccb04 100644 --- a/vsprojects/vcxproj/test/gpr_load_file_test/gpr_load_file_test.vcxproj +++ b/vsprojects/vcxproj/test/load_file_test/load_file_test.vcxproj @@ -20,7 +20,7 @@ </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> - <ProjectGuid>{B36DE5B4-8B73-1194-7539-974D9524D609}</ProjectGuid> + <ProjectGuid>{DC76C089-0D55-DF19-7CCA-49DAE5D29E49}</ProjectGuid> <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> </PropertyGroup> @@ -60,14 +60,14 @@ </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)'=='Debug'"> - <TargetName>gpr_load_file_test</TargetName> + <TargetName>load_file_test</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>gpr_load_file_test</TargetName> + <TargetName>load_file_test</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> @@ -158,10 +158,16 @@ </ItemDefinitionGroup> <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\test\core\support\load_file_test.c"> + <ClCompile Include="$(SolutionDir)\..\test\core\iomgr\load_file_test.c"> </ClCompile> </ItemGroup> <ItemGroup> + <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>{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> diff --git a/vsprojects/vcxproj/test/gpr_load_file_test/gpr_load_file_test.vcxproj.filters b/vsprojects/vcxproj/test/load_file_test/load_file_test.vcxproj.filters index 0edd0fe299..2c7934b5a1 100644 --- a/vsprojects/vcxproj/test/gpr_load_file_test/gpr_load_file_test.vcxproj.filters +++ b/vsprojects/vcxproj/test/load_file_test/load_file_test.vcxproj.filters @@ -1,20 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\test\core\support\load_file_test.c"> - <Filter>test\core\support</Filter> + <ClCompile Include="$(SolutionDir)\..\test\core\iomgr\load_file_test.c"> + <Filter>test\core\iomgr</Filter> </ClCompile> </ItemGroup> <ItemGroup> <Filter Include="test"> - <UniqueIdentifier>{7defb822-a4cc-a221-8900-1041a6c2c134}</UniqueIdentifier> + <UniqueIdentifier>{2d5b633c-62d3-3391-6d61-6521bf33e82d}</UniqueIdentifier> </Filter> <Filter Include="test\core"> - <UniqueIdentifier>{3f3cae49-1efd-7015-0fa1-5621168945d5}</UniqueIdentifier> + <UniqueIdentifier>{30d9062f-1ea2-7ee4-249c-0e4220cb5153}</UniqueIdentifier> </Filter> - <Filter Include="test\core\support"> - <UniqueIdentifier>{54e9b9b9-021a-139b-53f2-2f8b7173306c}</UniqueIdentifier> + <Filter Include="test\core\iomgr"> + <UniqueIdentifier>{a23b62a8-d5fc-3114-9aa2-8065e49214e8}</UniqueIdentifier> </Filter> </ItemGroup> </Project> diff --git a/vsprojects/vcxproj/test/sequential_connectivity_test/sequential_connectivity_test.vcxproj b/vsprojects/vcxproj/test/sequential_connectivity_test/sequential_connectivity_test.vcxproj new file mode 100644 index 0000000000..2367b3ea08 --- /dev/null +++ b/vsprojects/vcxproj/test/sequential_connectivity_test/sequential_connectivity_test.vcxproj @@ -0,0 +1,199 @@ +<?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>{F164F666-C866-D607-E1DF-E7BF3CF98255}</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\global.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)'=='Debug'"> + <TargetName>sequential_connectivity_test</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>sequential_connectivity_test</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\core\surface\sequential_connectivity_test.c"> + </ClCompile> + </ItemGroup> + <ItemGroup> + <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>{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/sequential_connectivity_test/sequential_connectivity_test.vcxproj.filters b/vsprojects/vcxproj/test/sequential_connectivity_test/sequential_connectivity_test.vcxproj.filters new file mode 100644 index 0000000000..e2b0d038a6 --- /dev/null +++ b/vsprojects/vcxproj/test/sequential_connectivity_test/sequential_connectivity_test.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\core\surface\sequential_connectivity_test.c"> + <Filter>test\core\surface</Filter> + </ClCompile> + </ItemGroup> + + <ItemGroup> + <Filter Include="test"> + <UniqueIdentifier>{432df9fa-0f9a-912a-8413-adc38d9c27ca}</UniqueIdentifier> + </Filter> + <Filter Include="test\core"> + <UniqueIdentifier>{42030451-0f78-add5-87be-b81131bcc0f5}</UniqueIdentifier> + </Filter> + <Filter Include="test\core\surface"> + <UniqueIdentifier>{34047576-8f8d-eeb2-d596-35be59941f62}</UniqueIdentifier> + </Filter> + </ItemGroup> +</Project> + |