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
@@ -40,12 +40,51 @@
|
|
40
40
|
#include "src/core/lib/slice/slice_internal.h"
|
41
41
|
#include "src/core/lib/surface/channel.h"
|
42
42
|
#include "src/core/lib/surface/server.h"
|
43
|
+
#include "src/core/lib/transport/connectivity_state.h"
|
43
44
|
#include "src/core/lib/transport/error_utils.h"
|
44
45
|
#include "src/core/lib/uri/uri_parser.h"
|
45
46
|
|
46
47
|
namespace grpc_core {
|
47
48
|
namespace channelz {
|
48
49
|
|
50
|
+
//
|
51
|
+
// channel arg code
|
52
|
+
//
|
53
|
+
|
54
|
+
namespace {
|
55
|
+
|
56
|
+
void* parent_uuid_copy(void* p) { return p; }
|
57
|
+
void parent_uuid_destroy(void* p) {}
|
58
|
+
int parent_uuid_cmp(void* p1, void* p2) { return GPR_ICMP(p1, p2); }
|
59
|
+
const grpc_arg_pointer_vtable parent_uuid_vtable = {
|
60
|
+
parent_uuid_copy, parent_uuid_destroy, parent_uuid_cmp};
|
61
|
+
|
62
|
+
} // namespace
|
63
|
+
|
64
|
+
grpc_arg MakeParentUuidArg(intptr_t parent_uuid) {
|
65
|
+
// We would ideally like to store the uuid in an integer argument.
|
66
|
+
// Unfortunately, that won't work, because intptr_t (the type used for
|
67
|
+
// uuids) doesn't fit in an int (the type used for integer args).
|
68
|
+
// So instead, we use a hack to store it as a pointer, because
|
69
|
+
// intptr_t should be the same size as void*.
|
70
|
+
static_assert(sizeof(intptr_t) <= sizeof(void*),
|
71
|
+
"can't fit intptr_t inside of void*");
|
72
|
+
return grpc_channel_arg_pointer_create(
|
73
|
+
const_cast<char*>(GRPC_ARG_CHANNELZ_PARENT_UUID),
|
74
|
+
reinterpret_cast<void*>(parent_uuid), &parent_uuid_vtable);
|
75
|
+
}
|
76
|
+
|
77
|
+
intptr_t GetParentUuidFromArgs(const grpc_channel_args& args) {
|
78
|
+
const grpc_arg* arg =
|
79
|
+
grpc_channel_args_find(&args, GRPC_ARG_CHANNELZ_PARENT_UUID);
|
80
|
+
if (arg == nullptr || arg->type != GRPC_ARG_POINTER) return 0;
|
81
|
+
return reinterpret_cast<intptr_t>(arg->value.pointer.p);
|
82
|
+
}
|
83
|
+
|
84
|
+
//
|
85
|
+
// BaseNode
|
86
|
+
//
|
87
|
+
|
49
88
|
BaseNode::BaseNode(EntityType type) : type_(type), uuid_(-1) {
|
50
89
|
// The registry will set uuid_ under its lock.
|
51
90
|
ChannelzRegistry::Register(this);
|
@@ -61,6 +100,10 @@ char* BaseNode::RenderJsonString() {
|
|
61
100
|
return json_str;
|
62
101
|
}
|
63
102
|
|
103
|
+
//
|
104
|
+
// CallCountingHelper
|
105
|
+
//
|
106
|
+
|
64
107
|
CallCountingHelper::CallCountingHelper() {
|
65
108
|
num_cores_ = GPR_MAX(1, gpr_cpu_num_cores());
|
66
109
|
per_cpu_counter_data_storage_ = static_cast<AtomicCounterData*>(
|
@@ -137,15 +180,17 @@ void CallCountingHelper::PopulateCallCounts(grpc_json* json) {
|
|
137
180
|
}
|
138
181
|
}
|
139
182
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
: EntityType::kInternalChannel),
|
144
|
-
channel_(channel),
|
145
|
-
target_(UniquePtr<char>(grpc_channel_get_target(channel_))),
|
146
|
-
trace_(channel_tracer_max_nodes) {}
|
183
|
+
//
|
184
|
+
// ChannelNode
|
185
|
+
//
|
147
186
|
|
148
|
-
ChannelNode
|
187
|
+
ChannelNode::ChannelNode(UniquePtr<char> target,
|
188
|
+
size_t channel_tracer_max_nodes, intptr_t parent_uuid)
|
189
|
+
: BaseNode(parent_uuid == 0 ? EntityType::kTopLevelChannel
|
190
|
+
: EntityType::kInternalChannel),
|
191
|
+
target_(std::move(target)),
|
192
|
+
trace_(channel_tracer_max_nodes),
|
193
|
+
parent_uuid_(parent_uuid) {}
|
149
194
|
|
150
195
|
grpc_json* ChannelNode::RenderJson() {
|
151
196
|
// We need to track these three json objects to build our object
|
@@ -167,9 +212,19 @@ grpc_json* ChannelNode::RenderJson() {
|
|
167
212
|
GRPC_JSON_OBJECT, false);
|
168
213
|
json = data;
|
169
214
|
json_iterator = nullptr;
|
170
|
-
//
|
171
|
-
//
|
172
|
-
|
215
|
+
// connectivity state
|
216
|
+
// If low-order bit is on, then the field is set.
|
217
|
+
int state_field = connectivity_state_.Load(MemoryOrder::RELAXED);
|
218
|
+
if ((state_field & 1) != 0) {
|
219
|
+
grpc_connectivity_state state =
|
220
|
+
static_cast<grpc_connectivity_state>(state_field >> 1);
|
221
|
+
json = grpc_json_create_child(nullptr, json, "state", nullptr,
|
222
|
+
GRPC_JSON_OBJECT, false);
|
223
|
+
grpc_json_create_child(nullptr, json, "state",
|
224
|
+
grpc_connectivity_state_name(state),
|
225
|
+
GRPC_JSON_STRING, false);
|
226
|
+
json = data;
|
227
|
+
}
|
173
228
|
// populate the target.
|
174
229
|
GPR_ASSERT(target_.get() != nullptr);
|
175
230
|
grpc_json_create_child(nullptr, json, "target", target_.get(),
|
@@ -189,13 +244,64 @@ grpc_json* ChannelNode::RenderJson() {
|
|
189
244
|
return top_level_json;
|
190
245
|
}
|
191
246
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
247
|
+
void ChannelNode::PopulateChildRefs(grpc_json* json) {
|
248
|
+
MutexLock lock(&child_mu_);
|
249
|
+
grpc_json* json_iterator = nullptr;
|
250
|
+
if (!child_subchannels_.empty()) {
|
251
|
+
grpc_json* array_parent = grpc_json_create_child(
|
252
|
+
nullptr, json, "subchannelRef", nullptr, GRPC_JSON_ARRAY, false);
|
253
|
+
for (const auto& p : child_subchannels_) {
|
254
|
+
json_iterator =
|
255
|
+
grpc_json_create_child(json_iterator, array_parent, nullptr, nullptr,
|
256
|
+
GRPC_JSON_OBJECT, false);
|
257
|
+
grpc_json_add_number_string_child(json_iterator, nullptr, "subchannelId",
|
258
|
+
p.first);
|
259
|
+
}
|
260
|
+
}
|
261
|
+
if (!child_channels_.empty()) {
|
262
|
+
grpc_json* array_parent = grpc_json_create_child(
|
263
|
+
nullptr, json, "channelRef", nullptr, GRPC_JSON_ARRAY, false);
|
264
|
+
json_iterator = nullptr;
|
265
|
+
for (const auto& p : child_channels_) {
|
266
|
+
json_iterator =
|
267
|
+
grpc_json_create_child(json_iterator, array_parent, nullptr, nullptr,
|
268
|
+
GRPC_JSON_OBJECT, false);
|
269
|
+
grpc_json_add_number_string_child(json_iterator, nullptr, "channelId",
|
270
|
+
p.first);
|
271
|
+
}
|
272
|
+
}
|
273
|
+
}
|
274
|
+
|
275
|
+
void ChannelNode::SetConnectivityState(grpc_connectivity_state state) {
|
276
|
+
// Store with low-order bit set to indicate that the field is set.
|
277
|
+
int state_field = (state << 1) + 1;
|
278
|
+
connectivity_state_.Store(state_field, MemoryOrder::RELAXED);
|
279
|
+
}
|
280
|
+
|
281
|
+
void ChannelNode::AddChildChannel(intptr_t child_uuid) {
|
282
|
+
MutexLock lock(&child_mu_);
|
283
|
+
child_channels_.insert(MakePair(child_uuid, true));
|
284
|
+
}
|
285
|
+
|
286
|
+
void ChannelNode::RemoveChildChannel(intptr_t child_uuid) {
|
287
|
+
MutexLock lock(&child_mu_);
|
288
|
+
child_channels_.erase(child_uuid);
|
197
289
|
}
|
198
290
|
|
291
|
+
void ChannelNode::AddChildSubchannel(intptr_t child_uuid) {
|
292
|
+
MutexLock lock(&child_mu_);
|
293
|
+
child_subchannels_.insert(MakePair(child_uuid, true));
|
294
|
+
}
|
295
|
+
|
296
|
+
void ChannelNode::RemoveChildSubchannel(intptr_t child_uuid) {
|
297
|
+
MutexLock lock(&child_mu_);
|
298
|
+
child_subchannels_.erase(child_uuid);
|
299
|
+
}
|
300
|
+
|
301
|
+
//
|
302
|
+
// ServerNode
|
303
|
+
//
|
304
|
+
|
199
305
|
ServerNode::ServerNode(grpc_server* server, size_t channel_tracer_max_nodes)
|
200
306
|
: BaseNode(EntityType::kServer),
|
201
307
|
server_(server),
|
@@ -281,8 +387,14 @@ grpc_json* ServerNode::RenderJson() {
|
|
281
387
|
return top_level_json;
|
282
388
|
}
|
283
389
|
|
284
|
-
|
285
|
-
|
390
|
+
//
|
391
|
+
// SocketNode
|
392
|
+
//
|
393
|
+
|
394
|
+
namespace {
|
395
|
+
|
396
|
+
void PopulateSocketAddressJson(grpc_json* json, const char* name,
|
397
|
+
const char* addr_str) {
|
286
398
|
if (addr_str == nullptr) return;
|
287
399
|
grpc_json* json_iterator = nullptr;
|
288
400
|
json_iterator = grpc_json_create_child(json_iterator, json, name, nullptr,
|
@@ -312,7 +424,6 @@ static void PopulateSocketAddressJson(grpc_json* json, const char* name,
|
|
312
424
|
b64_host, GRPC_JSON_STRING, true);
|
313
425
|
gpr_free(host);
|
314
426
|
gpr_free(port);
|
315
|
-
|
316
427
|
} else if (uri != nullptr && strcmp(uri->scheme, "unix") == 0) {
|
317
428
|
json_iterator = grpc_json_create_child(json_iterator, json, "uds_address",
|
318
429
|
nullptr, GRPC_JSON_OBJECT, false);
|
@@ -332,6 +443,8 @@ static void PopulateSocketAddressJson(grpc_json* json, const char* name,
|
|
332
443
|
grpc_uri_destroy(uri);
|
333
444
|
}
|
334
445
|
|
446
|
+
} // namespace
|
447
|
+
|
335
448
|
SocketNode::SocketNode(UniquePtr<char> local, UniquePtr<char> remote)
|
336
449
|
: BaseNode(EntityType::kSocket),
|
337
450
|
local_(std::move(local)),
|
@@ -385,56 +498,73 @@ grpc_json* SocketNode::RenderJson() {
|
|
385
498
|
json = data;
|
386
499
|
json_iterator = nullptr;
|
387
500
|
gpr_timespec ts;
|
388
|
-
|
501
|
+
gpr_atm streams_started = gpr_atm_no_barrier_load(&streams_started_);
|
502
|
+
if (streams_started != 0) {
|
389
503
|
json_iterator = grpc_json_add_number_string_child(
|
390
|
-
json, json_iterator, "streamsStarted",
|
391
|
-
|
392
|
-
|
504
|
+
json, json_iterator, "streamsStarted", streams_started);
|
505
|
+
gpr_atm last_local_stream_created_millis =
|
506
|
+
gpr_atm_no_barrier_load(&last_local_stream_created_millis_);
|
507
|
+
if (last_local_stream_created_millis != 0) {
|
508
|
+
ts = grpc_millis_to_timespec(last_local_stream_created_millis,
|
393
509
|
GPR_CLOCK_REALTIME);
|
394
510
|
json_iterator = grpc_json_create_child(
|
395
511
|
json_iterator, json, "lastLocalStreamCreatedTimestamp",
|
396
512
|
gpr_format_timespec(ts), GRPC_JSON_STRING, true);
|
397
513
|
}
|
398
|
-
|
399
|
-
|
514
|
+
gpr_atm last_remote_stream_created_millis =
|
515
|
+
gpr_atm_no_barrier_load(&last_remote_stream_created_millis_);
|
516
|
+
if (last_remote_stream_created_millis != 0) {
|
517
|
+
ts = grpc_millis_to_timespec(last_remote_stream_created_millis,
|
400
518
|
GPR_CLOCK_REALTIME);
|
401
519
|
json_iterator = grpc_json_create_child(
|
402
520
|
json_iterator, json, "lastRemoteStreamCreatedTimestamp",
|
403
521
|
gpr_format_timespec(ts), GRPC_JSON_STRING, true);
|
404
522
|
}
|
405
523
|
}
|
406
|
-
|
524
|
+
gpr_atm streams_succeeded = gpr_atm_no_barrier_load(&streams_succeeded_);
|
525
|
+
if (streams_succeeded != 0) {
|
407
526
|
json_iterator = grpc_json_add_number_string_child(
|
408
|
-
json, json_iterator, "streamsSucceeded",
|
527
|
+
json, json_iterator, "streamsSucceeded", streams_succeeded);
|
409
528
|
}
|
410
|
-
|
529
|
+
gpr_atm streams_failed = gpr_atm_no_barrier_load(&streams_failed_);
|
530
|
+
if (streams_failed) {
|
411
531
|
json_iterator = grpc_json_add_number_string_child(
|
412
|
-
json, json_iterator, "streamsFailed",
|
532
|
+
json, json_iterator, "streamsFailed", streams_failed);
|
413
533
|
}
|
414
|
-
|
534
|
+
gpr_atm messages_sent = gpr_atm_no_barrier_load(&messages_sent_);
|
535
|
+
if (messages_sent != 0) {
|
415
536
|
json_iterator = grpc_json_add_number_string_child(
|
416
|
-
json, json_iterator, "messagesSent",
|
417
|
-
ts = grpc_millis_to_timespec(
|
537
|
+
json, json_iterator, "messagesSent", messages_sent);
|
538
|
+
ts = grpc_millis_to_timespec(
|
539
|
+
gpr_atm_no_barrier_load(&last_message_sent_millis_),
|
540
|
+
GPR_CLOCK_REALTIME);
|
418
541
|
json_iterator =
|
419
542
|
grpc_json_create_child(json_iterator, json, "lastMessageSentTimestamp",
|
420
543
|
gpr_format_timespec(ts), GRPC_JSON_STRING, true);
|
421
544
|
}
|
422
|
-
|
545
|
+
gpr_atm messages_received = gpr_atm_no_barrier_load(&messages_received_);
|
546
|
+
if (messages_received != 0) {
|
423
547
|
json_iterator = grpc_json_add_number_string_child(
|
424
|
-
json, json_iterator, "messagesReceived",
|
425
|
-
ts = grpc_millis_to_timespec(
|
426
|
-
|
548
|
+
json, json_iterator, "messagesReceived", messages_received);
|
549
|
+
ts = grpc_millis_to_timespec(
|
550
|
+
gpr_atm_no_barrier_load(&last_message_received_millis_),
|
551
|
+
GPR_CLOCK_REALTIME);
|
427
552
|
json_iterator = grpc_json_create_child(
|
428
553
|
json_iterator, json, "lastMessageReceivedTimestamp",
|
429
554
|
gpr_format_timespec(ts), GRPC_JSON_STRING, true);
|
430
555
|
}
|
431
|
-
|
556
|
+
gpr_atm keepalives_sent = gpr_atm_no_barrier_load(&keepalives_sent_);
|
557
|
+
if (keepalives_sent != 0) {
|
432
558
|
json_iterator = grpc_json_add_number_string_child(
|
433
|
-
json, json_iterator, "keepAlivesSent",
|
559
|
+
json, json_iterator, "keepAlivesSent", keepalives_sent);
|
434
560
|
}
|
435
561
|
return top_level_json;
|
436
562
|
}
|
437
563
|
|
564
|
+
//
|
565
|
+
// ListenSocketNode
|
566
|
+
//
|
567
|
+
|
438
568
|
ListenSocketNode::ListenSocketNode(UniquePtr<char> local_addr)
|
439
569
|
: BaseNode(EntityType::kSocket), local_addr_(std::move(local_addr)) {}
|
440
570
|
|
@@ -26,19 +26,19 @@
|
|
26
26
|
#include "src/core/lib/channel/channel_trace.h"
|
27
27
|
#include "src/core/lib/gprpp/inlined_vector.h"
|
28
28
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
29
|
+
#include "src/core/lib/gprpp/map.h"
|
29
30
|
#include "src/core/lib/gprpp/ref_counted.h"
|
30
31
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
32
|
+
#include "src/core/lib/gprpp/sync.h"
|
31
33
|
#include "src/core/lib/iomgr/error.h"
|
32
34
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
33
35
|
#include "src/core/lib/json/json.h"
|
34
36
|
|
35
|
-
// Channel arg key for
|
36
|
-
#define
|
37
|
-
"grpc.channelz_channel_node_creation_func"
|
37
|
+
// Channel arg key for channelz node.
|
38
|
+
#define GRPC_ARG_CHANNELZ_CHANNEL_NODE "grpc.channelz_channel_node"
|
38
39
|
|
39
|
-
// Channel arg key to
|
40
|
-
#define
|
41
|
-
"grpc.channelz_channel_is_internal_channel"
|
40
|
+
// Channel arg key to encode the channelz uuid of the channel's parent.
|
41
|
+
#define GRPC_ARG_CHANNELZ_PARENT_UUID "grpc.channelz_parent_uuid"
|
42
42
|
|
43
43
|
/** This is the default value for whether or not to enable channelz. If
|
44
44
|
* GRPC_ARG_ENABLE_CHANNELZ is set, it will override this default value. */
|
@@ -54,6 +54,10 @@ namespace grpc_core {
|
|
54
54
|
|
55
55
|
namespace channelz {
|
56
56
|
|
57
|
+
// Helpers for getting and setting GRPC_ARG_CHANNELZ_PARENT_UUID.
|
58
|
+
grpc_arg MakeParentUuidArg(intptr_t parent_uuid);
|
59
|
+
intptr_t GetParentUuidFromArgs(const grpc_channel_args& args);
|
60
|
+
|
57
61
|
// TODO(ncteisen), this only contains the uuids of the children for now,
|
58
62
|
// since that is all that is strictly needed. In a future enhancement we will
|
59
63
|
// add human readable names as in the channelz.proto
|
@@ -147,44 +151,19 @@ class CallCountingHelper {
|
|
147
151
|
// Handles channelz bookkeeping for channels
|
148
152
|
class ChannelNode : public BaseNode {
|
149
153
|
public:
|
150
|
-
|
151
|
-
|
152
|
-
bool is_top_level_channel);
|
154
|
+
ChannelNode(UniquePtr<char> target, size_t channel_tracer_max_nodes,
|
155
|
+
intptr_t parent_uuid);
|
153
156
|
|
154
|
-
|
155
|
-
bool is_top_level_channel);
|
156
|
-
~ChannelNode() override;
|
157
|
+
intptr_t parent_uuid() const { return parent_uuid_; }
|
157
158
|
|
158
159
|
grpc_json* RenderJson() override;
|
159
160
|
|
160
|
-
// template methods. RenderJSON uses these methods to render its JSON
|
161
|
-
// representation. These are virtual so that children classes may provide
|
162
|
-
// their specific mechanism for populating these parts of the channelz
|
163
|
-
// object.
|
164
|
-
//
|
165
|
-
// ChannelNode does not have a notion of connectivity state or child refs,
|
166
|
-
// so it leaves these implementations blank.
|
167
|
-
//
|
168
|
-
// This is utilizing the template method design pattern.
|
169
|
-
//
|
170
|
-
// TODO(ncteisen): remove these template methods in favor of manual traversal
|
171
|
-
// and mutation of the grpc_json object.
|
172
|
-
virtual void PopulateConnectivityState(grpc_json* json) {}
|
173
|
-
virtual void PopulateChildRefs(grpc_json* json) {}
|
174
|
-
|
175
|
-
void MarkChannelDestroyed() {
|
176
|
-
GPR_ASSERT(channel_ != nullptr);
|
177
|
-
channel_ = nullptr;
|
178
|
-
}
|
179
|
-
|
180
|
-
bool ChannelIsDestroyed() { return channel_ == nullptr; }
|
181
|
-
|
182
161
|
// proxy methods to composed classes.
|
183
|
-
void AddTraceEvent(ChannelTrace::Severity severity, grpc_slice data) {
|
162
|
+
void AddTraceEvent(ChannelTrace::Severity severity, const grpc_slice& data) {
|
184
163
|
trace_.AddTraceEvent(severity, data);
|
185
164
|
}
|
186
165
|
void AddTraceEventWithReference(ChannelTrace::Severity severity,
|
187
|
-
grpc_slice data,
|
166
|
+
const grpc_slice& data,
|
188
167
|
RefCountedPtr<BaseNode> referenced_channel) {
|
189
168
|
trace_.AddTraceEventWithReference(severity, data,
|
190
169
|
std::move(referenced_channel));
|
@@ -193,13 +172,35 @@ class ChannelNode : public BaseNode {
|
|
193
172
|
void RecordCallFailed() { call_counter_.RecordCallFailed(); }
|
194
173
|
void RecordCallSucceeded() { call_counter_.RecordCallSucceeded(); }
|
195
174
|
|
175
|
+
void SetConnectivityState(grpc_connectivity_state state);
|
176
|
+
|
177
|
+
void AddChildChannel(intptr_t child_uuid);
|
178
|
+
void RemoveChildChannel(intptr_t child_uuid);
|
179
|
+
|
180
|
+
void AddChildSubchannel(intptr_t child_uuid);
|
181
|
+
void RemoveChildSubchannel(intptr_t child_uuid);
|
182
|
+
|
196
183
|
private:
|
184
|
+
void PopulateChildRefs(grpc_json* json);
|
185
|
+
|
197
186
|
// to allow the channel trace test to access trace_.
|
198
187
|
friend class testing::ChannelNodePeer;
|
199
|
-
|
188
|
+
|
200
189
|
UniquePtr<char> target_;
|
201
190
|
CallCountingHelper call_counter_;
|
202
191
|
ChannelTrace trace_;
|
192
|
+
const intptr_t parent_uuid_;
|
193
|
+
|
194
|
+
// Least significant bit indicates whether the value is set. Remaining
|
195
|
+
// bits are a grpc_connectivity_state value.
|
196
|
+
Atomic<int> connectivity_state_{0};
|
197
|
+
|
198
|
+
Mutex child_mu_; // Guards child maps below.
|
199
|
+
// TODO(roth): We don't actually use the values here, only the keys, so
|
200
|
+
// these should be sets instead of maps, but we don't currently have a set
|
201
|
+
// implementation. Change this if/when we have one.
|
202
|
+
Map<intptr_t, bool> child_channels_;
|
203
|
+
Map<intptr_t, bool> child_subchannels_;
|
203
204
|
};
|
204
205
|
|
205
206
|
// Handles channelz bookkeeping for servers
|
@@ -214,11 +215,11 @@ class ServerNode : public BaseNode {
|
|
214
215
|
intptr_t pagination_limit);
|
215
216
|
|
216
217
|
// proxy methods to composed classes.
|
217
|
-
void AddTraceEvent(ChannelTrace::Severity severity, grpc_slice data) {
|
218
|
+
void AddTraceEvent(ChannelTrace::Severity severity, const grpc_slice& data) {
|
218
219
|
trace_.AddTraceEvent(severity, data);
|
219
220
|
}
|
220
221
|
void AddTraceEventWithReference(ChannelTrace::Severity severity,
|
221
|
-
grpc_slice data,
|
222
|
+
const grpc_slice& data,
|
222
223
|
RefCountedPtr<BaseNode> referenced_channel) {
|
223
224
|
trace_.AddTraceEventWithReference(severity, data,
|
224
225
|
std::move(referenced_channel));
|
@@ -285,11 +286,6 @@ class ListenSocketNode : public BaseNode {
|
|
285
286
|
UniquePtr<char> local_addr_;
|
286
287
|
};
|
287
288
|
|
288
|
-
// Creation functions
|
289
|
-
|
290
|
-
typedef RefCountedPtr<ChannelNode> (*ChannelNodeCreationFunc)(grpc_channel*,
|
291
|
-
size_t, bool);
|
292
|
-
|
293
289
|
} // namespace channelz
|
294
290
|
} // namespace grpc_core
|
295
291
|
|