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
@@ -0,0 +1,436 @@
|
|
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_MAP_H
|
20
|
+
#define GRPC_CORE_LIB_GPRPP_MAP_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include <string.h>
|
25
|
+
|
26
|
+
#include <algorithm>
|
27
|
+
#include <functional>
|
28
|
+
#include <iterator>
|
29
|
+
|
30
|
+
#include "src/core/lib/gpr/useful.h"
|
31
|
+
#include "src/core/lib/gprpp/memory.h"
|
32
|
+
#include "src/core/lib/gprpp/pair.h"
|
33
|
+
|
34
|
+
namespace grpc_core {
|
35
|
+
struct StringLess {
|
36
|
+
bool operator()(const char* a, const char* b) const {
|
37
|
+
return strcmp(a, b) < 0;
|
38
|
+
}
|
39
|
+
bool operator()(const UniquePtr<char>& k1, const UniquePtr<char>& k2) {
|
40
|
+
return strcmp(k1.get(), k2.get()) < 0;
|
41
|
+
}
|
42
|
+
};
|
43
|
+
|
44
|
+
namespace testing {
|
45
|
+
class MapTest;
|
46
|
+
}
|
47
|
+
|
48
|
+
// Alternative map implementation for grpc_core
|
49
|
+
template <class Key, class T, class Compare = std::less<Key>>
|
50
|
+
class Map {
|
51
|
+
public:
|
52
|
+
typedef Key key_type;
|
53
|
+
typedef T mapped_type;
|
54
|
+
typedef Pair<key_type, mapped_type> value_type;
|
55
|
+
typedef Compare key_compare;
|
56
|
+
class iterator;
|
57
|
+
|
58
|
+
~Map() { clear(); }
|
59
|
+
|
60
|
+
T& operator[](key_type&& key);
|
61
|
+
T& operator[](const key_type& key);
|
62
|
+
iterator find(const key_type& k);
|
63
|
+
size_t erase(const key_type& key);
|
64
|
+
// Removes the current entry and points to the next one
|
65
|
+
iterator erase(iterator iter);
|
66
|
+
|
67
|
+
size_t size() { return size_; }
|
68
|
+
|
69
|
+
template <class... Args>
|
70
|
+
Pair<iterator, bool> emplace(Args&&... args);
|
71
|
+
|
72
|
+
Pair<iterator, bool> insert(value_type&& pair) {
|
73
|
+
return emplace(std::move(pair));
|
74
|
+
}
|
75
|
+
|
76
|
+
Pair<iterator, bool> insert(const value_type& pair) { return emplace(pair); }
|
77
|
+
|
78
|
+
bool empty() const { return root_ == nullptr; }
|
79
|
+
|
80
|
+
void clear() {
|
81
|
+
auto iter = begin();
|
82
|
+
while (!empty()) {
|
83
|
+
iter = erase(iter);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
iterator begin() {
|
88
|
+
Entry* curr = GetMinEntry(root_);
|
89
|
+
return iterator(this, curr);
|
90
|
+
}
|
91
|
+
|
92
|
+
iterator end() { return iterator(this, nullptr); }
|
93
|
+
|
94
|
+
iterator lower_bound(const Key& k) {
|
95
|
+
key_compare compare;
|
96
|
+
return std::find_if(begin(), end(), [&k, &compare](const value_type& v) {
|
97
|
+
return !compare(v.first, k);
|
98
|
+
});
|
99
|
+
}
|
100
|
+
|
101
|
+
private:
|
102
|
+
friend class testing::MapTest;
|
103
|
+
struct Entry {
|
104
|
+
explicit Entry(value_type&& pair) : pair(std::move(pair)) {}
|
105
|
+
value_type pair;
|
106
|
+
Entry* left = nullptr;
|
107
|
+
Entry* right = nullptr;
|
108
|
+
int32_t height = 1;
|
109
|
+
};
|
110
|
+
|
111
|
+
static int32_t EntryHeight(const Entry* e) {
|
112
|
+
return e == nullptr ? 0 : e->height;
|
113
|
+
}
|
114
|
+
|
115
|
+
static Entry* GetMinEntry(Entry* e);
|
116
|
+
Entry* InOrderSuccessor(const Entry* e) const;
|
117
|
+
static Entry* RotateLeft(Entry* e);
|
118
|
+
static Entry* RotateRight(Entry* e);
|
119
|
+
static Entry* RebalanceTreeAfterInsertion(Entry* root, const key_type& k);
|
120
|
+
static Entry* RebalanceTreeAfterDeletion(Entry* root);
|
121
|
+
// Returns a pair with the first value being an iterator pointing to the
|
122
|
+
// inserted entry and the second value being the new root of the subtree
|
123
|
+
// after a rebalance
|
124
|
+
Pair<iterator, Entry*> InsertRecursive(Entry* root, value_type&& p);
|
125
|
+
// Returns a pair with the first value being an iterator pointing to the
|
126
|
+
// successor of the deleted entry and the second value being the new root of
|
127
|
+
// the subtree after a rebalance
|
128
|
+
Pair<iterator, Entry*> RemoveRecursive(Entry* root, const key_type& k);
|
129
|
+
// Return 0 if lhs = rhs
|
130
|
+
// 1 if lhs > rhs
|
131
|
+
// -1 if lhs < rhs
|
132
|
+
static int CompareKeys(const Key& lhs, const Key& rhs);
|
133
|
+
|
134
|
+
Entry* root_ = nullptr;
|
135
|
+
size_t size_ = 0;
|
136
|
+
};
|
137
|
+
|
138
|
+
template <class Key, class T, class Compare>
|
139
|
+
class Map<Key, T, Compare>::iterator
|
140
|
+
: public std::iterator<std::input_iterator_tag, Pair<Key, T>, int32_t,
|
141
|
+
Pair<Key, T>*, Pair<Key, T>&> {
|
142
|
+
public:
|
143
|
+
iterator(const iterator& iter) : curr_(iter.curr_), map_(iter.map_) {}
|
144
|
+
bool operator==(const iterator& rhs) const { return (curr_ == rhs.curr_); }
|
145
|
+
bool operator!=(const iterator& rhs) const { return (curr_ != rhs.curr_); }
|
146
|
+
|
147
|
+
iterator& operator++() {
|
148
|
+
curr_ = map_->InOrderSuccessor(curr_);
|
149
|
+
return *this;
|
150
|
+
}
|
151
|
+
|
152
|
+
iterator operator++(int) {
|
153
|
+
Entry* prev = curr_;
|
154
|
+
curr_ = map_->InOrderSuccessor(curr_);
|
155
|
+
return iterator(map_, prev);
|
156
|
+
}
|
157
|
+
|
158
|
+
iterator& operator=(const iterator& other) {
|
159
|
+
if (this != &other) {
|
160
|
+
this->curr_ = other.curr_;
|
161
|
+
this->map_ = other.map_;
|
162
|
+
}
|
163
|
+
return *this;
|
164
|
+
}
|
165
|
+
|
166
|
+
// operator*()
|
167
|
+
value_type& operator*() { return curr_->pair; }
|
168
|
+
const value_type& operator*() const { return curr_->pair; }
|
169
|
+
|
170
|
+
// operator->()
|
171
|
+
value_type* operator->() { return &curr_->pair; }
|
172
|
+
value_type const* operator->() const { return &curr_->pair; }
|
173
|
+
|
174
|
+
private:
|
175
|
+
friend class Map<key_type, mapped_type, key_compare>;
|
176
|
+
using GrpcMap = typename ::grpc_core::Map<Key, T, Compare>;
|
177
|
+
iterator(GrpcMap* map, Entry* curr) : curr_(curr), map_(map) {}
|
178
|
+
Entry* curr_;
|
179
|
+
GrpcMap* map_;
|
180
|
+
};
|
181
|
+
|
182
|
+
template <class Key, class T, class Compare>
|
183
|
+
T& Map<Key, T, Compare>::operator[](key_type&& key) {
|
184
|
+
auto iter = find(key);
|
185
|
+
if (iter == end()) {
|
186
|
+
return emplace(std::move(key), T()).first->second;
|
187
|
+
}
|
188
|
+
return iter->second;
|
189
|
+
}
|
190
|
+
|
191
|
+
template <class Key, class T, class Compare>
|
192
|
+
T& Map<Key, T, Compare>::operator[](const key_type& key) {
|
193
|
+
auto iter = find(key);
|
194
|
+
if (iter == end()) {
|
195
|
+
return emplace(key, T()).first->second;
|
196
|
+
}
|
197
|
+
return iter->second;
|
198
|
+
}
|
199
|
+
|
200
|
+
template <class Key, class T, class Compare>
|
201
|
+
typename Map<Key, T, Compare>::iterator Map<Key, T, Compare>::find(
|
202
|
+
const key_type& k) {
|
203
|
+
Entry* iter = root_;
|
204
|
+
while (iter != nullptr) {
|
205
|
+
int comp = CompareKeys(iter->pair.first, k);
|
206
|
+
if (comp == 0) {
|
207
|
+
return iterator(this, iter);
|
208
|
+
} else if (comp < 0) {
|
209
|
+
iter = iter->right;
|
210
|
+
} else {
|
211
|
+
iter = iter->left;
|
212
|
+
}
|
213
|
+
}
|
214
|
+
return end();
|
215
|
+
}
|
216
|
+
|
217
|
+
template <class Key, class T, class Compare>
|
218
|
+
template <class... Args>
|
219
|
+
typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator, bool>
|
220
|
+
Map<Key, T, Compare>::emplace(Args&&... args) {
|
221
|
+
Pair<key_type, mapped_type> pair(std::forward<Args>(args)...);
|
222
|
+
iterator ret = find(pair.first);
|
223
|
+
bool insertion = false;
|
224
|
+
if (ret == end()) {
|
225
|
+
Pair<iterator, Entry*> p = InsertRecursive(root_, std::move(pair));
|
226
|
+
root_ = p.second;
|
227
|
+
ret = p.first;
|
228
|
+
insertion = true;
|
229
|
+
size_++;
|
230
|
+
}
|
231
|
+
return MakePair(ret, insertion);
|
232
|
+
}
|
233
|
+
|
234
|
+
template <class Key, class T, class Compare>
|
235
|
+
size_t Map<Key, T, Compare>::erase(const key_type& key) {
|
236
|
+
iterator it = find(key);
|
237
|
+
if (it == end()) return 0;
|
238
|
+
erase(it);
|
239
|
+
return 1;
|
240
|
+
}
|
241
|
+
|
242
|
+
// TODO(mhaidry): Modify erase to use the iterator location
|
243
|
+
// to create an efficient erase method
|
244
|
+
template <class Key, class T, class Compare>
|
245
|
+
typename Map<Key, T, Compare>::iterator Map<Key, T, Compare>::erase(
|
246
|
+
iterator iter) {
|
247
|
+
if (iter == end()) return iter;
|
248
|
+
key_type& del_key = iter->first;
|
249
|
+
Pair<iterator, Entry*> ret = RemoveRecursive(root_, del_key);
|
250
|
+
root_ = ret.second;
|
251
|
+
size_--;
|
252
|
+
return ret.first;
|
253
|
+
}
|
254
|
+
|
255
|
+
template <class Key, class T, class Compare>
|
256
|
+
typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::InOrderSuccessor(
|
257
|
+
const Entry* e) const {
|
258
|
+
if (e->right != nullptr) {
|
259
|
+
return GetMinEntry(e->right);
|
260
|
+
}
|
261
|
+
Entry* successor = nullptr;
|
262
|
+
Entry* iter = root_;
|
263
|
+
while (iter != nullptr) {
|
264
|
+
int comp = CompareKeys(iter->pair.first, e->pair.first);
|
265
|
+
if (comp > 0) {
|
266
|
+
successor = iter;
|
267
|
+
iter = iter->left;
|
268
|
+
} else if (comp < 0) {
|
269
|
+
iter = iter->right;
|
270
|
+
} else
|
271
|
+
break;
|
272
|
+
}
|
273
|
+
return successor;
|
274
|
+
}
|
275
|
+
|
276
|
+
// Returns a pair with the first value being an iterator pointing to the
|
277
|
+
// inserted entry and the second value being the new root of the subtree
|
278
|
+
// after a rebalance
|
279
|
+
template <class Key, class T, class Compare>
|
280
|
+
typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator,
|
281
|
+
typename Map<Key, T, Compare>::Entry*>
|
282
|
+
Map<Key, T, Compare>::InsertRecursive(Entry* root, value_type&& p) {
|
283
|
+
if (root == nullptr) {
|
284
|
+
Entry* e = New<Entry>(std::move(p));
|
285
|
+
return MakePair(iterator(this, e), e);
|
286
|
+
}
|
287
|
+
int comp = CompareKeys(root->pair.first, p.first);
|
288
|
+
if (comp > 0) {
|
289
|
+
Pair<iterator, Entry*> ret = InsertRecursive(root->left, std::move(p));
|
290
|
+
root->left = ret.second;
|
291
|
+
ret.second = RebalanceTreeAfterInsertion(root, ret.first->first);
|
292
|
+
return ret;
|
293
|
+
} else if (comp < 0) {
|
294
|
+
Pair<iterator, Entry*> ret = InsertRecursive(root->right, std::move(p));
|
295
|
+
root->right = ret.second;
|
296
|
+
ret.second = RebalanceTreeAfterInsertion(root, ret.first->first);
|
297
|
+
return ret;
|
298
|
+
} else {
|
299
|
+
root->pair = std::move(p);
|
300
|
+
return MakePair(iterator(this, root), root);
|
301
|
+
}
|
302
|
+
}
|
303
|
+
|
304
|
+
template <class Key, class T, class Compare>
|
305
|
+
typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::GetMinEntry(
|
306
|
+
Entry* e) {
|
307
|
+
if (e != nullptr) {
|
308
|
+
while (e->left != nullptr) {
|
309
|
+
e = e->left;
|
310
|
+
}
|
311
|
+
}
|
312
|
+
return e;
|
313
|
+
}
|
314
|
+
|
315
|
+
template <class Key, class T, class Compare>
|
316
|
+
typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::RotateLeft(
|
317
|
+
Entry* e) {
|
318
|
+
Entry* rightChild = e->right;
|
319
|
+
Entry* rightLeftChild = rightChild->left;
|
320
|
+
rightChild->left = e;
|
321
|
+
e->right = rightLeftChild;
|
322
|
+
e->height = 1 + GPR_MAX(EntryHeight(e->left), EntryHeight(e->right));
|
323
|
+
rightChild->height = 1 + GPR_MAX(EntryHeight(rightChild->left),
|
324
|
+
EntryHeight(rightChild->right));
|
325
|
+
return rightChild;
|
326
|
+
}
|
327
|
+
|
328
|
+
template <class Key, class T, class Compare>
|
329
|
+
typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::RotateRight(
|
330
|
+
Entry* e) {
|
331
|
+
Entry* leftChild = e->left;
|
332
|
+
Entry* leftRightChild = leftChild->right;
|
333
|
+
leftChild->right = e;
|
334
|
+
e->left = leftRightChild;
|
335
|
+
e->height = 1 + GPR_MAX(EntryHeight(e->left), EntryHeight(e->right));
|
336
|
+
leftChild->height =
|
337
|
+
1 + GPR_MAX(EntryHeight(leftChild->left), EntryHeight(leftChild->right));
|
338
|
+
return leftChild;
|
339
|
+
}
|
340
|
+
|
341
|
+
template <class Key, class T, class Compare>
|
342
|
+
typename Map<Key, T, Compare>::Entry*
|
343
|
+
Map<Key, T, Compare>::RebalanceTreeAfterInsertion(Entry* root,
|
344
|
+
const key_type& k) {
|
345
|
+
root->height = 1 + GPR_MAX(EntryHeight(root->left), EntryHeight(root->right));
|
346
|
+
int32_t heightDifference = EntryHeight(root->left) - EntryHeight(root->right);
|
347
|
+
if (heightDifference > 1 && CompareKeys(root->left->pair.first, k) > 0) {
|
348
|
+
return RotateRight(root);
|
349
|
+
}
|
350
|
+
if (heightDifference < -1 && CompareKeys(root->right->pair.first, k) < 0) {
|
351
|
+
return RotateLeft(root);
|
352
|
+
}
|
353
|
+
if (heightDifference > 1 && CompareKeys(root->left->pair.first, k) < 0) {
|
354
|
+
root->left = RotateLeft(root->left);
|
355
|
+
return RotateRight(root);
|
356
|
+
}
|
357
|
+
if (heightDifference < -1 && CompareKeys(root->right->pair.first, k) > 0) {
|
358
|
+
root->right = RotateRight(root->right);
|
359
|
+
return RotateLeft(root);
|
360
|
+
}
|
361
|
+
return root;
|
362
|
+
}
|
363
|
+
|
364
|
+
template <class Key, class T, class Compare>
|
365
|
+
typename Map<Key, T, Compare>::Entry*
|
366
|
+
Map<Key, T, Compare>::RebalanceTreeAfterDeletion(Entry* root) {
|
367
|
+
root->height = 1 + GPR_MAX(EntryHeight(root->left), EntryHeight(root->right));
|
368
|
+
int32_t heightDifference = EntryHeight(root->left) - EntryHeight(root->right);
|
369
|
+
if (heightDifference > 1) {
|
370
|
+
int leftHeightDifference =
|
371
|
+
EntryHeight(root->left->left) - EntryHeight(root->left->right);
|
372
|
+
if (leftHeightDifference < 0) {
|
373
|
+
root->left = RotateLeft(root->left);
|
374
|
+
}
|
375
|
+
return RotateRight(root);
|
376
|
+
}
|
377
|
+
if (heightDifference < -1) {
|
378
|
+
int rightHeightDifference =
|
379
|
+
EntryHeight(root->right->left) - EntryHeight(root->right->right);
|
380
|
+
if (rightHeightDifference > 0) {
|
381
|
+
root->right = RotateRight(root->right);
|
382
|
+
}
|
383
|
+
return RotateLeft(root);
|
384
|
+
}
|
385
|
+
return root;
|
386
|
+
}
|
387
|
+
|
388
|
+
template <class Key, class T, class Compare>
|
389
|
+
typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator,
|
390
|
+
typename Map<Key, T, Compare>::Entry*>
|
391
|
+
Map<Key, T, Compare>::RemoveRecursive(Entry* root, const key_type& k) {
|
392
|
+
Pair<iterator, Entry*> ret = MakePair(end(), root);
|
393
|
+
if (root == nullptr) return ret;
|
394
|
+
int comp = CompareKeys(root->pair.first, k);
|
395
|
+
if (comp > 0) {
|
396
|
+
ret = RemoveRecursive(root->left, k);
|
397
|
+
root->left = ret.second;
|
398
|
+
} else if (comp < 0) {
|
399
|
+
ret = RemoveRecursive(root->right, k);
|
400
|
+
root->right = ret.second;
|
401
|
+
} else {
|
402
|
+
Entry* entry;
|
403
|
+
Entry* successor = InOrderSuccessor(root);
|
404
|
+
if (root->left == nullptr) {
|
405
|
+
entry = root->right;
|
406
|
+
Delete(root);
|
407
|
+
return MakePair(iterator(this, successor), entry);
|
408
|
+
} else if (root->right == nullptr) {
|
409
|
+
entry = root->left;
|
410
|
+
Delete(root);
|
411
|
+
return MakePair(iterator(this, successor), entry);
|
412
|
+
} else {
|
413
|
+
entry = successor;
|
414
|
+
root->pair.swap(entry->pair);
|
415
|
+
ret = RemoveRecursive(root->right, entry->pair.first);
|
416
|
+
root->right = ret.second;
|
417
|
+
ret.first = iterator(this, root);
|
418
|
+
}
|
419
|
+
}
|
420
|
+
return MakePair(ret.first, RebalanceTreeAfterDeletion(root));
|
421
|
+
}
|
422
|
+
|
423
|
+
template <class Key, class T, class Compare>
|
424
|
+
int Map<Key, T, Compare>::CompareKeys(const key_type& lhs,
|
425
|
+
const key_type& rhs) {
|
426
|
+
key_compare compare;
|
427
|
+
bool left_comparison = compare(lhs, rhs);
|
428
|
+
bool right_comparison = compare(rhs, lhs);
|
429
|
+
// Both values are equal
|
430
|
+
if (!left_comparison && !right_comparison) {
|
431
|
+
return 0;
|
432
|
+
}
|
433
|
+
return left_comparison ? -1 : 1;
|
434
|
+
}
|
435
|
+
} // namespace grpc_core
|
436
|
+
#endif /* GRPC_CORE_LIB_GPRPP_MAP_H */
|
data/src/core/lib/gprpp/memory.h
CHANGED
@@ -29,12 +29,12 @@
|
|
29
29
|
|
30
30
|
// Add this to a class that want to use Delete(), but has a private or
|
31
31
|
// protected destructor.
|
32
|
-
#define
|
32
|
+
#define GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE \
|
33
33
|
template <typename T> \
|
34
34
|
friend void grpc_core::Delete(T*);
|
35
35
|
// Add this to a class that want to use New(), but has a private or
|
36
36
|
// protected constructor.
|
37
|
-
#define
|
37
|
+
#define GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW \
|
38
38
|
template <typename T, typename... Args> \
|
39
39
|
friend T* grpc_core::New(Args&&...);
|
40
40
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2019 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_OPTIONAL_H
|
20
|
+
#define GRPC_CORE_LIB_GPRPP_OPTIONAL_H
|
21
|
+
|
22
|
+
namespace grpc_core {
|
23
|
+
|
24
|
+
/* A make-shift alternative for absl::Optional. This can be removed in favor of
|
25
|
+
* that once absl dependencies can be introduced. */
|
26
|
+
template <typename T>
|
27
|
+
class Optional {
|
28
|
+
public:
|
29
|
+
Optional() : value_() {}
|
30
|
+
void set(const T& val) {
|
31
|
+
value_ = val;
|
32
|
+
set_ = true;
|
33
|
+
}
|
34
|
+
|
35
|
+
bool has_value() const { return set_; }
|
36
|
+
|
37
|
+
void reset() { set_ = false; }
|
38
|
+
|
39
|
+
T value() const { return value_; }
|
40
|
+
|
41
|
+
private:
|
42
|
+
T value_;
|
43
|
+
bool set_ = false;
|
44
|
+
};
|
45
|
+
|
46
|
+
} /* namespace grpc_core */
|
47
|
+
|
48
|
+
#endif /* GRPC_CORE_LIB_GPRPP_OPTIONAL_H */
|
@@ -84,7 +84,7 @@ class InternallyRefCounted : public Orphanable {
|
|
84
84
|
GRPC_ABSTRACT_BASE_CLASS
|
85
85
|
|
86
86
|
protected:
|
87
|
-
|
87
|
+
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
88
88
|
|
89
89
|
// Allow RefCountedPtr<> to access Unref() and IncrementRefCount().
|
90
90
|
template <typename T>
|
@@ -94,8 +94,9 @@ class InternallyRefCounted : public Orphanable {
|
|
94
94
|
// Note: RefCount tracing is only enabled on debug builds, even when a
|
95
95
|
// TraceFlag is used.
|
96
96
|
template <typename TraceFlagT = TraceFlag>
|
97
|
-
explicit InternallyRefCounted(TraceFlagT* trace_flag = nullptr
|
98
|
-
|
97
|
+
explicit InternallyRefCounted(TraceFlagT* trace_flag = nullptr,
|
98
|
+
intptr_t initial_refcount = 1)
|
99
|
+
: refs_(initial_refcount, trace_flag) {}
|
99
100
|
virtual ~InternallyRefCounted() = default;
|
100
101
|
|
101
102
|
RefCountedPtr<Child> Ref() GRPC_MUST_USE_RESULT {
|
@@ -109,12 +110,12 @@ class InternallyRefCounted : public Orphanable {
|
|
109
110
|
}
|
110
111
|
|
111
112
|
void Unref() {
|
112
|
-
if (refs_.Unref()) {
|
113
|
+
if (GPR_UNLIKELY(refs_.Unref())) {
|
113
114
|
Delete(static_cast<Child*>(this));
|
114
115
|
}
|
115
116
|
}
|
116
117
|
void Unref(const DebugLocation& location, const char* reason) {
|
117
|
-
if (refs_.Unref(location, reason)) {
|
118
|
+
if (GPR_UNLIKELY(refs_.Unref(location, reason))) {
|
118
119
|
Delete(static_cast<Child*>(this));
|
119
120
|
}
|
120
121
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
*
|
3
|
-
* Copyright
|
3
|
+
* Copyright 2017 gRPC authors.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
@@ -16,27 +16,23 @@
|
|
16
16
|
*
|
17
17
|
*/
|
18
18
|
|
19
|
-
#ifndef
|
20
|
-
#define
|
19
|
+
#ifndef GRPC_CORE_LIB_GPRPP_PAIR_H
|
20
|
+
#define GRPC_CORE_LIB_GPRPP_PAIR_H
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include <
|
24
|
+
#include <utility>
|
25
25
|
|
26
26
|
namespace grpc_core {
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
gpr_mu* const mu_;
|
38
|
-
};
|
39
|
-
|
27
|
+
template <class T1, class T2>
|
28
|
+
using Pair = std::pair<T1, T2>;
|
29
|
+
|
30
|
+
template <class T1, class T2>
|
31
|
+
inline Pair<typename std::decay<T1>::type, typename std::decay<T2>::type>
|
32
|
+
MakePair(T1&& u, T2&& v) {
|
33
|
+
typedef typename std::decay<T1>::type V1;
|
34
|
+
typedef typename std::decay<T2>::type V2;
|
35
|
+
return Pair<V1, V2>(std::forward<T1>(u), std::forward<T2>(v));
|
36
|
+
}
|
40
37
|
} // namespace grpc_core
|
41
|
-
|
42
|
-
#endif /* GRPC_CORE_LIB_GPRPP_MUTEX_LOCK_H */
|
38
|
+
#endif /* GRPC_CORE_LIB_GPRPP_PAIR_H */
|