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/core/lib/gpr/arena.cc
DELETED
@@ -1,192 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2017 gRPC authors.
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*
|
17
|
-
*/
|
18
|
-
|
19
|
-
#include <grpc/support/port_platform.h>
|
20
|
-
|
21
|
-
#include "src/core/lib/gpr/arena.h"
|
22
|
-
|
23
|
-
#include <string.h>
|
24
|
-
#include <new>
|
25
|
-
|
26
|
-
#include <grpc/support/alloc.h>
|
27
|
-
#include <grpc/support/atm.h>
|
28
|
-
#include <grpc/support/log.h>
|
29
|
-
#include <grpc/support/sync.h>
|
30
|
-
|
31
|
-
#include "src/core/lib/gpr/alloc.h"
|
32
|
-
#include "src/core/lib/gpr/env.h"
|
33
|
-
#include "src/core/lib/gprpp/memory.h"
|
34
|
-
|
35
|
-
namespace {
|
36
|
-
enum init_strategy {
|
37
|
-
NO_INIT, // Do not initialize the arena blocks.
|
38
|
-
ZERO_INIT, // Initialize arena blocks with 0.
|
39
|
-
NON_ZERO_INIT, // Initialize arena blocks with a non-zero value.
|
40
|
-
};
|
41
|
-
|
42
|
-
gpr_once g_init_strategy_once = GPR_ONCE_INIT;
|
43
|
-
init_strategy g_init_strategy = NO_INIT;
|
44
|
-
} // namespace
|
45
|
-
|
46
|
-
static void set_strategy_from_env() {
|
47
|
-
char* str = gpr_getenv("GRPC_ARENA_INIT_STRATEGY");
|
48
|
-
if (str == nullptr) {
|
49
|
-
g_init_strategy = NO_INIT;
|
50
|
-
} else if (strcmp(str, "zero_init") == 0) {
|
51
|
-
g_init_strategy = ZERO_INIT;
|
52
|
-
} else if (strcmp(str, "non_zero_init") == 0) {
|
53
|
-
g_init_strategy = NON_ZERO_INIT;
|
54
|
-
} else {
|
55
|
-
g_init_strategy = NO_INIT;
|
56
|
-
}
|
57
|
-
gpr_free(str);
|
58
|
-
}
|
59
|
-
|
60
|
-
static void* gpr_arena_alloc_maybe_init(size_t size) {
|
61
|
-
void* mem = gpr_malloc_aligned(size, GPR_MAX_ALIGNMENT);
|
62
|
-
gpr_once_init(&g_init_strategy_once, set_strategy_from_env);
|
63
|
-
if (GPR_UNLIKELY(g_init_strategy != NO_INIT)) {
|
64
|
-
if (g_init_strategy == ZERO_INIT) {
|
65
|
-
memset(mem, 0, size);
|
66
|
-
} else { // NON_ZERO_INIT.
|
67
|
-
memset(mem, 0xFE, size);
|
68
|
-
}
|
69
|
-
}
|
70
|
-
return mem;
|
71
|
-
}
|
72
|
-
|
73
|
-
void gpr_arena_init() {
|
74
|
-
gpr_once_init(&g_init_strategy_once, set_strategy_from_env);
|
75
|
-
}
|
76
|
-
|
77
|
-
// Uncomment this to use a simple arena that simply allocates the
|
78
|
-
// requested amount of memory for each call to gpr_arena_alloc(). This
|
79
|
-
// effectively eliminates the efficiency gain of using an arena, but it
|
80
|
-
// may be useful for debugging purposes.
|
81
|
-
//#define SIMPLE_ARENA_FOR_DEBUGGING
|
82
|
-
#ifdef SIMPLE_ARENA_FOR_DEBUGGING
|
83
|
-
|
84
|
-
struct gpr_arena {
|
85
|
-
gpr_arena() { gpr_mu_init(&mu); }
|
86
|
-
~gpr_arena() {
|
87
|
-
gpr_mu_destroy(&mu);
|
88
|
-
for (size_t i = 0; i < num_ptrs; ++i) {
|
89
|
-
gpr_free_aligned(ptrs[i]);
|
90
|
-
}
|
91
|
-
gpr_free(ptrs);
|
92
|
-
}
|
93
|
-
|
94
|
-
gpr_mu mu;
|
95
|
-
void** ptrs = nullptr;
|
96
|
-
size_t num_ptrs = 0;
|
97
|
-
};
|
98
|
-
|
99
|
-
gpr_arena* gpr_arena_create(size_t ignored_initial_size) {
|
100
|
-
return grpc_core::New<gpr_arena>();
|
101
|
-
}
|
102
|
-
|
103
|
-
size_t gpr_arena_destroy(gpr_arena* arena) {
|
104
|
-
grpc_core::Delete(arena);
|
105
|
-
return 1; // Value doesn't matter, since it won't be used.
|
106
|
-
}
|
107
|
-
|
108
|
-
void* gpr_arena_alloc(gpr_arena* arena, size_t size) {
|
109
|
-
gpr_mu_lock(&arena->mu);
|
110
|
-
arena->ptrs =
|
111
|
-
(void**)gpr_realloc(arena->ptrs, sizeof(void*) * (arena->num_ptrs + 1));
|
112
|
-
void* retval = arena->ptrs[arena->num_ptrs++] =
|
113
|
-
gpr_arena_alloc_maybe_init(size);
|
114
|
-
gpr_mu_unlock(&arena->mu);
|
115
|
-
return retval;
|
116
|
-
}
|
117
|
-
|
118
|
-
#else // SIMPLE_ARENA_FOR_DEBUGGING
|
119
|
-
|
120
|
-
// TODO(roth): We currently assume that all callers need alignment of 16
|
121
|
-
// bytes, which may be wrong in some cases. As part of converting the
|
122
|
-
// arena API to C++, we should consider replacing gpr_arena_alloc() with a
|
123
|
-
// template that takes the type of the value being allocated, which
|
124
|
-
// would allow us to use the alignment actually needed by the caller.
|
125
|
-
|
126
|
-
typedef struct zone {
|
127
|
-
zone* next = nullptr;
|
128
|
-
} zone;
|
129
|
-
|
130
|
-
struct gpr_arena {
|
131
|
-
gpr_arena(size_t initial_size)
|
132
|
-
: initial_zone_size(initial_size), last_zone(&initial_zone) {
|
133
|
-
gpr_mu_init(&arena_growth_mutex);
|
134
|
-
}
|
135
|
-
~gpr_arena() {
|
136
|
-
gpr_mu_destroy(&arena_growth_mutex);
|
137
|
-
zone* z = initial_zone.next;
|
138
|
-
while (z) {
|
139
|
-
zone* next_z = z->next;
|
140
|
-
z->~zone();
|
141
|
-
gpr_free_aligned(z);
|
142
|
-
z = next_z;
|
143
|
-
}
|
144
|
-
}
|
145
|
-
|
146
|
-
// Keep track of the total used size. We use this in our call sizing
|
147
|
-
// historesis.
|
148
|
-
gpr_atm total_used = 0;
|
149
|
-
size_t initial_zone_size;
|
150
|
-
zone initial_zone;
|
151
|
-
zone* last_zone;
|
152
|
-
gpr_mu arena_growth_mutex;
|
153
|
-
};
|
154
|
-
|
155
|
-
gpr_arena* gpr_arena_create(size_t initial_size) {
|
156
|
-
initial_size = GPR_ROUND_UP_TO_ALIGNMENT_SIZE(initial_size);
|
157
|
-
return new (gpr_arena_alloc_maybe_init(
|
158
|
-
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(gpr_arena)) + initial_size))
|
159
|
-
gpr_arena(initial_size);
|
160
|
-
}
|
161
|
-
|
162
|
-
size_t gpr_arena_destroy(gpr_arena* arena) {
|
163
|
-
const gpr_atm size = gpr_atm_no_barrier_load(&arena->total_used);
|
164
|
-
arena->~gpr_arena();
|
165
|
-
gpr_free_aligned(arena);
|
166
|
-
return static_cast<size_t>(size);
|
167
|
-
}
|
168
|
-
|
169
|
-
void* gpr_arena_alloc(gpr_arena* arena, size_t size) {
|
170
|
-
size = GPR_ROUND_UP_TO_ALIGNMENT_SIZE(size);
|
171
|
-
size_t begin = gpr_atm_no_barrier_fetch_add(&arena->total_used, size);
|
172
|
-
if (begin + size <= arena->initial_zone_size) {
|
173
|
-
return reinterpret_cast<char*>(arena) +
|
174
|
-
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(gpr_arena)) + begin;
|
175
|
-
} else {
|
176
|
-
// If the allocation isn't able to end in the initial zone, create a new
|
177
|
-
// zone for this allocation, and any unused space in the initial zone is
|
178
|
-
// wasted. This overflowing and wasting is uncommon because of our arena
|
179
|
-
// sizing historesis (that is, most calls should have a large enough initial
|
180
|
-
// zone and will not need to grow the arena).
|
181
|
-
gpr_mu_lock(&arena->arena_growth_mutex);
|
182
|
-
zone* z = new (gpr_arena_alloc_maybe_init(
|
183
|
-
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(zone)) + size)) zone();
|
184
|
-
arena->last_zone->next = z;
|
185
|
-
arena->last_zone = z;
|
186
|
-
gpr_mu_unlock(&arena->arena_growth_mutex);
|
187
|
-
return reinterpret_cast<char*>(z) +
|
188
|
-
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(zone));
|
189
|
-
}
|
190
|
-
}
|
191
|
-
|
192
|
-
#endif // SIMPLE_ARENA_FOR_DEBUGGING
|
@@ -1,57 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2017 gRPC authors.
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*
|
17
|
-
*/
|
18
|
-
|
19
|
-
#ifndef GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_ATM_H
|
20
|
-
#define GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_ATM_H
|
21
|
-
|
22
|
-
#include <grpc/support/port_platform.h>
|
23
|
-
|
24
|
-
#include <grpc/support/atm.h>
|
25
|
-
|
26
|
-
namespace grpc_core {
|
27
|
-
|
28
|
-
enum MemoryOrderRelaxed { memory_order_relaxed };
|
29
|
-
|
30
|
-
template <class T>
|
31
|
-
class atomic;
|
32
|
-
|
33
|
-
template <>
|
34
|
-
class atomic<bool> {
|
35
|
-
public:
|
36
|
-
atomic() { gpr_atm_no_barrier_store(&x_, static_cast<gpr_atm>(false)); }
|
37
|
-
explicit atomic(bool x) {
|
38
|
-
gpr_atm_no_barrier_store(&x_, static_cast<gpr_atm>(x));
|
39
|
-
}
|
40
|
-
|
41
|
-
bool compare_exchange_strong(bool& expected, bool update, MemoryOrderRelaxed,
|
42
|
-
MemoryOrderRelaxed) {
|
43
|
-
if (!gpr_atm_no_barrier_cas(&x_, static_cast<gpr_atm>(expected),
|
44
|
-
static_cast<gpr_atm>(update))) {
|
45
|
-
expected = gpr_atm_no_barrier_load(&x_) != 0;
|
46
|
-
return false;
|
47
|
-
}
|
48
|
-
return true;
|
49
|
-
}
|
50
|
-
|
51
|
-
private:
|
52
|
-
gpr_atm x_;
|
53
|
-
};
|
54
|
-
|
55
|
-
} // namespace grpc_core
|
56
|
-
|
57
|
-
#endif /* GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_ATM_H */
|
@@ -1,107 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2016 gRPC authors.
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*
|
17
|
-
*/
|
18
|
-
|
19
|
-
#include <grpc/support/port_platform.h>
|
20
|
-
|
21
|
-
#include "src/core/lib/iomgr/port.h"
|
22
|
-
|
23
|
-
#ifdef GRPC_POSIX_WAKEUP_FD
|
24
|
-
|
25
|
-
#include "src/core/lib/iomgr/wakeup_fd_cv.h"
|
26
|
-
|
27
|
-
#include <errno.h>
|
28
|
-
#include <string.h>
|
29
|
-
|
30
|
-
#include <grpc/support/alloc.h>
|
31
|
-
#include <grpc/support/log.h>
|
32
|
-
#include <grpc/support/sync.h>
|
33
|
-
#include <grpc/support/time.h>
|
34
|
-
|
35
|
-
#include "src/core/lib/gpr/useful.h"
|
36
|
-
#include "src/core/lib/gprpp/thd.h"
|
37
|
-
|
38
|
-
#define MAX_TABLE_RESIZE 256
|
39
|
-
|
40
|
-
extern grpc_cv_fd_table g_cvfds;
|
41
|
-
|
42
|
-
static grpc_error* cv_fd_init(grpc_wakeup_fd* fd_info) {
|
43
|
-
unsigned int i, newsize;
|
44
|
-
int idx;
|
45
|
-
gpr_mu_lock(&g_cvfds.mu);
|
46
|
-
if (!g_cvfds.free_fds) {
|
47
|
-
newsize = GPR_MIN(g_cvfds.size * 2, g_cvfds.size + MAX_TABLE_RESIZE);
|
48
|
-
g_cvfds.cvfds = static_cast<grpc_fd_node*>(
|
49
|
-
gpr_realloc(g_cvfds.cvfds, sizeof(grpc_fd_node) * newsize));
|
50
|
-
for (i = g_cvfds.size; i < newsize; i++) {
|
51
|
-
g_cvfds.cvfds[i].is_set = 0;
|
52
|
-
g_cvfds.cvfds[i].cvs = nullptr;
|
53
|
-
g_cvfds.cvfds[i].next_free = g_cvfds.free_fds;
|
54
|
-
g_cvfds.free_fds = &g_cvfds.cvfds[i];
|
55
|
-
}
|
56
|
-
g_cvfds.size = newsize;
|
57
|
-
}
|
58
|
-
|
59
|
-
idx = static_cast<int>(g_cvfds.free_fds - g_cvfds.cvfds);
|
60
|
-
g_cvfds.free_fds = g_cvfds.free_fds->next_free;
|
61
|
-
g_cvfds.cvfds[idx].cvs = nullptr;
|
62
|
-
g_cvfds.cvfds[idx].is_set = 0;
|
63
|
-
fd_info->read_fd = GRPC_IDX_TO_FD(idx);
|
64
|
-
fd_info->write_fd = -1;
|
65
|
-
gpr_mu_unlock(&g_cvfds.mu);
|
66
|
-
return GRPC_ERROR_NONE;
|
67
|
-
}
|
68
|
-
|
69
|
-
static grpc_error* cv_fd_wakeup(grpc_wakeup_fd* fd_info) {
|
70
|
-
grpc_cv_node* cvn;
|
71
|
-
gpr_mu_lock(&g_cvfds.mu);
|
72
|
-
g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)].is_set = 1;
|
73
|
-
cvn = g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)].cvs;
|
74
|
-
while (cvn) {
|
75
|
-
gpr_cv_signal(cvn->cv);
|
76
|
-
cvn = cvn->next;
|
77
|
-
}
|
78
|
-
gpr_mu_unlock(&g_cvfds.mu);
|
79
|
-
return GRPC_ERROR_NONE;
|
80
|
-
}
|
81
|
-
|
82
|
-
static grpc_error* cv_fd_consume(grpc_wakeup_fd* fd_info) {
|
83
|
-
gpr_mu_lock(&g_cvfds.mu);
|
84
|
-
g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)].is_set = 0;
|
85
|
-
gpr_mu_unlock(&g_cvfds.mu);
|
86
|
-
return GRPC_ERROR_NONE;
|
87
|
-
}
|
88
|
-
|
89
|
-
static void cv_fd_destroy(grpc_wakeup_fd* fd_info) {
|
90
|
-
if (fd_info->read_fd == 0) {
|
91
|
-
return;
|
92
|
-
}
|
93
|
-
gpr_mu_lock(&g_cvfds.mu);
|
94
|
-
// Assert that there are no active pollers
|
95
|
-
GPR_ASSERT(!g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)].cvs);
|
96
|
-
g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)].next_free = g_cvfds.free_fds;
|
97
|
-
g_cvfds.free_fds = &g_cvfds.cvfds[GRPC_FD_TO_IDX(fd_info->read_fd)];
|
98
|
-
gpr_mu_unlock(&g_cvfds.mu);
|
99
|
-
}
|
100
|
-
|
101
|
-
static int cv_check_availability(void) { return 1; }
|
102
|
-
|
103
|
-
const grpc_wakeup_fd_vtable grpc_cv_wakeup_fd_vtable = {
|
104
|
-
cv_fd_init, cv_fd_consume, cv_fd_wakeup, cv_fd_destroy,
|
105
|
-
cv_check_availability};
|
106
|
-
|
107
|
-
#endif /* GRPC_POSIX_WAKUP_FD */
|
@@ -1,69 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2016 gRPC authors.
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*
|
17
|
-
*/
|
18
|
-
|
19
|
-
/*
|
20
|
-
* wakeup_fd_cv uses condition variables to implement wakeup fds.
|
21
|
-
*
|
22
|
-
* It is intended for use only in cases when eventfd() and pipe() are not
|
23
|
-
* available. It can only be used with the "poll" engine.
|
24
|
-
*
|
25
|
-
* Implementation:
|
26
|
-
* A global table of cv wakeup fds is mantained. A cv wakeup fd is a negative
|
27
|
-
* file descriptor. poll() is then run in a background thread with only the
|
28
|
-
* real socket fds while we wait on a condition variable trigged by either the
|
29
|
-
* poll() completion or a wakeup_fd() call.
|
30
|
-
*
|
31
|
-
*/
|
32
|
-
|
33
|
-
#ifndef GRPC_CORE_LIB_IOMGR_WAKEUP_FD_CV_H
|
34
|
-
#define GRPC_CORE_LIB_IOMGR_WAKEUP_FD_CV_H
|
35
|
-
|
36
|
-
#include <grpc/support/port_platform.h>
|
37
|
-
|
38
|
-
#include <grpc/support/sync.h>
|
39
|
-
|
40
|
-
#include "src/core/lib/iomgr/ev_posix.h"
|
41
|
-
|
42
|
-
#define GRPC_FD_TO_IDX(fd) (-(fd)-1)
|
43
|
-
#define GRPC_IDX_TO_FD(idx) (-(idx)-1)
|
44
|
-
|
45
|
-
typedef struct grpc_cv_node {
|
46
|
-
gpr_cv* cv;
|
47
|
-
struct grpc_cv_node* next;
|
48
|
-
struct grpc_cv_node* prev;
|
49
|
-
} grpc_cv_node;
|
50
|
-
|
51
|
-
typedef struct grpc_fd_node {
|
52
|
-
int is_set;
|
53
|
-
grpc_cv_node* cvs;
|
54
|
-
struct grpc_fd_node* next_free;
|
55
|
-
} grpc_fd_node;
|
56
|
-
|
57
|
-
typedef struct grpc_cv_fd_table {
|
58
|
-
gpr_mu mu;
|
59
|
-
gpr_refcount pollcount;
|
60
|
-
gpr_cv shutdown_cv;
|
61
|
-
grpc_fd_node* cvfds;
|
62
|
-
grpc_fd_node* free_fds;
|
63
|
-
unsigned int size;
|
64
|
-
grpc_poll_function_type poll;
|
65
|
-
} grpc_cv_fd_table;
|
66
|
-
|
67
|
-
extern const grpc_wakeup_fd_vtable grpc_cv_wakeup_fd_vtable;
|
68
|
-
|
69
|
-
#endif /* GRPC_CORE_LIB_IOMGR_WAKEUP_FD_CV_H */
|
@@ -1,106 +0,0 @@
|
|
1
|
-
//
|
2
|
-
// Copyright 2015 gRPC authors.
|
3
|
-
//
|
4
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
// you may not use this file except in compliance with the License.
|
6
|
-
// You may obtain a copy of the License at
|
7
|
-
//
|
8
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
//
|
10
|
-
// Unless required by applicable law or agreed to in writing, software
|
11
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
// See the License for the specific language governing permissions and
|
14
|
-
// limitations under the License.
|
15
|
-
//
|
16
|
-
|
17
|
-
#include <grpc/support/port_platform.h>
|
18
|
-
|
19
|
-
#include "src/core/lib/transport/service_config.h"
|
20
|
-
|
21
|
-
#include <string.h>
|
22
|
-
|
23
|
-
#include <grpc/impl/codegen/grpc_types.h>
|
24
|
-
#include <grpc/support/alloc.h>
|
25
|
-
#include <grpc/support/log.h>
|
26
|
-
#include <grpc/support/string_util.h>
|
27
|
-
|
28
|
-
#include "src/core/lib/gpr/string.h"
|
29
|
-
#include "src/core/lib/json/json.h"
|
30
|
-
#include "src/core/lib/slice/slice_hash_table.h"
|
31
|
-
#include "src/core/lib/slice/slice_internal.h"
|
32
|
-
#include "src/core/lib/slice/slice_string_helpers.h"
|
33
|
-
|
34
|
-
namespace grpc_core {
|
35
|
-
|
36
|
-
UniquePtr<ServiceConfig> ServiceConfig::Create(const char* json) {
|
37
|
-
UniquePtr<char> json_string(gpr_strdup(json));
|
38
|
-
grpc_json* json_tree = grpc_json_parse_string(json_string.get());
|
39
|
-
if (json_tree == nullptr) {
|
40
|
-
gpr_log(GPR_INFO, "failed to parse JSON for service config");
|
41
|
-
return nullptr;
|
42
|
-
}
|
43
|
-
return MakeUnique<ServiceConfig>(std::move(json_string), json_tree);
|
44
|
-
}
|
45
|
-
|
46
|
-
ServiceConfig::ServiceConfig(UniquePtr<char> json_string, grpc_json* json_tree)
|
47
|
-
: json_string_(std::move(json_string)), json_tree_(json_tree) {}
|
48
|
-
|
49
|
-
ServiceConfig::~ServiceConfig() { grpc_json_destroy(json_tree_); }
|
50
|
-
|
51
|
-
const char* ServiceConfig::GetLoadBalancingPolicyName() const {
|
52
|
-
if (json_tree_->type != GRPC_JSON_OBJECT || json_tree_->key != nullptr) {
|
53
|
-
return nullptr;
|
54
|
-
}
|
55
|
-
const char* lb_policy_name = nullptr;
|
56
|
-
for (grpc_json* field = json_tree_->child; field != nullptr;
|
57
|
-
field = field->next) {
|
58
|
-
if (field->key == nullptr) return nullptr;
|
59
|
-
if (strcmp(field->key, "loadBalancingPolicy") == 0) {
|
60
|
-
if (lb_policy_name != nullptr) return nullptr; // Duplicate.
|
61
|
-
if (field->type != GRPC_JSON_STRING) return nullptr;
|
62
|
-
lb_policy_name = field->value;
|
63
|
-
}
|
64
|
-
}
|
65
|
-
return lb_policy_name;
|
66
|
-
}
|
67
|
-
|
68
|
-
int ServiceConfig::CountNamesInMethodConfig(grpc_json* json) {
|
69
|
-
int num_names = 0;
|
70
|
-
for (grpc_json* field = json->child; field != nullptr; field = field->next) {
|
71
|
-
if (field->key != nullptr && strcmp(field->key, "name") == 0) {
|
72
|
-
if (field->type != GRPC_JSON_ARRAY) return -1;
|
73
|
-
for (grpc_json* name = field->child; name != nullptr; name = name->next) {
|
74
|
-
if (name->type != GRPC_JSON_OBJECT) return -1;
|
75
|
-
++num_names;
|
76
|
-
}
|
77
|
-
}
|
78
|
-
}
|
79
|
-
return num_names;
|
80
|
-
}
|
81
|
-
|
82
|
-
UniquePtr<char> ServiceConfig::ParseJsonMethodName(grpc_json* json) {
|
83
|
-
if (json->type != GRPC_JSON_OBJECT) return nullptr;
|
84
|
-
const char* service_name = nullptr;
|
85
|
-
const char* method_name = nullptr;
|
86
|
-
for (grpc_json* child = json->child; child != nullptr; child = child->next) {
|
87
|
-
if (child->key == nullptr) return nullptr;
|
88
|
-
if (child->type != GRPC_JSON_STRING) return nullptr;
|
89
|
-
if (strcmp(child->key, "service") == 0) {
|
90
|
-
if (service_name != nullptr) return nullptr; // Duplicate.
|
91
|
-
if (child->value == nullptr) return nullptr;
|
92
|
-
service_name = child->value;
|
93
|
-
} else if (strcmp(child->key, "method") == 0) {
|
94
|
-
if (method_name != nullptr) return nullptr; // Duplicate.
|
95
|
-
if (child->value == nullptr) return nullptr;
|
96
|
-
method_name = child->value;
|
97
|
-
}
|
98
|
-
}
|
99
|
-
if (service_name == nullptr) return nullptr; // Required field.
|
100
|
-
char* path;
|
101
|
-
gpr_asprintf(&path, "/%s/%s", service_name,
|
102
|
-
method_name == nullptr ? "*" : method_name);
|
103
|
-
return UniquePtr<char>(path);
|
104
|
-
}
|
105
|
-
|
106
|
-
} // namespace grpc_core
|