grpc 0.11.0 → 0.12.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 +29456 -0
- data/Rakefile +13 -8
- data/etc/roots.pem +5114 -0
- data/include/grpc/byte_buffer.h +120 -0
- data/include/grpc/byte_buffer_reader.h +58 -0
- data/include/grpc/census.h +488 -0
- data/include/grpc/compression.h +106 -0
- data/include/grpc/grpc.h +732 -0
- data/include/grpc/grpc_security.h +374 -0
- data/include/grpc/grpc_zookeeper.h +59 -0
- data/include/grpc/status.h +163 -0
- data/include/grpc/support/alloc.h +72 -0
- data/include/grpc/support/atm.h +92 -0
- data/include/grpc/support/atm_gcc_atomic.h +72 -0
- data/include/grpc/support/atm_gcc_sync.h +87 -0
- data/include/grpc/support/atm_win32.h +125 -0
- data/include/grpc/support/avl.h +91 -0
- data/include/grpc/support/cmdline.h +101 -0
- data/include/grpc/support/cpu.h +57 -0
- data/include/grpc/support/histogram.h +76 -0
- data/include/grpc/support/host_port.h +64 -0
- data/include/grpc/support/log.h +108 -0
- data/include/grpc/support/log_win32.h +51 -0
- data/include/grpc/support/port_platform.h +356 -0
- data/include/grpc/support/slice.h +182 -0
- data/include/grpc/support/slice_buffer.h +102 -0
- data/include/grpc/support/string_util.h +61 -0
- data/include/grpc/support/subprocess.h +57 -0
- data/include/grpc/support/sync.h +315 -0
- data/include/grpc/support/sync_generic.h +55 -0
- data/include/grpc/support/sync_posix.h +47 -0
- data/include/grpc/support/sync_win32.h +49 -0
- data/include/grpc/support/thd.h +91 -0
- data/include/grpc/support/time.h +128 -0
- data/include/grpc/support/tls.h +77 -0
- data/include/grpc/support/tls_gcc.h +56 -0
- data/include/grpc/support/tls_msvc.h +56 -0
- data/include/grpc/support/tls_pthread.h +60 -0
- data/include/grpc/support/useful.h +75 -0
- data/src/core/census/aggregation.h +66 -0
- data/src/core/census/context.c +46 -0
- data/src/core/census/context.h +47 -0
- data/src/core/census/grpc_context.c +53 -0
- data/src/core/census/grpc_filter.c +184 -0
- data/src/core/census/grpc_filter.h +44 -0
- data/src/core/census/initialize.c +57 -0
- data/src/core/census/operation.c +63 -0
- data/src/core/census/rpc_metric_id.h +51 -0
- data/src/core/census/tracing.c +45 -0
- data/src/core/channel/channel_args.c +209 -0
- data/src/core/channel/channel_args.h +88 -0
- data/src/core/channel/channel_stack.c +262 -0
- data/src/core/channel/channel_stack.h +260 -0
- data/src/core/channel/client_channel.c +524 -0
- data/src/core/channel/client_channel.h +63 -0
- data/src/core/channel/client_uchannel.c +243 -0
- data/src/core/channel/client_uchannel.h +60 -0
- data/src/core/channel/compress_filter.c +297 -0
- data/src/core/channel/compress_filter.h +65 -0
- data/src/core/channel/connected_channel.c +167 -0
- data/src/core/channel/connected_channel.h +51 -0
- data/src/core/channel/context.h +49 -0
- data/src/core/channel/http_client_filter.c +248 -0
- data/src/core/channel/http_client_filter.h +44 -0
- data/src/core/channel/http_server_filter.c +233 -0
- data/src/core/channel/http_server_filter.h +42 -0
- data/src/core/channel/subchannel_call_holder.c +259 -0
- data/src/core/channel/subchannel_call_holder.h +98 -0
- data/src/core/client_config/client_config.c +72 -0
- data/src/core/client_config/client_config.h +53 -0
- data/src/core/client_config/connector.c +54 -0
- data/src/core/client_config/connector.h +95 -0
- data/src/core/client_config/default_initial_connect_string.c +39 -0
- data/src/core/client_config/initial_connect_string.c +53 -0
- data/src/core/client_config/initial_connect_string.h +50 -0
- data/src/core/client_config/lb_policies/pick_first.c +398 -0
- data/src/core/client_config/lb_policies/pick_first.h +43 -0
- data/src/core/client_config/lb_policies/round_robin.c +537 -0
- data/src/core/client_config/lb_policies/round_robin.h +46 -0
- data/src/core/client_config/lb_policy.c +134 -0
- data/src/core/client_config/lb_policy.h +143 -0
- data/src/core/client_config/lb_policy_factory.c +48 -0
- data/src/core/client_config/lb_policy_factory.h +73 -0
- data/src/core/client_config/lb_policy_registry.c +88 -0
- data/src/core/client_config/lb_policy_registry.h +54 -0
- data/src/core/client_config/resolver.c +82 -0
- data/src/core/client_config/resolver.h +94 -0
- data/src/core/client_config/resolver_factory.c +55 -0
- data/src/core/client_config/resolver_factory.h +82 -0
- data/src/core/client_config/resolver_registry.c +137 -0
- data/src/core/client_config/resolver_registry.h +65 -0
- data/src/core/client_config/resolvers/dns_resolver.c +257 -0
- data/src/core/client_config/resolvers/dns_resolver.h +42 -0
- data/src/core/client_config/resolvers/sockaddr_resolver.c +391 -0
- data/src/core/client_config/resolvers/sockaddr_resolver.h +50 -0
- data/src/core/client_config/subchannel.c +697 -0
- data/src/core/client_config/subchannel.h +165 -0
- data/src/core/client_config/subchannel_factory.c +49 -0
- data/src/core/client_config/subchannel_factory.h +66 -0
- data/src/core/client_config/uri_parser.c +242 -0
- data/src/core/client_config/uri_parser.h +51 -0
- data/src/core/compression/algorithm.c +166 -0
- data/src/core/compression/algorithm_metadata.h +53 -0
- data/src/core/compression/message_compress.c +198 -0
- data/src/core/compression/message_compress.h +52 -0
- data/src/core/debug/trace.c +136 -0
- data/src/core/debug/trace.h +43 -0
- data/src/core/httpcli/format_request.c +120 -0
- data/src/core/httpcli/format_request.h +45 -0
- data/src/core/httpcli/httpcli.c +286 -0
- data/src/core/httpcli/httpcli.h +162 -0
- data/src/core/httpcli/httpcli_security_connector.c +189 -0
- data/src/core/httpcli/parser.c +211 -0
- data/src/core/httpcli/parser.h +64 -0
- data/src/core/iomgr/closure.c +98 -0
- data/src/core/iomgr/closure.h +97 -0
- data/src/core/iomgr/endpoint.c +67 -0
- data/src/core/iomgr/endpoint.h +102 -0
- data/src/core/iomgr/endpoint_pair.h +47 -0
- data/src/core/iomgr/endpoint_pair_posix.c +82 -0
- data/src/core/iomgr/endpoint_pair_windows.c +97 -0
- data/src/core/iomgr/exec_ctx.c +72 -0
- data/src/core/iomgr/exec_ctx.h +78 -0
- data/src/core/iomgr/executor.c +143 -0
- data/src/core/iomgr/executor.h +53 -0
- data/src/core/iomgr/fd_posix.c +438 -0
- data/src/core/iomgr/fd_posix.h +189 -0
- data/src/core/iomgr/iocp_windows.c +206 -0
- data/src/core/iomgr/iocp_windows.h +56 -0
- data/src/core/iomgr/iomgr.c +156 -0
- data/src/core/iomgr/iomgr.h +43 -0
- data/src/core/iomgr/iomgr_internal.h +58 -0
- data/src/core/iomgr/iomgr_posix.c +52 -0
- data/src/core/iomgr/iomgr_posix.h +39 -0
- data/src/core/iomgr/iomgr_windows.c +73 -0
- data/src/core/iomgr/pollset.h +95 -0
- data/src/core/iomgr/pollset_multipoller_with_epoll.c +258 -0
- data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +227 -0
- data/src/core/iomgr/pollset_posix.c +638 -0
- data/src/core/iomgr/pollset_posix.h +147 -0
- data/src/core/iomgr/pollset_set.h +67 -0
- data/src/core/iomgr/pollset_set_posix.c +182 -0
- data/src/core/iomgr/pollset_set_posix.h +61 -0
- data/src/core/iomgr/pollset_set_windows.c +60 -0
- data/src/core/iomgr/pollset_set_windows.h +39 -0
- data/src/core/iomgr/pollset_windows.c +248 -0
- data/src/core/iomgr/pollset_windows.h +79 -0
- data/src/core/iomgr/resolve_address.h +72 -0
- data/src/core/iomgr/resolve_address_posix.c +183 -0
- data/src/core/iomgr/resolve_address_windows.c +166 -0
- data/src/core/iomgr/sockaddr.h +47 -0
- data/src/core/iomgr/sockaddr_posix.h +44 -0
- data/src/core/iomgr/sockaddr_utils.c +234 -0
- data/src/core/iomgr/sockaddr_utils.h +89 -0
- data/src/core/iomgr/sockaddr_win32.h +46 -0
- data/src/core/iomgr/socket_utils_common_posix.c +208 -0
- data/src/core/iomgr/socket_utils_linux.c +51 -0
- data/src/core/iomgr/socket_utils_posix.c +70 -0
- data/src/core/iomgr/socket_utils_posix.h +113 -0
- data/src/core/iomgr/socket_windows.c +98 -0
- data/src/core/iomgr/socket_windows.h +111 -0
- data/src/core/iomgr/tcp_client.h +53 -0
- data/src/core/iomgr/tcp_client_posix.c +304 -0
- data/src/core/iomgr/tcp_client_windows.c +221 -0
- data/src/core/iomgr/tcp_posix.c +485 -0
- data/src/core/iomgr/tcp_posix.h +65 -0
- data/src/core/iomgr/tcp_server.h +83 -0
- data/src/core/iomgr/tcp_server_posix.c +562 -0
- data/src/core/iomgr/tcp_server_windows.c +509 -0
- data/src/core/iomgr/tcp_windows.c +406 -0
- data/src/core/iomgr/tcp_windows.h +57 -0
- data/src/core/iomgr/time_averaged_stats.c +77 -0
- data/src/core/iomgr/time_averaged_stats.h +88 -0
- data/src/core/iomgr/timer.c +345 -0
- data/src/core/iomgr/timer.h +89 -0
- data/src/core/iomgr/timer_heap.c +148 -0
- data/src/core/iomgr/timer_heap.h +57 -0
- data/src/core/iomgr/timer_internal.h +61 -0
- data/src/core/iomgr/udp_server.c +439 -0
- data/src/core/iomgr/udp_server.h +83 -0
- data/src/core/iomgr/wakeup_fd_eventfd.c +85 -0
- data/src/core/iomgr/wakeup_fd_nospecial.c +51 -0
- data/src/core/iomgr/wakeup_fd_pipe.c +97 -0
- data/src/core/iomgr/wakeup_fd_pipe.h +41 -0
- data/src/core/iomgr/wakeup_fd_posix.c +72 -0
- data/src/core/iomgr/wakeup_fd_posix.h +101 -0
- data/src/core/iomgr/workqueue.h +85 -0
- data/src/core/iomgr/workqueue_posix.c +143 -0
- data/src/core/iomgr/workqueue_posix.h +51 -0
- data/src/core/iomgr/workqueue_windows.c +40 -0
- data/src/core/iomgr/workqueue_windows.h +37 -0
- data/src/core/json/json.c +64 -0
- data/src/core/json/json.h +88 -0
- data/src/core/json/json_common.h +49 -0
- data/src/core/json/json_reader.c +660 -0
- data/src/core/json/json_reader.h +160 -0
- data/src/core/json/json_string.c +379 -0
- data/src/core/json/json_writer.c +260 -0
- data/src/core/json/json_writer.h +97 -0
- data/src/core/profiling/basic_timers.c +274 -0
- data/src/core/profiling/stap_timers.c +65 -0
- data/src/core/profiling/timers.h +119 -0
- data/src/core/security/auth_filters.h +42 -0
- data/src/core/security/base64.c +233 -0
- data/src/core/security/base64.h +52 -0
- data/src/core/security/client_auth_filter.c +337 -0
- data/src/core/security/credentials.c +1273 -0
- data/src/core/security/credentials.h +376 -0
- data/src/core/security/credentials_metadata.c +101 -0
- data/src/core/security/credentials_posix.c +61 -0
- data/src/core/security/credentials_win32.c +61 -0
- data/src/core/security/google_default_credentials.c +260 -0
- data/src/core/security/handshake.c +327 -0
- data/src/core/security/handshake.h +50 -0
- data/src/core/security/json_token.c +405 -0
- data/src/core/security/json_token.h +118 -0
- data/src/core/security/jwt_verifier.c +842 -0
- data/src/core/security/jwt_verifier.h +136 -0
- data/src/core/security/secure_endpoint.c +383 -0
- data/src/core/security/secure_endpoint.h +49 -0
- data/src/core/security/security_connector.c +756 -0
- data/src/core/security/security_connector.h +246 -0
- data/src/core/security/security_context.c +342 -0
- data/src/core/security/security_context.h +114 -0
- data/src/core/security/server_auth_filter.c +264 -0
- data/src/core/security/server_secure_chttp2.c +268 -0
- data/src/core/statistics/census_interface.h +76 -0
- data/src/core/statistics/census_rpc_stats.h +101 -0
- data/src/core/support/alloc.c +90 -0
- data/src/core/support/avl.c +288 -0
- data/src/core/support/block_annotate.h +48 -0
- data/src/core/support/cmdline.c +347 -0
- data/src/core/support/cpu_iphone.c +49 -0
- data/src/core/support/cpu_linux.c +78 -0
- data/src/core/support/cpu_posix.c +77 -0
- data/src/core/support/cpu_windows.c +47 -0
- data/src/core/support/env.h +60 -0
- data/src/core/support/env_linux.c +62 -0
- data/src/core/support/env_posix.c +57 -0
- data/src/core/support/env_win32.c +65 -0
- data/src/core/support/file.c +91 -0
- data/src/core/support/file.h +63 -0
- data/src/core/support/file_posix.c +85 -0
- data/src/core/support/file_win32.c +84 -0
- data/src/core/support/histogram.c +244 -0
- data/src/core/support/host_port.c +110 -0
- data/src/core/support/log.c +66 -0
- data/src/core/support/log_android.c +87 -0
- data/src/core/support/log_linux.c +105 -0
- data/src/core/support/log_posix.c +102 -0
- data/src/core/support/log_win32.c +125 -0
- data/src/core/support/murmur_hash.c +96 -0
- data/src/core/support/murmur_hash.h +44 -0
- data/src/core/support/slice.c +343 -0
- data/src/core/support/slice_buffer.c +282 -0
- data/src/core/support/stack_lockfree.c +175 -0
- data/src/core/support/stack_lockfree.h +53 -0
- data/src/core/support/string.c +296 -0
- data/src/core/support/string.h +121 -0
- data/src/core/support/string_posix.c +86 -0
- data/src/core/support/string_win32.c +109 -0
- data/src/core/support/string_win32.h +47 -0
- data/src/core/support/subprocess_posix.c +112 -0
- data/src/core/support/sync.c +122 -0
- data/src/core/support/sync_posix.c +104 -0
- data/src/core/support/sync_win32.c +128 -0
- data/src/core/support/thd.c +64 -0
- data/src/core/support/thd_internal.h +39 -0
- data/src/core/support/thd_posix.c +94 -0
- data/src/core/support/thd_win32.c +117 -0
- data/src/core/support/time.c +304 -0
- data/src/core/support/time_posix.c +161 -0
- data/src/core/support/time_precise.c +89 -0
- data/src/core/support/time_precise.h +42 -0
- data/src/core/support/time_win32.c +101 -0
- data/src/core/support/tls_pthread.c +45 -0
- data/src/core/surface/api_trace.c +36 -0
- data/src/core/surface/api_trace.h +65 -0
- data/src/core/surface/byte_buffer.c +97 -0
- data/src/core/surface/byte_buffer_reader.c +123 -0
- data/src/core/surface/call.c +1424 -0
- data/src/core/surface/call.h +109 -0
- data/src/core/surface/call_details.c +50 -0
- data/src/core/surface/call_log_batch.c +118 -0
- data/src/core/surface/call_test_only.h +64 -0
- data/src/core/surface/channel.c +327 -0
- data/src/core/surface/channel.h +74 -0
- data/src/core/surface/channel_connectivity.c +220 -0
- data/src/core/surface/channel_create.c +235 -0
- data/src/core/surface/channel_ping.c +79 -0
- data/src/core/surface/completion_queue.c +481 -0
- data/src/core/surface/completion_queue.h +91 -0
- data/src/core/surface/event_string.c +81 -0
- data/src/core/surface/event_string.h +42 -0
- data/src/core/surface/init.c +168 -0
- data/src/core/surface/init.h +40 -0
- data/src/core/surface/init_secure.c +42 -0
- data/src/core/surface/lame_client.c +149 -0
- data/src/core/surface/metadata_array.c +49 -0
- data/src/core/surface/secure_channel_create.c +336 -0
- data/src/core/surface/server.c +1343 -0
- data/src/core/surface/server.h +67 -0
- data/src/core/surface/server_chttp2.c +149 -0
- data/src/core/surface/server_create.c +51 -0
- data/src/core/surface/surface_trace.h +48 -0
- data/src/core/surface/validate_metadata.c +73 -0
- data/src/core/surface/version.c +39 -0
- data/src/core/transport/byte_stream.c +76 -0
- data/src/core/transport/byte_stream.h +88 -0
- data/src/core/transport/chttp2/alpn.c +56 -0
- data/src/core/transport/chttp2/alpn.h +49 -0
- data/src/core/transport/chttp2/bin_encoder.c +285 -0
- data/src/core/transport/chttp2/bin_encoder.h +54 -0
- data/src/core/transport/chttp2/frame.h +69 -0
- data/src/core/transport/chttp2/frame_data.c +245 -0
- data/src/core/transport/chttp2/frame_data.h +101 -0
- data/src/core/transport/chttp2/frame_goaway.c +193 -0
- data/src/core/transport/chttp2/frame_goaway.h +77 -0
- data/src/core/transport/chttp2/frame_ping.c +97 -0
- data/src/core/transport/chttp2/frame_ping.h +56 -0
- data/src/core/transport/chttp2/frame_rst_stream.c +100 -0
- data/src/core/transport/chttp2/frame_rst_stream.h +55 -0
- data/src/core/transport/chttp2/frame_settings.c +259 -0
- data/src/core/transport/chttp2/frame_settings.h +103 -0
- data/src/core/transport/chttp2/frame_window_update.c +114 -0
- data/src/core/transport/chttp2/frame_window_update.h +58 -0
- data/src/core/transport/chttp2/hpack_encoder.c +572 -0
- data/src/core/transport/chttp2/hpack_encoder.h +95 -0
- data/src/core/transport/chttp2/hpack_parser.c +1449 -0
- data/src/core/transport/chttp2/hpack_parser.h +116 -0
- data/src/core/transport/chttp2/hpack_table.c +361 -0
- data/src/core/transport/chttp2/hpack_table.h +108 -0
- data/src/core/transport/chttp2/http2_errors.h +56 -0
- data/src/core/transport/chttp2/huffsyms.c +297 -0
- data/src/core/transport/chttp2/huffsyms.h +48 -0
- data/src/core/transport/chttp2/incoming_metadata.c +96 -0
- data/src/core/transport/chttp2/incoming_metadata.h +60 -0
- data/src/core/transport/chttp2/internal.h +757 -0
- data/src/core/transport/chttp2/parsing.c +866 -0
- data/src/core/transport/chttp2/status_conversion.c +109 -0
- data/src/core/transport/chttp2/status_conversion.h +50 -0
- data/src/core/transport/chttp2/stream_lists.c +401 -0
- data/src/core/transport/chttp2/stream_map.c +198 -0
- data/src/core/transport/chttp2/stream_map.h +85 -0
- data/src/core/transport/chttp2/timeout_encoding.c +185 -0
- data/src/core/transport/chttp2/timeout_encoding.h +47 -0
- data/src/core/transport/chttp2/varint.c +66 -0
- data/src/core/transport/chttp2/varint.h +76 -0
- data/src/core/transport/chttp2/writing.c +356 -0
- data/src/core/transport/chttp2_transport.c +1692 -0
- data/src/core/transport/chttp2_transport.h +51 -0
- data/src/core/transport/connectivity_state.c +164 -0
- data/src/core/transport/connectivity_state.h +85 -0
- data/src/core/transport/metadata.c +690 -0
- data/src/core/transport/metadata.h +156 -0
- data/src/core/transport/metadata_batch.c +194 -0
- data/src/core/transport/metadata_batch.h +125 -0
- data/src/core/transport/static_metadata.c +90 -0
- data/src/core/transport/static_metadata.h +408 -0
- data/src/core/transport/transport.c +183 -0
- data/src/core/transport/transport.h +222 -0
- data/src/core/transport/transport_impl.h +78 -0
- data/src/core/transport/transport_op_string.c +140 -0
- data/src/core/tsi/fake_transport_security.c +525 -0
- data/src/core/tsi/fake_transport_security.h +61 -0
- data/src/core/tsi/ssl_transport_security.c +1467 -0
- data/src/core/tsi/ssl_transport_security.h +173 -0
- data/src/core/tsi/transport_security.c +284 -0
- data/src/core/tsi/transport_security.h +111 -0
- data/src/core/tsi/transport_security_interface.h +344 -0
- data/{bin → src/ruby/bin}/apis/google/protobuf/empty.rb +0 -0
- data/{bin → src/ruby/bin}/apis/pubsub_demo.rb +7 -15
- data/{bin → src/ruby/bin}/apis/tech/pubsub/proto/pubsub.rb +0 -0
- data/{bin → src/ruby/bin}/apis/tech/pubsub/proto/pubsub_services.rb +0 -0
- data/{bin → src/ruby/bin}/grpc_ruby_interop_client +0 -0
- data/{bin → src/ruby/bin}/grpc_ruby_interop_server +0 -0
- data/{bin → src/ruby/bin}/interop/interop_client.rb +0 -0
- data/{bin → src/ruby/bin}/interop/interop_server.rb +0 -0
- data/src/ruby/bin/math.rb +32 -0
- data/{bin → src/ruby/bin}/math_client.rb +1 -1
- data/{bin → src/ruby/bin}/math_server.rb +1 -1
- data/src/ruby/bin/math_services.rb +27 -0
- data/{bin → src/ruby/bin}/noproto_client.rb +1 -1
- data/{bin → src/ruby/bin}/noproto_server.rb +1 -1
- data/{ext → src/ruby/ext}/grpc/extconf.rb +24 -40
- data/{ext → src/ruby/ext}/grpc/rb_byte_buffer.c +0 -0
- data/{ext → src/ruby/ext}/grpc/rb_byte_buffer.h +0 -0
- data/{ext → src/ruby/ext}/grpc/rb_call.c +80 -18
- data/{ext → src/ruby/ext}/grpc/rb_call.h +6 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +315 -0
- data/src/ruby/ext/grpc/rb_call_credentials.h +46 -0
- data/{ext → src/ruby/ext}/grpc/rb_channel.c +19 -7
- data/{ext → src/ruby/ext}/grpc/rb_channel.h +0 -0
- data/{ext → src/ruby/ext}/grpc/rb_channel_args.c +2 -0
- data/{ext → src/ruby/ext}/grpc/rb_channel_args.h +0 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.c +266 -0
- data/{ext/grpc/rb_credentials.h → src/ruby/ext/grpc/rb_channel_credentials.h} +3 -3
- data/{ext → src/ruby/ext}/grpc/rb_completion_queue.c +3 -1
- data/{ext → src/ruby/ext}/grpc/rb_completion_queue.h +0 -0
- data/src/ruby/ext/grpc/rb_event_thread.c +153 -0
- data/src/ruby/ext/grpc/rb_event_thread.h +37 -0
- data/{ext → src/ruby/ext}/grpc/rb_grpc.c +25 -5
- data/{ext → src/ruby/ext}/grpc/rb_grpc.h +0 -0
- data/{ext → src/ruby/ext}/grpc/rb_server.c +4 -1
- data/{ext → src/ruby/ext}/grpc/rb_server.h +0 -0
- data/{ext → src/ruby/ext}/grpc/rb_server_credentials.c +2 -0
- data/{ext → src/ruby/ext}/grpc/rb_server_credentials.h +0 -0
- data/{lib → src/ruby/lib}/grpc.rb +6 -1
- data/{lib → src/ruby/lib}/grpc/core/time_consts.rb +0 -0
- data/{lib → src/ruby/lib}/grpc/errors.rb +0 -0
- data/{lib → src/ruby/lib}/grpc/generic/active_call.rb +4 -6
- data/{lib → src/ruby/lib}/grpc/generic/bidi_call.rb +16 -4
- data/{lib → src/ruby/lib}/grpc/generic/client_stub.rb +42 -52
- data/{lib → src/ruby/lib}/grpc/generic/rpc_desc.rb +0 -0
- data/{lib → src/ruby/lib}/grpc/generic/rpc_server.rb +15 -8
- data/{lib → src/ruby/lib}/grpc/generic/service.rb +4 -2
- data/src/ruby/lib/grpc/grpc.so +0 -0
- data/{lib → src/ruby/lib}/grpc/logconfig.rb +0 -0
- data/{lib → src/ruby/lib}/grpc/notifier.rb +0 -0
- data/{lib → src/ruby/lib}/grpc/version.rb +2 -2
- data/src/ruby/pb/README.md +42 -0
- data/src/ruby/pb/generate_proto_ruby.sh +51 -0
- data/src/ruby/pb/grpc/health/checker.rb +75 -0
- data/src/ruby/pb/grpc/health/v1alpha/health.rb +29 -0
- data/src/ruby/pb/grpc/health/v1alpha/health_services.rb +28 -0
- data/src/ruby/pb/test/client.rb +469 -0
- data/src/ruby/pb/test/proto/empty.rb +15 -0
- data/src/ruby/pb/test/proto/messages.rb +80 -0
- data/src/ruby/pb/test/proto/test.rb +14 -0
- data/src/ruby/pb/test/proto/test_services.rb +64 -0
- data/src/ruby/pb/test/server.rb +253 -0
- data/{bin/math_services.rb → src/ruby/spec/call_credentials_spec.rb} +19 -18
- data/{spec → src/ruby/spec}/call_spec.rb +10 -1
- data/{spec/credentials_spec.rb → src/ruby/spec/channel_credentials_spec.rb} +38 -12
- data/{spec → src/ruby/spec}/channel_spec.rb +14 -9
- data/{spec → src/ruby/spec}/client_server_spec.rb +31 -2
- data/{spec → src/ruby/spec}/completion_queue_spec.rb +0 -0
- data/{spec → src/ruby/spec}/generic/active_call_spec.rb +2 -1
- data/{spec → src/ruby/spec}/generic/client_stub_spec.rb +27 -67
- data/{spec → src/ruby/spec}/generic/rpc_desc_spec.rb +0 -0
- data/{spec → src/ruby/spec}/generic/rpc_server_pool_spec.rb +0 -0
- data/{spec → src/ruby/spec}/generic/rpc_server_spec.rb +12 -46
- data/{spec → src/ruby/spec}/generic/service_spec.rb +6 -3
- data/{spec → src/ruby/spec}/pb/health/checker_spec.rb +8 -8
- data/{spec → src/ruby/spec}/server_credentials_spec.rb +0 -0
- data/{spec → src/ruby/spec}/server_spec.rb +0 -0
- data/{spec → src/ruby/spec}/spec_helper.rb +0 -0
- data/{spec → src/ruby/spec}/testdata/README +0 -0
- data/{spec → src/ruby/spec}/testdata/ca.pem +0 -0
- data/{spec → src/ruby/spec}/testdata/server1.key +0 -0
- data/src/ruby/spec/testdata/server1.pem +16 -0
- data/{spec → src/ruby/spec}/time_consts_spec.rb +0 -0
- metadata +496 -97
- data/bin/math.proto +0 -80
- data/bin/math.rb +0 -61
- data/ext/grpc/rb_credentials.c +0 -294
- data/lib/grpc/grpc.so +0 -0
- data/spec/testdata/server1.pem +0 -16
@@ -0,0 +1,258 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#include <grpc/support/port_platform.h>
|
35
|
+
|
36
|
+
#ifdef GPR_LINUX_MULTIPOLL_WITH_EPOLL
|
37
|
+
|
38
|
+
#include <errno.h>
|
39
|
+
#include <poll.h>
|
40
|
+
#include <string.h>
|
41
|
+
#include <sys/epoll.h>
|
42
|
+
#include <unistd.h>
|
43
|
+
|
44
|
+
#include <grpc/support/alloc.h>
|
45
|
+
#include <grpc/support/log.h>
|
46
|
+
#include "src/core/iomgr/fd_posix.h"
|
47
|
+
#include "src/core/support/block_annotate.h"
|
48
|
+
#include "src/core/profiling/timers.h"
|
49
|
+
|
50
|
+
typedef struct {
|
51
|
+
grpc_pollset *pollset;
|
52
|
+
grpc_fd *fd;
|
53
|
+
grpc_closure closure;
|
54
|
+
} delayed_add;
|
55
|
+
|
56
|
+
typedef struct { int epoll_fd; } pollset_hdr;
|
57
|
+
|
58
|
+
static void finally_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
59
|
+
grpc_fd *fd) {
|
60
|
+
pollset_hdr *h = pollset->data.ptr;
|
61
|
+
struct epoll_event ev;
|
62
|
+
int err;
|
63
|
+
grpc_fd_watcher watcher;
|
64
|
+
|
65
|
+
/* We pretend to be polling whilst adding an fd to keep the fd from being
|
66
|
+
closed during the add. This may result in a spurious wakeup being assigned
|
67
|
+
to this pollset whilst adding, but that should be benign. */
|
68
|
+
GPR_ASSERT(grpc_fd_begin_poll(fd, pollset, NULL, 0, 0, &watcher) == 0);
|
69
|
+
if (watcher.fd != NULL) {
|
70
|
+
ev.events = (uint32_t)(EPOLLIN | EPOLLOUT | EPOLLET);
|
71
|
+
ev.data.ptr = fd;
|
72
|
+
err = epoll_ctl(h->epoll_fd, EPOLL_CTL_ADD, fd->fd, &ev);
|
73
|
+
if (err < 0) {
|
74
|
+
/* FDs may be added to a pollset multiple times, so EEXIST is normal. */
|
75
|
+
if (errno != EEXIST) {
|
76
|
+
gpr_log(GPR_ERROR, "epoll_ctl add for %d failed: %s", fd->fd,
|
77
|
+
strerror(errno));
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
grpc_fd_end_poll(exec_ctx, &watcher, 0, 0);
|
82
|
+
}
|
83
|
+
|
84
|
+
static void perform_delayed_add(grpc_exec_ctx *exec_ctx, void *arg,
|
85
|
+
int iomgr_status) {
|
86
|
+
delayed_add *da = arg;
|
87
|
+
|
88
|
+
if (!grpc_fd_is_orphaned(da->fd)) {
|
89
|
+
finally_add_fd(exec_ctx, da->pollset, da->fd);
|
90
|
+
}
|
91
|
+
|
92
|
+
gpr_mu_lock(&da->pollset->mu);
|
93
|
+
da->pollset->in_flight_cbs--;
|
94
|
+
if (da->pollset->shutting_down) {
|
95
|
+
/* We don't care about this pollset anymore. */
|
96
|
+
if (da->pollset->in_flight_cbs == 0 && !da->pollset->called_shutdown) {
|
97
|
+
da->pollset->called_shutdown = 1;
|
98
|
+
grpc_exec_ctx_enqueue(exec_ctx, da->pollset->shutdown_done, 1);
|
99
|
+
}
|
100
|
+
}
|
101
|
+
gpr_mu_unlock(&da->pollset->mu);
|
102
|
+
|
103
|
+
GRPC_FD_UNREF(da->fd, "delayed_add");
|
104
|
+
|
105
|
+
gpr_free(da);
|
106
|
+
}
|
107
|
+
|
108
|
+
static void multipoll_with_epoll_pollset_add_fd(grpc_exec_ctx *exec_ctx,
|
109
|
+
grpc_pollset *pollset,
|
110
|
+
grpc_fd *fd,
|
111
|
+
int and_unlock_pollset) {
|
112
|
+
if (and_unlock_pollset) {
|
113
|
+
gpr_mu_unlock(&pollset->mu);
|
114
|
+
finally_add_fd(exec_ctx, pollset, fd);
|
115
|
+
} else {
|
116
|
+
delayed_add *da = gpr_malloc(sizeof(*da));
|
117
|
+
da->pollset = pollset;
|
118
|
+
da->fd = fd;
|
119
|
+
GRPC_FD_REF(fd, "delayed_add");
|
120
|
+
grpc_closure_init(&da->closure, perform_delayed_add, da);
|
121
|
+
pollset->in_flight_cbs++;
|
122
|
+
grpc_exec_ctx_enqueue(exec_ctx, &da->closure, 1);
|
123
|
+
}
|
124
|
+
}
|
125
|
+
|
126
|
+
/* TODO(klempner): We probably want to turn this down a bit */
|
127
|
+
#define GRPC_EPOLL_MAX_EVENTS 1000
|
128
|
+
|
129
|
+
static void multipoll_with_epoll_pollset_maybe_work_and_unlock(
|
130
|
+
grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_pollset_worker *worker,
|
131
|
+
gpr_timespec deadline, gpr_timespec now) {
|
132
|
+
struct epoll_event ep_ev[GRPC_EPOLL_MAX_EVENTS];
|
133
|
+
int ep_rv;
|
134
|
+
int poll_rv;
|
135
|
+
pollset_hdr *h = pollset->data.ptr;
|
136
|
+
int timeout_ms;
|
137
|
+
struct pollfd pfds[2];
|
138
|
+
|
139
|
+
/* If you want to ignore epoll's ability to sanely handle parallel pollers,
|
140
|
+
* for a more apples-to-apples performance comparison with poll, add a
|
141
|
+
* if (pollset->counter != 0) { return 0; }
|
142
|
+
* here.
|
143
|
+
*/
|
144
|
+
|
145
|
+
gpr_mu_unlock(&pollset->mu);
|
146
|
+
|
147
|
+
timeout_ms = grpc_poll_deadline_to_millis_timeout(deadline, now);
|
148
|
+
|
149
|
+
pfds[0].fd = GRPC_WAKEUP_FD_GET_READ_FD(&worker->wakeup_fd->fd);
|
150
|
+
pfds[0].events = POLLIN;
|
151
|
+
pfds[0].revents = 0;
|
152
|
+
pfds[1].fd = h->epoll_fd;
|
153
|
+
pfds[1].events = POLLIN;
|
154
|
+
pfds[1].revents = 0;
|
155
|
+
|
156
|
+
/* TODO(vpai): Consider first doing a 0 timeout poll here to avoid
|
157
|
+
even going into the blocking annotation if possible */
|
158
|
+
GPR_TIMER_BEGIN("poll", 0);
|
159
|
+
GRPC_SCHEDULING_START_BLOCKING_REGION;
|
160
|
+
poll_rv = grpc_poll_function(pfds, 2, timeout_ms);
|
161
|
+
GRPC_SCHEDULING_END_BLOCKING_REGION;
|
162
|
+
GPR_TIMER_END("poll", 0);
|
163
|
+
|
164
|
+
if (poll_rv < 0) {
|
165
|
+
if (errno != EINTR) {
|
166
|
+
gpr_log(GPR_ERROR, "poll() failed: %s", strerror(errno));
|
167
|
+
}
|
168
|
+
} else if (poll_rv == 0) {
|
169
|
+
/* do nothing */
|
170
|
+
} else {
|
171
|
+
if (pfds[0].revents) {
|
172
|
+
grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd);
|
173
|
+
}
|
174
|
+
if (pfds[1].revents) {
|
175
|
+
do {
|
176
|
+
/* The following epoll_wait never blocks; it has a timeout of 0 */
|
177
|
+
ep_rv = epoll_wait(h->epoll_fd, ep_ev, GRPC_EPOLL_MAX_EVENTS, 0);
|
178
|
+
if (ep_rv < 0) {
|
179
|
+
if (errno != EINTR) {
|
180
|
+
gpr_log(GPR_ERROR, "epoll_wait() failed: %s", strerror(errno));
|
181
|
+
}
|
182
|
+
} else {
|
183
|
+
int i;
|
184
|
+
for (i = 0; i < ep_rv; ++i) {
|
185
|
+
grpc_fd *fd = ep_ev[i].data.ptr;
|
186
|
+
/* TODO(klempner): We might want to consider making err and pri
|
187
|
+
* separate events */
|
188
|
+
int cancel = ep_ev[i].events & (EPOLLERR | EPOLLHUP);
|
189
|
+
int read_ev = ep_ev[i].events & (EPOLLIN | EPOLLPRI);
|
190
|
+
int write_ev = ep_ev[i].events & EPOLLOUT;
|
191
|
+
if (fd == NULL) {
|
192
|
+
grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd);
|
193
|
+
} else {
|
194
|
+
if (read_ev || cancel) {
|
195
|
+
grpc_fd_become_readable(exec_ctx, fd);
|
196
|
+
}
|
197
|
+
if (write_ev || cancel) {
|
198
|
+
grpc_fd_become_writable(exec_ctx, fd);
|
199
|
+
}
|
200
|
+
}
|
201
|
+
}
|
202
|
+
}
|
203
|
+
} while (ep_rv == GRPC_EPOLL_MAX_EVENTS);
|
204
|
+
}
|
205
|
+
}
|
206
|
+
}
|
207
|
+
|
208
|
+
static void multipoll_with_epoll_pollset_finish_shutdown(
|
209
|
+
grpc_pollset *pollset) {}
|
210
|
+
|
211
|
+
static void multipoll_with_epoll_pollset_destroy(grpc_pollset *pollset) {
|
212
|
+
pollset_hdr *h = pollset->data.ptr;
|
213
|
+
close(h->epoll_fd);
|
214
|
+
gpr_free(h);
|
215
|
+
}
|
216
|
+
|
217
|
+
static const grpc_pollset_vtable multipoll_with_epoll_pollset = {
|
218
|
+
multipoll_with_epoll_pollset_add_fd,
|
219
|
+
multipoll_with_epoll_pollset_maybe_work_and_unlock,
|
220
|
+
multipoll_with_epoll_pollset_finish_shutdown,
|
221
|
+
multipoll_with_epoll_pollset_destroy};
|
222
|
+
|
223
|
+
static void epoll_become_multipoller(grpc_exec_ctx *exec_ctx,
|
224
|
+
grpc_pollset *pollset, grpc_fd **fds,
|
225
|
+
size_t nfds) {
|
226
|
+
size_t i;
|
227
|
+
pollset_hdr *h = gpr_malloc(sizeof(pollset_hdr));
|
228
|
+
struct epoll_event ev;
|
229
|
+
int err;
|
230
|
+
|
231
|
+
pollset->vtable = &multipoll_with_epoll_pollset;
|
232
|
+
pollset->data.ptr = h;
|
233
|
+
h->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
|
234
|
+
if (h->epoll_fd < 0) {
|
235
|
+
/* TODO(klempner): Fall back to poll here, especially on ENOSYS */
|
236
|
+
gpr_log(GPR_ERROR, "epoll_create1 failed: %s", strerror(errno));
|
237
|
+
abort();
|
238
|
+
}
|
239
|
+
|
240
|
+
ev.events = (uint32_t)(EPOLLIN | EPOLLET);
|
241
|
+
ev.data.ptr = NULL;
|
242
|
+
err = epoll_ctl(h->epoll_fd, EPOLL_CTL_ADD,
|
243
|
+
GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd), &ev);
|
244
|
+
if (err < 0) {
|
245
|
+
gpr_log(GPR_ERROR, "epoll_ctl add for %d failed: %s",
|
246
|
+
GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd),
|
247
|
+
strerror(errno));
|
248
|
+
}
|
249
|
+
|
250
|
+
for (i = 0; i < nfds; i++) {
|
251
|
+
multipoll_with_epoll_pollset_add_fd(exec_ctx, pollset, fds[i], 0);
|
252
|
+
}
|
253
|
+
}
|
254
|
+
|
255
|
+
grpc_platform_become_multipoller_type grpc_platform_become_multipoller =
|
256
|
+
epoll_become_multipoller;
|
257
|
+
|
258
|
+
#endif /* GPR_LINUX_MULTIPOLL_WITH_EPOLL */
|
@@ -0,0 +1,227 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#include <grpc/support/port_platform.h>
|
35
|
+
|
36
|
+
#ifdef GPR_POSIX_SOCKET
|
37
|
+
|
38
|
+
#include "src/core/iomgr/pollset_posix.h"
|
39
|
+
|
40
|
+
#include <errno.h>
|
41
|
+
#include <poll.h>
|
42
|
+
#include <stdlib.h>
|
43
|
+
#include <string.h>
|
44
|
+
|
45
|
+
#include "src/core/iomgr/fd_posix.h"
|
46
|
+
#include "src/core/iomgr/iomgr_internal.h"
|
47
|
+
#include "src/core/support/block_annotate.h"
|
48
|
+
#include <grpc/support/alloc.h>
|
49
|
+
#include <grpc/support/log.h>
|
50
|
+
#include <grpc/support/useful.h>
|
51
|
+
|
52
|
+
typedef struct {
|
53
|
+
/* all polled fds */
|
54
|
+
size_t fd_count;
|
55
|
+
size_t fd_capacity;
|
56
|
+
grpc_fd **fds;
|
57
|
+
/* fds that have been removed from the pollset explicitly */
|
58
|
+
size_t del_count;
|
59
|
+
size_t del_capacity;
|
60
|
+
grpc_fd **dels;
|
61
|
+
} pollset_hdr;
|
62
|
+
|
63
|
+
static void multipoll_with_poll_pollset_add_fd(grpc_exec_ctx *exec_ctx,
|
64
|
+
grpc_pollset *pollset,
|
65
|
+
grpc_fd *fd,
|
66
|
+
int and_unlock_pollset) {
|
67
|
+
size_t i;
|
68
|
+
pollset_hdr *h = pollset->data.ptr;
|
69
|
+
/* TODO(ctiller): this is O(num_fds^2); maybe switch to a hash set here */
|
70
|
+
for (i = 0; i < h->fd_count; i++) {
|
71
|
+
if (h->fds[i] == fd) goto exit;
|
72
|
+
}
|
73
|
+
if (h->fd_count == h->fd_capacity) {
|
74
|
+
h->fd_capacity = GPR_MAX(h->fd_capacity + 8, h->fd_count * 3 / 2);
|
75
|
+
h->fds = gpr_realloc(h->fds, sizeof(grpc_fd *) * h->fd_capacity);
|
76
|
+
}
|
77
|
+
h->fds[h->fd_count++] = fd;
|
78
|
+
GRPC_FD_REF(fd, "multipoller");
|
79
|
+
exit:
|
80
|
+
if (and_unlock_pollset) {
|
81
|
+
gpr_mu_unlock(&pollset->mu);
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
static void multipoll_with_poll_pollset_maybe_work_and_unlock(
|
86
|
+
grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_pollset_worker *worker,
|
87
|
+
gpr_timespec deadline, gpr_timespec now) {
|
88
|
+
#define POLLOUT_CHECK (POLLOUT | POLLHUP | POLLERR)
|
89
|
+
#define POLLIN_CHECK (POLLIN | POLLHUP | POLLERR)
|
90
|
+
|
91
|
+
int timeout;
|
92
|
+
int r;
|
93
|
+
size_t i, j, fd_count;
|
94
|
+
nfds_t pfd_count;
|
95
|
+
pollset_hdr *h;
|
96
|
+
/* TODO(ctiller): inline some elements to avoid an allocation */
|
97
|
+
grpc_fd_watcher *watchers;
|
98
|
+
struct pollfd *pfds;
|
99
|
+
|
100
|
+
h = pollset->data.ptr;
|
101
|
+
timeout = grpc_poll_deadline_to_millis_timeout(deadline, now);
|
102
|
+
/* TODO(ctiller): perform just one malloc here if we exceed the inline case */
|
103
|
+
pfds = gpr_malloc(sizeof(*pfds) * (h->fd_count + 2));
|
104
|
+
watchers = gpr_malloc(sizeof(*watchers) * (h->fd_count + 2));
|
105
|
+
fd_count = 0;
|
106
|
+
pfd_count = 2;
|
107
|
+
pfds[0].fd = GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd);
|
108
|
+
pfds[0].events = POLLIN;
|
109
|
+
pfds[0].revents = 0;
|
110
|
+
pfds[1].fd = GRPC_WAKEUP_FD_GET_READ_FD(&worker->wakeup_fd->fd);
|
111
|
+
pfds[1].events = POLLIN;
|
112
|
+
pfds[1].revents = 0;
|
113
|
+
for (i = 0; i < h->fd_count; i++) {
|
114
|
+
int remove = grpc_fd_is_orphaned(h->fds[i]);
|
115
|
+
for (j = 0; !remove && j < h->del_count; j++) {
|
116
|
+
if (h->fds[i] == h->dels[j]) remove = 1;
|
117
|
+
}
|
118
|
+
if (remove) {
|
119
|
+
GRPC_FD_UNREF(h->fds[i], "multipoller");
|
120
|
+
} else {
|
121
|
+
h->fds[fd_count++] = h->fds[i];
|
122
|
+
watchers[pfd_count].fd = h->fds[i];
|
123
|
+
pfds[pfd_count].fd = h->fds[i]->fd;
|
124
|
+
pfds[pfd_count].revents = 0;
|
125
|
+
pfd_count++;
|
126
|
+
}
|
127
|
+
}
|
128
|
+
for (j = 0; j < h->del_count; j++) {
|
129
|
+
GRPC_FD_UNREF(h->dels[j], "multipoller_del");
|
130
|
+
}
|
131
|
+
h->del_count = 0;
|
132
|
+
h->fd_count = fd_count;
|
133
|
+
gpr_mu_unlock(&pollset->mu);
|
134
|
+
|
135
|
+
for (i = 2; i < pfd_count; i++) {
|
136
|
+
pfds[i].events = (short)grpc_fd_begin_poll(watchers[i].fd, pollset, worker,
|
137
|
+
POLLIN, POLLOUT, &watchers[i]);
|
138
|
+
}
|
139
|
+
|
140
|
+
/* TODO(vpai): Consider first doing a 0 timeout poll here to avoid
|
141
|
+
even going into the blocking annotation if possible */
|
142
|
+
GRPC_SCHEDULING_START_BLOCKING_REGION;
|
143
|
+
r = grpc_poll_function(pfds, pfd_count, timeout);
|
144
|
+
GRPC_SCHEDULING_END_BLOCKING_REGION;
|
145
|
+
|
146
|
+
if (r < 0) {
|
147
|
+
gpr_log(GPR_ERROR, "poll() failed: %s", strerror(errno));
|
148
|
+
for (i = 2; i < pfd_count; i++) {
|
149
|
+
grpc_fd_end_poll(exec_ctx, &watchers[i], 0, 0);
|
150
|
+
}
|
151
|
+
} else if (r == 0) {
|
152
|
+
for (i = 2; i < pfd_count; i++) {
|
153
|
+
grpc_fd_end_poll(exec_ctx, &watchers[i], 0, 0);
|
154
|
+
}
|
155
|
+
} else {
|
156
|
+
if (pfds[0].revents & POLLIN_CHECK) {
|
157
|
+
grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd);
|
158
|
+
}
|
159
|
+
if (pfds[1].revents & POLLIN_CHECK) {
|
160
|
+
grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd);
|
161
|
+
}
|
162
|
+
for (i = 2; i < pfd_count; i++) {
|
163
|
+
if (watchers[i].fd == NULL) {
|
164
|
+
grpc_fd_end_poll(exec_ctx, &watchers[i], 0, 0);
|
165
|
+
continue;
|
166
|
+
}
|
167
|
+
grpc_fd_end_poll(exec_ctx, &watchers[i], pfds[i].revents & POLLIN_CHECK,
|
168
|
+
pfds[i].revents & POLLOUT_CHECK);
|
169
|
+
}
|
170
|
+
}
|
171
|
+
|
172
|
+
gpr_free(pfds);
|
173
|
+
gpr_free(watchers);
|
174
|
+
}
|
175
|
+
|
176
|
+
static void multipoll_with_poll_pollset_finish_shutdown(grpc_pollset *pollset) {
|
177
|
+
size_t i;
|
178
|
+
pollset_hdr *h = pollset->data.ptr;
|
179
|
+
for (i = 0; i < h->fd_count; i++) {
|
180
|
+
GRPC_FD_UNREF(h->fds[i], "multipoller");
|
181
|
+
}
|
182
|
+
for (i = 0; i < h->del_count; i++) {
|
183
|
+
GRPC_FD_UNREF(h->dels[i], "multipoller_del");
|
184
|
+
}
|
185
|
+
h->fd_count = 0;
|
186
|
+
h->del_count = 0;
|
187
|
+
}
|
188
|
+
|
189
|
+
static void multipoll_with_poll_pollset_destroy(grpc_pollset *pollset) {
|
190
|
+
pollset_hdr *h = pollset->data.ptr;
|
191
|
+
multipoll_with_poll_pollset_finish_shutdown(pollset);
|
192
|
+
gpr_free(h->fds);
|
193
|
+
gpr_free(h->dels);
|
194
|
+
gpr_free(h);
|
195
|
+
}
|
196
|
+
|
197
|
+
static const grpc_pollset_vtable multipoll_with_poll_pollset = {
|
198
|
+
multipoll_with_poll_pollset_add_fd,
|
199
|
+
multipoll_with_poll_pollset_maybe_work_and_unlock,
|
200
|
+
multipoll_with_poll_pollset_finish_shutdown,
|
201
|
+
multipoll_with_poll_pollset_destroy};
|
202
|
+
|
203
|
+
void grpc_poll_become_multipoller(grpc_exec_ctx *exec_ctx,
|
204
|
+
grpc_pollset *pollset, grpc_fd **fds,
|
205
|
+
size_t nfds) {
|
206
|
+
size_t i;
|
207
|
+
pollset_hdr *h = gpr_malloc(sizeof(pollset_hdr));
|
208
|
+
pollset->vtable = &multipoll_with_poll_pollset;
|
209
|
+
pollset->data.ptr = h;
|
210
|
+
h->fd_count = nfds;
|
211
|
+
h->fd_capacity = nfds;
|
212
|
+
h->fds = gpr_malloc(nfds * sizeof(grpc_fd *));
|
213
|
+
h->del_count = 0;
|
214
|
+
h->del_capacity = 0;
|
215
|
+
h->dels = NULL;
|
216
|
+
for (i = 0; i < nfds; i++) {
|
217
|
+
h->fds[i] = fds[i];
|
218
|
+
GRPC_FD_REF(fds[i], "multipoller");
|
219
|
+
}
|
220
|
+
}
|
221
|
+
|
222
|
+
#endif /* GPR_POSIX_SOCKET */
|
223
|
+
|
224
|
+
#ifdef GPR_POSIX_MULTIPOLL_WITH_POLL
|
225
|
+
grpc_platform_become_multipoller_type grpc_platform_become_multipoller =
|
226
|
+
grpc_poll_become_multipoller;
|
227
|
+
#endif
|