grpc 1.4.5 → 1.6.0.pre1
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 +1235 -1100
- data/etc/roots.pem +0 -412
- data/include/grpc/byte_buffer.h +10 -25
- data/include/grpc/byte_buffer_reader.h +10 -25
- data/include/grpc/census.h +10 -25
- data/include/grpc/compression.h +10 -25
- data/include/grpc/grpc.h +15 -26
- data/include/grpc/grpc_cronet.h +10 -25
- data/include/grpc/grpc_posix.h +10 -25
- data/include/grpc/grpc_security.h +10 -25
- data/include/grpc/grpc_security_constants.h +10 -25
- data/include/grpc/impl/codegen/atm.h +11 -25
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +10 -25
- data/include/grpc/impl/codegen/atm_gcc_sync.h +10 -25
- data/include/grpc/impl/codegen/atm_windows.h +10 -25
- data/include/grpc/impl/codegen/byte_buffer_reader.h +11 -26
- data/include/grpc/impl/codegen/compression_types.h +12 -27
- data/include/grpc/impl/codegen/connectivity_state.h +10 -25
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +10 -25
- data/include/grpc/impl/codegen/gpr_slice.h +10 -25
- data/include/grpc/impl/codegen/gpr_types.h +10 -25
- data/include/grpc/impl/codegen/grpc_types.h +42 -43
- data/include/grpc/impl/codegen/port_platform.h +10 -25
- data/include/grpc/impl/codegen/propagation_bits.h +10 -25
- data/include/grpc/impl/codegen/slice.h +13 -28
- data/include/grpc/impl/codegen/status.h +10 -25
- data/include/grpc/impl/codegen/sync.h +10 -25
- data/include/grpc/impl/codegen/sync_generic.h +10 -25
- data/include/grpc/impl/codegen/sync_posix.h +10 -25
- data/include/grpc/impl/codegen/sync_windows.h +10 -25
- data/include/grpc/load_reporting.h +10 -25
- data/include/grpc/slice.h +10 -25
- data/include/grpc/slice_buffer.h +10 -25
- data/include/grpc/status.h +10 -25
- data/include/grpc/support/alloc.h +10 -25
- data/include/grpc/support/atm.h +10 -25
- data/include/grpc/support/atm_gcc_atomic.h +10 -25
- data/include/grpc/support/atm_gcc_sync.h +10 -25
- data/include/grpc/support/atm_windows.h +10 -25
- data/include/grpc/support/avl.h +46 -49
- data/include/grpc/support/cmdline.h +10 -25
- data/include/grpc/support/cpu.h +10 -25
- data/include/grpc/support/histogram.h +10 -25
- data/include/grpc/support/host_port.h +10 -25
- data/include/grpc/support/log.h +10 -25
- data/include/grpc/support/log_windows.h +10 -25
- data/include/grpc/support/port_platform.h +10 -25
- data/include/grpc/support/string_util.h +10 -25
- data/include/grpc/support/subprocess.h +10 -25
- data/include/grpc/support/sync.h +10 -25
- data/include/grpc/support/sync_generic.h +10 -25
- data/include/grpc/support/sync_posix.h +10 -25
- data/include/grpc/support/sync_windows.h +10 -25
- data/include/grpc/support/thd.h +10 -25
- data/include/grpc/support/time.h +10 -25
- data/include/grpc/support/tls.h +10 -25
- data/include/grpc/support/tls_gcc.h +10 -25
- data/include/grpc/support/tls_msvc.h +10 -25
- data/include/grpc/support/tls_pthread.h +10 -25
- data/include/grpc/support/useful.h +10 -25
- data/include/grpc/support/workaround_list.h +11 -26
- data/src/boringssl/err_data.c +277 -259
- data/src/core/ext/census/aggregation.h +10 -25
- data/src/core/ext/census/base_resources.c +10 -25
- data/src/core/ext/census/base_resources.h +10 -25
- data/src/core/ext/census/census_interface.h +10 -25
- data/src/core/ext/census/census_rpc_stats.h +10 -25
- data/src/core/ext/census/context.c +10 -25
- data/src/core/ext/census/gen/census.pb.c +10 -25
- data/src/core/ext/census/gen/census.pb.h +10 -25
- data/src/core/ext/census/gen/trace_context.pb.c +10 -25
- data/src/core/ext/census/gen/trace_context.pb.h +10 -25
- data/src/core/ext/census/grpc_context.c +10 -25
- data/src/core/ext/census/grpc_filter.c +11 -26
- data/src/core/ext/census/grpc_filter.h +10 -25
- data/src/core/ext/census/grpc_plugin.c +10 -25
- data/src/core/ext/census/initialize.c +10 -25
- data/src/core/ext/census/intrusive_hash_map.c +10 -25
- data/src/core/ext/census/intrusive_hash_map.h +10 -25
- data/src/core/ext/census/intrusive_hash_map_internal.h +10 -25
- data/src/core/ext/census/mlog.c +10 -25
- data/src/core/ext/census/mlog.h +10 -25
- data/src/core/ext/census/operation.c +10 -25
- data/src/core/ext/census/placeholders.c +10 -25
- data/src/core/ext/census/resource.c +10 -25
- data/src/core/ext/census/resource.h +10 -25
- data/src/core/ext/census/rpc_metric_id.h +10 -25
- data/src/core/ext/census/trace_context.c +10 -25
- data/src/core/ext/census/trace_context.h +10 -25
- data/src/core/ext/census/trace_label.h +10 -25
- data/src/core/ext/census/trace_propagation.h +10 -25
- data/src/core/ext/census/trace_status.h +10 -25
- data/src/core/ext/census/trace_string.h +10 -25
- data/src/core/ext/census/tracing.c +10 -26
- data/src/core/ext/census/tracing.h +10 -25
- data/src/core/ext/filters/client_channel/channel_connectivity.c +20 -33
- data/src/core/ext/filters/client_channel/client_channel.c +617 -520
- data/src/core/ext/filters/client_channel/client_channel.h +15 -28
- data/src/core/ext/filters/client_channel/client_channel_factory.c +13 -31
- data/src/core/ext/filters/client_channel/client_channel_factory.h +10 -25
- data/src/core/ext/filters/client_channel/client_channel_plugin.c +16 -29
- data/src/core/ext/filters/client_channel/connector.c +10 -25
- data/src/core/ext/filters/client_channel/connector.h +10 -25
- data/src/core/ext/filters/client_channel/http_connect_handshaker.c +15 -30
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -25
- data/src/core/ext/filters/client_channel/http_proxy.c +112 -38
- data/src/core/ext/filters/client_channel/http_proxy.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy.c +32 -36
- data/src/core/ext/filters/client_channel/lb_policy.h +24 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.c +14 -30
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +464 -279
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +15 -28
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +40 -48
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.c +65 -49
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +31 -31
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +47 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +11 -26
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +13 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +27 -21
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +373 -136
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +504 -279
- data/src/core/ext/filters/client_channel/lb_policy_factory.c +12 -31
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +12 -27
- data/src/core/ext/filters/client_channel/lb_policy_registry.c +10 -25
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -25
- data/src/core/ext/filters/client_channel/parse_address.c +10 -25
- data/src/core/ext/filters/client_channel/parse_address.h +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper.c +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper.h +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +10 -25
- data/src/core/ext/filters/client_channel/resolver.c +33 -38
- data/src/core/ext/filters/client_channel/resolver.h +19 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +153 -50
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +14 -27
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +33 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +326 -116
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +35 -36
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +19 -34
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.c +254 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +60 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +16 -28
- data/src/core/ext/filters/client_channel/resolver_factory.c +10 -25
- data/src/core/ext/filters/client_channel/resolver_factory.h +10 -25
- data/src/core/ext/filters/client_channel/resolver_registry.c +10 -25
- data/src/core/ext/filters/client_channel/resolver_registry.h +10 -25
- data/src/core/ext/filters/client_channel/retry_throttle.c +23 -34
- data/src/core/ext/filters/client_channel/retry_throttle.h +10 -25
- data/src/core/ext/filters/client_channel/subchannel.c +33 -55
- data/src/core/ext/filters/client_channel/subchannel.h +16 -26
- data/src/core/ext/filters/client_channel/subchannel_index.c +55 -92
- data/src/core/ext/filters/client_channel/subchannel_index.h +26 -29
- data/src/core/ext/filters/client_channel/uri_parser.c +10 -25
- data/src/core/ext/filters/client_channel/uri_parser.h +10 -25
- data/src/core/ext/filters/deadline/deadline_filter.c +30 -45
- data/src/core/ext/filters/deadline/deadline_filter.h +10 -25
- data/src/core/ext/filters/http/client/http_client_filter.c +255 -294
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -25
- data/src/core/ext/filters/http/http_filters_plugin.c +11 -26
- data/src/core/ext/filters/http/message_compress/message_compress_filter.c +133 -105
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +10 -25
- data/src/core/ext/filters/http/server/http_server_filter.c +17 -32
- data/src/core/ext/filters/http/server/http_server_filter.h +10 -25
- data/src/core/ext/filters/load_reporting/load_reporting.c +11 -30
- data/src/core/ext/filters/load_reporting/load_reporting.h +10 -25
- data/src/core/ext/filters/load_reporting/load_reporting_filter.c +11 -26
- data/src/core/ext/filters/load_reporting/load_reporting_filter.h +10 -25
- data/src/core/ext/filters/max_age/max_age_filter.c +28 -43
- data/src/core/ext/filters/max_age/max_age_filter.h +10 -25
- data/src/core/ext/filters/message_size/message_size_filter.c +24 -37
- data/src/core/ext/filters/message_size/message_size_filter.h +10 -25
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.c +16 -31
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +10 -25
- data/src/core/ext/filters/workarounds/workaround_utils.c +12 -26
- data/src/core/ext/filters/workarounds/workaround_utils.h +11 -26
- data/src/core/ext/transport/chttp2/alpn/alpn.c +10 -25
- data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -25
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +13 -28
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +10 -25
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +13 -30
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +12 -29
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +13 -30
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +11 -26
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -25
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +10 -25
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +10 -25
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +11 -25
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +10 -25
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +15 -27
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +421 -443
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -25
- data/src/core/ext/transport/chttp2/transport/flow_control.c +500 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_data.c +20 -28
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +11 -26
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +11 -26
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +16 -29
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -33
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +18 -31
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +15 -30
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -25
- data/src/core/ext/transport/chttp2/transport/http2_settings.c +10 -25
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -25
- data/src/core/ext/transport/chttp2/transport/huffsyms.c +10 -25
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +10 -25
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +10 -25
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +10 -25
- data/src/core/ext/transport/chttp2/transport/internal.h +191 -179
- data/src/core/ext/transport/chttp2/transport/parsing.c +33 -102
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +26 -28
- data/src/core/ext/transport/chttp2/transport/stream_map.c +10 -25
- data/src/core/ext/transport/chttp2/transport/stream_map.h +10 -25
- data/src/core/ext/transport/chttp2/transport/varint.c +14 -25
- data/src/core/ext/transport/chttp2/transport/varint.h +10 -25
- data/src/core/ext/transport/chttp2/transport/writing.c +164 -106
- data/src/core/ext/transport/inproc/inproc_plugin.c +29 -0
- data/src/core/ext/transport/inproc/inproc_transport.c +1303 -0
- data/src/core/ext/transport/inproc/inproc_transport.h +41 -0
- data/src/core/lib/channel/channel_args.c +52 -27
- data/src/core/lib/channel/channel_args.h +18 -27
- data/src/core/lib/channel/channel_stack.c +11 -26
- data/src/core/lib/channel/channel_stack.h +12 -27
- data/src/core/lib/channel/channel_stack_builder.c +11 -26
- data/src/core/lib/channel/channel_stack_builder.h +10 -25
- data/src/core/lib/channel/connected_channel.c +10 -25
- data/src/core/lib/channel/connected_channel.h +10 -25
- data/src/core/lib/channel/context.h +10 -25
- data/src/core/lib/channel/handshaker.c +14 -29
- data/src/core/lib/channel/handshaker.h +10 -25
- data/src/core/lib/channel/handshaker_factory.c +10 -25
- data/src/core/lib/channel/handshaker_factory.h +10 -25
- data/src/core/lib/channel/handshaker_registry.c +10 -25
- data/src/core/lib/channel/handshaker_registry.h +10 -25
- data/src/core/lib/compression/algorithm_metadata.h +10 -25
- data/src/core/lib/compression/compression.c +10 -25
- data/src/core/lib/compression/message_compress.c +10 -25
- data/src/core/lib/compression/message_compress.h +10 -25
- data/src/core/lib/compression/stream_compression.c +191 -0
- data/src/core/lib/compression/stream_compression.h +90 -0
- data/src/core/lib/debug/trace.c +28 -29
- data/src/core/lib/debug/trace.h +16 -30
- data/src/core/lib/http/format_request.c +10 -25
- data/src/core/lib/http/format_request.h +10 -25
- data/src/core/lib/http/httpcli.c +19 -35
- data/src/core/lib/http/httpcli.h +10 -25
- data/src/core/lib/http/httpcli_security_connector.c +17 -30
- data/src/core/lib/http/parser.c +11 -26
- data/src/core/lib/http/parser.h +10 -25
- data/src/core/lib/iomgr/closure.c +62 -25
- data/src/core/lib/iomgr/closure.h +81 -26
- data/src/core/lib/iomgr/combiner.c +103 -200
- data/src/core/lib/iomgr/combiner.h +14 -32
- data/src/core/lib/iomgr/endpoint.c +10 -29
- data/src/core/lib/iomgr/endpoint.h +10 -29
- data/src/core/lib/iomgr/endpoint_pair.h +10 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.c +10 -25
- data/src/core/lib/iomgr/endpoint_pair_uv.c +10 -25
- data/src/core/lib/iomgr/endpoint_pair_windows.c +10 -25
- data/src/core/lib/iomgr/error.c +45 -46
- data/src/core/lib/iomgr/error.h +21 -34
- data/src/core/lib/iomgr/error_internal.h +10 -25
- data/src/core/lib/iomgr/ev_epoll1_linux.c +279 -179
- data/src/core/lib/iomgr/ev_epoll1_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.c +75 -264
- data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.c +44 -199
- data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epollex_linux.c +184 -247
- data/src/core/lib/iomgr/ev_epollex_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epollsig_linux.c +116 -323
- data/src/core/lib/iomgr/ev_epollsig_linux.h +10 -25
- data/src/core/lib/iomgr/ev_poll_posix.c +328 -184
- data/src/core/lib/iomgr/ev_poll_posix.h +10 -25
- data/src/core/lib/iomgr/ev_posix.c +25 -56
- data/src/core/lib/iomgr/ev_posix.h +15 -44
- data/src/core/lib/iomgr/ev_windows.c +11 -26
- data/src/core/lib/iomgr/exec_ctx.c +36 -45
- data/src/core/lib/iomgr/exec_ctx.h +10 -25
- data/src/core/lib/iomgr/executor.c +152 -127
- data/src/core/lib/iomgr/executor.h +18 -26
- data/src/core/lib/iomgr/gethostname.h +26 -0
- data/src/core/lib/iomgr/gethostname_fallback.c +27 -0
- data/src/core/lib/iomgr/gethostname_host_name_max.c +37 -0
- data/src/core/lib/iomgr/gethostname_sysconf.c +37 -0
- data/src/core/lib/iomgr/iocp_windows.c +10 -25
- data/src/core/lib/iomgr/iocp_windows.h +10 -25
- data/src/core/lib/iomgr/iomgr.c +17 -28
- data/src/core/lib/iomgr/iomgr.h +12 -27
- data/src/core/lib/iomgr/iomgr_internal.h +10 -25
- data/src/core/lib/iomgr/iomgr_posix.c +11 -26
- data/src/core/lib/iomgr/iomgr_posix.h +10 -25
- data/src/core/lib/iomgr/iomgr_uv.c +19 -26
- data/src/core/lib/iomgr/iomgr_uv.h +37 -0
- data/src/core/lib/iomgr/iomgr_windows.c +10 -25
- data/src/core/lib/iomgr/is_epollexclusive_available.c +10 -25
- data/src/core/lib/iomgr/is_epollexclusive_available.h +10 -25
- data/src/core/lib/iomgr/load_file.c +10 -25
- data/src/core/lib/iomgr/load_file.h +10 -25
- data/src/core/lib/iomgr/lockfree_event.c +22 -35
- data/src/core/lib/iomgr/lockfree_event.h +13 -27
- data/src/core/lib/iomgr/nameser.h +104 -0
- data/src/core/lib/iomgr/network_status_tracker.c +10 -25
- data/src/core/lib/iomgr/network_status_tracker.h +10 -25
- data/src/core/lib/iomgr/polling_entity.c +10 -25
- data/src/core/lib/iomgr/polling_entity.h +14 -34
- data/src/core/lib/iomgr/pollset.h +14 -25
- data/src/core/lib/iomgr/pollset_set.h +10 -25
- data/src/core/lib/iomgr/pollset_set_uv.c +10 -25
- data/src/core/lib/iomgr/pollset_set_windows.c +10 -25
- data/src/core/lib/iomgr/pollset_set_windows.h +10 -25
- data/src/core/lib/iomgr/pollset_uv.c +25 -26
- data/src/core/lib/iomgr/pollset_uv.h +10 -25
- data/src/core/lib/iomgr/pollset_windows.c +17 -27
- data/src/core/lib/iomgr/pollset_windows.h +10 -25
- data/src/core/lib/iomgr/port.h +24 -25
- data/src/core/lib/iomgr/resolve_address.h +10 -25
- data/src/core/lib/iomgr/resolve_address_posix.c +13 -28
- data/src/core/lib/iomgr/resolve_address_uv.c +31 -35
- data/src/core/lib/iomgr/resolve_address_windows.c +13 -28
- data/src/core/lib/iomgr/resource_quota.c +52 -67
- data/src/core/lib/iomgr/resource_quota.h +10 -25
- data/src/core/lib/iomgr/sockaddr.h +10 -25
- data/src/core/lib/iomgr/sockaddr_posix.h +10 -25
- data/src/core/lib/iomgr/sockaddr_utils.c +15 -25
- data/src/core/lib/iomgr/sockaddr_utils.h +12 -25
- data/src/core/lib/iomgr/sockaddr_windows.h +10 -25
- data/src/core/lib/iomgr/socket_factory_posix.c +13 -31
- data/src/core/lib/iomgr/socket_factory_posix.h +10 -25
- data/src/core/lib/iomgr/socket_mutator.c +14 -31
- data/src/core/lib/iomgr/socket_mutator.h +10 -25
- data/src/core/lib/iomgr/socket_utils.h +10 -25
- data/src/core/lib/iomgr/socket_utils_common_posix.c +10 -25
- data/src/core/lib/iomgr/socket_utils_linux.c +10 -25
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -25
- data/src/core/lib/iomgr/socket_utils_posix.h +10 -25
- data/src/core/lib/iomgr/socket_utils_uv.c +10 -25
- data/src/core/lib/iomgr/socket_utils_windows.c +10 -25
- data/src/core/lib/iomgr/socket_windows.c +12 -27
- data/src/core/lib/iomgr/socket_windows.h +10 -25
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +10 -25
- data/src/core/lib/iomgr/tcp_client.h +10 -25
- data/src/core/lib/iomgr/tcp_client_posix.c +21 -34
- data/src/core/lib/iomgr/tcp_client_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_client_uv.c +18 -27
- data/src/core/lib/iomgr/tcp_client_windows.c +14 -29
- data/src/core/lib/iomgr/tcp_posix.c +36 -55
- data/src/core/lib/iomgr/tcp_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_server.h +10 -25
- data/src/core/lib/iomgr/tcp_server_posix.c +16 -31
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +11 -26
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +10 -25
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +10 -25
- data/src/core/lib/iomgr/tcp_server_uv.c +103 -64
- data/src/core/lib/iomgr/tcp_server_windows.c +14 -29
- data/src/core/lib/iomgr/tcp_uv.c +41 -45
- data/src/core/lib/iomgr/tcp_uv.h +10 -25
- data/src/core/lib/iomgr/tcp_windows.c +39 -53
- data/src/core/lib/iomgr/tcp_windows.h +10 -25
- data/src/core/lib/iomgr/time_averaged_stats.c +10 -25
- data/src/core/lib/iomgr/time_averaged_stats.h +10 -25
- data/src/core/lib/iomgr/timer.h +18 -27
- data/src/core/lib/iomgr/timer_generic.c +91 -87
- data/src/core/lib/iomgr/timer_generic.h +10 -25
- data/src/core/lib/iomgr/timer_heap.c +10 -25
- data/src/core/lib/iomgr/timer_heap.h +10 -25
- data/src/core/lib/iomgr/timer_manager.c +178 -100
- data/src/core/lib/iomgr/timer_manager.h +10 -25
- data/src/core/lib/iomgr/timer_uv.c +23 -33
- data/src/core/lib/iomgr/timer_uv.h +10 -25
- data/src/core/lib/iomgr/udp_server.c +17 -32
- data/src/core/lib/iomgr/udp_server.h +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix.c +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix.h +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_cv.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_cv.h +13 -28
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +10 -25
- data/src/core/lib/iomgr/wakeup_fd_posix.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_posix.h +10 -25
- data/src/core/lib/json/json.c +10 -25
- data/src/core/lib/json/json.h +10 -25
- data/src/core/lib/json/json_common.h +10 -25
- data/src/core/lib/json/json_reader.c +11 -25
- data/src/core/lib/json/json_reader.h +10 -25
- data/src/core/lib/json/json_string.c +10 -25
- data/src/core/lib/json/json_writer.c +10 -25
- data/src/core/lib/json/json_writer.h +10 -25
- data/src/core/lib/profiling/basic_timers.c +10 -25
- data/src/core/lib/profiling/stap_timers.c +10 -25
- data/src/core/lib/profiling/timers.h +10 -25
- data/src/core/lib/security/context/security_context.c +32 -40
- data/src/core/lib/security/context/security_context.h +15 -26
- data/src/core/lib/security/credentials/composite/composite_credentials.c +76 -81
- data/src/core/lib/security/credentials/composite/composite_credentials.h +10 -25
- data/src/core/lib/security/credentials/credentials.c +29 -49
- data/src/core/lib/security/credentials/credentials.h +48 -61
- data/src/core/lib/security/credentials/credentials_metadata.c +34 -78
- data/src/core/lib/security/credentials/fake/fake_credentials.c +33 -56
- data/src/core/lib/security/credentials/fake/fake_credentials.h +12 -27
- data/src/core/lib/security/credentials/google_default/credentials_generic.c +10 -25
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +12 -27
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -25
- data/src/core/lib/security/credentials/iam/iam_credentials.c +40 -40
- data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -26
- data/src/core/lib/security/credentials/jwt/json_token.c +10 -25
- data/src/core/lib/security/credentials/jwt/json_token.h +10 -25
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +45 -48
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -26
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +53 -33
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +10 -25
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +155 -87
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -28
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +118 -82
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -32
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -25
- data/src/core/lib/security/transport/auth_filters.h +10 -25
- data/src/core/lib/security/transport/client_auth_filter.c +217 -112
- data/src/core/lib/security/transport/lb_targets_info.c +16 -32
- data/src/core/lib/security/transport/lb_targets_info.h +10 -25
- data/src/core/lib/security/transport/secure_endpoint.c +29 -43
- data/src/core/lib/security/transport/secure_endpoint.h +10 -25
- data/src/core/lib/security/transport/security_connector.c +80 -61
- data/src/core/lib/security/transport/security_connector.h +35 -35
- data/src/core/lib/security/transport/security_handshaker.c +18 -33
- data/src/core/lib/security/transport/security_handshaker.h +10 -25
- data/src/core/lib/security/transport/server_auth_filter.c +62 -116
- data/src/core/lib/security/transport/tsi_error.c +10 -25
- data/src/core/lib/security/transport/tsi_error.h +10 -25
- data/src/core/lib/security/util/json_util.c +10 -25
- data/src/core/lib/security/util/json_util.h +10 -25
- data/src/core/lib/slice/b64.c +10 -25
- data/src/core/lib/slice/b64.h +10 -25
- data/src/core/lib/slice/percent_encoding.c +10 -25
- data/src/core/lib/slice/percent_encoding.h +10 -25
- data/src/core/lib/slice/slice.c +10 -25
- data/src/core/lib/slice/slice_buffer.c +10 -25
- data/src/core/lib/slice/slice_hash_table.c +48 -26
- data/src/core/lib/slice/slice_hash_table.h +26 -28
- data/src/core/lib/slice/slice_intern.c +10 -25
- data/src/core/lib/slice/slice_internal.h +10 -25
- data/src/core/lib/slice/slice_string_helpers.c +10 -25
- data/src/core/lib/slice/slice_string_helpers.h +10 -25
- data/src/core/lib/support/alloc.c +10 -25
- data/src/core/lib/support/arena.c +12 -27
- data/src/core/lib/support/arena.h +10 -25
- data/src/core/lib/support/atm.c +17 -32
- data/src/core/lib/support/atomic.h +10 -25
- data/src/core/lib/support/atomic_with_atm.h +10 -25
- data/src/core/lib/support/atomic_with_std.h +10 -25
- data/src/core/lib/support/avl.c +101 -101
- data/src/core/lib/support/backoff.c +10 -25
- data/src/core/lib/support/backoff.h +10 -25
- data/src/core/lib/support/block_annotate.h +10 -25
- data/src/core/lib/support/cmdline.c +10 -25
- data/src/core/lib/support/cpu_iphone.c +10 -25
- data/src/core/lib/support/cpu_linux.c +10 -25
- data/src/core/lib/support/cpu_posix.c +10 -25
- data/src/core/lib/support/cpu_windows.c +10 -25
- data/src/core/lib/support/env.h +16 -25
- data/src/core/lib/support/env_linux.c +30 -37
- data/src/core/lib/support/env_posix.c +15 -25
- data/src/core/lib/support/env_windows.c +15 -25
- data/src/core/lib/support/histogram.c +10 -25
- data/src/core/lib/support/host_port.c +10 -25
- data/src/core/lib/support/log.c +20 -29
- data/src/core/lib/support/log_android.c +10 -25
- data/src/core/lib/support/log_linux.c +13 -26
- data/src/core/lib/support/log_posix.c +10 -25
- data/src/core/lib/support/log_windows.c +10 -25
- data/src/core/lib/support/memory.h +10 -25
- data/src/core/lib/support/mpscq.c +11 -49
- data/src/core/lib/support/mpscq.h +11 -50
- data/src/core/lib/support/murmur_hash.c +12 -25
- data/src/core/lib/support/murmur_hash.h +10 -25
- data/src/core/lib/support/spinlock.h +10 -25
- data/src/core/lib/support/stack_lockfree.c +10 -25
- data/src/core/lib/support/stack_lockfree.h +10 -25
- data/src/core/lib/support/string.c +10 -25
- data/src/core/lib/support/string.h +10 -25
- data/src/core/lib/support/string_posix.c +10 -25
- data/src/core/lib/support/string_util_windows.c +10 -25
- data/src/core/lib/support/string_windows.c +10 -25
- data/src/core/lib/support/string_windows.h +10 -25
- data/src/core/lib/support/subprocess_posix.c +10 -25
- data/src/core/lib/support/subprocess_windows.c +10 -25
- data/src/core/lib/support/sync.c +10 -25
- data/src/core/lib/support/sync_posix.c +10 -25
- data/src/core/lib/support/sync_windows.c +10 -25
- data/src/core/lib/support/thd.c +10 -25
- data/src/core/lib/support/thd_internal.h +10 -25
- data/src/core/lib/support/thd_posix.c +10 -25
- data/src/core/lib/support/thd_windows.c +10 -25
- data/src/core/lib/support/time.c +10 -25
- data/src/core/lib/support/time_posix.c +10 -25
- data/src/core/lib/support/time_precise.c +18 -33
- data/src/core/lib/support/time_precise.h +10 -25
- data/src/core/lib/support/time_windows.c +10 -25
- data/src/core/lib/support/tls_pthread.c +10 -25
- data/src/core/lib/support/tmpfile.h +10 -25
- data/src/core/lib/support/tmpfile_msys.c +10 -25
- data/src/core/lib/support/tmpfile_posix.c +10 -25
- data/src/core/lib/support/tmpfile_windows.c +10 -25
- data/src/core/lib/support/wrap_memcpy.c +10 -25
- data/src/core/lib/surface/alarm.c +78 -35
- data/src/core/lib/surface/alarm_internal.h +40 -0
- data/src/core/lib/surface/api_trace.c +11 -26
- data/src/core/lib/surface/api_trace.h +10 -25
- data/src/core/lib/surface/byte_buffer.c +10 -25
- data/src/core/lib/surface/byte_buffer_reader.c +10 -25
- data/src/core/lib/surface/call.c +64 -84
- data/src/core/lib/surface/call.h +11 -26
- data/src/core/lib/surface/call_details.c +10 -25
- data/src/core/lib/surface/call_log_batch.c +10 -25
- data/src/core/lib/surface/call_test_only.h +10 -25
- data/src/core/lib/surface/channel.c +11 -26
- data/src/core/lib/surface/channel.h +11 -26
- data/src/core/lib/surface/channel_init.c +10 -25
- data/src/core/lib/surface/channel_init.h +10 -25
- data/src/core/lib/surface/channel_ping.c +12 -27
- data/src/core/lib/surface/channel_stack_type.c +10 -25
- data/src/core/lib/surface/channel_stack_type.h +10 -25
- data/src/core/lib/surface/completion_queue.c +442 -331
- data/src/core/lib/surface/completion_queue.h +16 -33
- data/src/core/lib/surface/completion_queue_factory.c +10 -25
- data/src/core/lib/surface/completion_queue_factory.h +10 -25
- data/src/core/lib/surface/event_string.c +10 -25
- data/src/core/lib/surface/event_string.h +10 -25
- data/src/core/lib/surface/init.c +38 -47
- data/src/core/lib/surface/init.h +10 -25
- data/src/core/lib/surface/init_secure.c +20 -27
- data/src/core/lib/surface/lame_client.cc +14 -29
- data/src/core/lib/surface/lame_client.h +10 -25
- data/src/core/lib/surface/metadata_array.c +10 -25
- data/src/core/lib/surface/server.c +128 -81
- data/src/core/lib/surface/server.h +10 -25
- data/src/core/lib/surface/validate_metadata.c +10 -25
- data/src/core/lib/surface/validate_metadata.h +10 -25
- data/src/core/lib/surface/version.c +11 -26
- data/src/core/lib/transport/bdp_estimator.c +19 -29
- data/src/core/lib/transport/bdp_estimator.h +16 -29
- data/src/core/lib/transport/byte_stream.c +127 -36
- data/src/core/lib/transport/byte_stream.h +88 -46
- data/src/core/lib/transport/connectivity_state.c +17 -31
- data/src/core/lib/transport/connectivity_state.h +10 -25
- data/src/core/lib/transport/error_utils.c +10 -25
- data/src/core/lib/transport/error_utils.h +10 -25
- data/src/core/lib/transport/http2_errors.h +10 -25
- data/src/core/lib/transport/metadata.c +87 -85
- data/src/core/lib/transport/metadata.h +15 -28
- data/src/core/lib/transport/metadata_batch.c +10 -25
- data/src/core/lib/transport/metadata_batch.h +10 -25
- data/src/core/lib/transport/pid_controller.c +10 -25
- data/src/core/lib/transport/pid_controller.h +10 -25
- data/src/core/lib/transport/service_config.c +11 -26
- data/src/core/lib/transport/service_config.h +10 -25
- data/src/core/lib/transport/static_metadata.c +12 -26
- data/src/core/lib/transport/static_metadata.h +10 -25
- data/src/core/lib/transport/status_conversion.c +10 -25
- data/src/core/lib/transport/status_conversion.h +10 -25
- data/src/core/lib/transport/timeout_encoding.c +10 -25
- data/src/core/lib/transport/timeout_encoding.h +10 -25
- data/src/core/lib/transport/transport.c +60 -53
- data/src/core/lib/transport/transport.h +36 -34
- data/src/core/lib/transport/transport_impl.h +10 -25
- data/src/core/lib/transport/transport_op_string.c +10 -28
- data/src/core/plugin_registry/grpc_plugin_registry.c +22 -25
- data/src/core/tsi/fake_transport_security.c +199 -94
- data/src/core/tsi/fake_transport_security.h +11 -26
- data/src/core/tsi/gts_transport_security.c +40 -0
- data/src/core/tsi/gts_transport_security.h +37 -0
- data/src/core/tsi/ssl_transport_security.c +13 -32
- data/src/core/tsi/ssl_transport_security.h +10 -25
- data/src/core/tsi/ssl_types.h +10 -25
- data/src/core/tsi/transport_security.c +48 -78
- data/src/core/tsi/transport_security.h +18 -27
- data/src/core/tsi/transport_security_adapter.c +17 -29
- data/src/core/tsi/transport_security_adapter.h +10 -25
- data/src/core/tsi/transport_security_grpc.c +64 -0
- data/src/core/tsi/transport_security_grpc.h +80 -0
- data/src/core/tsi/transport_security_interface.h +21 -27
- data/src/ruby/bin/apis/google/protobuf/empty.rb +10 -25
- data/src/ruby/bin/apis/pubsub_demo.rb +10 -25
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +10 -25
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +10 -25
- data/src/ruby/bin/math_client.rb +10 -25
- data/src/ruby/bin/math_server.rb +10 -25
- data/src/ruby/bin/math_services_pb.rb +10 -25
- data/src/ruby/bin/noproto_client.rb +10 -25
- data/src/ruby/bin/noproto_server.rb +10 -25
- data/src/ruby/ext/grpc/extconf.rb +10 -25
- data/src/ruby/ext/grpc/rb_byte_buffer.c +10 -25
- data/src/ruby/ext/grpc/rb_byte_buffer.h +10 -25
- data/src/ruby/ext/grpc/rb_call.c +44 -25
- data/src/ruby/ext/grpc/rb_call.h +10 -25
- data/src/ruby/ext/grpc/rb_call_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_call_credentials.h +10 -25
- data/src/ruby/ext/grpc/rb_channel.c +10 -25
- data/src/ruby/ext/grpc/rb_channel.h +10 -25
- data/src/ruby/ext/grpc/rb_channel_args.c +10 -25
- data/src/ruby/ext/grpc/rb_channel_args.h +10 -25
- data/src/ruby/ext/grpc/rb_channel_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_channel_credentials.h +10 -25
- data/src/ruby/ext/grpc/rb_completion_queue.c +10 -25
- data/src/ruby/ext/grpc/rb_completion_queue.h +10 -25
- data/src/ruby/ext/grpc/rb_compression_options.c +10 -25
- data/src/ruby/ext/grpc/rb_compression_options.h +10 -25
- data/src/ruby/ext/grpc/rb_event_thread.c +10 -25
- data/src/ruby/ext/grpc/rb_event_thread.h +10 -25
- data/src/ruby/ext/grpc/rb_grpc.c +10 -25
- data/src/ruby/ext/grpc/rb_grpc.h +10 -25
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -25
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +16 -31
- data/src/ruby/ext/grpc/rb_loader.c +10 -25
- data/src/ruby/ext/grpc/rb_loader.h +10 -25
- data/src/ruby/ext/grpc/rb_server.c +10 -25
- data/src/ruby/ext/grpc/rb_server.h +10 -25
- data/src/ruby/ext/grpc/rb_server_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_server_credentials.h +10 -25
- data/src/ruby/lib/grpc.rb +10 -25
- data/src/ruby/lib/grpc/core/time_consts.rb +10 -25
- data/src/ruby/lib/grpc/errors.rb +16 -30
- data/src/ruby/lib/grpc/generic/active_call.rb +25 -27
- data/src/ruby/lib/grpc/generic/bidi_call.rb +17 -27
- data/src/ruby/lib/grpc/generic/client_stub.rb +10 -25
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +10 -25
- data/src/ruby/lib/grpc/generic/rpc_server.rb +10 -25
- data/src/ruby/lib/grpc/generic/service.rb +10 -25
- data/src/ruby/lib/grpc/grpc.rb +10 -25
- data/src/ruby/lib/grpc/logconfig.rb +10 -25
- data/src/ruby/lib/grpc/notifier.rb +10 -25
- data/src/ruby/lib/grpc/version.rb +11 -26
- data/src/ruby/pb/generate_proto_ruby.sh +10 -25
- data/src/ruby/pb/grpc/health/checker.rb +10 -25
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +10 -25
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +10 -25
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +10 -25
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +10 -25
- data/src/ruby/pb/test/client.rb +10 -25
- data/src/ruby/pb/test/server.rb +10 -25
- data/src/ruby/spec/call_credentials_spec.rb +10 -25
- data/src/ruby/spec/call_spec.rb +43 -25
- data/src/ruby/spec/channel_connection_spec.rb +10 -25
- data/src/ruby/spec/channel_credentials_spec.rb +11 -26
- data/src/ruby/spec/channel_spec.rb +10 -25
- data/src/ruby/spec/client_auth_spec.rb +10 -25
- data/src/ruby/spec/client_server_spec.rb +66 -25
- data/src/ruby/spec/compression_options_spec.rb +10 -25
- data/src/ruby/spec/error_sanity_spec.rb +10 -25
- data/src/ruby/spec/generic/active_call_spec.rb +10 -25
- data/src/ruby/spec/generic/client_stub_spec.rb +146 -35
- data/src/ruby/spec/generic/rpc_desc_spec.rb +10 -25
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +10 -25
- data/src/ruby/spec/generic/rpc_server_spec.rb +124 -34
- data/src/ruby/spec/generic/service_spec.rb +10 -25
- data/src/ruby/spec/pb/duplicate/codegen_spec.rb +10 -25
- data/src/ruby/spec/pb/health/checker_spec.rb +10 -25
- data/src/ruby/spec/server_credentials_spec.rb +10 -25
- data/src/ruby/spec/server_spec.rb +10 -25
- data/src/ruby/spec/spec_helper.rb +10 -25
- data/src/ruby/spec/time_consts_spec.rb +10 -25
- data/third_party/boringssl/crypto/aes/key_wrap.c +138 -0
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +6 -3
- data/third_party/boringssl/crypto/asn1/a_enum.c +4 -1
- data/third_party/boringssl/crypto/asn1/a_gentm.c +20 -15
- data/third_party/boringssl/crypto/asn1/a_int.c +7 -4
- data/third_party/boringssl/crypto/asn1/a_object.c +5 -2
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -1
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -2
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -2
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +35 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +3 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +6 -3
- data/third_party/boringssl/crypto/asn1/tasn_new.c +12 -7
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +22 -8
- data/third_party/boringssl/crypto/{time_support.c → asn1/time_support.c} +1 -1
- data/third_party/boringssl/crypto/asn1/x_long.c +5 -2
- data/third_party/boringssl/crypto/base64/base64.c +7 -5
- data/third_party/boringssl/crypto/bio/bio.c +24 -10
- data/third_party/boringssl/crypto/bio/bio_mem.c +12 -10
- data/third_party/boringssl/crypto/bio/connect.c +7 -18
- data/third_party/boringssl/crypto/bio/fd.c +3 -6
- data/third_party/boringssl/crypto/bio/file.c +6 -6
- data/third_party/boringssl/crypto/bio/hexdump.c +4 -2
- data/third_party/boringssl/crypto/bio/pair.c +30 -344
- data/third_party/boringssl/crypto/bio/socket.c +6 -7
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -3
- data/third_party/boringssl/crypto/bn/add.c +1 -1
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +11 -10
- data/third_party/boringssl/crypto/bn/bn.c +6 -20
- data/third_party/boringssl/crypto/bn/cmp.c +14 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -2
- data/third_party/boringssl/crypto/bn/ctx.c +3 -1
- data/third_party/boringssl/crypto/bn/div.c +108 -51
- data/third_party/boringssl/crypto/bn/exponentiation.c +15 -33
- data/third_party/boringssl/crypto/bn/gcd.c +29 -22
- data/third_party/boringssl/crypto/bn/generic.c +71 -67
- data/third_party/boringssl/crypto/bn/internal.h +19 -6
- data/third_party/boringssl/crypto/bn/kronecker.c +1 -0
- data/third_party/boringssl/crypto/bn/montgomery.c +9 -10
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +47 -0
- data/third_party/boringssl/crypto/bn/mul.c +11 -9
- data/third_party/boringssl/crypto/bn/random.c +6 -3
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -65
- data/third_party/boringssl/crypto/bn/rsaz_exp.h +0 -3
- data/third_party/boringssl/crypto/bn/shift.c +9 -1
- data/third_party/boringssl/crypto/bn/sqrt.c +3 -1
- data/third_party/boringssl/crypto/buf/buf.c +6 -4
- data/third_party/boringssl/crypto/bytestring/asn1_compat.c +2 -1
- data/third_party/boringssl/crypto/bytestring/ber.c +2 -1
- data/third_party/boringssl/crypto/bytestring/cbb.c +9 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +54 -2
- data/third_party/boringssl/crypto/chacha/chacha.c +1 -1
- data/third_party/boringssl/crypto/cipher/aead.c +3 -3
- data/third_party/boringssl/crypto/cipher/cipher.c +18 -13
- data/third_party/boringssl/crypto/cipher/e_aes.c +335 -281
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +113 -137
- data/third_party/boringssl/crypto/cipher/e_null.c +2 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +54 -49
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +4 -3
- data/third_party/boringssl/crypto/cipher/e_tls.c +5 -5
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +41 -112
- data/third_party/boringssl/crypto/cmac/cmac.c +6 -4
- data/third_party/boringssl/crypto/conf/conf.c +6 -3
- data/third_party/boringssl/crypto/cpu-arm-linux.c +2 -2
- data/third_party/boringssl/crypto/curve25519/curve25519.c +28 -34
- data/third_party/boringssl/crypto/curve25519/spake25519.c +7 -6
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +2 -1
- data/third_party/boringssl/crypto/des/des.c +1 -1
- data/third_party/boringssl/crypto/des/internal.h +58 -46
- data/third_party/boringssl/crypto/dh/dh.c +4 -8
- data/third_party/boringssl/crypto/digest/digest.c +5 -2
- data/third_party/boringssl/crypto/digest/digests.c +70 -33
- data/third_party/boringssl/crypto/digest/md32_common.h +39 -27
- data/third_party/boringssl/crypto/dsa/dsa.c +11 -19
- data/third_party/boringssl/crypto/ec/ec.c +1 -1
- data/third_party/boringssl/crypto/ec/ec_asn1.c +3 -2
- data/third_party/boringssl/crypto/ec/ec_key.c +1 -1
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +6 -11
- data/third_party/boringssl/crypto/ec/oct.c +2 -14
- data/third_party/boringssl/crypto/ec/p224-64.c +78 -122
- data/third_party/boringssl/crypto/ec/p256-64.c +93 -133
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +48 -61
- data/third_party/boringssl/crypto/ec/p256-x86_64.h +113 -0
- data/third_party/boringssl/crypto/ec/simple.c +2 -1
- data/third_party/boringssl/crypto/ec/wnaf.c +52 -43
- data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -2
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +17 -16
- data/third_party/boringssl/crypto/engine/engine.c +3 -1
- data/third_party/boringssl/crypto/err/err.c +5 -5
- data/third_party/boringssl/crypto/evp/evp.c +1 -1
- data/third_party/boringssl/crypto/evp/evp_asn1.c +1 -1
- data/third_party/boringssl/crypto/evp/evp_ctx.c +23 -29
- data/third_party/boringssl/crypto/evp/p_ec.c +2 -1
- data/third_party/boringssl/crypto/evp/p_rsa.c +9 -3
- data/third_party/boringssl/crypto/evp/pbkdf.c +3 -1
- data/third_party/boringssl/crypto/hkdf/hkdf.c +3 -1
- data/third_party/boringssl/crypto/hmac/hmac.c +4 -2
- data/third_party/boringssl/crypto/internal.h +81 -0
- data/third_party/boringssl/crypto/lhash/lhash.c +7 -13
- data/third_party/boringssl/crypto/md4/md4.c +20 -18
- data/third_party/boringssl/crypto/md5/md5.c +31 -21
- data/third_party/boringssl/crypto/mem.c +4 -10
- data/third_party/boringssl/crypto/modes/cbc.c +2 -6
- data/third_party/boringssl/crypto/modes/cfb.c +2 -2
- data/third_party/boringssl/crypto/modes/ctr.c +1 -1
- data/third_party/boringssl/crypto/modes/gcm.c +117 -334
- data/third_party/boringssl/crypto/modes/internal.h +107 -84
- data/third_party/boringssl/crypto/modes/ofb.c +3 -3
- data/third_party/boringssl/crypto/modes/polyval.c +94 -0
- data/third_party/boringssl/crypto/obj/obj.c +13 -8
- data/third_party/boringssl/crypto/obj/obj_dat.h +6109 -5187
- data/third_party/boringssl/crypto/obj/obj_xref.c +55 -57
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -3
- data/third_party/boringssl/crypto/pkcs8/internal.h +27 -8
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +137 -352
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +371 -364
- data/third_party/boringssl/crypto/poly1305/poly1305.c +12 -18
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +2 -2
- data/third_party/boringssl/crypto/{newhope/reduce.c → pool/internal.h} +24 -21
- data/third_party/boringssl/crypto/pool/pool.c +200 -0
- data/third_party/boringssl/crypto/rand/deterministic.c +6 -5
- data/third_party/boringssl/crypto/rand/fuchsia.c +43 -0
- data/third_party/boringssl/crypto/rand/rand.c +7 -7
- data/third_party/boringssl/crypto/rand/urandom.c +136 -22
- data/third_party/boringssl/crypto/rand/windows.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +2 -1
- data/third_party/boringssl/crypto/rsa/padding.c +11 -11
- data/third_party/boringssl/crypto/rsa/rsa.c +4 -4
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +7 -1
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +41 -80
- data/third_party/boringssl/crypto/sha/sha1-altivec.c +346 -0
- data/third_party/boringssl/crypto/sha/sha1.c +60 -42
- data/third_party/boringssl/crypto/sha/sha256.c +4 -2
- data/third_party/boringssl/crypto/sha/sha512.c +9 -7
- data/third_party/boringssl/crypto/stack/stack.c +10 -7
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +2 -2
- data/third_party/boringssl/crypto/x509/a_verify.c +1 -1
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +1 -1
- data/third_party/boringssl/crypto/x509/t_x509.c +78 -38
- data/third_party/boringssl/crypto/x509/x509_cmp.c +8 -5
- data/third_party/boringssl/crypto/x509/x509_lu.c +6 -1
- data/third_party/boringssl/crypto/x509/x509_obj.c +4 -1
- data/third_party/boringssl/crypto/x509/x509_vfy.c +42 -8
- data/third_party/boringssl/crypto/x509/x509_vpm.c +8 -6
- data/third_party/boringssl/crypto/x509/x509name.c +4 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +4 -2
- data/third_party/boringssl/crypto/x509/x_name.c +23 -13
- data/third_party/boringssl/crypto/x509/x_pkey.c +4 -1
- data/third_party/boringssl/crypto/x509/x_x509.c +42 -3
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +1 -1
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +4 -1
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +4 -1
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +6 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +13 -21
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +19 -33
- data/third_party/boringssl/include/openssl/aead.h +9 -20
- data/third_party/boringssl/include/openssl/aes.h +21 -9
- data/third_party/boringssl/include/openssl/asn1.h +9 -1
- data/third_party/boringssl/include/openssl/base.h +33 -6
- data/third_party/boringssl/include/openssl/bio.h +10 -103
- data/third_party/boringssl/include/openssl/bn.h +58 -42
- data/third_party/boringssl/include/openssl/bytestring.h +17 -0
- data/third_party/boringssl/include/openssl/cipher.h +4 -3
- data/third_party/boringssl/include/openssl/conf.h +4 -1
- data/third_party/boringssl/include/openssl/curve25519.h +13 -0
- data/third_party/boringssl/include/openssl/digest.h +5 -3
- data/third_party/boringssl/include/openssl/dsa.h +5 -5
- data/third_party/boringssl/include/openssl/ec.h +2 -2
- data/third_party/boringssl/include/openssl/ecdh.h +3 -4
- data/third_party/boringssl/include/openssl/ecdsa.h +10 -10
- data/third_party/boringssl/include/openssl/err.h +5 -5
- data/third_party/boringssl/include/openssl/evp.h +11 -7
- data/third_party/boringssl/include/openssl/lhash.h +2 -3
- data/third_party/boringssl/include/openssl/lhash_macros.h +56 -14
- data/third_party/boringssl/include/openssl/nid.h +2949 -2916
- data/third_party/boringssl/include/openssl/obj.h +1 -1
- data/third_party/boringssl/include/openssl/pkcs8.h +21 -42
- data/third_party/boringssl/include/openssl/pool.h +87 -0
- data/third_party/boringssl/include/openssl/rand.h +1 -1
- data/third_party/boringssl/include/openssl/rsa.h +4 -2
- data/third_party/boringssl/include/openssl/sha.h +0 -4
- data/third_party/boringssl/include/openssl/ssl.h +327 -662
- data/third_party/boringssl/include/openssl/ssl3.h +1 -21
- data/third_party/boringssl/include/openssl/stack.h +1 -0
- data/third_party/boringssl/include/openssl/stack_macros.h +85 -0
- data/third_party/boringssl/include/openssl/tls1.h +23 -52
- data/third_party/boringssl/include/openssl/type_check.h +4 -0
- data/third_party/boringssl/include/openssl/x509.h +10 -59
- data/third_party/boringssl/include/openssl/x509_vfy.h +7 -1
- data/third_party/boringssl/include/openssl/x509v3.h +4 -4
- data/third_party/boringssl/ssl/bio_ssl.c +175 -0
- data/third_party/boringssl/ssl/custom_extensions.c +24 -21
- data/third_party/boringssl/ssl/d1_both.c +259 -289
- data/third_party/boringssl/ssl/d1_lib.c +8 -20
- data/third_party/boringssl/ssl/d1_pkt.c +6 -15
- data/third_party/boringssl/ssl/dtls_method.c +22 -8
- data/third_party/boringssl/ssl/dtls_record.c +27 -2
- data/third_party/boringssl/ssl/handshake_client.c +460 -579
- data/third_party/boringssl/ssl/handshake_server.c +662 -644
- data/third_party/boringssl/ssl/internal.h +1009 -375
- data/third_party/boringssl/ssl/s3_both.c +312 -162
- data/third_party/boringssl/ssl/s3_lib.c +12 -128
- data/third_party/boringssl/ssl/s3_pkt.c +22 -30
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +28 -22
- data/third_party/boringssl/ssl/ssl_asn1.c +210 -114
- data/third_party/boringssl/ssl/ssl_buffer.c +2 -1
- data/third_party/boringssl/ssl/ssl_cert.c +417 -219
- data/third_party/boringssl/ssl/ssl_cipher.c +191 -393
- data/third_party/boringssl/ssl/ssl_ecdh.c +19 -164
- data/third_party/boringssl/ssl/ssl_file.c +0 -11
- data/third_party/boringssl/ssl/ssl_lib.c +325 -652
- data/third_party/boringssl/ssl/{ssl_rsa.c → ssl_privkey.c} +21 -131
- data/third_party/boringssl/ssl/ssl_privkey_cc.cc +76 -0
- data/third_party/boringssl/ssl/ssl_session.c +206 -95
- data/third_party/boringssl/ssl/ssl_stat.c +18 -84
- data/third_party/boringssl/ssl/{s3_enc.c → ssl_transcript.c} +150 -157
- data/third_party/boringssl/ssl/ssl_x509.c +815 -0
- data/third_party/boringssl/ssl/t1_enc.c +188 -174
- data/third_party/boringssl/ssl/t1_lib.c +1064 -764
- data/third_party/boringssl/ssl/tls13_both.c +290 -96
- data/third_party/boringssl/ssl/tls13_client.c +344 -314
- data/third_party/boringssl/ssl/tls13_enc.c +239 -200
- data/third_party/boringssl/ssl/tls13_server.c +374 -366
- data/third_party/boringssl/ssl/tls_method.c +40 -5
- data/third_party/boringssl/ssl/tls_record.c +166 -71
- metadata +39 -25
- data/src/core/lib/iomgr/workqueue.h +0 -87
- data/src/core/lib/iomgr/workqueue_uv.c +0 -65
- data/src/core/lib/iomgr/workqueue_uv.h +0 -37
- data/src/core/lib/iomgr/workqueue_windows.c +0 -63
- data/src/core/lib/iomgr/workqueue_windows.h +0 -37
- data/third_party/boringssl/crypto/bio/buffer.c +0 -496
- data/third_party/boringssl/crypto/newhope/error_correction.c +0 -131
- data/third_party/boringssl/crypto/newhope/internal.h +0 -71
- data/third_party/boringssl/crypto/newhope/newhope.c +0 -174
- data/third_party/boringssl/crypto/newhope/ntt.c +0 -148
- data/third_party/boringssl/crypto/newhope/poly.c +0 -183
- data/third_party/boringssl/crypto/newhope/precomp.c +0 -306
- data/third_party/boringssl/crypto/obj/obj_xref.h +0 -96
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +0 -151
- data/third_party/boringssl/include/openssl/newhope.h +0 -158
- data/third_party/boringssl/include/openssl/time_support.h +0 -91
@@ -1,63 +1,28 @@
|
|
1
1
|
/*
|
2
2
|
*
|
3
|
-
* Copyright 2015
|
4
|
-
* All rights reserved.
|
3
|
+
* Copyright 2015 gRPC authors.
|
5
4
|
*
|
6
|
-
*
|
7
|
-
*
|
8
|
-
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
9
8
|
*
|
10
|
-
*
|
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.
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
19
10
|
*
|
20
|
-
*
|
21
|
-
*
|
22
|
-
*
|
23
|
-
*
|
24
|
-
*
|
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.
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
31
16
|
*
|
32
17
|
*/
|
33
18
|
|
34
19
|
/** Round Robin Policy.
|
35
20
|
*
|
36
|
-
*
|
37
|
-
*
|
38
|
-
*
|
39
|
-
*
|
40
|
-
*
|
41
|
-
*
|
42
|
-
* Behavior:
|
43
|
-
* - When a subchannel connects, it's *prepended* to the readylist's root node.
|
44
|
-
* Ie, if readylist = A <-> B <-> ROOT <-> C
|
45
|
-
* ^ ^
|
46
|
-
* |____________________|
|
47
|
-
* and subchannel D becomes connected, the addition of D to the readylist
|
48
|
-
* results in readylist = A <-> B <-> D <-> ROOT <-> C
|
49
|
-
* ^ ^
|
50
|
-
* |__________________________|
|
51
|
-
* - When a subchannel disconnects, it's removed from the readylist. If the
|
52
|
-
* subchannel being removed was the most recently picked, the *lastpick*
|
53
|
-
* pointer moves to the removed node's previous element. Note that if the
|
54
|
-
* readylist only had one element, this is still legal, as the lastpick would
|
55
|
-
* point to the dummy root node, for an empty readylist.
|
56
|
-
* - Upon picking, *lastpick* is updated to point to the returned (connected)
|
57
|
-
* subchannel. Note that it's possible that the selected subchannel becomes
|
58
|
-
* disconnected in the interim between the selection and the actual usage of
|
59
|
-
* the subchannel by the caller.
|
60
|
-
*/
|
21
|
+
* Before every pick, the \a get_next_ready_subchannel_index_locked function
|
22
|
+
* returns the p->subchannel_list->subchannels index for next subchannel,
|
23
|
+
* respecting the relative
|
24
|
+
* order of the addresses provided upon creation or updates. Note however that
|
25
|
+
* updates will start picking from the beginning of the updated list. */
|
61
26
|
|
62
27
|
#include <string.h>
|
63
28
|
|
@@ -72,9 +37,8 @@
|
|
72
37
|
#include "src/core/lib/transport/connectivity_state.h"
|
73
38
|
#include "src/core/lib/transport/static_metadata.h"
|
74
39
|
|
75
|
-
|
76
|
-
|
77
|
-
grpc_tracer_flag grpc_lb_round_robin_trace = GRPC_TRACER_INITIALIZER(false);
|
40
|
+
grpc_tracer_flag grpc_lb_round_robin_trace =
|
41
|
+
GRPC_TRACER_INITIALIZER(false, "round_robin");
|
78
42
|
|
79
43
|
/** List of entities waiting for a pick.
|
80
44
|
*
|
@@ -99,9 +63,40 @@ typedef struct pending_pick {
|
|
99
63
|
grpc_closure *on_complete;
|
100
64
|
} pending_pick;
|
101
65
|
|
66
|
+
typedef struct rr_subchannel_list rr_subchannel_list;
|
67
|
+
typedef struct round_robin_lb_policy {
|
68
|
+
/** base policy: must be first */
|
69
|
+
grpc_lb_policy base;
|
70
|
+
|
71
|
+
rr_subchannel_list *subchannel_list;
|
72
|
+
|
73
|
+
/** have we started picking? */
|
74
|
+
bool started_picking;
|
75
|
+
/** are we shutting down? */
|
76
|
+
bool shutdown;
|
77
|
+
/** has the policy gotten into the GRPC_CHANNEL_SHUTDOWN? No picks can be
|
78
|
+
* service after this point, the policy will never transition out. */
|
79
|
+
bool in_connectivity_shutdown;
|
80
|
+
/** List of picks that are waiting on connectivity */
|
81
|
+
pending_pick *pending_picks;
|
82
|
+
|
83
|
+
/** our connectivity state tracker */
|
84
|
+
grpc_connectivity_state_tracker state_tracker;
|
85
|
+
|
86
|
+
/** Index into subchannels for last pick. */
|
87
|
+
size_t last_ready_subchannel_index;
|
88
|
+
|
89
|
+
/** Latest version of the subchannel list.
|
90
|
+
* Subchannel connectivity callbacks will only promote updated subchannel
|
91
|
+
* lists if they equal \a latest_pending_subchannel_list. In other words,
|
92
|
+
* racing callbacks that reference outdated subchannel lists won't perform any
|
93
|
+
* update. */
|
94
|
+
rr_subchannel_list *latest_pending_subchannel_list;
|
95
|
+
} round_robin_lb_policy;
|
96
|
+
|
102
97
|
typedef struct {
|
103
|
-
/** backpointer to owning
|
104
|
-
|
98
|
+
/** backpointer to owning subchannel list */
|
99
|
+
rr_subchannel_list *subchannel_list;
|
105
100
|
/** subchannel itself */
|
106
101
|
grpc_subchannel *subchannel;
|
107
102
|
/** notification that connectivity has changed on subchannel */
|
@@ -123,12 +118,9 @@ typedef struct {
|
|
123
118
|
const grpc_lb_user_data_vtable *user_data_vtable;
|
124
119
|
} subchannel_data;
|
125
120
|
|
126
|
-
struct
|
127
|
-
/**
|
128
|
-
|
129
|
-
|
130
|
-
/** total number of addresses received at creation time */
|
131
|
-
size_t num_addresses;
|
121
|
+
struct rr_subchannel_list {
|
122
|
+
/** backpointer to owning policy */
|
123
|
+
round_robin_lb_policy *policy;
|
132
124
|
|
133
125
|
/** all our subchannels */
|
134
126
|
size_t num_subchannels;
|
@@ -143,101 +135,198 @@ struct round_robin_lb_policy {
|
|
143
135
|
/** how many subchannels are in state IDLE */
|
144
136
|
size_t num_idle;
|
145
137
|
|
146
|
-
/**
|
147
|
-
|
148
|
-
|
149
|
-
bool shutdown;
|
150
|
-
/** List of picks that are waiting on connectivity */
|
151
|
-
pending_pick *pending_picks;
|
152
|
-
|
153
|
-
/** our connectivity state tracker */
|
154
|
-
grpc_connectivity_state_tracker state_tracker;
|
138
|
+
/** There will be one ref for each entry in subchannels for which there is a
|
139
|
+
* pending connectivity state watcher callback. */
|
140
|
+
gpr_refcount refcount;
|
155
141
|
|
156
|
-
|
157
|
-
|
142
|
+
/** Is this list shutting down? This may be true due to the shutdown of the
|
143
|
+
* policy itself or because a newer update has arrived while this one hadn't
|
144
|
+
* finished processing. */
|
145
|
+
bool shutting_down;
|
158
146
|
};
|
159
147
|
|
160
|
-
|
161
|
-
|
148
|
+
static rr_subchannel_list *rr_subchannel_list_create(round_robin_lb_policy *p,
|
149
|
+
size_t num_subchannels) {
|
150
|
+
rr_subchannel_list *subchannel_list = gpr_zalloc(sizeof(*subchannel_list));
|
151
|
+
subchannel_list->policy = p;
|
152
|
+
subchannel_list->subchannels =
|
153
|
+
gpr_zalloc(sizeof(subchannel_data) * num_subchannels);
|
154
|
+
subchannel_list->num_subchannels = num_subchannels;
|
155
|
+
gpr_ref_init(&subchannel_list->refcount, 1);
|
156
|
+
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
157
|
+
gpr_log(GPR_INFO, "[RR %p] Created subchannel list %p for %lu subchannels",
|
158
|
+
(void *)p, (void *)subchannel_list, (unsigned long)num_subchannels);
|
159
|
+
}
|
160
|
+
return subchannel_list;
|
161
|
+
}
|
162
|
+
|
163
|
+
static void rr_subchannel_list_destroy(grpc_exec_ctx *exec_ctx,
|
164
|
+
rr_subchannel_list *subchannel_list) {
|
165
|
+
GPR_ASSERT(subchannel_list->shutting_down);
|
166
|
+
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
167
|
+
gpr_log(GPR_INFO, "[RR %p] Destroying subchannel_list %p",
|
168
|
+
(void *)subchannel_list->policy, (void *)subchannel_list);
|
169
|
+
}
|
170
|
+
for (size_t i = 0; i < subchannel_list->num_subchannels; i++) {
|
171
|
+
subchannel_data *sd = &subchannel_list->subchannels[i];
|
172
|
+
if (sd->subchannel != NULL) {
|
173
|
+
GRPC_SUBCHANNEL_UNREF(exec_ctx, sd->subchannel,
|
174
|
+
"rr_subchannel_list_destroy");
|
175
|
+
}
|
176
|
+
sd->subchannel = NULL;
|
177
|
+
if (sd->user_data != NULL) {
|
178
|
+
GPR_ASSERT(sd->user_data_vtable != NULL);
|
179
|
+
sd->user_data_vtable->destroy(exec_ctx, sd->user_data);
|
180
|
+
sd->user_data = NULL;
|
181
|
+
}
|
182
|
+
}
|
183
|
+
gpr_free(subchannel_list->subchannels);
|
184
|
+
gpr_free(subchannel_list);
|
185
|
+
}
|
186
|
+
|
187
|
+
static void rr_subchannel_list_ref(rr_subchannel_list *subchannel_list,
|
188
|
+
const char *reason) {
|
189
|
+
gpr_ref_non_zero(&subchannel_list->refcount);
|
190
|
+
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
191
|
+
const gpr_atm count = gpr_atm_acq_load(&subchannel_list->refcount.count);
|
192
|
+
gpr_log(GPR_INFO, "[RR %p] subchannel_list %p REF %lu->%lu (%s)",
|
193
|
+
(void *)subchannel_list->policy, (void *)subchannel_list,
|
194
|
+
(unsigned long)(count - 1), (unsigned long)count, reason);
|
195
|
+
}
|
196
|
+
}
|
197
|
+
|
198
|
+
static void rr_subchannel_list_unref(grpc_exec_ctx *exec_ctx,
|
199
|
+
rr_subchannel_list *subchannel_list,
|
200
|
+
const char *reason) {
|
201
|
+
const bool done = gpr_unref(&subchannel_list->refcount);
|
202
|
+
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
203
|
+
const gpr_atm count = gpr_atm_acq_load(&subchannel_list->refcount.count);
|
204
|
+
gpr_log(GPR_INFO, "[RR %p] subchannel_list %p UNREF %lu->%lu (%s)",
|
205
|
+
(void *)subchannel_list->policy, (void *)subchannel_list,
|
206
|
+
(unsigned long)(count + 1), (unsigned long)count, reason);
|
207
|
+
}
|
208
|
+
if (done) {
|
209
|
+
rr_subchannel_list_destroy(exec_ctx, subchannel_list);
|
210
|
+
}
|
211
|
+
}
|
212
|
+
|
213
|
+
/** Mark \a subchannel_list as discarded. Unsubscribes all its subchannels. The
|
214
|
+
* watcher's callback will ultimately unref \a subchannel_list. */
|
215
|
+
static void rr_subchannel_list_shutdown_and_unref(
|
216
|
+
grpc_exec_ctx *exec_ctx, rr_subchannel_list *subchannel_list,
|
217
|
+
const char *reason) {
|
218
|
+
GPR_ASSERT(!subchannel_list->shutting_down);
|
219
|
+
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
220
|
+
gpr_log(GPR_DEBUG, "[RR %p] Shutting down subchannel_list %p (%s)",
|
221
|
+
(void *)subchannel_list->policy, (void *)subchannel_list, reason);
|
222
|
+
}
|
223
|
+
GPR_ASSERT(!subchannel_list->shutting_down);
|
224
|
+
subchannel_list->shutting_down = true;
|
225
|
+
for (size_t i = 0; i < subchannel_list->num_subchannels; i++) {
|
226
|
+
subchannel_data *sd = &subchannel_list->subchannels[i];
|
227
|
+
if (sd->subchannel != NULL) { // if subchannel isn't shutdown, unsubscribe.
|
228
|
+
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
229
|
+
gpr_log(
|
230
|
+
GPR_DEBUG,
|
231
|
+
"[RR %p] Unsubscribing from subchannel %p as part of shutting down "
|
232
|
+
"subchannel_list %p",
|
233
|
+
(void *)subchannel_list->policy, (void *)sd->subchannel,
|
234
|
+
(void *)subchannel_list);
|
235
|
+
}
|
236
|
+
grpc_subchannel_notify_on_state_change(exec_ctx, sd->subchannel, NULL,
|
237
|
+
NULL,
|
238
|
+
&sd->connectivity_changed_closure);
|
239
|
+
}
|
240
|
+
}
|
241
|
+
rr_subchannel_list_unref(exec_ctx, subchannel_list, reason);
|
242
|
+
}
|
243
|
+
|
244
|
+
/** Returns the index into p->subchannel_list->subchannels of the next
|
245
|
+
* subchannel in READY state, or p->subchannel_list->num_subchannels if no
|
246
|
+
* subchannel is READY.
|
162
247
|
*
|
163
248
|
* Note that this function does *not* update p->last_ready_subchannel_index.
|
164
249
|
* The caller must do that if it returns a pick. */
|
165
250
|
static size_t get_next_ready_subchannel_index_locked(
|
166
251
|
const round_robin_lb_policy *p) {
|
252
|
+
GPR_ASSERT(p->subchannel_list != NULL);
|
167
253
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
168
254
|
gpr_log(GPR_INFO,
|
169
|
-
"[RR
|
255
|
+
"[RR %p] getting next ready subchannel (out of %lu), "
|
170
256
|
"last_ready_subchannel_index=%lu",
|
171
|
-
p, (unsigned long)p->
|
257
|
+
(void *)p, (unsigned long)p->subchannel_list->num_subchannels,
|
258
|
+
(unsigned long)p->last_ready_subchannel_index);
|
172
259
|
}
|
173
|
-
for (size_t i = 0; i < p->num_subchannels; ++i) {
|
174
|
-
const size_t index =
|
175
|
-
|
260
|
+
for (size_t i = 0; i < p->subchannel_list->num_subchannels; ++i) {
|
261
|
+
const size_t index = (i + p->last_ready_subchannel_index + 1) %
|
262
|
+
p->subchannel_list->num_subchannels;
|
176
263
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
177
|
-
gpr_log(
|
178
|
-
|
179
|
-
|
264
|
+
gpr_log(
|
265
|
+
GPR_DEBUG,
|
266
|
+
"[RR %p] checking subchannel %p, subchannel_list %p, index %lu: "
|
267
|
+
"state=%s",
|
268
|
+
(void *)p, (void *)p->subchannel_list->subchannels[index].subchannel,
|
269
|
+
(void *)p->subchannel_list, (unsigned long)index,
|
270
|
+
grpc_connectivity_state_name(
|
271
|
+
p->subchannel_list->subchannels[index].curr_connectivity_state));
|
180
272
|
}
|
181
|
-
if (p->subchannels[index].curr_connectivity_state ==
|
273
|
+
if (p->subchannel_list->subchannels[index].curr_connectivity_state ==
|
274
|
+
GRPC_CHANNEL_READY) {
|
182
275
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
183
|
-
gpr_log(GPR_DEBUG,
|
184
|
-
p
|
276
|
+
gpr_log(GPR_DEBUG,
|
277
|
+
"[RR %p] found next ready subchannel (%p) at index %lu of "
|
278
|
+
"subchannel_list %p",
|
279
|
+
(void *)p,
|
280
|
+
(void *)p->subchannel_list->subchannels[index].subchannel,
|
281
|
+
(unsigned long)index, (void *)p->subchannel_list);
|
185
282
|
}
|
186
283
|
return index;
|
187
284
|
}
|
188
285
|
}
|
189
286
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
190
|
-
gpr_log(GPR_DEBUG, "[RR %p] no subchannels in ready state", p);
|
287
|
+
gpr_log(GPR_DEBUG, "[RR %p] no subchannels in ready state", (void *)p);
|
191
288
|
}
|
192
|
-
return p->num_subchannels;
|
289
|
+
return p->subchannel_list->num_subchannels;
|
193
290
|
}
|
194
291
|
|
195
292
|
// Sets p->last_ready_subchannel_index to last_ready_index.
|
196
293
|
static void update_last_ready_subchannel_index_locked(round_robin_lb_policy *p,
|
197
294
|
size_t last_ready_index) {
|
198
|
-
GPR_ASSERT(last_ready_index < p->num_subchannels);
|
295
|
+
GPR_ASSERT(last_ready_index < p->subchannel_list->num_subchannels);
|
199
296
|
p->last_ready_subchannel_index = last_ready_index;
|
200
297
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
201
|
-
gpr_log(
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
298
|
+
gpr_log(
|
299
|
+
GPR_DEBUG,
|
300
|
+
"[RR %p] setting last_ready_subchannel_index=%lu (SC %p, CSC %p)",
|
301
|
+
(void *)p, (unsigned long)last_ready_index,
|
302
|
+
(void *)p->subchannel_list->subchannels[last_ready_index].subchannel,
|
303
|
+
(void *)grpc_subchannel_get_connected_subchannel(
|
304
|
+
p->subchannel_list->subchannels[last_ready_index].subchannel));
|
207
305
|
}
|
208
306
|
}
|
209
307
|
|
210
308
|
static void rr_destroy(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) {
|
211
309
|
round_robin_lb_policy *p = (round_robin_lb_policy *)pol;
|
212
310
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
213
|
-
gpr_log(GPR_DEBUG, "Destroying Round Robin policy at %p",
|
214
|
-
|
215
|
-
for (size_t i = 0; i < p->num_subchannels; i++) {
|
216
|
-
subchannel_data *sd = &p->subchannels[i];
|
217
|
-
if (sd->subchannel != NULL) {
|
218
|
-
GRPC_SUBCHANNEL_UNREF(exec_ctx, sd->subchannel, "rr_destroy");
|
219
|
-
if (sd->user_data != NULL) {
|
220
|
-
GPR_ASSERT(sd->user_data_vtable != NULL);
|
221
|
-
sd->user_data_vtable->destroy(exec_ctx, sd->user_data);
|
222
|
-
}
|
223
|
-
}
|
311
|
+
gpr_log(GPR_DEBUG, "[RR %p] Destroying Round Robin policy at %p",
|
312
|
+
(void *)pol, (void *)pol);
|
224
313
|
}
|
225
314
|
grpc_connectivity_state_destroy(exec_ctx, &p->state_tracker);
|
226
|
-
gpr_free(p->subchannels);
|
227
315
|
gpr_free(p);
|
228
316
|
}
|
229
317
|
|
230
318
|
static void rr_shutdown_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) {
|
231
319
|
round_robin_lb_policy *p = (round_robin_lb_policy *)pol;
|
232
320
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
233
|
-
gpr_log(GPR_DEBUG, "Shutting down Round Robin policy at %p",
|
321
|
+
gpr_log(GPR_DEBUG, "[RR %p] Shutting down Round Robin policy at %p",
|
322
|
+
(void *)pol, (void *)pol);
|
234
323
|
}
|
235
324
|
p->shutdown = true;
|
236
325
|
pending_pick *pp;
|
237
326
|
while ((pp = p->pending_picks)) {
|
238
327
|
p->pending_picks = pp->next;
|
239
328
|
*pp->target = NULL;
|
240
|
-
|
329
|
+
GRPC_CLOSURE_SCHED(
|
241
330
|
exec_ctx, pp->on_complete,
|
242
331
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel Shutdown"));
|
243
332
|
gpr_free(pp);
|
@@ -245,13 +334,17 @@ static void rr_shutdown_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) {
|
|
245
334
|
grpc_connectivity_state_set(
|
246
335
|
exec_ctx, &p->state_tracker, GRPC_CHANNEL_SHUTDOWN,
|
247
336
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel Shutdown"), "rr_shutdown");
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
337
|
+
const bool latest_is_current =
|
338
|
+
p->subchannel_list == p->latest_pending_subchannel_list;
|
339
|
+
rr_subchannel_list_shutdown_and_unref(exec_ctx, p->subchannel_list,
|
340
|
+
"sl_shutdown_rr_shutdown");
|
341
|
+
p->subchannel_list = NULL;
|
342
|
+
if (!latest_is_current && p->latest_pending_subchannel_list != NULL &&
|
343
|
+
!p->latest_pending_subchannel_list->shutting_down) {
|
344
|
+
rr_subchannel_list_shutdown_and_unref(exec_ctx,
|
345
|
+
p->latest_pending_subchannel_list,
|
346
|
+
"sl_shutdown_pending_rr_shutdown");
|
347
|
+
p->latest_pending_subchannel_list = NULL;
|
255
348
|
}
|
256
349
|
}
|
257
350
|
|
@@ -265,7 +358,7 @@ static void rr_cancel_pick_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol,
|
|
265
358
|
pending_pick *next = pp->next;
|
266
359
|
if (pp->target == target) {
|
267
360
|
*target = NULL;
|
268
|
-
|
361
|
+
GRPC_CLOSURE_SCHED(exec_ctx, pp->on_complete,
|
269
362
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
270
363
|
"Pick cancelled", &error, 1));
|
271
364
|
gpr_free(pp);
|
@@ -290,7 +383,7 @@ static void rr_cancel_picks_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol,
|
|
290
383
|
if ((pp->initial_metadata_flags & initial_metadata_flags_mask) ==
|
291
384
|
initial_metadata_flags_eq) {
|
292
385
|
*pp->target = NULL;
|
293
|
-
|
386
|
+
GRPC_CLOSURE_SCHED(exec_ctx, pp->on_complete,
|
294
387
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
295
388
|
"Pick cancelled", &error, 1));
|
296
389
|
gpr_free(pp);
|
@@ -306,15 +399,14 @@ static void rr_cancel_picks_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol,
|
|
306
399
|
static void start_picking_locked(grpc_exec_ctx *exec_ctx,
|
307
400
|
round_robin_lb_policy *p) {
|
308
401
|
p->started_picking = true;
|
309
|
-
for (size_t i = 0; i < p->num_subchannels; i++) {
|
310
|
-
subchannel_data *sd = &p->subchannels[i];
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
}
|
402
|
+
for (size_t i = 0; i < p->subchannel_list->num_subchannels; i++) {
|
403
|
+
subchannel_data *sd = &p->subchannel_list->subchannels[i];
|
404
|
+
GRPC_LB_POLICY_WEAK_REF(&p->base, "start_picking_locked");
|
405
|
+
rr_subchannel_list_ref(sd->subchannel_list, "started_picking");
|
406
|
+
grpc_subchannel_notify_on_state_change(
|
407
|
+
exec_ctx, sd->subchannel, p->base.interested_parties,
|
408
|
+
&sd->pending_connectivity_state_unsafe,
|
409
|
+
&sd->connectivity_changed_closure);
|
318
410
|
}
|
319
411
|
}
|
320
412
|
|
@@ -331,68 +423,80 @@ static int rr_pick_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol,
|
|
331
423
|
grpc_call_context_element *context, void **user_data,
|
332
424
|
grpc_closure *on_complete) {
|
333
425
|
round_robin_lb_policy *p = (round_robin_lb_policy *)pol;
|
426
|
+
GPR_ASSERT(!p->shutdown);
|
427
|
+
GPR_ASSERT(!p->in_connectivity_shutdown);
|
334
428
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
335
|
-
gpr_log(GPR_INFO, "
|
429
|
+
gpr_log(GPR_INFO, "[RR %p] Trying to pick", (void *)pol);
|
336
430
|
}
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
431
|
+
if (p->subchannel_list != NULL) {
|
432
|
+
const size_t next_ready_index = get_next_ready_subchannel_index_locked(p);
|
433
|
+
if (next_ready_index < p->subchannel_list->num_subchannels) {
|
434
|
+
/* readily available, report right away */
|
435
|
+
subchannel_data *sd = &p->subchannel_list->subchannels[next_ready_index];
|
436
|
+
*target = GRPC_CONNECTED_SUBCHANNEL_REF(
|
437
|
+
grpc_subchannel_get_connected_subchannel(sd->subchannel),
|
438
|
+
"rr_picked");
|
439
|
+
if (user_data != NULL) {
|
440
|
+
*user_data = sd->user_data;
|
441
|
+
}
|
442
|
+
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
443
|
+
gpr_log(
|
444
|
+
GPR_DEBUG,
|
445
|
+
"[RR %p] Picked target <-- Subchannel %p (connected %p) (sl %p, "
|
446
|
+
"index %lu)",
|
447
|
+
(void *)p, (void *)sd->subchannel, (void *)*target,
|
448
|
+
(void *)sd->subchannel_list, (unsigned long)next_ready_index);
|
449
|
+
}
|
450
|
+
/* only advance the last picked pointer if the selection was used */
|
451
|
+
update_last_ready_subchannel_index_locked(p, next_ready_index);
|
452
|
+
return 1;
|
358
453
|
}
|
359
|
-
pending_pick *pp = gpr_malloc(sizeof(*pp));
|
360
|
-
pp->next = p->pending_picks;
|
361
|
-
pp->target = target;
|
362
|
-
pp->on_complete = on_complete;
|
363
|
-
pp->initial_metadata_flags = pick_args->initial_metadata_flags;
|
364
|
-
pp->user_data = user_data;
|
365
|
-
p->pending_picks = pp;
|
366
|
-
return 0;
|
367
454
|
}
|
455
|
+
/* no pick currently available. Save for later in list of pending picks */
|
456
|
+
if (!p->started_picking) {
|
457
|
+
start_picking_locked(exec_ctx, p);
|
458
|
+
}
|
459
|
+
pending_pick *pp = gpr_malloc(sizeof(*pp));
|
460
|
+
pp->next = p->pending_picks;
|
461
|
+
pp->target = target;
|
462
|
+
pp->on_complete = on_complete;
|
463
|
+
pp->initial_metadata_flags = pick_args->initial_metadata_flags;
|
464
|
+
pp->user_data = user_data;
|
465
|
+
p->pending_picks = pp;
|
466
|
+
return 0;
|
368
467
|
}
|
369
468
|
|
370
469
|
static void update_state_counters_locked(subchannel_data *sd) {
|
371
|
-
|
470
|
+
rr_subchannel_list *subchannel_list = sd->subchannel_list;
|
372
471
|
if (sd->prev_connectivity_state == GRPC_CHANNEL_READY) {
|
373
|
-
GPR_ASSERT(
|
374
|
-
--
|
472
|
+
GPR_ASSERT(subchannel_list->num_ready > 0);
|
473
|
+
--subchannel_list->num_ready;
|
375
474
|
} else if (sd->prev_connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
376
|
-
GPR_ASSERT(
|
377
|
-
--
|
475
|
+
GPR_ASSERT(subchannel_list->num_transient_failures > 0);
|
476
|
+
--subchannel_list->num_transient_failures;
|
477
|
+
} else if (sd->prev_connectivity_state == GRPC_CHANNEL_SHUTDOWN) {
|
478
|
+
GPR_ASSERT(subchannel_list->num_shutdown > 0);
|
479
|
+
--subchannel_list->num_shutdown;
|
378
480
|
} else if (sd->prev_connectivity_state == GRPC_CHANNEL_IDLE) {
|
379
|
-
GPR_ASSERT(
|
380
|
-
--
|
481
|
+
GPR_ASSERT(subchannel_list->num_idle > 0);
|
482
|
+
--subchannel_list->num_idle;
|
381
483
|
}
|
382
484
|
if (sd->curr_connectivity_state == GRPC_CHANNEL_READY) {
|
383
|
-
++
|
485
|
+
++subchannel_list->num_ready;
|
384
486
|
} else if (sd->curr_connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
385
|
-
++
|
487
|
+
++subchannel_list->num_transient_failures;
|
386
488
|
} else if (sd->curr_connectivity_state == GRPC_CHANNEL_SHUTDOWN) {
|
387
|
-
++
|
489
|
+
++subchannel_list->num_shutdown;
|
388
490
|
} else if (sd->curr_connectivity_state == GRPC_CHANNEL_IDLE) {
|
389
|
-
++
|
491
|
+
++subchannel_list->num_idle;
|
390
492
|
}
|
391
493
|
}
|
392
494
|
|
393
|
-
|
394
|
-
*
|
395
|
-
*
|
495
|
+
/** Sets the policy's connectivity status based on that of the passed-in \a sd
|
496
|
+
* (the subchannel_data associted with the updated subchannel) and the
|
497
|
+
* subchannel list \a sd belongs to (sd->subchannel_list). \a error will only be
|
498
|
+
* used upon policy transition to TRANSIENT_FAILURE or SHUTDOWN. Returns the
|
499
|
+
* connectivity status set. */
|
396
500
|
static grpc_connectivity_state update_lb_connectivity_status_locked(
|
397
501
|
grpc_exec_ctx *exec_ctx, subchannel_data *sd, grpc_error *error) {
|
398
502
|
/* In priority order. The first rule to match terminates the search (ie, if we
|
@@ -405,18 +509,20 @@ static grpc_connectivity_state update_lb_connectivity_status_locked(
|
|
405
509
|
* CHECK: sd->curr_connectivity_state == CONNECTING.
|
406
510
|
*
|
407
511
|
* 3) RULE: ALL subchannels are SHUTDOWN => policy is SHUTDOWN.
|
408
|
-
* CHECK: p->num_shutdown ==
|
512
|
+
* CHECK: p->subchannel_list->num_shutdown ==
|
513
|
+
* p->subchannel_list->num_subchannels.
|
409
514
|
*
|
410
515
|
* 4) RULE: ALL subchannels are TRANSIENT_FAILURE => policy is
|
411
516
|
* TRANSIENT_FAILURE.
|
412
|
-
* CHECK: p->num_transient_failures == p->num_subchannels.
|
517
|
+
* CHECK: p->num_transient_failures == p->subchannel_list->num_subchannels.
|
413
518
|
*
|
414
519
|
* 5) RULE: ALL subchannels are IDLE => policy is IDLE.
|
415
|
-
* CHECK: p->num_idle == p->num_subchannels.
|
520
|
+
* CHECK: p->num_idle == p->subchannel_list->num_subchannels.
|
416
521
|
*/
|
417
|
-
round_robin_lb_policy *p = sd->policy;
|
418
522
|
grpc_connectivity_state new_state = sd->curr_connectivity_state;
|
419
|
-
|
523
|
+
rr_subchannel_list *subchannel_list = sd->subchannel_list;
|
524
|
+
round_robin_lb_policy *p = subchannel_list->policy;
|
525
|
+
if (subchannel_list->num_ready > 0) { /* 1) READY */
|
420
526
|
grpc_connectivity_state_set(exec_ctx, &p->state_tracker, GRPC_CHANNEL_READY,
|
421
527
|
GRPC_ERROR_NONE, "rr_ready");
|
422
528
|
new_state = GRPC_CHANNEL_READY;
|
@@ -426,18 +532,21 @@ static grpc_connectivity_state update_lb_connectivity_status_locked(
|
|
426
532
|
GRPC_CHANNEL_CONNECTING, GRPC_ERROR_NONE,
|
427
533
|
"rr_connecting");
|
428
534
|
new_state = GRPC_CHANNEL_CONNECTING;
|
429
|
-
} else if (p->num_shutdown ==
|
535
|
+
} else if (p->subchannel_list->num_shutdown ==
|
536
|
+
p->subchannel_list->num_subchannels) { /* 3) SHUTDOWN */
|
430
537
|
grpc_connectivity_state_set(exec_ctx, &p->state_tracker,
|
431
538
|
GRPC_CHANNEL_SHUTDOWN, GRPC_ERROR_REF(error),
|
432
539
|
"rr_shutdown");
|
540
|
+
p->in_connectivity_shutdown = true;
|
433
541
|
new_state = GRPC_CHANNEL_SHUTDOWN;
|
434
|
-
} else if (
|
435
|
-
p->num_subchannels) { /* 4) TRANSIENT_FAILURE */
|
542
|
+
} else if (subchannel_list->num_transient_failures ==
|
543
|
+
p->subchannel_list->num_subchannels) { /* 4) TRANSIENT_FAILURE */
|
436
544
|
grpc_connectivity_state_set(exec_ctx, &p->state_tracker,
|
437
545
|
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
438
546
|
GRPC_ERROR_REF(error), "rr_transient_failure");
|
439
547
|
new_state = GRPC_CHANNEL_TRANSIENT_FAILURE;
|
440
|
-
} else if (
|
548
|
+
} else if (subchannel_list->num_idle ==
|
549
|
+
p->subchannel_list->num_subchannels) { /* 5) IDLE */
|
441
550
|
grpc_connectivity_state_set(exec_ctx, &p->state_tracker, GRPC_CHANNEL_IDLE,
|
442
551
|
GRPC_ERROR_NONE, "rr_idle");
|
443
552
|
new_state = GRPC_CHANNEL_IDLE;
|
@@ -449,60 +558,122 @@ static grpc_connectivity_state update_lb_connectivity_status_locked(
|
|
449
558
|
static void rr_connectivity_changed_locked(grpc_exec_ctx *exec_ctx, void *arg,
|
450
559
|
grpc_error *error) {
|
451
560
|
subchannel_data *sd = arg;
|
452
|
-
round_robin_lb_policy *p = sd->policy;
|
453
|
-
// Now that we're inside the combiner, copy the pending connectivity
|
454
|
-
// state (which was set by the connectivity state watcher) to
|
455
|
-
// curr_connectivity_state, which is what we use inside of the combiner.
|
456
|
-
sd->curr_connectivity_state = sd->pending_connectivity_state_unsafe;
|
561
|
+
round_robin_lb_policy *p = sd->subchannel_list->policy;
|
457
562
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
458
|
-
gpr_log(
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
563
|
+
gpr_log(
|
564
|
+
GPR_DEBUG,
|
565
|
+
"[RR %p] connectivity changed for subchannel %p, subchannel_list %p: "
|
566
|
+
"prev_state=%s new_state=%s p->shutdown=%d "
|
567
|
+
"sd->subchannel_list->shutting_down=%d error=%s",
|
568
|
+
(void *)p, (void *)sd->subchannel, (void *)sd->subchannel_list,
|
569
|
+
grpc_connectivity_state_name(sd->prev_connectivity_state),
|
570
|
+
grpc_connectivity_state_name(sd->pending_connectivity_state_unsafe),
|
571
|
+
p->shutdown, sd->subchannel_list->shutting_down,
|
572
|
+
grpc_error_string(error));
|
463
573
|
}
|
464
|
-
// If
|
574
|
+
// If the policy is shutting down, unref and return.
|
465
575
|
if (p->shutdown) {
|
466
|
-
|
576
|
+
rr_subchannel_list_unref(exec_ctx, sd->subchannel_list,
|
577
|
+
"pol_shutdown+started_picking");
|
578
|
+
GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, "pol_shutdown");
|
579
|
+
return;
|
580
|
+
}
|
581
|
+
if (sd->subchannel_list->shutting_down && error == GRPC_ERROR_CANCELLED) {
|
582
|
+
// the subchannel list associated with sd has been discarded. This callback
|
583
|
+
// corresponds to the unsubscription. The unrefs correspond to the picking
|
584
|
+
// ref (start_picking_locked or update_started_picking).
|
585
|
+
rr_subchannel_list_unref(exec_ctx, sd->subchannel_list,
|
586
|
+
"sl_shutdown+started_picking");
|
587
|
+
GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, "sl_shutdown+picking");
|
588
|
+
return;
|
589
|
+
}
|
590
|
+
// Dispose of outdated subchannel lists.
|
591
|
+
if (sd->subchannel_list != p->subchannel_list &&
|
592
|
+
sd->subchannel_list != p->latest_pending_subchannel_list) {
|
593
|
+
char *reason = NULL;
|
594
|
+
if (sd->subchannel_list->shutting_down) {
|
595
|
+
reason = "sl_outdated_straggler";
|
596
|
+
rr_subchannel_list_unref(exec_ctx, sd->subchannel_list, reason);
|
597
|
+
} else {
|
598
|
+
reason = "sl_outdated";
|
599
|
+
rr_subchannel_list_shutdown_and_unref(exec_ctx, sd->subchannel_list,
|
600
|
+
reason);
|
601
|
+
}
|
602
|
+
GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, reason);
|
467
603
|
return;
|
468
604
|
}
|
605
|
+
// Now that we're inside the combiner, copy the pending connectivity
|
606
|
+
// state (which was set by the connectivity state watcher) to
|
607
|
+
// curr_connectivity_state, which is what we use inside of the combiner.
|
608
|
+
sd->curr_connectivity_state = sd->pending_connectivity_state_unsafe;
|
469
609
|
// Update state counters and determine new overall state.
|
470
610
|
update_state_counters_locked(sd);
|
471
611
|
sd->prev_connectivity_state = sd->curr_connectivity_state;
|
472
|
-
grpc_connectivity_state
|
612
|
+
const grpc_connectivity_state new_policy_connectivity_state =
|
473
613
|
update_lb_connectivity_status_locked(exec_ctx, sd, GRPC_ERROR_REF(error));
|
474
|
-
// If the new state is SHUTDOWN, unref the subchannel, and if the new
|
475
|
-
//
|
614
|
+
// If the sd's new state is SHUTDOWN, unref the subchannel, and if the new
|
615
|
+
// policy's state is SHUTDOWN, clean up.
|
476
616
|
if (sd->curr_connectivity_state == GRPC_CHANNEL_SHUTDOWN) {
|
477
617
|
GRPC_SUBCHANNEL_UNREF(exec_ctx, sd->subchannel, "rr_subchannel_shutdown");
|
478
618
|
sd->subchannel = NULL;
|
479
619
|
if (sd->user_data != NULL) {
|
480
620
|
GPR_ASSERT(sd->user_data_vtable != NULL);
|
481
621
|
sd->user_data_vtable->destroy(exec_ctx, sd->user_data);
|
622
|
+
sd->user_data = NULL;
|
482
623
|
}
|
483
|
-
if (
|
484
|
-
|
624
|
+
if (new_policy_connectivity_state == GRPC_CHANNEL_SHUTDOWN) {
|
625
|
+
// the policy is shutting down. Flush all the pending picks...
|
485
626
|
pending_pick *pp;
|
486
627
|
while ((pp = p->pending_picks)) {
|
487
628
|
p->pending_picks = pp->next;
|
488
629
|
*pp->target = NULL;
|
489
|
-
|
630
|
+
GRPC_CLOSURE_SCHED(exec_ctx, pp->on_complete, GRPC_ERROR_NONE);
|
490
631
|
gpr_free(pp);
|
491
632
|
}
|
492
633
|
}
|
493
|
-
|
494
|
-
|
495
|
-
|
634
|
+
rr_subchannel_list_unref(exec_ctx, sd->subchannel_list,
|
635
|
+
"sd_shutdown+started_picking");
|
636
|
+
// unref the "rr_connectivity_update" weak ref from start_picking.
|
637
|
+
GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base,
|
638
|
+
"rr_connectivity_sd_shutdown");
|
639
|
+
} else { // sd not in SHUTDOWN
|
496
640
|
if (sd->curr_connectivity_state == GRPC_CHANNEL_READY) {
|
641
|
+
if (sd->subchannel_list != p->subchannel_list) {
|
642
|
+
// promote sd->subchannel_list to p->subchannel_list.
|
643
|
+
// sd->subchannel_list must be equal to
|
644
|
+
// p->latest_pending_subchannel_list because we have already filtered
|
645
|
+
// for sds belonging to outdated subchannel lists.
|
646
|
+
GPR_ASSERT(sd->subchannel_list == p->latest_pending_subchannel_list);
|
647
|
+
GPR_ASSERT(!sd->subchannel_list->shutting_down);
|
648
|
+
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
649
|
+
const unsigned long num_subchannels =
|
650
|
+
p->subchannel_list != NULL
|
651
|
+
? (unsigned long)p->subchannel_list->num_subchannels
|
652
|
+
: 0;
|
653
|
+
gpr_log(GPR_DEBUG,
|
654
|
+
"[RR %p] phasing out subchannel list %p (size %lu) in favor "
|
655
|
+
"of %p (size %lu)",
|
656
|
+
(void *)p, (void *)p->subchannel_list, num_subchannels,
|
657
|
+
(void *)sd->subchannel_list, num_subchannels);
|
658
|
+
}
|
659
|
+
if (p->subchannel_list != NULL) {
|
660
|
+
// dispose of the current subchannel_list
|
661
|
+
rr_subchannel_list_shutdown_and_unref(exec_ctx, p->subchannel_list,
|
662
|
+
"sl_phase_out_shutdown");
|
663
|
+
}
|
664
|
+
p->subchannel_list = p->latest_pending_subchannel_list;
|
665
|
+
p->latest_pending_subchannel_list = NULL;
|
666
|
+
}
|
497
667
|
/* at this point we know there's at least one suitable subchannel. Go
|
498
668
|
* ahead and pick one and notify the pending suitors in
|
499
669
|
* p->pending_picks. This preemtively replicates rr_pick()'s actions. */
|
500
670
|
const size_t next_ready_index = get_next_ready_subchannel_index_locked(p);
|
501
|
-
GPR_ASSERT(next_ready_index < p->num_subchannels);
|
502
|
-
subchannel_data *selected =
|
671
|
+
GPR_ASSERT(next_ready_index < p->subchannel_list->num_subchannels);
|
672
|
+
subchannel_data *selected =
|
673
|
+
&p->subchannel_list->subchannels[next_ready_index];
|
503
674
|
if (p->pending_picks != NULL) {
|
504
|
-
|
505
|
-
|
675
|
+
// if the selected subchannel is going to be used for the pending
|
676
|
+
// picks, update the last picked pointer
|
506
677
|
update_last_ready_subchannel_index_locked(p, next_ready_index);
|
507
678
|
}
|
508
679
|
pending_pick *pp;
|
@@ -516,15 +687,17 @@ static void rr_connectivity_changed_locked(grpc_exec_ctx *exec_ctx, void *arg,
|
|
516
687
|
}
|
517
688
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
518
689
|
gpr_log(GPR_DEBUG,
|
519
|
-
"[RR
|
520
|
-
(
|
521
|
-
(
|
690
|
+
"[RR %p] Fulfilling pending pick. Target <-- subchannel %p "
|
691
|
+
"(subchannel_list %p, index %lu)",
|
692
|
+
(void *)p, (void *)selected->subchannel,
|
693
|
+
(void *)p->subchannel_list, (unsigned long)next_ready_index);
|
522
694
|
}
|
523
|
-
|
695
|
+
GRPC_CLOSURE_SCHED(exec_ctx, pp->on_complete, GRPC_ERROR_NONE);
|
524
696
|
gpr_free(pp);
|
525
697
|
}
|
526
698
|
}
|
527
|
-
/* renew notification: reuses the "
|
699
|
+
/* renew notification: reuses the "rr_connectivity_update" weak ref on the
|
700
|
+
* policy as well as the sd->subchannel_list ref. */
|
528
701
|
grpc_subchannel_notify_on_state_change(
|
529
702
|
exec_ctx, sd->subchannel, p->base.interested_parties,
|
530
703
|
&sd->pending_connectivity_state_unsafe,
|
@@ -551,65 +724,83 @@ static void rr_ping_one_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol,
|
|
551
724
|
grpc_closure *closure) {
|
552
725
|
round_robin_lb_policy *p = (round_robin_lb_policy *)pol;
|
553
726
|
const size_t next_ready_index = get_next_ready_subchannel_index_locked(p);
|
554
|
-
if (next_ready_index < p->num_subchannels) {
|
555
|
-
subchannel_data *selected =
|
727
|
+
if (next_ready_index < p->subchannel_list->num_subchannels) {
|
728
|
+
subchannel_data *selected =
|
729
|
+
&p->subchannel_list->subchannels[next_ready_index];
|
556
730
|
grpc_connected_subchannel *target = GRPC_CONNECTED_SUBCHANNEL_REF(
|
557
731
|
grpc_subchannel_get_connected_subchannel(selected->subchannel),
|
558
732
|
"rr_picked");
|
559
733
|
grpc_connected_subchannel_ping(exec_ctx, target, closure);
|
560
734
|
GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, target, "rr_picked");
|
561
735
|
} else {
|
562
|
-
|
736
|
+
GRPC_CLOSURE_SCHED(exec_ctx, closure, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
563
737
|
"Round Robin not connected"));
|
564
738
|
}
|
565
739
|
}
|
566
740
|
|
567
|
-
static
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
rr_cancel_picks_locked,
|
573
|
-
rr_ping_one_locked,
|
574
|
-
rr_exit_idle_locked,
|
575
|
-
rr_check_connectivity_locked,
|
576
|
-
rr_notify_on_state_change_locked};
|
577
|
-
|
578
|
-
static void round_robin_factory_ref(grpc_lb_policy_factory *factory) {}
|
579
|
-
|
580
|
-
static void round_robin_factory_unref(grpc_lb_policy_factory *factory) {}
|
581
|
-
|
582
|
-
static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx,
|
583
|
-
grpc_lb_policy_factory *factory,
|
584
|
-
grpc_lb_policy_args *args) {
|
585
|
-
GPR_ASSERT(args->client_channel_factory != NULL);
|
586
|
-
|
587
|
-
/* Find the number of backend addresses. We ignore balancer
|
588
|
-
* addresses, since we don't know how to handle them. */
|
741
|
+
static void rr_update_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy,
|
742
|
+
const grpc_lb_policy_args *args) {
|
743
|
+
round_robin_lb_policy *p = (round_robin_lb_policy *)policy;
|
744
|
+
/* Find the number of backend addresses. We ignore balancer addresses, since
|
745
|
+
* we don't know how to handle them. */
|
589
746
|
const grpc_arg *arg =
|
590
747
|
grpc_channel_args_find(args->args, GRPC_ARG_LB_ADDRESSES);
|
591
748
|
if (arg == NULL || arg->type != GRPC_ARG_POINTER) {
|
592
|
-
|
749
|
+
if (p->subchannel_list == NULL) {
|
750
|
+
// If we don't have a current subchannel list, go into TRANSIENT FAILURE.
|
751
|
+
grpc_connectivity_state_set(
|
752
|
+
exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
|
753
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing update in args"),
|
754
|
+
"rr_update_missing");
|
755
|
+
} else {
|
756
|
+
// otherwise, keep using the current subchannel list (ignore this update).
|
757
|
+
gpr_log(GPR_ERROR,
|
758
|
+
"[RR %p] No valid LB addresses channel arg for update, ignoring.",
|
759
|
+
(void *)p);
|
760
|
+
}
|
761
|
+
return;
|
593
762
|
}
|
594
763
|
grpc_lb_addresses *addresses = arg->value.pointer.p;
|
595
764
|
size_t num_addrs = 0;
|
596
765
|
for (size_t i = 0; i < addresses->num_addresses; i++) {
|
597
766
|
if (!addresses->addresses[i].is_balancer) ++num_addrs;
|
598
767
|
}
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
768
|
+
rr_subchannel_list *subchannel_list = rr_subchannel_list_create(p, num_addrs);
|
769
|
+
if (num_addrs == 0) {
|
770
|
+
grpc_connectivity_state_set(
|
771
|
+
exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
|
772
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty update"),
|
773
|
+
"rr_update_empty");
|
774
|
+
if (p->subchannel_list != NULL) {
|
775
|
+
rr_subchannel_list_shutdown_and_unref(exec_ctx, p->subchannel_list,
|
776
|
+
"sl_shutdown_empty_update");
|
777
|
+
}
|
778
|
+
p->subchannel_list = subchannel_list; // empty list
|
779
|
+
return;
|
780
|
+
}
|
607
781
|
size_t subchannel_index = 0;
|
782
|
+
if (p->latest_pending_subchannel_list != NULL && p->started_picking) {
|
783
|
+
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
784
|
+
gpr_log(GPR_DEBUG,
|
785
|
+
"[RR %p] Shutting down latest pending subchannel list %p, about "
|
786
|
+
"to be replaced by newer latest %p",
|
787
|
+
(void *)p, (void *)p->latest_pending_subchannel_list,
|
788
|
+
(void *)subchannel_list);
|
789
|
+
}
|
790
|
+
rr_subchannel_list_shutdown_and_unref(
|
791
|
+
exec_ctx, p->latest_pending_subchannel_list, "sl_outdated_dont_smash");
|
792
|
+
}
|
793
|
+
p->latest_pending_subchannel_list = subchannel_list;
|
794
|
+
grpc_subchannel_args sc_args;
|
795
|
+
/* We need to remove the LB addresses in order to be able to compare the
|
796
|
+
* subchannel keys of subchannels from a different batch of addresses. */
|
797
|
+
static const char *keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS,
|
798
|
+
GRPC_ARG_LB_ADDRESSES};
|
799
|
+
/* Create subchannels for addresses in the update. */
|
608
800
|
for (size_t i = 0; i < addresses->num_addresses; i++) {
|
609
801
|
/* Skip balancer addresses, since we only know how to handle backends. */
|
610
802
|
if (addresses->addresses[i].is_balancer) continue;
|
611
|
-
|
612
|
-
static const char *keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS};
|
803
|
+
GPR_ASSERT(i < num_addrs);
|
613
804
|
memset(&sc_args, 0, sizeof(grpc_subchannel_args));
|
614
805
|
grpc_arg addr_arg =
|
615
806
|
grpc_create_subchannel_address_arg(&addresses->addresses[i].address);
|
@@ -623,52 +814,86 @@ static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx,
|
|
623
814
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
624
815
|
char *address_uri =
|
625
816
|
grpc_sockaddr_to_uri(&addresses->addresses[i].address);
|
626
|
-
gpr_log(
|
627
|
-
|
817
|
+
gpr_log(
|
818
|
+
GPR_DEBUG,
|
819
|
+
"[RR %p] index %lu: Created subchannel %p for address uri %s into "
|
820
|
+
"subchannel_list %p",
|
821
|
+
(void *)p, (unsigned long)subchannel_index, (void *)subchannel,
|
822
|
+
address_uri, (void *)subchannel_list);
|
628
823
|
gpr_free(address_uri);
|
629
824
|
}
|
630
825
|
grpc_channel_args_destroy(exec_ctx, new_args);
|
631
826
|
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
827
|
+
subchannel_data *sd = &subchannel_list->subchannels[subchannel_index++];
|
828
|
+
sd->subchannel_list = subchannel_list;
|
829
|
+
sd->subchannel = subchannel;
|
830
|
+
GRPC_CLOSURE_INIT(&sd->connectivity_changed_closure,
|
831
|
+
rr_connectivity_changed_locked, sd,
|
832
|
+
grpc_combiner_scheduler(args->combiner));
|
833
|
+
/* use some sentinel value outside of the range of
|
834
|
+
* grpc_connectivity_state to signal an undefined previous state. We
|
835
|
+
* won't be referring to this value again and it'll be overwritten after
|
836
|
+
* the first call to rr_connectivity_changed_locked */
|
837
|
+
sd->prev_connectivity_state = GRPC_CHANNEL_INIT;
|
838
|
+
sd->curr_connectivity_state = GRPC_CHANNEL_IDLE;
|
839
|
+
sd->user_data_vtable = addresses->user_data_vtable;
|
840
|
+
if (sd->user_data_vtable != NULL) {
|
841
|
+
sd->user_data =
|
842
|
+
sd->user_data_vtable->copy(addresses->addresses[i].user_data);
|
843
|
+
}
|
844
|
+
if (p->started_picking) {
|
845
|
+
rr_subchannel_list_ref(sd->subchannel_list, "update_started_picking");
|
846
|
+
GRPC_LB_POLICY_WEAK_REF(&p->base, "rr_connectivity_update");
|
847
|
+
/* 2. Watch every new subchannel. A subchannel list becomes active the
|
848
|
+
* moment one of its subchannels is READY. At that moment, we swap
|
849
|
+
* p->subchannel_list for sd->subchannel_list, provided the subchannel
|
850
|
+
* list is still valid (ie, isn't shutting down) */
|
851
|
+
grpc_subchannel_notify_on_state_change(
|
852
|
+
exec_ctx, sd->subchannel, p->base.interested_parties,
|
853
|
+
&sd->pending_connectivity_state_unsafe,
|
854
|
+
&sd->connectivity_changed_closure);
|
651
855
|
}
|
652
856
|
}
|
653
|
-
if (
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
857
|
+
if (!p->started_picking) {
|
858
|
+
// The policy isn't picking yet. Save the update for later, disposing of
|
859
|
+
// previous version if any.
|
860
|
+
if (p->subchannel_list != NULL) {
|
861
|
+
rr_subchannel_list_shutdown_and_unref(exec_ctx, p->subchannel_list,
|
862
|
+
"rr_update_before_started_picking");
|
863
|
+
}
|
864
|
+
p->subchannel_list = subchannel_list;
|
865
|
+
p->latest_pending_subchannel_list = NULL;
|
658
866
|
}
|
659
|
-
|
867
|
+
}
|
660
868
|
|
661
|
-
|
662
|
-
|
663
|
-
|
869
|
+
static const grpc_lb_policy_vtable round_robin_lb_policy_vtable = {
|
870
|
+
rr_destroy,
|
871
|
+
rr_shutdown_locked,
|
872
|
+
rr_pick_locked,
|
873
|
+
rr_cancel_pick_locked,
|
874
|
+
rr_cancel_picks_locked,
|
875
|
+
rr_ping_one_locked,
|
876
|
+
rr_exit_idle_locked,
|
877
|
+
rr_check_connectivity_locked,
|
878
|
+
rr_notify_on_state_change_locked,
|
879
|
+
rr_update_locked};
|
880
|
+
|
881
|
+
static void round_robin_factory_ref(grpc_lb_policy_factory *factory) {}
|
664
882
|
|
883
|
+
static void round_robin_factory_unref(grpc_lb_policy_factory *factory) {}
|
884
|
+
|
885
|
+
static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx,
|
886
|
+
grpc_lb_policy_factory *factory,
|
887
|
+
grpc_lb_policy_args *args) {
|
888
|
+
GPR_ASSERT(args->client_channel_factory != NULL);
|
889
|
+
round_robin_lb_policy *p = gpr_zalloc(sizeof(*p));
|
665
890
|
grpc_lb_policy_init(&p->base, &round_robin_lb_policy_vtable, args->combiner);
|
666
891
|
grpc_connectivity_state_init(&p->state_tracker, GRPC_CHANNEL_IDLE,
|
667
892
|
"round_robin");
|
668
|
-
|
893
|
+
rr_update_locked(exec_ctx, &p->base, args);
|
669
894
|
if (GRPC_TRACER_ON(grpc_lb_round_robin_trace)) {
|
670
|
-
gpr_log(GPR_DEBUG, "
|
671
|
-
(
|
895
|
+
gpr_log(GPR_DEBUG, "[RR %p] Created with %lu subchannels", (void *)p,
|
896
|
+
(unsigned long)p->subchannel_list->num_subchannels);
|
672
897
|
}
|
673
898
|
return &p->base;
|
674
899
|
}
|
@@ -688,7 +913,7 @@ static grpc_lb_policy_factory *round_robin_lb_factory_create() {
|
|
688
913
|
|
689
914
|
void grpc_lb_policy_round_robin_init() {
|
690
915
|
grpc_register_lb_policy(round_robin_lb_factory_create());
|
691
|
-
grpc_register_tracer(
|
916
|
+
grpc_register_tracer(&grpc_lb_round_robin_trace);
|
692
917
|
}
|
693
918
|
|
694
919
|
void grpc_lb_policy_round_robin_shutdown() {}
|