grpc 1.18.0 → 1.22.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +4731 -7404
- data/etc/roots.pem +146 -0
- data/include/grpc/grpc.h +11 -6
- data/include/grpc/grpc_security.h +297 -4
- data/include/grpc/grpc_security_constants.h +1 -1
- data/include/grpc/impl/codegen/byte_buffer.h +13 -0
- data/include/grpc/impl/codegen/gpr_types.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +30 -7
- data/include/grpc/impl/codegen/port_platform.h +88 -7
- data/include/grpc/impl/codegen/slice.h +2 -22
- data/include/grpc/impl/codegen/status.h +2 -1
- data/include/grpc/impl/codegen/sync_posix.h +18 -0
- data/include/grpc/slice.h +3 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
- data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
- data/src/core/ext/filters/client_channel/client_channel.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
- data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
- data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
- data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
- data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
- data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
- data/src/core/ext/filters/client_channel/resolver.cc +54 -1
- data/src/core/ext/filters/client_channel/resolver.h +52 -23
- data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
- data/src/core/ext/filters/client_channel/server_address.cc +4 -54
- data/src/core/ext/filters/client_channel/server_address.h +1 -13
- data/src/core/ext/filters/client_channel/service_config.cc +329 -0
- data/src/core/ext/filters/client_channel/service_config.h +205 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
- data/src/core/ext/filters/client_channel/subchannel.h +295 -128
- data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
- data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
- data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
- data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
- data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
- data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
- data/src/core/lib/channel/channel_args.cc +2 -101
- data/src/core/lib/channel/channel_args.h +3 -37
- data/src/core/lib/channel/channel_stack.h +10 -6
- data/src/core/lib/channel/channel_trace.cc +4 -4
- data/src/core/lib/channel/channel_trace.h +4 -4
- data/src/core/lib/channel/channelz.cc +168 -38
- data/src/core/lib/channel/channelz.h +40 -44
- data/src/core/lib/channel/channelz_registry.cc +75 -107
- data/src/core/lib/channel/channelz_registry.h +10 -28
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/handshaker.cc +151 -218
- data/src/core/lib/channel/handshaker.h +110 -101
- data/src/core/lib/channel/handshaker_factory.h +11 -19
- data/src/core/lib/channel/handshaker_registry.cc +67 -51
- data/src/core/lib/channel/handshaker_registry.h +21 -16
- data/src/core/lib/compression/algorithm_metadata.h +3 -3
- data/src/core/lib/compression/compression.cc +14 -9
- data/src/core/lib/compression/compression_args.cc +127 -0
- data/src/core/lib/compression/compression_args.h +55 -0
- data/src/core/lib/compression/compression_internal.cc +16 -12
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/stream_compression.cc +3 -2
- data/src/core/lib/compression/stream_compression.h +2 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
- data/src/core/lib/debug/trace.cc +13 -7
- data/src/core/lib/debug/trace.h +14 -1
- data/src/core/lib/gpr/arena.h +13 -9
- data/src/core/lib/gpr/cpu_posix.cc +5 -3
- data/src/core/lib/gpr/env.h +3 -6
- data/src/core/lib/gpr/env_linux.cc +6 -1
- data/src/core/lib/gpr/env_posix.cc +5 -0
- data/src/core/lib/gpr/env_windows.cc +7 -5
- data/src/core/lib/gpr/log.cc +9 -13
- data/src/core/lib/gpr/log_posix.cc +2 -1
- data/src/core/lib/gpr/string.cc +20 -7
- data/src/core/lib/gpr/string.h +10 -3
- data/src/core/lib/gpr/sync_posix.cc +65 -4
- data/src/core/lib/gpr/time.cc +8 -0
- data/src/core/lib/gpr/time_posix.cc +21 -2
- data/src/core/lib/gprpp/arena.cc +103 -0
- data/src/core/lib/gprpp/arena.h +121 -0
- data/src/core/lib/gprpp/atomic.h +75 -5
- data/src/core/lib/gprpp/fork.cc +13 -32
- data/src/core/lib/gprpp/fork.h +5 -1
- data/src/core/lib/gprpp/global_config.h +96 -0
- data/src/core/lib/gprpp/global_config_custom.h +29 -0
- data/src/core/lib/gprpp/global_config_env.cc +135 -0
- data/src/core/lib/gprpp/global_config_env.h +131 -0
- data/src/core/lib/gprpp/global_config_generic.h +44 -0
- data/src/core/lib/gprpp/inlined_vector.h +8 -0
- data/src/core/lib/gprpp/map.h +436 -0
- data/src/core/lib/gprpp/memory.h +2 -2
- data/src/core/lib/gprpp/optional.h +48 -0
- data/src/core/lib/gprpp/orphanable.h +6 -5
- data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
- data/src/core/lib/gprpp/ref_counted.h +36 -17
- data/src/core/lib/gprpp/sync.h +126 -0
- data/src/core/lib/gprpp/thd.h +42 -7
- data/src/core/lib/gprpp/thd_posix.cc +31 -13
- data/src/core/lib/gprpp/thd_windows.cc +47 -34
- data/src/core/lib/http/httpcli.cc +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +13 -15
- data/src/core/lib/http/parser.cc +3 -2
- data/src/core/lib/http/parser.h +2 -1
- data/src/core/lib/iomgr/buffer_list.cc +182 -24
- data/src/core/lib/iomgr/buffer_list.h +72 -10
- data/src/core/lib/iomgr/call_combiner.cc +84 -90
- data/src/core/lib/iomgr/call_combiner.h +75 -82
- data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
- data/src/core/lib/iomgr/cfstream_handle.h +86 -0
- data/src/core/lib/iomgr/combiner.cc +11 -3
- data/src/core/lib/iomgr/combiner.h +1 -1
- data/src/core/lib/iomgr/endpoint.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +3 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
- data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
- data/src/core/lib/iomgr/error.cc +21 -17
- data/src/core/lib/iomgr/error.h +36 -6
- data/src/core/lib/iomgr/error_cfstream.cc +52 -0
- data/src/core/lib/iomgr/error_cfstream.h +31 -0
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
- data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
- data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
- data/src/core/lib/iomgr/ev_posix.cc +29 -19
- data/src/core/lib/iomgr/ev_posix.h +19 -3
- data/src/core/lib/iomgr/ev_windows.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -0
- data/src/core/lib/iomgr/exec_ctx.h +137 -8
- data/src/core/lib/iomgr/executor.cc +147 -95
- data/src/core/lib/iomgr/executor.h +55 -49
- data/src/core/lib/iomgr/fork_posix.cc +6 -5
- data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
- data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.h +105 -3
- data/src/core/lib/iomgr/iomgr.cc +20 -13
- data/src/core/lib/iomgr/iomgr.h +15 -0
- data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
- data/src/core/lib/iomgr/iomgr_custom.h +2 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
- data/src/core/lib/iomgr/iomgr_internal.h +12 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
- data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
- data/src/core/lib/iomgr/lockfree_event.cc +4 -4
- data/src/core/lib/iomgr/port.h +35 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
- data/src/core/lib/iomgr/resource_quota.cc +40 -37
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
- data/src/core/lib/iomgr/socket_windows.cc +19 -0
- data/src/core/lib/iomgr/socket_windows.h +8 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
- data/src/core/lib/iomgr/tcp_custom.cc +10 -14
- data/src/core/lib/iomgr/tcp_posix.cc +256 -140
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +24 -0
- data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
- data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
- data/src/core/lib/iomgr/tcp_uv.cc +5 -7
- data/src/core/lib/iomgr/tcp_windows.cc +8 -14
- data/src/core/lib/iomgr/timer.h +2 -1
- data/src/core/lib/iomgr/timer_generic.cc +16 -16
- data/src/core/lib/iomgr/timer_manager.cc +20 -11
- data/src/core/lib/iomgr/udp_server.cc +8 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
- data/src/core/lib/json/json.cc +1 -4
- data/src/core/lib/profiling/basic_timers.cc +10 -4
- data/src/core/lib/security/context/security_context.cc +6 -7
- data/src/core/lib/security/context/security_context.h +3 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
- data/src/core/lib/security/credentials/credentials.h +9 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/security_connector.cc +0 -1
- data/src/core/lib/security/security_connector/security_connector.h +3 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
- data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
- data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
- data/src/core/lib/security/transport/auth_filters.h +5 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
- data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
- data/src/core/lib/security/transport/security_handshaker.cc +271 -303
- data/src/core/lib/security/transport/security_handshaker.h +11 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
- data/src/core/lib/slice/b64.h +2 -2
- data/src/core/lib/slice/percent_encoding.cc +3 -3
- data/src/core/lib/slice/percent_encoding.h +3 -3
- data/src/core/lib/slice/slice.cc +174 -122
- data/src/core/lib/slice/slice_buffer.cc +54 -21
- data/src/core/lib/slice/slice_hash_table.h +4 -4
- data/src/core/lib/slice/slice_intern.cc +49 -107
- data/src/core/lib/slice/slice_internal.h +264 -3
- data/src/core/lib/slice/slice_string_helpers.cc +10 -1
- data/src/core/lib/slice/slice_string_helpers.h +3 -1
- data/src/core/lib/slice/slice_utils.h +50 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
- data/src/core/lib/surface/api_trace.h +1 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
- data/src/core/lib/surface/call.cc +67 -46
- data/src/core/lib/surface/call.h +7 -2
- data/src/core/lib/surface/call_details.cc +0 -1
- data/src/core/lib/surface/channel.cc +89 -97
- data/src/core/lib/surface/channel.h +60 -6
- data/src/core/lib/surface/channel_init.h +5 -0
- data/src/core/lib/surface/completion_queue.cc +221 -216
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +82 -33
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.cc +1 -1
- data/src/core/lib/surface/lame_client.cc +5 -7
- data/src/core/lib/surface/server.cc +42 -47
- data/src/core/lib/surface/validate_metadata.cc +14 -8
- data/src/core/lib/surface/validate_metadata.h +13 -2
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.cc +3 -3
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/connectivity_state.cc +10 -40
- data/src/core/lib/transport/connectivity_state.h +0 -8
- data/src/core/lib/transport/error_utils.cc +12 -0
- data/src/core/lib/transport/metadata.cc +258 -267
- data/src/core/lib/transport/metadata.h +227 -16
- data/src/core/lib/transport/metadata_batch.cc +1 -1
- data/src/core/lib/transport/metadata_batch.h +1 -1
- data/src/core/lib/transport/static_metadata.cc +477 -399
- data/src/core/lib/transport/static_metadata.h +273 -182
- data/src/core/lib/transport/status_metadata.cc +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/timeout_encoding.h +1 -1
- data/src/core/lib/transport/transport.cc +39 -72
- data/src/core/lib/transport/transport.h +59 -24
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
- data/src/core/tsi/fake_transport_security.cc +4 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +12 -10
- data/src/core/tsi/ssl_transport_security.h +24 -4
- data/src/ruby/bin/math_pb.rb +18 -16
- data/src/ruby/ext/grpc/extconf.rb +12 -4
- data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
- data/src/ruby/ext/grpc/rb_channel.c +14 -10
- data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
- data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc.c +23 -24
- data/src/ruby/ext/grpc/rb_grpc.h +4 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
- data/src/ruby/ext/grpc/rb_server.c +8 -4
- data/src/ruby/lib/grpc/errors.rb +22 -3
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
- data/src/ruby/spec/errors_spec.rb +141 -0
- data/third_party/cares/cares/ares.h +12 -0
- data/third_party/cares/cares/ares_create_query.c +5 -1
- data/third_party/cares/cares/ares_data.c +74 -73
- data/third_party/cares/cares/ares_destroy.c +6 -1
- data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
- data/third_party/cares/cares/ares_gethostbyname.c +15 -4
- data/third_party/cares/cares/ares_getnameinfo.c +11 -0
- data/third_party/cares/cares/ares_init.c +274 -173
- data/third_party/cares/cares/ares_library_init.c +21 -3
- data/third_party/cares/cares/ares_options.c +6 -2
- data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
- data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
- data/third_party/cares/cares/ares_platform.c +7 -0
- data/third_party/cares/cares/ares_private.h +19 -11
- data/third_party/cares/cares/ares_process.c +27 -2
- data/third_party/cares/cares/ares_rules.h +1 -1
- data/third_party/cares/cares/ares_search.c +7 -0
- data/third_party/cares/cares/ares_send.c +6 -0
- data/third_party/cares/cares/ares_strsplit.c +174 -0
- data/third_party/cares/cares/ares_strsplit.h +43 -0
- data/third_party/cares/cares/ares_version.h +4 -4
- data/third_party/cares/cares/config-win32.h +1 -1
- data/third_party/cares/cares/inet_ntop.c +2 -3
- data/third_party/cares/config_darwin/ares_config.h +3 -0
- data/third_party/cares/config_freebsd/ares_config.h +3 -0
- data/third_party/cares/config_linux/ares_config.h +3 -0
- data/third_party/cares/config_openbsd/ares_config.h +3 -0
- metadata +83 -48
- data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
- data/src/core/ext/filters/client_channel/request_routing.h +0 -177
- data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
- data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
- data/src/core/lib/channel/handshaker_factory.cc +0 -42
- data/src/core/lib/gpr/arena.cc +0 -192
- data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
- data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
- data/src/core/lib/transport/service_config.cc +0 -106
- data/src/core/lib/transport/service_config.h +0 -249
data/src/ruby/bin/math_pb.rb
CHANGED
@@ -4,22 +4,24 @@
|
|
4
4
|
require 'google/protobuf'
|
5
5
|
|
6
6
|
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
7
|
+
add_file("math.proto", :syntax => :proto3) do
|
8
|
+
add_message "math.DivArgs" do
|
9
|
+
optional :dividend, :int64, 1
|
10
|
+
optional :divisor, :int64, 2
|
11
|
+
end
|
12
|
+
add_message "math.DivReply" do
|
13
|
+
optional :quotient, :int64, 1
|
14
|
+
optional :remainder, :int64, 2
|
15
|
+
end
|
16
|
+
add_message "math.FibArgs" do
|
17
|
+
optional :limit, :int64, 1
|
18
|
+
end
|
19
|
+
add_message "math.Num" do
|
20
|
+
optional :num, :int64, 1
|
21
|
+
end
|
22
|
+
add_message "math.FibReply" do
|
23
|
+
optional :count, :int64, 1
|
24
|
+
end
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
@@ -24,10 +24,18 @@ grpc_config = ENV['GRPC_CONFIG'] || 'opt'
|
|
24
24
|
|
25
25
|
ENV['MACOSX_DEPLOYMENT_TARGET'] = '10.7'
|
26
26
|
|
27
|
-
ENV['AR']
|
28
|
-
ENV['
|
29
|
-
|
30
|
-
ENV['
|
27
|
+
if ENV['AR'].nil? || ENV['AR'].size == 0
|
28
|
+
ENV['AR'] = RbConfig::CONFIG['AR'] + ' rcs'
|
29
|
+
end
|
30
|
+
if ENV['CC'].nil? || ENV['CC'].size == 0
|
31
|
+
ENV['CC'] = RbConfig::CONFIG['CC']
|
32
|
+
end
|
33
|
+
if ENV['CXX'].nil? || ENV['CXX'].size == 0
|
34
|
+
ENV['CXX'] = RbConfig::CONFIG['CXX']
|
35
|
+
end
|
36
|
+
if ENV['LD'].nil? || ENV['LD'].size == 0
|
37
|
+
ENV['LD'] = ENV['CC']
|
38
|
+
end
|
31
39
|
|
32
40
|
ENV['AR'] = 'libtool -o' if RUBY_PLATFORM =~ /darwin/
|
33
41
|
|
@@ -134,8 +134,7 @@ static void grpc_rb_call_credentials_plugin_destroy(void* state) {
|
|
134
134
|
// Not sure what needs to be done here
|
135
135
|
}
|
136
136
|
|
137
|
-
|
138
|
-
static void grpc_rb_call_credentials_free(void* p) {
|
137
|
+
static void grpc_rb_call_credentials_free_internal(void* p) {
|
139
138
|
grpc_rb_call_credentials* wrapper;
|
140
139
|
if (p == NULL) {
|
141
140
|
return;
|
@@ -143,10 +142,15 @@ static void grpc_rb_call_credentials_free(void* p) {
|
|
143
142
|
wrapper = (grpc_rb_call_credentials*)p;
|
144
143
|
grpc_call_credentials_release(wrapper->wrapped);
|
145
144
|
wrapper->wrapped = NULL;
|
146
|
-
|
147
145
|
xfree(p);
|
148
146
|
}
|
149
147
|
|
148
|
+
/* Destroys the credentials instances. */
|
149
|
+
static void grpc_rb_call_credentials_free(void* p) {
|
150
|
+
grpc_rb_call_credentials_free_internal(p);
|
151
|
+
grpc_ruby_shutdown();
|
152
|
+
}
|
153
|
+
|
150
154
|
/* Protects the mark object from GC */
|
151
155
|
static void grpc_rb_call_credentials_mark(void* p) {
|
152
156
|
grpc_rb_call_credentials* wrapper = NULL;
|
@@ -175,6 +179,7 @@ static rb_data_type_t grpc_rb_call_credentials_data_type = {
|
|
175
179
|
/* Allocates CallCredentials instances.
|
176
180
|
Provides safe initial defaults for the instance fields. */
|
177
181
|
static VALUE grpc_rb_call_credentials_alloc(VALUE cls) {
|
182
|
+
grpc_ruby_init();
|
178
183
|
grpc_rb_call_credentials* wrapper = ALLOC(grpc_rb_call_credentials);
|
179
184
|
wrapper->wrapped = NULL;
|
180
185
|
wrapper->mark = Qnil;
|
@@ -212,8 +217,6 @@ static VALUE grpc_rb_call_credentials_init(VALUE self, VALUE proc) {
|
|
212
217
|
grpc_call_credentials* creds = NULL;
|
213
218
|
grpc_metadata_credentials_plugin plugin;
|
214
219
|
|
215
|
-
grpc_ruby_once_init();
|
216
|
-
|
217
220
|
TypedData_Get_Struct(self, grpc_rb_call_credentials,
|
218
221
|
&grpc_rb_call_credentials_data_type, wrapper);
|
219
222
|
|
@@ -143,26 +143,29 @@ static void* channel_safe_destroy_without_gil(void* arg) {
|
|
143
143
|
return NULL;
|
144
144
|
}
|
145
145
|
|
146
|
-
|
147
|
-
static void grpc_rb_channel_free(void* p) {
|
146
|
+
static void grpc_rb_channel_free_internal(void* p) {
|
148
147
|
grpc_rb_channel* ch = NULL;
|
149
148
|
if (p == NULL) {
|
150
149
|
return;
|
151
150
|
};
|
152
151
|
ch = (grpc_rb_channel*)p;
|
153
|
-
|
154
152
|
if (ch->bg_wrapped != NULL) {
|
155
153
|
/* assumption made here: it's ok to directly gpr_mu_lock the global
|
156
|
-
* connection polling mutex
|
154
|
+
* connection polling mutex because we're in a finalizer,
|
157
155
|
* and we can count on this thread to not be interrupted or
|
158
156
|
* yield the gil. */
|
159
157
|
grpc_rb_channel_safe_destroy(ch->bg_wrapped);
|
160
158
|
ch->bg_wrapped = NULL;
|
161
159
|
}
|
162
|
-
|
163
160
|
xfree(p);
|
164
161
|
}
|
165
162
|
|
163
|
+
/* Destroys Channel instances. */
|
164
|
+
static void grpc_rb_channel_free(void* p) {
|
165
|
+
grpc_rb_channel_free_internal(p);
|
166
|
+
grpc_ruby_shutdown();
|
167
|
+
}
|
168
|
+
|
166
169
|
/* Protects the mark object from GC */
|
167
170
|
static void grpc_rb_channel_mark(void* p) {
|
168
171
|
grpc_rb_channel* channel = NULL;
|
@@ -189,6 +192,7 @@ static rb_data_type_t grpc_channel_data_type = {"grpc_channel",
|
|
189
192
|
|
190
193
|
/* Allocates grpc_rb_channel instances. */
|
191
194
|
static VALUE grpc_rb_channel_alloc(VALUE cls) {
|
195
|
+
grpc_ruby_init();
|
192
196
|
grpc_rb_channel* wrapper = ALLOC(grpc_rb_channel);
|
193
197
|
wrapper->bg_wrapped = NULL;
|
194
198
|
wrapper->credentials = Qnil;
|
@@ -216,7 +220,6 @@ static VALUE grpc_rb_channel_init(int argc, VALUE* argv, VALUE self) {
|
|
216
220
|
int stop_waiting_for_thread_start = 0;
|
217
221
|
MEMZERO(&args, grpc_channel_args, 1);
|
218
222
|
|
219
|
-
grpc_ruby_once_init();
|
220
223
|
grpc_ruby_fork_guard();
|
221
224
|
rb_thread_call_without_gvl(
|
222
225
|
wait_until_channel_polling_thread_started_no_gil,
|
@@ -292,7 +295,7 @@ static void* get_state_without_gil(void* arg) {
|
|
292
295
|
Indicates the current state of the channel, whose value is one of the
|
293
296
|
constants defined in GRPC::Core::ConnectivityStates.
|
294
297
|
|
295
|
-
It also tries to connect if the
|
298
|
+
It also tries to connect if the channel is idle in the second form. */
|
296
299
|
static VALUE grpc_rb_channel_get_connectivity_state(int argc, VALUE* argv,
|
297
300
|
VALUE self) {
|
298
301
|
VALUE try_to_connect_param = Qfalse;
|
@@ -327,8 +330,8 @@ static void* wait_for_watch_state_op_complete_without_gvl(void* arg) {
|
|
327
330
|
void* success = (void*)0;
|
328
331
|
|
329
332
|
gpr_mu_lock(&global_connection_polling_mu);
|
330
|
-
//
|
331
|
-
// been shut down.
|
333
|
+
// it's unsafe to do a "watch" after "channel polling abort" because the cq
|
334
|
+
// has been shut down.
|
332
335
|
if (abort_channel_polling || stack->bg_wrapped->channel_destroyed) {
|
333
336
|
gpr_mu_unlock(&global_connection_polling_mu);
|
334
337
|
return (void*)0;
|
@@ -682,9 +685,10 @@ static VALUE run_poll_channels_loop(VALUE arg) {
|
|
682
685
|
gpr_log(
|
683
686
|
GPR_DEBUG,
|
684
687
|
"GRPC_RUBY: run_poll_channels_loop - create connection polling thread");
|
688
|
+
grpc_ruby_init();
|
685
689
|
rb_thread_call_without_gvl(run_poll_channels_loop_no_gil, NULL,
|
686
690
|
run_poll_channels_loop_unblocking_func, NULL);
|
687
|
-
|
691
|
+
grpc_ruby_shutdown();
|
688
692
|
return Qnil;
|
689
693
|
}
|
690
694
|
|
@@ -48,8 +48,7 @@ typedef struct grpc_rb_channel_credentials {
|
|
48
48
|
grpc_channel_credentials* wrapped;
|
49
49
|
} grpc_rb_channel_credentials;
|
50
50
|
|
51
|
-
|
52
|
-
static void grpc_rb_channel_credentials_free(void* p) {
|
51
|
+
static void grpc_rb_channel_credentials_free_internal(void* p) {
|
53
52
|
grpc_rb_channel_credentials* wrapper = NULL;
|
54
53
|
if (p == NULL) {
|
55
54
|
return;
|
@@ -61,6 +60,12 @@ static void grpc_rb_channel_credentials_free(void* p) {
|
|
61
60
|
xfree(p);
|
62
61
|
}
|
63
62
|
|
63
|
+
/* Destroys the credentials instances. */
|
64
|
+
static void grpc_rb_channel_credentials_free(void* p) {
|
65
|
+
grpc_rb_channel_credentials_free_internal(p);
|
66
|
+
grpc_ruby_shutdown();
|
67
|
+
}
|
68
|
+
|
64
69
|
/* Protects the mark object from GC */
|
65
70
|
static void grpc_rb_channel_credentials_mark(void* p) {
|
66
71
|
grpc_rb_channel_credentials* wrapper = NULL;
|
@@ -90,6 +95,7 @@ static rb_data_type_t grpc_rb_channel_credentials_data_type = {
|
|
90
95
|
/* Allocates ChannelCredential instances.
|
91
96
|
Provides safe initial defaults for the instance fields. */
|
92
97
|
static VALUE grpc_rb_channel_credentials_alloc(VALUE cls) {
|
98
|
+
grpc_ruby_init();
|
93
99
|
grpc_rb_channel_credentials* wrapper = ALLOC(grpc_rb_channel_credentials);
|
94
100
|
wrapper->wrapped = NULL;
|
95
101
|
wrapper->mark = Qnil;
|
@@ -147,8 +153,6 @@ static VALUE grpc_rb_channel_credentials_init(int argc, VALUE* argv,
|
|
147
153
|
const char* pem_root_certs_cstr = NULL;
|
148
154
|
MEMZERO(&key_cert_pair, grpc_ssl_pem_key_cert_pair, 1);
|
149
155
|
|
150
|
-
grpc_ruby_once_init();
|
151
|
-
|
152
156
|
/* "03" == no mandatory arg, 3 optional */
|
153
157
|
rb_scan_args(argc, argv, "03", &pem_root_certs, &pem_private_key,
|
154
158
|
&pem_cert_chain);
|
@@ -52,23 +52,26 @@ typedef struct grpc_rb_compression_options {
|
|
52
52
|
grpc_compression_options* wrapped;
|
53
53
|
} grpc_rb_compression_options;
|
54
54
|
|
55
|
-
|
56
|
-
* wrapped grpc compression options. */
|
57
|
-
static void grpc_rb_compression_options_free(void* p) {
|
55
|
+
static void grpc_rb_compression_options_free_internal(void* p) {
|
58
56
|
grpc_rb_compression_options* wrapper = NULL;
|
59
57
|
if (p == NULL) {
|
60
58
|
return;
|
61
59
|
};
|
62
60
|
wrapper = (grpc_rb_compression_options*)p;
|
63
|
-
|
64
61
|
if (wrapper->wrapped != NULL) {
|
65
62
|
gpr_free(wrapper->wrapped);
|
66
63
|
wrapper->wrapped = NULL;
|
67
64
|
}
|
68
|
-
|
69
65
|
xfree(p);
|
70
66
|
}
|
71
67
|
|
68
|
+
/* Destroys the compression options instances and free the
|
69
|
+
* wrapped grpc compression options. */
|
70
|
+
static void grpc_rb_compression_options_free(void* p) {
|
71
|
+
grpc_rb_compression_options_free_internal(p);
|
72
|
+
grpc_ruby_shutdown();
|
73
|
+
}
|
74
|
+
|
72
75
|
/* Ruby recognized data type for the CompressionOptions class. */
|
73
76
|
static rb_data_type_t grpc_rb_compression_options_data_type = {
|
74
77
|
"grpc_compression_options",
|
@@ -87,10 +90,9 @@ static rb_data_type_t grpc_rb_compression_options_data_type = {
|
|
87
90
|
Allocate the wrapped grpc compression options and
|
88
91
|
initialize it here too. */
|
89
92
|
static VALUE grpc_rb_compression_options_alloc(VALUE cls) {
|
93
|
+
grpc_ruby_init();
|
90
94
|
grpc_rb_compression_options* wrapper = NULL;
|
91
95
|
|
92
|
-
grpc_ruby_once_init();
|
93
|
-
|
94
96
|
wrapper = gpr_malloc(sizeof(grpc_rb_compression_options));
|
95
97
|
wrapper->wrapped = NULL;
|
96
98
|
wrapper->wrapped = gpr_malloc(sizeof(grpc_compression_options));
|
@@ -115,6 +115,7 @@ static void grpc_rb_event_unblocking_func(void* arg) {
|
|
115
115
|
static VALUE grpc_rb_event_thread(VALUE arg) {
|
116
116
|
grpc_rb_event* event;
|
117
117
|
(void)arg;
|
118
|
+
grpc_ruby_init();
|
118
119
|
while (true) {
|
119
120
|
event = (grpc_rb_event*)rb_thread_call_without_gvl(
|
120
121
|
grpc_rb_wait_for_event_no_gil, NULL, grpc_rb_event_unblocking_func,
|
@@ -128,6 +129,7 @@ static VALUE grpc_rb_event_thread(VALUE arg) {
|
|
128
129
|
}
|
129
130
|
}
|
130
131
|
grpc_rb_event_queue_destroy();
|
132
|
+
grpc_ruby_shutdown();
|
131
133
|
return Qnil;
|
132
134
|
}
|
133
135
|
|
data/src/ruby/ext/grpc/rb_grpc.c
CHANGED
@@ -276,10 +276,6 @@ static bool grpc_ruby_forked_after_init(void) {
|
|
276
276
|
}
|
277
277
|
#endif
|
278
278
|
|
279
|
-
static void grpc_rb_shutdown(void) {
|
280
|
-
if (!grpc_ruby_forked_after_init()) grpc_shutdown();
|
281
|
-
}
|
282
|
-
|
283
279
|
/* Initialize the GRPC module structs */
|
284
280
|
|
285
281
|
/* grpc_rb_sNewServerRpc is the struct that holds new server rpc details. */
|
@@ -298,12 +294,6 @@ VALUE sym_metadata = Qundef;
|
|
298
294
|
|
299
295
|
static gpr_once g_once_init = GPR_ONCE_INIT;
|
300
296
|
|
301
|
-
static void grpc_ruby_once_init_internal() {
|
302
|
-
grpc_ruby_set_init_pid();
|
303
|
-
grpc_init();
|
304
|
-
atexit(grpc_rb_shutdown);
|
305
|
-
}
|
306
|
-
|
307
297
|
void grpc_ruby_fork_guard() {
|
308
298
|
if (grpc_ruby_forked_after_init()) {
|
309
299
|
rb_raise(rb_eRuntimeError, "grpc cannot be used before and after forking");
|
@@ -313,20 +303,8 @@ void grpc_ruby_fork_guard() {
|
|
313
303
|
static VALUE bg_thread_init_rb_mu = Qundef;
|
314
304
|
static int bg_thread_init_done = 0;
|
315
305
|
|
316
|
-
void
|
317
|
-
|
318
|
-
* blue moon, and some users are getting it repeatedly. See the discussions
|
319
|
-
* - https://github.com/grpc/grpc/pull/5337
|
320
|
-
* - https://bugs.ruby-lang.org/issues/12095
|
321
|
-
*
|
322
|
-
* In order to still be able to handle the (unlikely) situation where the
|
323
|
-
* extension is loaded by a first Ruby VM that is subsequently destroyed,
|
324
|
-
* then loaded again by another VM within the same process, we need to
|
325
|
-
* schedule our initialization and destruction only once.
|
326
|
-
*/
|
327
|
-
gpr_once_init(&g_once_init, grpc_ruby_once_init_internal);
|
328
|
-
|
329
|
-
// Avoid calling calling into ruby library (when creating threads here)
|
306
|
+
static void grpc_ruby_init_threads() {
|
307
|
+
// Avoid calling into ruby library (when creating threads here)
|
330
308
|
// in gpr_once_init. In general, it appears to be unsafe to call
|
331
309
|
// into the ruby library while holding a non-ruby mutex, because a gil yield
|
332
310
|
// could end up trying to lock onto that same mutex and deadlocking.
|
@@ -339,6 +317,27 @@ void grpc_ruby_once_init() {
|
|
339
317
|
rb_mutex_unlock(bg_thread_init_rb_mu);
|
340
318
|
}
|
341
319
|
|
320
|
+
static int64_t g_grpc_ruby_init_count;
|
321
|
+
|
322
|
+
void grpc_ruby_init() {
|
323
|
+
gpr_once_init(&g_once_init, grpc_ruby_set_init_pid);
|
324
|
+
grpc_init();
|
325
|
+
grpc_ruby_init_threads();
|
326
|
+
// (only gpr_log after logging has been initialized)
|
327
|
+
gpr_log(GPR_DEBUG,
|
328
|
+
"GRPC_RUBY: grpc_ruby_init - prev g_grpc_ruby_init_count:%" PRId64,
|
329
|
+
g_grpc_ruby_init_count++);
|
330
|
+
}
|
331
|
+
|
332
|
+
void grpc_ruby_shutdown() {
|
333
|
+
GPR_ASSERT(g_grpc_ruby_init_count > 0);
|
334
|
+
if (!grpc_ruby_forked_after_init()) grpc_shutdown();
|
335
|
+
gpr_log(
|
336
|
+
GPR_DEBUG,
|
337
|
+
"GRPC_RUBY: grpc_ruby_shutdown - prev g_grpc_ruby_init_count:%" PRId64,
|
338
|
+
g_grpc_ruby_init_count--);
|
339
|
+
}
|
340
|
+
|
342
341
|
void Init_grpc_c() {
|
343
342
|
if (!grpc_rb_load_core()) {
|
344
343
|
rb_raise(rb_eLoadError, "Couldn't find or load gRPC's dynamic C core");
|
data/src/ruby/ext/grpc/rb_grpc.h
CHANGED
@@ -67,8 +67,10 @@ VALUE grpc_rb_cannot_init_copy(VALUE copy, VALUE self);
|
|
67
67
|
/* grpc_rb_time_timeval creates a gpr_timespec from a ruby time object. */
|
68
68
|
gpr_timespec grpc_rb_time_timeval(VALUE time, int interval);
|
69
69
|
|
70
|
-
void grpc_ruby_once_init();
|
71
|
-
|
72
70
|
void grpc_ruby_fork_guard();
|
73
71
|
|
72
|
+
void grpc_ruby_init();
|
73
|
+
|
74
|
+
void grpc_ruby_shutdown();
|
75
|
+
|
74
76
|
#endif /* GRPC_RB_H_ */
|
@@ -39,6 +39,7 @@ grpc_register_plugin_type grpc_register_plugin_import;
|
|
39
39
|
grpc_init_type grpc_init_import;
|
40
40
|
grpc_shutdown_type grpc_shutdown_import;
|
41
41
|
grpc_is_initialized_type grpc_is_initialized_import;
|
42
|
+
grpc_shutdown_blocking_type grpc_shutdown_blocking_import;
|
42
43
|
grpc_version_string_type grpc_version_string_import;
|
43
44
|
grpc_g_stands_for_type grpc_g_stands_for_import;
|
44
45
|
grpc_completion_queue_factory_lookup_type grpc_completion_queue_factory_lookup_import;
|
@@ -123,6 +124,7 @@ grpc_channel_credentials_release_type grpc_channel_credentials_release_import;
|
|
123
124
|
grpc_google_default_credentials_create_type grpc_google_default_credentials_create_import;
|
124
125
|
grpc_set_ssl_roots_override_callback_type grpc_set_ssl_roots_override_callback_import;
|
125
126
|
grpc_ssl_credentials_create_type grpc_ssl_credentials_create_import;
|
127
|
+
grpc_ssl_credentials_create_ex_type grpc_ssl_credentials_create_ex_import;
|
126
128
|
grpc_call_credentials_release_type grpc_call_credentials_release_import;
|
127
129
|
grpc_composite_channel_credentials_create_type grpc_composite_channel_credentials_create_import;
|
128
130
|
grpc_composite_call_credentials_create_type grpc_composite_call_credentials_create_import;
|
@@ -154,6 +156,15 @@ grpc_alts_credentials_create_type grpc_alts_credentials_create_import;
|
|
154
156
|
grpc_alts_server_credentials_create_type grpc_alts_server_credentials_create_import;
|
155
157
|
grpc_local_credentials_create_type grpc_local_credentials_create_import;
|
156
158
|
grpc_local_server_credentials_create_type grpc_local_server_credentials_create_import;
|
159
|
+
grpc_tls_credentials_options_create_type grpc_tls_credentials_options_create_import;
|
160
|
+
grpc_tls_credentials_options_set_cert_request_type_type grpc_tls_credentials_options_set_cert_request_type_import;
|
161
|
+
grpc_tls_credentials_options_set_key_materials_config_type grpc_tls_credentials_options_set_key_materials_config_import;
|
162
|
+
grpc_tls_credentials_options_set_credential_reload_config_type grpc_tls_credentials_options_set_credential_reload_config_import;
|
163
|
+
grpc_tls_credentials_options_set_server_authorization_check_config_type grpc_tls_credentials_options_set_server_authorization_check_config_import;
|
164
|
+
grpc_tls_key_materials_config_create_type grpc_tls_key_materials_config_create_import;
|
165
|
+
grpc_tls_key_materials_config_set_key_materials_type grpc_tls_key_materials_config_set_key_materials_import;
|
166
|
+
grpc_tls_credential_reload_config_create_type grpc_tls_credential_reload_config_create_import;
|
167
|
+
grpc_tls_server_authorization_check_config_create_type grpc_tls_server_authorization_check_config_create_import;
|
157
168
|
grpc_raw_byte_buffer_create_type grpc_raw_byte_buffer_create_import;
|
158
169
|
grpc_raw_compressed_byte_buffer_create_type grpc_raw_compressed_byte_buffer_create_import;
|
159
170
|
grpc_byte_buffer_copy_type grpc_byte_buffer_copy_import;
|
@@ -162,6 +173,7 @@ grpc_byte_buffer_destroy_type grpc_byte_buffer_destroy_import;
|
|
162
173
|
grpc_byte_buffer_reader_init_type grpc_byte_buffer_reader_init_import;
|
163
174
|
grpc_byte_buffer_reader_destroy_type grpc_byte_buffer_reader_destroy_import;
|
164
175
|
grpc_byte_buffer_reader_next_type grpc_byte_buffer_reader_next_import;
|
176
|
+
grpc_byte_buffer_reader_peek_type grpc_byte_buffer_reader_peek_import;
|
165
177
|
grpc_byte_buffer_reader_readall_type grpc_byte_buffer_reader_readall_import;
|
166
178
|
grpc_raw_byte_buffer_from_reader_type grpc_raw_byte_buffer_from_reader_import;
|
167
179
|
gpr_log_severity_string_type gpr_log_severity_string_import;
|
@@ -297,6 +309,7 @@ void grpc_rb_load_imports(HMODULE library) {
|
|
297
309
|
grpc_init_import = (grpc_init_type) GetProcAddress(library, "grpc_init");
|
298
310
|
grpc_shutdown_import = (grpc_shutdown_type) GetProcAddress(library, "grpc_shutdown");
|
299
311
|
grpc_is_initialized_import = (grpc_is_initialized_type) GetProcAddress(library, "grpc_is_initialized");
|
312
|
+
grpc_shutdown_blocking_import = (grpc_shutdown_blocking_type) GetProcAddress(library, "grpc_shutdown_blocking");
|
300
313
|
grpc_version_string_import = (grpc_version_string_type) GetProcAddress(library, "grpc_version_string");
|
301
314
|
grpc_g_stands_for_import = (grpc_g_stands_for_type) GetProcAddress(library, "grpc_g_stands_for");
|
302
315
|
grpc_completion_queue_factory_lookup_import = (grpc_completion_queue_factory_lookup_type) GetProcAddress(library, "grpc_completion_queue_factory_lookup");
|
@@ -381,6 +394,7 @@ void grpc_rb_load_imports(HMODULE library) {
|
|
381
394
|
grpc_google_default_credentials_create_import = (grpc_google_default_credentials_create_type) GetProcAddress(library, "grpc_google_default_credentials_create");
|
382
395
|
grpc_set_ssl_roots_override_callback_import = (grpc_set_ssl_roots_override_callback_type) GetProcAddress(library, "grpc_set_ssl_roots_override_callback");
|
383
396
|
grpc_ssl_credentials_create_import = (grpc_ssl_credentials_create_type) GetProcAddress(library, "grpc_ssl_credentials_create");
|
397
|
+
grpc_ssl_credentials_create_ex_import = (grpc_ssl_credentials_create_ex_type) GetProcAddress(library, "grpc_ssl_credentials_create_ex");
|
384
398
|
grpc_call_credentials_release_import = (grpc_call_credentials_release_type) GetProcAddress(library, "grpc_call_credentials_release");
|
385
399
|
grpc_composite_channel_credentials_create_import = (grpc_composite_channel_credentials_create_type) GetProcAddress(library, "grpc_composite_channel_credentials_create");
|
386
400
|
grpc_composite_call_credentials_create_import = (grpc_composite_call_credentials_create_type) GetProcAddress(library, "grpc_composite_call_credentials_create");
|
@@ -412,6 +426,15 @@ void grpc_rb_load_imports(HMODULE library) {
|
|
412
426
|
grpc_alts_server_credentials_create_import = (grpc_alts_server_credentials_create_type) GetProcAddress(library, "grpc_alts_server_credentials_create");
|
413
427
|
grpc_local_credentials_create_import = (grpc_local_credentials_create_type) GetProcAddress(library, "grpc_local_credentials_create");
|
414
428
|
grpc_local_server_credentials_create_import = (grpc_local_server_credentials_create_type) GetProcAddress(library, "grpc_local_server_credentials_create");
|
429
|
+
grpc_tls_credentials_options_create_import = (grpc_tls_credentials_options_create_type) GetProcAddress(library, "grpc_tls_credentials_options_create");
|
430
|
+
grpc_tls_credentials_options_set_cert_request_type_import = (grpc_tls_credentials_options_set_cert_request_type_type) GetProcAddress(library, "grpc_tls_credentials_options_set_cert_request_type");
|
431
|
+
grpc_tls_credentials_options_set_key_materials_config_import = (grpc_tls_credentials_options_set_key_materials_config_type) GetProcAddress(library, "grpc_tls_credentials_options_set_key_materials_config");
|
432
|
+
grpc_tls_credentials_options_set_credential_reload_config_import = (grpc_tls_credentials_options_set_credential_reload_config_type) GetProcAddress(library, "grpc_tls_credentials_options_set_credential_reload_config");
|
433
|
+
grpc_tls_credentials_options_set_server_authorization_check_config_import = (grpc_tls_credentials_options_set_server_authorization_check_config_type) GetProcAddress(library, "grpc_tls_credentials_options_set_server_authorization_check_config");
|
434
|
+
grpc_tls_key_materials_config_create_import = (grpc_tls_key_materials_config_create_type) GetProcAddress(library, "grpc_tls_key_materials_config_create");
|
435
|
+
grpc_tls_key_materials_config_set_key_materials_import = (grpc_tls_key_materials_config_set_key_materials_type) GetProcAddress(library, "grpc_tls_key_materials_config_set_key_materials");
|
436
|
+
grpc_tls_credential_reload_config_create_import = (grpc_tls_credential_reload_config_create_type) GetProcAddress(library, "grpc_tls_credential_reload_config_create");
|
437
|
+
grpc_tls_server_authorization_check_config_create_import = (grpc_tls_server_authorization_check_config_create_type) GetProcAddress(library, "grpc_tls_server_authorization_check_config_create");
|
415
438
|
grpc_raw_byte_buffer_create_import = (grpc_raw_byte_buffer_create_type) GetProcAddress(library, "grpc_raw_byte_buffer_create");
|
416
439
|
grpc_raw_compressed_byte_buffer_create_import = (grpc_raw_compressed_byte_buffer_create_type) GetProcAddress(library, "grpc_raw_compressed_byte_buffer_create");
|
417
440
|
grpc_byte_buffer_copy_import = (grpc_byte_buffer_copy_type) GetProcAddress(library, "grpc_byte_buffer_copy");
|
@@ -420,6 +443,7 @@ void grpc_rb_load_imports(HMODULE library) {
|
|
420
443
|
grpc_byte_buffer_reader_init_import = (grpc_byte_buffer_reader_init_type) GetProcAddress(library, "grpc_byte_buffer_reader_init");
|
421
444
|
grpc_byte_buffer_reader_destroy_import = (grpc_byte_buffer_reader_destroy_type) GetProcAddress(library, "grpc_byte_buffer_reader_destroy");
|
422
445
|
grpc_byte_buffer_reader_next_import = (grpc_byte_buffer_reader_next_type) GetProcAddress(library, "grpc_byte_buffer_reader_next");
|
446
|
+
grpc_byte_buffer_reader_peek_import = (grpc_byte_buffer_reader_peek_type) GetProcAddress(library, "grpc_byte_buffer_reader_peek");
|
423
447
|
grpc_byte_buffer_reader_readall_import = (grpc_byte_buffer_reader_readall_type) GetProcAddress(library, "grpc_byte_buffer_reader_readall");
|
424
448
|
grpc_raw_byte_buffer_from_reader_import = (grpc_raw_byte_buffer_from_reader_type) GetProcAddress(library, "grpc_raw_byte_buffer_from_reader");
|
425
449
|
gpr_log_severity_string_import = (gpr_log_severity_string_type) GetProcAddress(library, "gpr_log_severity_string");
|
@@ -92,6 +92,9 @@ extern grpc_shutdown_type grpc_shutdown_import;
|
|
92
92
|
typedef int(*grpc_is_initialized_type)(void);
|
93
93
|
extern grpc_is_initialized_type grpc_is_initialized_import;
|
94
94
|
#define grpc_is_initialized grpc_is_initialized_import
|
95
|
+
typedef void(*grpc_shutdown_blocking_type)(void);
|
96
|
+
extern grpc_shutdown_blocking_type grpc_shutdown_blocking_import;
|
97
|
+
#define grpc_shutdown_blocking grpc_shutdown_blocking_import
|
95
98
|
typedef const char*(*grpc_version_string_type)(void);
|
96
99
|
extern grpc_version_string_type grpc_version_string_import;
|
97
100
|
#define grpc_version_string grpc_version_string_import
|
@@ -344,6 +347,9 @@ extern grpc_set_ssl_roots_override_callback_type grpc_set_ssl_roots_override_cal
|
|
344
347
|
typedef grpc_channel_credentials*(*grpc_ssl_credentials_create_type)(const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair, const verify_peer_options* verify_options, void* reserved);
|
345
348
|
extern grpc_ssl_credentials_create_type grpc_ssl_credentials_create_import;
|
346
349
|
#define grpc_ssl_credentials_create grpc_ssl_credentials_create_import
|
350
|
+
typedef grpc_channel_credentials*(*grpc_ssl_credentials_create_ex_type)(const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair, const grpc_ssl_verify_peer_options* verify_options, void* reserved);
|
351
|
+
extern grpc_ssl_credentials_create_ex_type grpc_ssl_credentials_create_ex_import;
|
352
|
+
#define grpc_ssl_credentials_create_ex grpc_ssl_credentials_create_ex_import
|
347
353
|
typedef void(*grpc_call_credentials_release_type)(grpc_call_credentials* creds);
|
348
354
|
extern grpc_call_credentials_release_type grpc_call_credentials_release_import;
|
349
355
|
#define grpc_call_credentials_release grpc_call_credentials_release_import
|
@@ -437,6 +443,33 @@ extern grpc_local_credentials_create_type grpc_local_credentials_create_import;
|
|
437
443
|
typedef grpc_server_credentials*(*grpc_local_server_credentials_create_type)(grpc_local_connect_type type);
|
438
444
|
extern grpc_local_server_credentials_create_type grpc_local_server_credentials_create_import;
|
439
445
|
#define grpc_local_server_credentials_create grpc_local_server_credentials_create_import
|
446
|
+
typedef grpc_tls_credentials_options*(*grpc_tls_credentials_options_create_type)(void);
|
447
|
+
extern grpc_tls_credentials_options_create_type grpc_tls_credentials_options_create_import;
|
448
|
+
#define grpc_tls_credentials_options_create grpc_tls_credentials_options_create_import
|
449
|
+
typedef int(*grpc_tls_credentials_options_set_cert_request_type_type)(grpc_tls_credentials_options* options, grpc_ssl_client_certificate_request_type type);
|
450
|
+
extern grpc_tls_credentials_options_set_cert_request_type_type grpc_tls_credentials_options_set_cert_request_type_import;
|
451
|
+
#define grpc_tls_credentials_options_set_cert_request_type grpc_tls_credentials_options_set_cert_request_type_import
|
452
|
+
typedef int(*grpc_tls_credentials_options_set_key_materials_config_type)(grpc_tls_credentials_options* options, grpc_tls_key_materials_config* config);
|
453
|
+
extern grpc_tls_credentials_options_set_key_materials_config_type grpc_tls_credentials_options_set_key_materials_config_import;
|
454
|
+
#define grpc_tls_credentials_options_set_key_materials_config grpc_tls_credentials_options_set_key_materials_config_import
|
455
|
+
typedef int(*grpc_tls_credentials_options_set_credential_reload_config_type)(grpc_tls_credentials_options* options, grpc_tls_credential_reload_config* config);
|
456
|
+
extern grpc_tls_credentials_options_set_credential_reload_config_type grpc_tls_credentials_options_set_credential_reload_config_import;
|
457
|
+
#define grpc_tls_credentials_options_set_credential_reload_config grpc_tls_credentials_options_set_credential_reload_config_import
|
458
|
+
typedef int(*grpc_tls_credentials_options_set_server_authorization_check_config_type)(grpc_tls_credentials_options* options, grpc_tls_server_authorization_check_config* config);
|
459
|
+
extern grpc_tls_credentials_options_set_server_authorization_check_config_type grpc_tls_credentials_options_set_server_authorization_check_config_import;
|
460
|
+
#define grpc_tls_credentials_options_set_server_authorization_check_config grpc_tls_credentials_options_set_server_authorization_check_config_import
|
461
|
+
typedef grpc_tls_key_materials_config*(*grpc_tls_key_materials_config_create_type)(void);
|
462
|
+
extern grpc_tls_key_materials_config_create_type grpc_tls_key_materials_config_create_import;
|
463
|
+
#define grpc_tls_key_materials_config_create grpc_tls_key_materials_config_create_import
|
464
|
+
typedef int(*grpc_tls_key_materials_config_set_key_materials_type)(grpc_tls_key_materials_config* config, const char* pem_root_certs, const grpc_ssl_pem_key_cert_pair** pem_key_cert_pairs, size_t num_key_cert_pairs);
|
465
|
+
extern grpc_tls_key_materials_config_set_key_materials_type grpc_tls_key_materials_config_set_key_materials_import;
|
466
|
+
#define grpc_tls_key_materials_config_set_key_materials grpc_tls_key_materials_config_set_key_materials_import
|
467
|
+
typedef grpc_tls_credential_reload_config*(*grpc_tls_credential_reload_config_create_type)(const void* config_user_data, int (*schedule)(void* config_user_data, grpc_tls_credential_reload_arg* arg), void (*cancel)(void* config_user_data, grpc_tls_credential_reload_arg* arg), void (*destruct)(void* config_user_data));
|
468
|
+
extern grpc_tls_credential_reload_config_create_type grpc_tls_credential_reload_config_create_import;
|
469
|
+
#define grpc_tls_credential_reload_config_create grpc_tls_credential_reload_config_create_import
|
470
|
+
typedef grpc_tls_server_authorization_check_config*(*grpc_tls_server_authorization_check_config_create_type)(const void* config_user_data, int (*schedule)(void* config_user_data, grpc_tls_server_authorization_check_arg* arg), void (*cancel)(void* config_user_data, grpc_tls_server_authorization_check_arg* arg), void (*destruct)(void* config_user_data));
|
471
|
+
extern grpc_tls_server_authorization_check_config_create_type grpc_tls_server_authorization_check_config_create_import;
|
472
|
+
#define grpc_tls_server_authorization_check_config_create grpc_tls_server_authorization_check_config_create_import
|
440
473
|
typedef grpc_byte_buffer*(*grpc_raw_byte_buffer_create_type)(grpc_slice* slices, size_t nslices);
|
441
474
|
extern grpc_raw_byte_buffer_create_type grpc_raw_byte_buffer_create_import;
|
442
475
|
#define grpc_raw_byte_buffer_create grpc_raw_byte_buffer_create_import
|
@@ -461,6 +494,9 @@ extern grpc_byte_buffer_reader_destroy_type grpc_byte_buffer_reader_destroy_impo
|
|
461
494
|
typedef int(*grpc_byte_buffer_reader_next_type)(grpc_byte_buffer_reader* reader, grpc_slice* slice);
|
462
495
|
extern grpc_byte_buffer_reader_next_type grpc_byte_buffer_reader_next_import;
|
463
496
|
#define grpc_byte_buffer_reader_next grpc_byte_buffer_reader_next_import
|
497
|
+
typedef int(*grpc_byte_buffer_reader_peek_type)(grpc_byte_buffer_reader* reader, grpc_slice** slice);
|
498
|
+
extern grpc_byte_buffer_reader_peek_type grpc_byte_buffer_reader_peek_import;
|
499
|
+
#define grpc_byte_buffer_reader_peek grpc_byte_buffer_reader_peek_import
|
464
500
|
typedef grpc_slice(*grpc_byte_buffer_reader_readall_type)(grpc_byte_buffer_reader* reader);
|
465
501
|
extern grpc_byte_buffer_reader_readall_type grpc_byte_buffer_reader_readall_import;
|
466
502
|
#define grpc_byte_buffer_reader_readall grpc_byte_buffer_reader_readall_import
|
@@ -86,8 +86,7 @@ static void grpc_rb_server_maybe_destroy(grpc_rb_server* server) {
|
|
86
86
|
}
|
87
87
|
}
|
88
88
|
|
89
|
-
|
90
|
-
static void grpc_rb_server_free(void* p) {
|
89
|
+
static void grpc_rb_server_free_internal(void* p) {
|
91
90
|
grpc_rb_server* svr = NULL;
|
92
91
|
gpr_timespec deadline;
|
93
92
|
if (p == NULL) {
|
@@ -104,6 +103,12 @@ static void grpc_rb_server_free(void* p) {
|
|
104
103
|
xfree(p);
|
105
104
|
}
|
106
105
|
|
106
|
+
/* Destroys server instances. */
|
107
|
+
static void grpc_rb_server_free(void* p) {
|
108
|
+
grpc_rb_server_free_internal(p);
|
109
|
+
grpc_ruby_shutdown();
|
110
|
+
}
|
111
|
+
|
107
112
|
static const rb_data_type_t grpc_rb_server_data_type = {
|
108
113
|
"grpc_server",
|
109
114
|
{GRPC_RB_GC_NOT_MARKED,
|
@@ -123,6 +128,7 @@ static const rb_data_type_t grpc_rb_server_data_type = {
|
|
123
128
|
|
124
129
|
/* Allocates grpc_rb_server instances. */
|
125
130
|
static VALUE grpc_rb_server_alloc(VALUE cls) {
|
131
|
+
grpc_ruby_init();
|
126
132
|
grpc_rb_server* wrapper = ALLOC(grpc_rb_server);
|
127
133
|
wrapper->wrapped = NULL;
|
128
134
|
wrapper->destroy_done = 0;
|
@@ -142,8 +148,6 @@ static VALUE grpc_rb_server_init(VALUE self, VALUE channel_args) {
|
|
142
148
|
grpc_channel_args args;
|
143
149
|
MEMZERO(&args, grpc_channel_args, 1);
|
144
150
|
|
145
|
-
grpc_ruby_once_init();
|
146
|
-
|
147
151
|
cq = grpc_completion_queue_create_for_pluck(NULL);
|
148
152
|
TypedData_Get_Struct(self, grpc_rb_server, &grpc_rb_server_data_type,
|
149
153
|
wrapper);
|
data/src/ruby/lib/grpc/errors.rb
CHANGED
@@ -42,12 +42,31 @@ module GRPC
|
|
42
42
|
@metadata = metadata
|
43
43
|
end
|
44
44
|
|
45
|
-
# Converts the exception to a
|
45
|
+
# Converts the exception to a {Struct::Status} for use in the networking
|
46
46
|
# wrapper layer.
|
47
47
|
#
|
48
|
-
# @return [Status] with the same code and details
|
48
|
+
# @return [Struct::Status] with the same code and details
|
49
49
|
def to_status
|
50
|
-
Struct::Status.new(code, details,
|
50
|
+
Struct::Status.new(code, details, metadata)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Converts the exception to a deserialized {Google::Rpc::Status} object.
|
54
|
+
# Returns `nil` if the `grpc-status-details-bin` trailer could not be
|
55
|
+
# converted to a {Google::Rpc::Status} due to the server not providing
|
56
|
+
# the necessary trailers.
|
57
|
+
#
|
58
|
+
# @return [Google::Rpc::Status, nil]
|
59
|
+
def to_rpc_status
|
60
|
+
# Lazily require google_rpc_status_utils to scope
|
61
|
+
# loading protobuf_c.so to the users of this method.
|
62
|
+
require_relative './google_rpc_status_utils'
|
63
|
+
status = to_status
|
64
|
+
return if status.nil?
|
65
|
+
GoogleRpcStatusUtils.extract_google_rpc_status(status)
|
66
|
+
rescue Google::Protobuf::ParseError => parse_error
|
67
|
+
GRPC.logger.warn('parse error: to_rpc_status failed')
|
68
|
+
GRPC.logger.warn(parse_error)
|
69
|
+
nil
|
51
70
|
end
|
52
71
|
|
53
72
|
def self.new_status_exception(code, details = 'unknown cause',
|
@@ -224,7 +224,7 @@ module GRPC
|
|
224
224
|
set_input_stream_done.call
|
225
225
|
end
|
226
226
|
GRPC.logger.debug('bidi-read-loop: finished')
|
227
|
-
# Make sure that the write loop is done
|
227
|
+
# Make sure that the write loop is done before finishing the call.
|
228
228
|
# Note that blocking is ok at this point because we've already received
|
229
229
|
# a status
|
230
230
|
@enq_th.join if is_client
|
@@ -202,7 +202,7 @@ module GRPC
|
|
202
202
|
# forcing an abrupt exit to each thread.
|
203
203
|
#
|
204
204
|
# * connect_md_proc:
|
205
|
-
# when non-nil is a proc for determining metadata to
|
205
|
+
# when non-nil is a proc for determining metadata to send back the client
|
206
206
|
# on receiving an invocation req. The proc signature is:
|
207
207
|
# {key: val, ..} func(method_name, {key: val, ...})
|
208
208
|
#
|
@@ -217,7 +217,7 @@ module GRPC
|
|
217
217
|
def initialize(pool_size: DEFAULT_POOL_SIZE,
|
218
218
|
max_waiting_requests: DEFAULT_MAX_WAITING_REQUESTS,
|
219
219
|
poll_period: DEFAULT_POLL_PERIOD,
|
220
|
-
pool_keep_alive:
|
220
|
+
pool_keep_alive: Pool::DEFAULT_KEEP_ALIVE,
|
221
221
|
connect_md_proc: nil,
|
222
222
|
server_args: {},
|
223
223
|
interceptors: [])
|
data/src/ruby/pb/README.md
CHANGED
@@ -7,7 +7,7 @@ code to them.
|
|
7
7
|
PREREQUISITES
|
8
8
|
-------------
|
9
9
|
|
10
|
-
The code is
|
10
|
+
The code is generated using the protoc (> 3.0.0.alpha.1) and the
|
11
11
|
grpc_ruby_plugin. These must be installed to regenerate the IDL defined
|
12
12
|
classes, but that's not necessary just to use them.
|
13
13
|
|