grpc 1.0.1 → 1.1.2
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 +3696 -867
- data/etc/roots.pem +39 -111
- data/include/grpc/byte_buffer.h +64 -1
- data/include/grpc/census.h +40 -96
- data/include/grpc/compression.h +2 -1
- data/include/grpc/grpc.h +42 -7
- data/include/grpc/grpc_posix.h +8 -5
- data/include/grpc/impl/codegen/atm.h +3 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
- data/include/grpc/impl/codegen/compression_types.h +1 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
- data/include/grpc/impl/codegen/gpr_slice.h +84 -0
- data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
- data/include/grpc/impl/codegen/grpc_types.h +91 -9
- data/include/grpc/impl/codegen/port_platform.h +25 -92
- data/include/grpc/impl/codegen/slice.h +54 -97
- data/include/grpc/impl/codegen/sync.h +0 -253
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice.h +132 -0
- data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
- data/include/grpc/support/alloc.h +40 -1
- data/include/grpc/support/log.h +80 -1
- data/include/grpc/support/log_windows.h +2 -0
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +252 -0
- data/include/grpc/support/time.h +67 -1
- data/src/boringssl/err_data.c +639 -627
- data/src/core/ext/census/base_resources.c +71 -0
- data/src/core/ext/census/base_resources.h +39 -0
- data/src/core/ext/census/gen/census.pb.c +26 -29
- data/src/core/ext/census/gen/census.pb.h +68 -67
- data/src/core/ext/census/gen/trace_context.pb.c +81 -0
- data/src/core/ext/census/gen/trace_context.pb.h +99 -0
- data/src/core/ext/census/grpc_filter.c +22 -16
- data/src/core/ext/census/grpc_plugin.c +2 -1
- data/src/core/ext/census/initialize.c +16 -4
- data/src/core/ext/census/mlog.h +1 -1
- data/src/core/ext/census/placeholders.c +0 -45
- data/src/core/ext/census/resource.c +312 -0
- data/src/core/ext/census/resource.h +63 -0
- data/src/core/ext/census/trace_context.c +86 -0
- data/src/core/ext/census/trace_context.h +68 -0
- data/src/core/ext/census/tracing.c +8 -2
- data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
- data/src/core/ext/client_channel/client_channel.c +1218 -0
- data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
- data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
- data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
- data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
- data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
- data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
- data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
- data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
- data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
- data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
- data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
- data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
- data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
- data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
- data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
- data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
- data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
- data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
- data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
- data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
- data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
- data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
- data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
- data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
- data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
- data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
- data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
- data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
- data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
- data/src/core/ext/load_reporting/load_reporting.c +7 -56
- data/src/core/ext/load_reporting/load_reporting.h +41 -28
- data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
- data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
- data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
- data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
- data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
- data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
- data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
- data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
- data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
- data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
- data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
- data/src/core/lib/channel/channel_args.c +70 -13
- data/src/core/lib/channel/channel_args.h +28 -2
- data/src/core/lib/channel/channel_stack.c +77 -28
- data/src/core/lib/channel/channel_stack.h +61 -23
- data/src/core/lib/channel/channel_stack_builder.c +33 -25
- data/src/core/lib/channel/channel_stack_builder.h +17 -8
- data/src/core/lib/channel/compress_filter.c +52 -36
- data/src/core/lib/channel/connected_channel.c +20 -12
- data/src/core/lib/channel/connected_channel.h +2 -1
- data/src/core/lib/channel/context.h +13 -1
- data/src/core/lib/channel/deadline_filter.c +344 -0
- data/src/core/lib/channel/deadline_filter.h +99 -0
- data/src/core/lib/channel/handshaker.c +240 -0
- data/src/core/lib/channel/handshaker.h +164 -0
- data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
- data/src/core/lib/channel/handshaker_factory.h +66 -0
- data/src/core/lib/channel/handshaker_registry.c +113 -0
- data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
- data/src/core/lib/channel/http_client_filter.c +248 -46
- data/src/core/lib/channel/http_client_filter.h +3 -0
- data/src/core/lib/channel/http_server_filter.c +136 -24
- data/src/core/lib/channel/message_size_filter.c +261 -0
- data/src/core/lib/channel/message_size_filter.h +39 -0
- data/src/core/lib/compression/message_compress.c +43 -37
- data/src/core/lib/compression/message_compress.h +7 -5
- data/src/core/lib/http/format_request.c +26 -11
- data/src/core/lib/http/format_request.h +7 -5
- data/src/core/lib/http/httpcli.c +45 -27
- data/src/core/lib/http/httpcli.h +4 -4
- data/src/core/lib/http/httpcli_security_connector.c +56 -46
- data/src/core/lib/http/parser.c +17 -14
- data/src/core/lib/http/parser.h +4 -2
- data/src/core/lib/iomgr/closure.c +49 -7
- data/src/core/lib/iomgr/closure.h +56 -14
- data/src/core/lib/iomgr/combiner.c +422 -0
- data/src/core/lib/iomgr/combiner.h +64 -0
- data/src/core/lib/iomgr/endpoint.c +8 -2
- data/src/core/lib/iomgr/endpoint.h +17 -7
- data/src/core/lib/iomgr/endpoint_pair.h +3 -2
- data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
- data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
- data/src/core/lib/iomgr/error.c +72 -6
- data/src/core/lib/iomgr/error.h +30 -3
- data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
- data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
- data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
- data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
- data/src/core/lib/iomgr/ev_posix.c +26 -5
- data/src/core/lib/iomgr/ev_posix.h +12 -1
- data/src/core/lib/iomgr/exec_ctx.c +27 -94
- data/src/core/lib/iomgr/exec_ctx.h +19 -22
- data/src/core/lib/iomgr/executor.c +29 -8
- data/src/core/lib/iomgr/executor.h +2 -4
- data/src/core/lib/iomgr/iocp_windows.c +3 -4
- data/src/core/lib/iomgr/iomgr.c +14 -10
- data/src/core/lib/iomgr/iomgr.h +6 -2
- data/src/core/lib/iomgr/iomgr_posix.c +2 -2
- data/src/core/lib/iomgr/iomgr_uv.c +49 -0
- data/src/core/lib/iomgr/iomgr_windows.c +2 -2
- data/src/core/lib/iomgr/load_file.c +3 -3
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/network_status_tracker.c +1 -1
- data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
- data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
- data/src/core/lib/iomgr/pollset_uv.c +142 -0
- data/src/core/lib/iomgr/pollset_uv.h +42 -0
- data/src/core/lib/iomgr/pollset_windows.c +5 -6
- data/src/core/lib/iomgr/port.h +129 -0
- data/src/core/lib/iomgr/resolve_address.h +2 -1
- data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
- data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
- data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
- data/src/core/lib/iomgr/resource_quota.c +832 -0
- data/src/core/lib/iomgr/resource_quota.h +159 -0
- data/src/core/lib/iomgr/sockaddr.h +10 -2
- data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
- data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
- data/src/core/lib/iomgr/socket_mutator.c +98 -0
- data/src/core/lib/iomgr/socket_mutator.h +80 -0
- data/src/core/lib/iomgr/socket_utils.h +42 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
- data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
- data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
- data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
- data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
- data/src/core/lib/iomgr/socket_windows.c +14 -6
- data/src/core/lib/iomgr/socket_windows.h +1 -0
- data/src/core/lib/iomgr/tcp_client.h +8 -2
- data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
- data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
- data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
- data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
- data/src/core/lib/iomgr/tcp_posix.c +135 -56
- data/src/core/lib/iomgr/tcp_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server.h +14 -6
- data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
- data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
- data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
- data/src/core/lib/iomgr/tcp_uv.c +367 -0
- data/src/core/lib/iomgr/tcp_uv.h +59 -0
- data/src/core/lib/iomgr/tcp_windows.c +65 -48
- data/src/core/lib/iomgr/tcp_windows.h +3 -1
- data/src/core/lib/iomgr/timer.h +21 -21
- data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
- data/src/core/lib/iomgr/timer_generic.h +49 -0
- data/src/core/lib/iomgr/timer_heap.c +6 -0
- data/src/core/lib/iomgr/timer_uv.c +99 -0
- data/src/core/lib/iomgr/timer_uv.h +47 -0
- data/src/core/lib/iomgr/udp_server.c +116 -98
- data/src/core/lib/iomgr/udp_server.h +5 -3
- data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
- data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
- data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
- data/src/core/lib/iomgr/workqueue.h +12 -20
- data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
- data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
- data/src/core/lib/iomgr/workqueue_windows.c +9 -8
- data/src/core/lib/json/json.c +3 -3
- data/src/core/lib/json/json.h +11 -11
- data/src/core/lib/json/json_reader.c +9 -5
- data/src/core/lib/profiling/basic_timers.c +10 -1
- data/src/core/lib/profiling/timers.h +2 -0
- data/src/core/lib/security/context/security_context.c +13 -3
- data/src/core/lib/security/context/security_context.h +20 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.c +48 -19
- data/src/core/lib/security/credentials/credentials.h +36 -19
- data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
- data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
- data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
- data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
- data/src/core/lib/security/transport/client_auth_filter.c +33 -27
- data/src/core/lib/security/transport/secure_endpoint.c +93 -68
- data/src/core/lib/security/transport/secure_endpoint.h +2 -2
- data/src/core/lib/security/transport/security_connector.c +133 -168
- data/src/core/lib/security/transport/security_connector.h +31 -46
- data/src/core/lib/security/transport/security_handshaker.c +501 -0
- data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
- data/src/core/lib/security/transport/server_auth_filter.c +50 -38
- data/src/core/lib/security/util/b64.c +11 -8
- data/src/core/lib/security/util/b64.h +5 -4
- data/src/core/lib/slice/percent_encoding.c +182 -0
- data/src/core/lib/slice/percent_encoding.h +78 -0
- data/src/core/lib/{support → slice}/slice.c +81 -50
- data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
- data/src/core/lib/slice/slice_internal.h +49 -0
- data/src/core/lib/slice/slice_string_helpers.c +90 -0
- data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
- data/src/core/lib/support/backoff.c +24 -13
- data/src/core/lib/support/backoff.h +5 -2
- data/src/core/lib/support/env.h +0 -2
- data/src/core/lib/support/log.c +5 -4
- data/src/core/lib/support/log_linux.c +0 -1
- data/src/core/lib/support/log_posix.c +1 -1
- data/src/core/lib/support/mpscq.c +83 -0
- data/src/core/lib/support/mpscq.h +65 -0
- data/src/core/lib/support/string.c +58 -49
- data/src/core/lib/support/string.h +11 -8
- data/src/core/lib/support/subprocess_posix.c +5 -2
- data/src/core/lib/support/thd.c +1 -1
- data/src/core/lib/support/time.c +43 -79
- data/src/core/lib/support/time_posix.c +1 -1
- data/src/core/lib/support/tmpfile.h +0 -2
- data/src/core/lib/surface/alarm.c +4 -1
- data/src/core/lib/surface/byte_buffer.c +17 -11
- data/src/core/lib/surface/byte_buffer_reader.c +23 -15
- data/src/core/lib/surface/call.c +294 -276
- data/src/core/lib/surface/call.h +24 -9
- data/src/core/lib/surface/call_log_batch.c +5 -3
- data/src/core/lib/surface/channel.c +127 -111
- data/src/core/lib/surface/channel.h +14 -5
- data/src/core/lib/surface/channel_init.c +1 -1
- data/src/core/lib/surface/channel_init.h +10 -1
- data/src/core/lib/surface/channel_ping.c +7 -6
- data/src/core/lib/surface/completion_queue.c +154 -18
- data/src/core/lib/surface/completion_queue.h +5 -0
- data/src/core/lib/surface/init.c +40 -6
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.c +5 -2
- data/src/core/lib/surface/lame_client.c +28 -18
- data/src/core/lib/surface/server.c +134 -87
- data/src/core/lib/surface/server.h +8 -0
- data/src/core/lib/surface/validate_metadata.c +1 -1
- data/src/core/lib/surface/version.c +3 -1
- data/src/core/lib/transport/byte_stream.c +7 -4
- data/src/core/lib/transport/byte_stream.h +6 -10
- data/src/core/lib/transport/connectivity_state.c +21 -12
- data/src/core/lib/transport/connectivity_state.h +4 -1
- data/src/core/lib/transport/mdstr_hash_table.c +118 -0
- data/src/core/lib/transport/mdstr_hash_table.h +77 -0
- data/src/core/lib/transport/metadata.c +83 -60
- data/src/core/lib/transport/metadata.h +41 -23
- data/src/core/lib/transport/metadata_batch.c +17 -11
- data/src/core/lib/transport/metadata_batch.h +20 -6
- data/src/core/lib/transport/pid_controller.c +57 -0
- data/src/core/lib/transport/pid_controller.h +64 -0
- data/src/core/lib/transport/service_config.c +251 -0
- data/src/core/lib/transport/service_config.h +71 -0
- data/src/core/lib/transport/static_metadata.c +18 -16
- data/src/core/lib/transport/static_metadata.h +113 -107
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
- data/src/core/lib/transport/transport.c +84 -23
- data/src/core/lib/transport/transport.h +53 -8
- data/src/core/lib/transport/transport_impl.h +3 -0
- data/src/core/lib/transport/transport_op_string.c +92 -20
- data/src/core/lib/tsi/ssl_transport_security.c +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
- data/src/ruby/ext/grpc/extconf.rb +0 -1
- data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
- data/src/ruby/ext/grpc/rb_call.c +15 -5
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
- data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
- data/src/ruby/ext/grpc/rb_grpc.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
- data/src/ruby/ext/grpc/rb_server.c +18 -12
- data/src/ruby/lib/grpc/errors.rb +154 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
- data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
- data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
- data/src/ruby/lib/grpc/generic/service.rb +3 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
- data/src/ruby/pb/test/client.rb +307 -7
- data/src/ruby/pb/test/server.rb +26 -1
- data/src/ruby/spec/compression_options_spec.rb +164 -0
- data/src/ruby/spec/error_sanity_spec.rb +64 -0
- data/src/ruby/spec/generic/active_call_spec.rb +290 -12
- data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
- data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
- data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
- data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
- data/src/ruby/spec/spec_helper.rb +2 -0
- data/third_party/boringssl/crypto/aes/aes.c +12 -12
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
- data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
- data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
- data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
- data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
- data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
- data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
- data/third_party/boringssl/crypto/base64/base64.c +249 -285
- data/third_party/boringssl/crypto/bio/bio.c +13 -23
- data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
- data/third_party/boringssl/crypto/bio/connect.c +12 -3
- data/third_party/boringssl/crypto/bio/fd.c +22 -15
- data/third_party/boringssl/crypto/bio/file.c +2 -38
- data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
- data/third_party/boringssl/crypto/bio/internal.h +3 -0
- data/third_party/boringssl/crypto/bio/pair.c +1 -1
- data/third_party/boringssl/crypto/bio/socket.c +10 -2
- data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
- data/third_party/boringssl/crypto/bn/bn.c +38 -0
- data/third_party/boringssl/crypto/bn/cmp.c +25 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -76
- data/third_party/boringssl/crypto/bn/div.c +136 -70
- data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
- data/third_party/boringssl/crypto/bn/gcd.c +213 -296
- data/third_party/boringssl/crypto/bn/generic.c +0 -80
- data/third_party/boringssl/crypto/bn/internal.h +15 -3
- data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
- data/third_party/boringssl/crypto/bn/mul.c +2 -1
- data/third_party/boringssl/crypto/bn/prime.c +24 -8
- data/third_party/boringssl/crypto/bn/random.c +47 -33
- data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
- data/third_party/boringssl/crypto/buf/buf.c +25 -21
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
- data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
- data/third_party/boringssl/crypto/cipher/aead.c +11 -22
- data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
- data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
- data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
- data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
- data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
- data/third_party/boringssl/crypto/cipher/internal.h +8 -10
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
- data/third_party/boringssl/crypto/conf/conf.c +2 -1
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
- data/third_party/boringssl/crypto/cpu-arm.c +0 -161
- data/third_party/boringssl/crypto/cpu-intel.c +5 -3
- data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
- data/third_party/boringssl/crypto/crypto.c +29 -7
- data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
- data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
- data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
- data/third_party/boringssl/crypto/dh/check.c +22 -6
- data/third_party/boringssl/crypto/dh/dh.c +45 -21
- data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
- data/third_party/boringssl/crypto/dh/params.c +30 -78
- data/third_party/boringssl/crypto/digest/digest.c +3 -3
- data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
- data/third_party/boringssl/crypto/ec/ec.c +84 -140
- data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
- data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
- data/third_party/boringssl/crypto/ec/internal.h +12 -36
- data/third_party/boringssl/crypto/ec/oct.c +11 -11
- data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
- data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
- data/third_party/boringssl/crypto/ec/simple.c +81 -201
- data/third_party/boringssl/crypto/ec/util-64.c +0 -74
- data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
- data/third_party/boringssl/crypto/engine/engine.c +1 -1
- data/third_party/boringssl/crypto/err/err.c +3 -3
- data/third_party/boringssl/crypto/evp/evp.c +14 -59
- data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
- data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
- data/third_party/boringssl/crypto/evp/internal.h +4 -46
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
- data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
- data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
- data/third_party/boringssl/crypto/evp/print.c +520 -0
- data/third_party/boringssl/crypto/ex_data.c +4 -6
- data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
- data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
- data/third_party/boringssl/crypto/internal.h +57 -77
- data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
- data/third_party/boringssl/crypto/md4/md4.c +9 -0
- data/third_party/boringssl/crypto/mem.c +19 -19
- data/third_party/boringssl/crypto/modes/cfb.c +5 -6
- data/third_party/boringssl/crypto/modes/ctr.c +10 -18
- data/third_party/boringssl/crypto/modes/gcm.c +100 -66
- data/third_party/boringssl/crypto/modes/internal.h +15 -27
- data/third_party/boringssl/crypto/modes/ofb.c +9 -22
- data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
- data/third_party/boringssl/crypto/newhope/internal.h +71 -0
- data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
- data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
- data/third_party/boringssl/crypto/newhope/poly.c +183 -0
- data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
- data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
- data/third_party/boringssl/crypto/obj/obj.c +111 -135
- data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
- data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
- data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
- data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
- data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
- data/third_party/boringssl/crypto/rand/rand.c +4 -1
- data/third_party/boringssl/crypto/rand/urandom.c +5 -7
- data/third_party/boringssl/crypto/rand/windows.c +5 -8
- data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
- data/third_party/boringssl/crypto/rsa/internal.h +5 -13
- data/third_party/boringssl/crypto/rsa/padding.c +64 -63
- data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
- data/third_party/boringssl/crypto/sha/sha256.c +2 -2
- data/third_party/boringssl/crypto/sha/sha512.c +7 -7
- data/third_party/boringssl/crypto/stack/stack.c +13 -22
- data/third_party/boringssl/crypto/thread.c +21 -12
- data/third_party/boringssl/crypto/thread_none.c +6 -2
- data/third_party/boringssl/crypto/thread_pthread.c +16 -7
- data/third_party/boringssl/crypto/thread_win.c +38 -85
- data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
- data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
- data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
- data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
- data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
- data/third_party/boringssl/crypto/x509/internal.h +66 -0
- data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
- data/third_party/boringssl/crypto/x509/x509.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
- data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
- data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
- data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
- data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
- data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
- data/third_party/boringssl/crypto/x509/x_name.c +14 -17
- data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
- data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
- data/third_party/boringssl/include/openssl/aead.h +72 -73
- data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
- data/third_party/boringssl/include/openssl/asn1.h +103 -235
- data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
- data/third_party/boringssl/include/openssl/asn1t.h +1 -11
- data/third_party/boringssl/include/openssl/base.h +145 -3
- data/third_party/boringssl/include/openssl/base64.h +20 -17
- data/third_party/boringssl/include/openssl/bio.h +59 -34
- data/third_party/boringssl/include/openssl/bn.h +118 -51
- data/third_party/boringssl/include/openssl/buf.h +15 -0
- data/third_party/boringssl/include/openssl/bytestring.h +52 -4
- data/third_party/boringssl/include/openssl/chacha.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +18 -1
- data/third_party/boringssl/include/openssl/cmac.h +11 -0
- data/third_party/boringssl/include/openssl/conf.h +13 -2
- data/third_party/boringssl/include/openssl/cpu.h +20 -23
- data/third_party/boringssl/include/openssl/crypto.h +22 -1
- data/third_party/boringssl/include/openssl/curve25519.h +96 -4
- data/third_party/boringssl/include/openssl/dh.h +71 -16
- data/third_party/boringssl/include/openssl/digest.h +38 -11
- data/third_party/boringssl/include/openssl/dsa.h +40 -4
- data/third_party/boringssl/include/openssl/ec.h +44 -18
- data/third_party/boringssl/include/openssl/ec_key.h +27 -6
- data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
- data/third_party/boringssl/include/openssl/engine.h +11 -0
- data/third_party/boringssl/include/openssl/evp.h +52 -88
- data/third_party/boringssl/include/openssl/hkdf.h +24 -4
- data/third_party/boringssl/include/openssl/hmac.h +20 -6
- data/third_party/boringssl/include/openssl/md4.h +4 -0
- data/third_party/boringssl/include/openssl/mem.h +19 -0
- data/third_party/boringssl/include/openssl/newhope.h +158 -0
- data/third_party/boringssl/include/openssl/nid.h +4166 -0
- data/third_party/boringssl/include/openssl/obj.h +31 -3
- data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
- data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
- data/third_party/boringssl/include/openssl/pem.h +5 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
- data/third_party/boringssl/include/openssl/rand.h +6 -0
- data/third_party/boringssl/include/openssl/rc4.h +6 -0
- data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
- data/third_party/boringssl/include/openssl/rsa.h +127 -65
- data/third_party/boringssl/include/openssl/sha.h +14 -10
- data/third_party/boringssl/include/openssl/ssl.h +561 -275
- data/third_party/boringssl/include/openssl/ssl3.h +18 -25
- data/third_party/boringssl/include/openssl/stack.h +2 -4
- data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
- data/third_party/boringssl/include/openssl/thread.h +31 -13
- data/third_party/boringssl/include/openssl/time_support.h +1 -0
- data/third_party/boringssl/include/openssl/tls1.h +37 -33
- data/third_party/boringssl/include/openssl/x509.h +69 -26
- data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
- data/third_party/boringssl/include/openssl/x509v3.h +23 -2
- data/third_party/boringssl/ssl/custom_extensions.c +3 -5
- data/third_party/boringssl/ssl/d1_both.c +463 -499
- data/third_party/boringssl/ssl/d1_lib.c +38 -109
- data/third_party/boringssl/ssl/d1_pkt.c +173 -334
- data/third_party/boringssl/ssl/d1_srtp.c +20 -18
- data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
- data/third_party/boringssl/ssl/dtls_record.c +27 -26
- data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
- data/third_party/boringssl/ssl/handshake_server.c +1932 -0
- data/third_party/boringssl/ssl/internal.h +712 -439
- data/third_party/boringssl/ssl/s3_both.c +445 -257
- data/third_party/boringssl/ssl/s3_enc.c +53 -36
- data/third_party/boringssl/ssl/s3_lib.c +23 -268
- data/third_party/boringssl/ssl/s3_pkt.c +168 -364
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
- data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
- data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
- data/third_party/boringssl/ssl/ssl_cert.c +324 -49
- data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
- data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
- data/third_party/boringssl/ssl/ssl_file.c +21 -68
- data/third_party/boringssl/ssl/ssl_lib.c +881 -510
- data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
- data/third_party/boringssl/ssl/ssl_session.c +324 -103
- data/third_party/boringssl/ssl/ssl_stat.c +6 -88
- data/third_party/boringssl/ssl/t1_enc.c +23 -39
- data/third_party/boringssl/ssl/t1_lib.c +1120 -622
- data/third_party/boringssl/ssl/tls13_both.c +440 -0
- data/third_party/boringssl/ssl/tls13_client.c +682 -0
- data/third_party/boringssl/ssl/tls13_enc.c +391 -0
- data/third_party/boringssl/ssl/tls13_server.c +672 -0
- data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
- data/third_party/boringssl/ssl/tls_record.c +159 -77
- data/third_party/nanopb/pb.h +60 -28
- data/third_party/nanopb/pb_decode.c +120 -92
- data/third_party/nanopb/pb_decode.h +3 -3
- data/third_party/nanopb/pb_encode.c +73 -67
- data/third_party/nanopb/pb_encode.h +4 -4
- metadata +155 -89
- data/include/grpc/impl/codegen/byte_buffer.h +0 -122
- data/include/grpc/impl/codegen/log.h +0 -118
- data/include/grpc/impl/codegen/time.h +0 -130
- data/src/core/ext/client_config/client_channel.c +0 -593
- data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
- data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
- data/src/core/lib/iomgr/workqueue_posix.c +0 -151
- data/src/core/lib/security/transport/handshake.c +0 -368
- data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
- data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
- data/third_party/boringssl/crypto/directory.h +0 -66
- data/third_party/boringssl/crypto/directory_posix.c +0 -108
- data/third_party/boringssl/crypto/directory_win.c +0 -144
- data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
- data/third_party/boringssl/include/openssl/pqueue.h +0 -146
- data/third_party/boringssl/ssl/d1_clnt.c +0 -561
- data/third_party/boringssl/ssl/d1_srvr.c +0 -476
- data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
- data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
- data/third_party/boringssl/ssl/test/async_bio.h +0 -45
- data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
- data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -42,48 +42,19 @@
|
|
42
42
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
43
43
|
#include "src/core/lib/surface/channel_init.h"
|
44
44
|
|
45
|
-
struct grpc_load_reporting_config {
|
46
|
-
grpc_load_reporting_fn fn;
|
47
|
-
void *user_data;
|
48
|
-
};
|
49
|
-
|
50
|
-
grpc_load_reporting_config *grpc_load_reporting_config_create(
|
51
|
-
grpc_load_reporting_fn fn, void *user_data) {
|
52
|
-
GPR_ASSERT(fn != NULL);
|
53
|
-
grpc_load_reporting_config *lrc =
|
54
|
-
gpr_malloc(sizeof(grpc_load_reporting_config));
|
55
|
-
lrc->fn = fn;
|
56
|
-
lrc->user_data = user_data;
|
57
|
-
return lrc;
|
58
|
-
}
|
59
|
-
|
60
|
-
grpc_load_reporting_config *grpc_load_reporting_config_copy(
|
61
|
-
grpc_load_reporting_config *src) {
|
62
|
-
return grpc_load_reporting_config_create(src->fn, src->user_data);
|
63
|
-
}
|
64
|
-
|
65
|
-
void grpc_load_reporting_config_destroy(grpc_load_reporting_config *lrc) {
|
66
|
-
gpr_free(lrc);
|
67
|
-
}
|
68
|
-
|
69
|
-
void grpc_load_reporting_config_call(
|
70
|
-
grpc_load_reporting_config *lrc,
|
71
|
-
const grpc_load_reporting_call_data *call_data) {
|
72
|
-
lrc->fn(call_data, lrc->user_data);
|
73
|
-
}
|
74
|
-
|
75
45
|
static bool is_load_reporting_enabled(const grpc_channel_args *a) {
|
76
46
|
if (a == NULL) return false;
|
77
47
|
for (size_t i = 0; i < a->num_args; i++) {
|
78
48
|
if (0 == strcmp(a->args[i].key, GRPC_ARG_ENABLE_LOAD_REPORTING)) {
|
79
|
-
return a->args[i].type ==
|
80
|
-
a->args[i].value.
|
49
|
+
return a->args[i].type == GRPC_ARG_INTEGER &&
|
50
|
+
a->args[i].value.integer != 0;
|
81
51
|
}
|
82
52
|
}
|
83
53
|
return false;
|
84
54
|
}
|
85
55
|
|
86
|
-
static bool maybe_add_load_reporting_filter(
|
56
|
+
static bool maybe_add_load_reporting_filter(grpc_exec_ctx *exec_ctx,
|
57
|
+
grpc_channel_stack_builder *builder,
|
87
58
|
void *arg) {
|
88
59
|
const grpc_channel_args *args =
|
89
60
|
grpc_channel_stack_builder_get_channel_arguments(builder);
|
@@ -94,37 +65,17 @@ static bool maybe_add_load_reporting_filter(grpc_channel_stack_builder *builder,
|
|
94
65
|
return true;
|
95
66
|
}
|
96
67
|
|
97
|
-
|
98
|
-
|
99
|
-
static void *lrd_arg_copy(void *p) {
|
100
|
-
return grpc_load_reporting_config_copy(p);
|
101
|
-
}
|
102
|
-
|
103
|
-
static int lrd_arg_cmp(void *a, void *b) {
|
104
|
-
grpc_load_reporting_config *lhs = a;
|
105
|
-
grpc_load_reporting_config *rhs = b;
|
106
|
-
return !(lhs->fn == rhs->fn && lhs->user_data == rhs->user_data);
|
107
|
-
}
|
108
|
-
|
109
|
-
static const grpc_arg_pointer_vtable lrd_ptr_vtable = {
|
110
|
-
lrd_arg_copy, lrd_arg_destroy, lrd_arg_cmp};
|
111
|
-
|
112
|
-
grpc_arg grpc_load_reporting_config_create_arg(
|
113
|
-
grpc_load_reporting_config *lrc) {
|
68
|
+
grpc_arg grpc_load_reporting_enable_arg() {
|
114
69
|
grpc_arg arg;
|
115
|
-
arg.type =
|
70
|
+
arg.type = GRPC_ARG_INTEGER;
|
116
71
|
arg.key = GRPC_ARG_ENABLE_LOAD_REPORTING;
|
117
|
-
arg.value.
|
118
|
-
arg.value.pointer.vtable = &lrd_ptr_vtable;
|
72
|
+
arg.value.integer = 1;
|
119
73
|
return arg;
|
120
74
|
}
|
121
75
|
|
122
76
|
/* Plugin registration */
|
123
77
|
|
124
78
|
void grpc_load_reporting_plugin_init(void) {
|
125
|
-
grpc_channel_init_register_stage(GRPC_CLIENT_CHANNEL, INT_MAX,
|
126
|
-
maybe_add_load_reporting_filter,
|
127
|
-
(void *)&grpc_load_reporting_filter);
|
128
79
|
grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX,
|
129
80
|
maybe_add_load_reporting_filter,
|
130
81
|
(void *)&grpc_load_reporting_filter);
|
@@ -34,42 +34,55 @@
|
|
34
34
|
#ifndef GRPC_CORE_EXT_LOAD_REPORTING_LOAD_REPORTING_H
|
35
35
|
#define GRPC_CORE_EXT_LOAD_REPORTING_LOAD_REPORTING_H
|
36
36
|
|
37
|
-
#include
|
38
|
-
#include "src/core/lib/
|
37
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
38
|
+
#include "src/core/lib/channel/channel_stack.h"
|
39
39
|
|
40
|
-
|
40
|
+
/** Metadata key for the gRPC LB load balancer token.
|
41
|
+
*
|
42
|
+
* The value corresponding to this key is an opaque token that is given to the
|
43
|
+
* frontend as part of each pick; the frontend sends this token to the backend
|
44
|
+
* in each request it sends when using that pick. The token is used by the
|
45
|
+
* backend to verify the request and to allow the backend to report load to the
|
46
|
+
* gRPC LB system. */
|
47
|
+
#define GRPC_LB_TOKEN_MD_KEY "lb-token"
|
41
48
|
|
42
|
-
/**
|
43
|
-
*
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
49
|
+
/** Metadata key for gRPC LB cost reporting.
|
50
|
+
*
|
51
|
+
* The value corresponding to this key is an opaque binary blob reported by the
|
52
|
+
* backend as part of its trailing metadata containing cost information for the
|
53
|
+
* call. */
|
54
|
+
#define GRPC_LB_COST_MD_KEY "lb-cost-bin"
|
48
55
|
|
49
|
-
/**
|
50
|
-
typedef
|
51
|
-
|
56
|
+
/** Identifiers for the invocation point of the users LR callback */
|
57
|
+
typedef enum grpc_load_reporting_source {
|
58
|
+
GRPC_LR_POINT_UNKNOWN = 0,
|
59
|
+
GRPC_LR_POINT_CHANNEL_CREATION,
|
60
|
+
GRPC_LR_POINT_CHANNEL_DESTRUCTION,
|
61
|
+
GRPC_LR_POINT_CALL_CREATION,
|
62
|
+
GRPC_LR_POINT_CALL_DESTRUCTION
|
63
|
+
} grpc_load_reporting_source;
|
52
64
|
|
53
|
-
/**
|
54
|
-
|
55
|
-
|
56
|
-
* For the first invocation, \a fn's first argument
|
57
|
-
* (grpc_load_reporting_call_data*) will be NULL. \a user_data is always passed
|
58
|
-
* as-is. */
|
59
|
-
grpc_load_reporting_config *grpc_load_reporting_config_create(
|
60
|
-
grpc_load_reporting_fn fn, void *user_data);
|
65
|
+
/** Call information to be passed to the provided LR callback. */
|
66
|
+
typedef struct grpc_load_reporting_call_data {
|
67
|
+
const grpc_load_reporting_source source; /**< point of last data update. */
|
61
68
|
|
62
|
-
|
63
|
-
|
69
|
+
/** Unique identifier for the channel associated with the data */
|
70
|
+
intptr_t channel_id;
|
64
71
|
|
65
|
-
|
72
|
+
/** Unique identifier for the call associated with the data. If the call
|
73
|
+
* hasn't been created yet, it'll have a value of zero. */
|
74
|
+
intptr_t call_id;
|
66
75
|
|
67
|
-
/**
|
68
|
-
|
69
|
-
|
70
|
-
|
76
|
+
/** Only valid when \a source is \a GRPC_LR_POINT_CALL_DESTRUCTION, that is,
|
77
|
+
* once the call has completed */
|
78
|
+
const grpc_call_final_info *final_info;
|
79
|
+
|
80
|
+
const char *initial_md_string; /**< value string for LR's initial md key */
|
81
|
+
const char *trailing_md_string; /**< value string for LR's trailing md key */
|
82
|
+
const char *method_name; /**< Corresponds to :path header */
|
83
|
+
} grpc_load_reporting_call_data;
|
71
84
|
|
72
85
|
/** Return a \a grpc_arg enabling load reporting */
|
73
|
-
grpc_arg
|
86
|
+
grpc_arg grpc_load_reporting_enable_arg();
|
74
87
|
|
75
88
|
#endif /* GRPC_CORE_EXT_LOAD_REPORTING_LOAD_REPORTING_H */
|
@@ -31,6 +31,7 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
+
#include <grpc/support/alloc.h>
|
34
35
|
#include <grpc/support/log.h>
|
35
36
|
#include <grpc/support/string_util.h>
|
36
37
|
#include <grpc/support/sync.h>
|
@@ -42,80 +43,162 @@
|
|
42
43
|
#include "src/core/lib/profiling/timers.h"
|
43
44
|
#include "src/core/lib/transport/static_metadata.h"
|
44
45
|
|
45
|
-
typedef struct call_data {
|
46
|
+
typedef struct call_data {
|
47
|
+
intptr_t id; /**< an id unique to the call */
|
48
|
+
char *trailing_md_string;
|
49
|
+
char *initial_md_string;
|
50
|
+
const char *service_method;
|
51
|
+
|
52
|
+
/* stores the recv_initial_metadata op's ready closure, which we wrap with our
|
53
|
+
* own (on_initial_md_ready) in order to capture the incoming initial metadata
|
54
|
+
* */
|
55
|
+
grpc_closure *ops_recv_initial_metadata_ready;
|
56
|
+
|
57
|
+
/* to get notified of the availability of the incoming initial metadata. */
|
58
|
+
grpc_closure on_initial_md_ready;
|
59
|
+
grpc_metadata_batch *recv_initial_metadata;
|
60
|
+
} call_data;
|
61
|
+
|
46
62
|
typedef struct channel_data {
|
47
|
-
|
48
|
-
grpc_load_reporting_config *lrc;
|
63
|
+
intptr_t id; /**< an id unique to the channel */
|
49
64
|
} channel_data;
|
50
65
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
66
|
+
typedef struct {
|
67
|
+
grpc_call_element *elem;
|
68
|
+
grpc_exec_ctx *exec_ctx;
|
69
|
+
} recv_md_filter_args;
|
70
|
+
|
71
|
+
static grpc_mdelem *recv_md_filter(grpc_exec_ctx *exec_ctx, void *user_data,
|
72
|
+
grpc_mdelem *md) {
|
73
|
+
recv_md_filter_args *a = user_data;
|
74
|
+
grpc_call_element *elem = a->elem;
|
75
|
+
call_data *calld = elem->call_data;
|
76
|
+
|
77
|
+
if (md->key == GRPC_MDSTR_PATH) {
|
78
|
+
calld->service_method = grpc_mdstr_as_c_string(md->value);
|
79
|
+
} else if (md->key == GRPC_MDSTR_LB_TOKEN) {
|
80
|
+
calld->initial_md_string = gpr_strdup(grpc_mdstr_as_c_string(md->value));
|
81
|
+
return NULL;
|
82
|
+
}
|
83
|
+
|
84
|
+
return md;
|
85
|
+
}
|
86
|
+
|
87
|
+
static void on_initial_md_ready(grpc_exec_ctx *exec_ctx, void *user_data,
|
88
|
+
grpc_error *err) {
|
89
|
+
grpc_call_element *elem = user_data;
|
90
|
+
call_data *calld = elem->call_data;
|
91
|
+
|
92
|
+
if (err == GRPC_ERROR_NONE) {
|
93
|
+
recv_md_filter_args a;
|
94
|
+
a.elem = elem;
|
95
|
+
a.exec_ctx = exec_ctx;
|
96
|
+
grpc_metadata_batch_filter(exec_ctx, calld->recv_initial_metadata,
|
97
|
+
recv_md_filter, &a);
|
98
|
+
if (calld->service_method == NULL) {
|
99
|
+
err =
|
100
|
+
grpc_error_add_child(err, GRPC_ERROR_CREATE("Missing :path header"));
|
101
|
+
}
|
102
|
+
} else {
|
103
|
+
GRPC_ERROR_REF(err);
|
104
|
+
}
|
105
|
+
calld->ops_recv_initial_metadata_ready->cb(
|
106
|
+
exec_ctx, calld->ops_recv_initial_metadata_ready->cb_arg, err);
|
107
|
+
GRPC_ERROR_UNREF(err);
|
56
108
|
}
|
57
109
|
|
58
110
|
/* Constructor for call_data */
|
59
|
-
static
|
60
|
-
|
111
|
+
static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
|
112
|
+
grpc_call_element *elem,
|
113
|
+
grpc_call_element_args *args) {
|
61
114
|
call_data *calld = elem->call_data;
|
62
115
|
memset(calld, 0, sizeof(call_data));
|
116
|
+
|
117
|
+
calld->id = (intptr_t)args->call_stack;
|
118
|
+
grpc_closure_init(&calld->on_initial_md_ready, on_initial_md_ready, elem,
|
119
|
+
grpc_schedule_on_exec_ctx);
|
120
|
+
|
121
|
+
/* TODO(dgq): do something with the data
|
122
|
+
channel_data *chand = elem->channel_data;
|
123
|
+
grpc_load_reporting_call_data lr_call_data = {GRPC_LR_POINT_CALL_CREATION,
|
124
|
+
(intptr_t)chand->id,
|
125
|
+
(intptr_t)calld->id,
|
126
|
+
NULL,
|
127
|
+
NULL,
|
128
|
+
NULL,
|
129
|
+
NULL};
|
130
|
+
*/
|
131
|
+
|
132
|
+
return GRPC_ERROR_NONE;
|
63
133
|
}
|
64
134
|
|
65
135
|
/* Destructor for call_data */
|
66
136
|
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
|
67
|
-
const
|
68
|
-
|
137
|
+
const grpc_call_final_info *final_info,
|
138
|
+
void *ignored) {
|
69
139
|
call_data *calld = elem->call_data;
|
70
140
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
141
|
+
/* TODO(dgq): do something with the data
|
142
|
+
channel_data *chand = elem->channel_data;
|
143
|
+
grpc_load_reporting_call_data lr_call_data = {GRPC_LR_POINT_CALL_DESTRUCTION,
|
144
|
+
(intptr_t)chand->id,
|
145
|
+
(intptr_t)calld->id,
|
146
|
+
final_info,
|
147
|
+
calld->initial_md_string,
|
148
|
+
calld->trailing_md_string,
|
149
|
+
calld->service_method};
|
150
|
+
*/
|
151
|
+
|
152
|
+
gpr_free(calld->initial_md_string);
|
153
|
+
gpr_free(calld->trailing_md_string);
|
77
154
|
}
|
78
155
|
|
79
156
|
/* Constructor for channel_data */
|
80
|
-
static
|
81
|
-
|
82
|
-
|
157
|
+
static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
|
158
|
+
grpc_channel_element *elem,
|
159
|
+
grpc_channel_element_args *args) {
|
83
160
|
GPR_ASSERT(!args->is_last);
|
84
161
|
|
85
162
|
channel_data *chand = elem->channel_data;
|
86
163
|
memset(chand, 0, sizeof(channel_data));
|
87
164
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
GPR_ASSERT(chand->lrc != NULL); /* arg actually found */
|
165
|
+
chand->id = (intptr_t)args->channel_stack;
|
166
|
+
|
167
|
+
/* TODO(dgq): do something with the data
|
168
|
+
grpc_load_reporting_call_data lr_call_data = {GRPC_LR_POINT_CHANNEL_CREATION,
|
169
|
+
(intptr_t)chand,
|
170
|
+
0,
|
171
|
+
NULL,
|
172
|
+
NULL,
|
173
|
+
NULL,
|
174
|
+
NULL};
|
175
|
+
*/
|
100
176
|
|
101
|
-
|
102
|
-
invoke_lr_fn_locked(chand->lrc, NULL);
|
103
|
-
gpr_mu_unlock(&chand->mu);
|
177
|
+
return GRPC_ERROR_NONE;
|
104
178
|
}
|
105
179
|
|
106
180
|
/* Destructor for channel data */
|
107
181
|
static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
|
108
182
|
grpc_channel_element *elem) {
|
183
|
+
/* TODO(dgq): do something with the data
|
109
184
|
channel_data *chand = elem->channel_data;
|
110
|
-
|
111
|
-
|
185
|
+
grpc_load_reporting_call_data lr_call_data = {
|
186
|
+
GRPC_LR_POINT_CHANNEL_DESTRUCTION,
|
187
|
+
(intptr_t)chand->id,
|
188
|
+
0,
|
189
|
+
NULL,
|
190
|
+
NULL,
|
191
|
+
NULL,
|
192
|
+
NULL};
|
193
|
+
*/
|
112
194
|
}
|
113
195
|
|
114
|
-
static grpc_mdelem *lr_trailing_md_filter(
|
196
|
+
static grpc_mdelem *lr_trailing_md_filter(grpc_exec_ctx *exec_ctx,
|
197
|
+
void *user_data, grpc_mdelem *md) {
|
115
198
|
grpc_call_element *elem = user_data;
|
116
199
|
call_data *calld = elem->call_data;
|
117
200
|
|
118
|
-
if (md->key ==
|
201
|
+
if (md->key == GRPC_MDSTR_LB_COST_BIN) {
|
119
202
|
calld->trailing_md_string = gpr_strdup(grpc_mdstr_as_c_string(md->value));
|
120
203
|
return NULL;
|
121
204
|
}
|
@@ -127,9 +210,15 @@ static void lr_start_transport_stream_op(grpc_exec_ctx *exec_ctx,
|
|
127
210
|
grpc_call_element *elem,
|
128
211
|
grpc_transport_stream_op *op) {
|
129
212
|
GPR_TIMER_BEGIN("lr_start_transport_stream_op", 0);
|
213
|
+
call_data *calld = elem->call_data;
|
130
214
|
|
131
|
-
if (op->
|
132
|
-
|
215
|
+
if (op->recv_initial_metadata) {
|
216
|
+
calld->recv_initial_metadata = op->recv_initial_metadata;
|
217
|
+
/* substitute our callback for the higher callback */
|
218
|
+
calld->ops_recv_initial_metadata_ready = op->recv_initial_metadata_ready;
|
219
|
+
op->recv_initial_metadata_ready = &calld->on_initial_md_ready;
|
220
|
+
} else if (op->send_trailing_metadata) {
|
221
|
+
grpc_metadata_batch_filter(exec_ctx, op->send_trailing_metadata,
|
133
222
|
lr_trailing_md_filter, elem);
|
134
223
|
}
|
135
224
|
grpc_call_next_op(exec_ctx, elem, op);
|
@@ -148,4 +237,5 @@ const grpc_channel_filter grpc_load_reporting_filter = {
|
|
148
237
|
init_channel_elem,
|
149
238
|
destroy_channel_elem,
|
150
239
|
grpc_call_next_get_peer,
|
240
|
+
grpc_channel_next_get_info,
|
151
241
|
"load_reporting"};
|
@@ -34,6 +34,7 @@
|
|
34
34
|
#ifndef GRPC_CORE_EXT_LOAD_REPORTING_LOAD_REPORTING_FILTER_H
|
35
35
|
#define GRPC_CORE_EXT_LOAD_REPORTING_LOAD_REPORTING_FILTER_H
|
36
36
|
|
37
|
+
#include "src/core/ext/load_reporting/load_reporting.h"
|
37
38
|
#include "src/core/lib/channel/channel_stack.h"
|
38
39
|
|
39
40
|
extern const grpc_channel_filter grpc_load_reporting_filter;
|
@@ -37,49 +37,51 @@
|
|
37
37
|
#include <grpc/support/host_port.h>
|
38
38
|
#include <grpc/support/string_util.h>
|
39
39
|
|
40
|
-
#include "src/core/ext/
|
41
|
-
#include "src/core/ext/
|
40
|
+
#include "src/core/ext/client_channel/http_connect_handshaker.h"
|
41
|
+
#include "src/core/ext/client_channel/lb_policy_registry.h"
|
42
|
+
#include "src/core/ext/client_channel/resolver_registry.h"
|
43
|
+
#include "src/core/lib/channel/channel_args.h"
|
42
44
|
#include "src/core/lib/iomgr/resolve_address.h"
|
43
45
|
#include "src/core/lib/iomgr/timer.h"
|
44
46
|
#include "src/core/lib/support/backoff.h"
|
45
47
|
#include "src/core/lib/support/string.h"
|
46
48
|
|
47
|
-
#define
|
48
|
-
#define
|
49
|
-
#define
|
50
|
-
#define
|
49
|
+
#define GRPC_DNS_MIN_CONNECT_TIMEOUT_SECONDS 1
|
50
|
+
#define GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
51
|
+
#define GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER 1.6
|
52
|
+
#define GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS 120
|
53
|
+
#define GRPC_DNS_RECONNECT_JITTER 0.2
|
51
54
|
|
52
55
|
typedef struct {
|
53
56
|
/** base class: must be first */
|
54
57
|
grpc_resolver base;
|
55
|
-
/** refcount */
|
56
|
-
gpr_refcount refs;
|
57
58
|
/** name to resolve */
|
58
|
-
char *
|
59
|
+
char *name_to_resolve;
|
59
60
|
/** default port to use */
|
60
61
|
char *default_port;
|
61
|
-
/**
|
62
|
-
|
63
|
-
/**
|
64
|
-
|
62
|
+
/** channel args. */
|
63
|
+
grpc_channel_args *channel_args;
|
64
|
+
/** pollset_set to drive the name resolution process */
|
65
|
+
grpc_pollset_set *interested_parties;
|
65
66
|
|
66
67
|
/** mutex guarding the rest of the state */
|
67
68
|
gpr_mu mu;
|
68
69
|
/** are we currently resolving? */
|
69
|
-
|
70
|
-
/** which version of
|
70
|
+
bool resolving;
|
71
|
+
/** which version of the result have we published? */
|
71
72
|
int published_version;
|
72
|
-
/** which version of
|
73
|
+
/** which version of the result is current? */
|
73
74
|
int resolved_version;
|
74
75
|
/** pending next completion, or NULL */
|
75
76
|
grpc_closure *next_completion;
|
76
|
-
/** target
|
77
|
-
|
78
|
-
/** current (fully resolved)
|
79
|
-
|
77
|
+
/** target result address for next completion */
|
78
|
+
grpc_channel_args **target_result;
|
79
|
+
/** current (fully resolved) result */
|
80
|
+
grpc_channel_args *resolved_result;
|
80
81
|
/** retry timer */
|
81
82
|
bool have_retry_timer;
|
82
83
|
grpc_timer retry_timer;
|
84
|
+
grpc_closure on_retry;
|
83
85
|
/** retry backoff state */
|
84
86
|
gpr_backoff backoff_state;
|
85
87
|
|
@@ -97,7 +99,7 @@ static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx,
|
|
97
99
|
static void dns_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *r);
|
98
100
|
static void dns_channel_saw_error(grpc_exec_ctx *exec_ctx, grpc_resolver *r);
|
99
101
|
static void dns_next(grpc_exec_ctx *exec_ctx, grpc_resolver *r,
|
100
|
-
|
102
|
+
grpc_channel_args **target_result,
|
101
103
|
grpc_closure *on_complete);
|
102
104
|
|
103
105
|
static const grpc_resolver_vtable dns_resolver_vtable = {
|
@@ -110,9 +112,9 @@ static void dns_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver) {
|
|
110
112
|
grpc_timer_cancel(exec_ctx, &r->retry_timer);
|
111
113
|
}
|
112
114
|
if (r->next_completion != NULL) {
|
113
|
-
*r->
|
114
|
-
|
115
|
-
|
115
|
+
*r->target_result = NULL;
|
116
|
+
grpc_closure_sched(exec_ctx, r->next_completion,
|
117
|
+
GRPC_ERROR_CREATE("Resolver Shutdown"));
|
116
118
|
r->next_completion = NULL;
|
117
119
|
}
|
118
120
|
gpr_mu_unlock(&r->mu);
|
@@ -130,13 +132,13 @@ static void dns_channel_saw_error(grpc_exec_ctx *exec_ctx,
|
|
130
132
|
}
|
131
133
|
|
132
134
|
static void dns_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver,
|
133
|
-
|
135
|
+
grpc_channel_args **target_result,
|
134
136
|
grpc_closure *on_complete) {
|
135
137
|
dns_resolver *r = (dns_resolver *)resolver;
|
136
138
|
gpr_mu_lock(&r->mu);
|
137
139
|
GPR_ASSERT(!r->next_completion);
|
138
140
|
r->next_completion = on_complete;
|
139
|
-
r->
|
141
|
+
r->target_result = target_result;
|
140
142
|
if (r->resolved_version == 0 && !r->resolving) {
|
141
143
|
gpr_backoff_reset(&r->backoff_state);
|
142
144
|
dns_start_resolving_locked(exec_ctx, r);
|
@@ -165,48 +167,47 @@ static void dns_on_retry_timer(grpc_exec_ctx *exec_ctx, void *arg,
|
|
165
167
|
static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg,
|
166
168
|
grpc_error *error) {
|
167
169
|
dns_resolver *r = arg;
|
168
|
-
|
169
|
-
grpc_lb_policy *lb_policy;
|
170
|
+
grpc_channel_args *result = NULL;
|
170
171
|
gpr_mu_lock(&r->mu);
|
171
172
|
GPR_ASSERT(r->resolving);
|
172
|
-
r->resolving =
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
grpc_lb_policy_create(exec_ctx, r->lb_policy_name, &lb_policy_args);
|
182
|
-
if (lb_policy != NULL) {
|
183
|
-
grpc_client_config_set_lb_policy(config, lb_policy);
|
184
|
-
GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "construction");
|
173
|
+
r->resolving = false;
|
174
|
+
if (r->addresses != NULL) {
|
175
|
+
grpc_lb_addresses *addresses = grpc_lb_addresses_create(
|
176
|
+
r->addresses->naddrs, NULL /* user_data_vtable */);
|
177
|
+
for (size_t i = 0; i < r->addresses->naddrs; ++i) {
|
178
|
+
grpc_lb_addresses_set_address(
|
179
|
+
addresses, i, &r->addresses->addrs[i].addr,
|
180
|
+
r->addresses->addrs[i].len, false /* is_balancer */,
|
181
|
+
NULL /* balancer_name */, NULL /* user_data */);
|
185
182
|
}
|
186
|
-
|
183
|
+
grpc_arg new_arg = grpc_lb_addresses_create_channel_arg(addresses);
|
184
|
+
result = grpc_channel_args_copy_and_add(r->channel_args, &new_arg, 1);
|
185
|
+
grpc_resolved_addresses_destroy(r->addresses);
|
186
|
+
grpc_lb_addresses_destroy(exec_ctx, addresses);
|
187
187
|
} else {
|
188
188
|
gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC);
|
189
189
|
gpr_timespec next_try = gpr_backoff_step(&r->backoff_state, now);
|
190
190
|
gpr_timespec timeout = gpr_time_sub(next_try, now);
|
191
191
|
const char *msg = grpc_error_string(error);
|
192
|
-
gpr_log(
|
192
|
+
gpr_log(GPR_INFO, "dns resolution failed (will retry): %s", msg);
|
193
193
|
grpc_error_free_string(msg);
|
194
194
|
GPR_ASSERT(!r->have_retry_timer);
|
195
195
|
r->have_retry_timer = true;
|
196
196
|
GRPC_RESOLVER_REF(&r->base, "retry-timer");
|
197
|
-
if (gpr_time_cmp(timeout, gpr_time_0(timeout.clock_type))
|
197
|
+
if (gpr_time_cmp(timeout, gpr_time_0(timeout.clock_type)) > 0) {
|
198
198
|
gpr_log(GPR_DEBUG, "retrying in %" PRId64 ".%09d seconds", timeout.tv_sec,
|
199
199
|
timeout.tv_nsec);
|
200
200
|
} else {
|
201
201
|
gpr_log(GPR_DEBUG, "retrying immediately");
|
202
202
|
}
|
203
|
-
|
204
|
-
|
203
|
+
grpc_closure_init(&r->on_retry, dns_on_retry_timer, r,
|
204
|
+
grpc_schedule_on_exec_ctx);
|
205
|
+
grpc_timer_init(exec_ctx, &r->retry_timer, next_try, &r->on_retry, now);
|
205
206
|
}
|
206
|
-
if (r->
|
207
|
-
|
207
|
+
if (r->resolved_result != NULL) {
|
208
|
+
grpc_channel_args_destroy(exec_ctx, r->resolved_result);
|
208
209
|
}
|
209
|
-
r->
|
210
|
+
r->resolved_result = result;
|
210
211
|
r->resolved_version++;
|
211
212
|
dns_maybe_finish_next_locked(exec_ctx, r);
|
212
213
|
gpr_mu_unlock(&r->mu);
|
@@ -218,21 +219,22 @@ static void dns_start_resolving_locked(grpc_exec_ctx *exec_ctx,
|
|
218
219
|
dns_resolver *r) {
|
219
220
|
GRPC_RESOLVER_REF(&r->base, "dns-resolving");
|
220
221
|
GPR_ASSERT(!r->resolving);
|
221
|
-
r->resolving =
|
222
|
+
r->resolving = true;
|
222
223
|
r->addresses = NULL;
|
223
|
-
grpc_resolve_address(
|
224
|
-
|
224
|
+
grpc_resolve_address(
|
225
|
+
exec_ctx, r->name_to_resolve, r->default_port, r->interested_parties,
|
226
|
+
grpc_closure_create(dns_on_resolved, r, grpc_schedule_on_exec_ctx),
|
227
|
+
&r->addresses);
|
225
228
|
}
|
226
229
|
|
227
230
|
static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx,
|
228
231
|
dns_resolver *r) {
|
229
232
|
if (r->next_completion != NULL &&
|
230
233
|
r->resolved_version != r->published_version) {
|
231
|
-
*r->
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL);
|
234
|
+
*r->target_result = r->resolved_result == NULL
|
235
|
+
? NULL
|
236
|
+
: grpc_channel_args_copy(r->resolved_result);
|
237
|
+
grpc_closure_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE);
|
236
238
|
r->next_completion = NULL;
|
237
239
|
r->published_version = r->resolved_version;
|
238
240
|
}
|
@@ -241,41 +243,46 @@ static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx,
|
|
241
243
|
static void dns_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) {
|
242
244
|
dns_resolver *r = (dns_resolver *)gr;
|
243
245
|
gpr_mu_destroy(&r->mu);
|
244
|
-
if (r->
|
245
|
-
|
246
|
+
if (r->resolved_result != NULL) {
|
247
|
+
grpc_channel_args_destroy(exec_ctx, r->resolved_result);
|
246
248
|
}
|
247
|
-
|
248
|
-
gpr_free(r->
|
249
|
+
grpc_pollset_set_destroy(r->interested_parties);
|
250
|
+
gpr_free(r->name_to_resolve);
|
249
251
|
gpr_free(r->default_port);
|
250
|
-
|
252
|
+
grpc_channel_args_destroy(exec_ctx, r->channel_args);
|
251
253
|
gpr_free(r);
|
252
254
|
}
|
253
255
|
|
254
|
-
static grpc_resolver *dns_create(
|
255
|
-
|
256
|
-
const char *
|
257
|
-
dns_resolver *r;
|
258
|
-
const char *path = args->uri->path;
|
259
|
-
|
256
|
+
static grpc_resolver *dns_create(grpc_exec_ctx *exec_ctx,
|
257
|
+
grpc_resolver_args *args,
|
258
|
+
const char *default_port) {
|
260
259
|
if (0 != strcmp(args->uri->authority, "")) {
|
261
260
|
gpr_log(GPR_ERROR, "authority based dns uri's not supported");
|
262
261
|
return NULL;
|
263
262
|
}
|
264
|
-
|
263
|
+
// Get name from args.
|
264
|
+
const char *path = args->uri->path;
|
265
265
|
if (path[0] == '/') ++path;
|
266
|
-
|
267
|
-
|
266
|
+
// Get proxy name, if any.
|
267
|
+
char *proxy_name = grpc_get_http_proxy_server();
|
268
|
+
// Create resolver.
|
269
|
+
dns_resolver *r = gpr_malloc(sizeof(dns_resolver));
|
268
270
|
memset(r, 0, sizeof(*r));
|
269
|
-
gpr_ref_init(&r->refs, 1);
|
270
271
|
gpr_mu_init(&r->mu);
|
271
272
|
grpc_resolver_init(&r->base, &dns_resolver_vtable);
|
272
|
-
r->
|
273
|
+
r->name_to_resolve = proxy_name == NULL ? gpr_strdup(path) : proxy_name;
|
273
274
|
r->default_port = gpr_strdup(default_port);
|
274
|
-
r->
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
275
|
+
r->channel_args = grpc_channel_args_copy(args->args);
|
276
|
+
r->interested_parties = grpc_pollset_set_create();
|
277
|
+
if (args->pollset_set != NULL) {
|
278
|
+
grpc_pollset_set_add_pollset_set(exec_ctx, r->interested_parties,
|
279
|
+
args->pollset_set);
|
280
|
+
}
|
281
|
+
gpr_backoff_init(&r->backoff_state, GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS,
|
282
|
+
GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER,
|
283
|
+
GRPC_DNS_RECONNECT_JITTER,
|
284
|
+
GRPC_DNS_MIN_CONNECT_TIMEOUT_SECONDS * 1000,
|
285
|
+
GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS * 1000);
|
279
286
|
return &r->base;
|
280
287
|
}
|
281
288
|
|
@@ -288,8 +295,9 @@ static void dns_factory_ref(grpc_resolver_factory *factory) {}
|
|
288
295
|
static void dns_factory_unref(grpc_resolver_factory *factory) {}
|
289
296
|
|
290
297
|
static grpc_resolver *dns_factory_create_resolver(
|
291
|
-
|
292
|
-
|
298
|
+
grpc_exec_ctx *exec_ctx, grpc_resolver_factory *factory,
|
299
|
+
grpc_resolver_args *args) {
|
300
|
+
return dns_create(exec_ctx, args, "https");
|
293
301
|
}
|
294
302
|
|
295
303
|
static char *dns_factory_get_default_host_name(grpc_resolver_factory *factory,
|