grpc 1.8.7 → 1.9.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 +549 -325
- data/include/grpc/impl/codegen/grpc_types.h +1 -2
- data/include/grpc/impl/codegen/port_platform.h +46 -5
- data/include/grpc/impl/codegen/slice.h +1 -2
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice_buffer.h +1 -2
- data/include/grpc/support/log.h +4 -2
- data/include/grpc/support/thd.h +4 -1
- data/include/grpc/support/tls.h +6 -0
- data/include/grpc/support/tls_gcc.h +5 -40
- data/include/grpc/support/tls_msvc.h +9 -0
- data/include/grpc/support/tls_pthread.h +9 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +32 -29
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +26 -32
- data/src/core/ext/filters/client_channel/client_channel.cc +325 -356
- data/src/core/ext/filters/client_channel/client_channel.h +4 -12
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +9 -14
- data/src/core/ext/filters/client_channel/client_channel_factory.h +7 -20
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +7 -10
- data/src/core/ext/filters/client_channel/connector.cc +6 -7
- data/src/core/ext/filters/client_channel/connector.h +6 -16
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +38 -50
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -8
- data/src/core/ext/filters/client_channel/http_proxy.cc +9 -13
- data/src/core/ext/filters/client_channel/http_proxy.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy.cc +72 -94
- data/src/core/ext/filters/client_channel/lb_policy.h +83 -92
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +474 -591
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +2 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +0 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +0 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +9 -12
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +160 -182
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -221
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +24 -35
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -20
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +6 -9
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -15
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -9
- data/src/core/ext/filters/client_channel/parse_address.cc +1 -1
- data/src/core/ext/filters/client_channel/parse_address.h +0 -8
- data/src/core/ext/filters/client_channel/proxy_mapper.cc +6 -8
- data/src/core/ext/filters/client_channel/proxy_mapper.h +6 -16
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +13 -17
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +2 -12
- data/src/core/ext/filters/client_channel/resolver.cc +11 -13
- data/src/core/ext/filters/client_channel/resolver.h +14 -25
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +57 -70
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +23 -31
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +27 -45
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -11
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +53 -66
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +25 -33
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -9
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +26 -35
- data/src/core/ext/filters/client_channel/resolver_factory.cc +2 -3
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -12
- data/src/core/ext/filters/client_channel/resolver_registry.cc +12 -15
- data/src/core/ext/filters/client_channel/resolver_registry.h +3 -12
- data/src/core/ext/filters/client_channel/retry_throttle.h +0 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +289 -301
- data/src/core/ext/filters/client_channel/subchannel.h +57 -84
- data/src/core/ext/filters/client_channel/subchannel_index.cc +30 -33
- data/src/core/ext/filters/client_channel/subchannel_index.h +4 -16
- data/src/core/ext/filters/client_channel/uri_parser.cc +13 -17
- data/src/core/ext/filters/client_channel/uri_parser.h +1 -10
- data/src/core/ext/filters/deadline/deadline_filter.cc +49 -67
- data/src/core/ext/filters/deadline/deadline_filter.h +4 -14
- data/src/core/ext/filters/http/client/http_client_filter.cc +60 -77
- data/src/core/ext/filters/http/client/http_client_filter.h +0 -8
- data/src/core/ext/filters/http/http_filters_plugin.cc +4 -6
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +63 -79
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +57 -71
- data/src/core/ext/filters/http/server/http_server_filter.h +0 -8
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +19 -24
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +0 -8
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +3 -3
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -8
- data/src/core/ext/filters/max_age/max_age_filter.cc +49 -62
- data/src/core/ext/filters/max_age/max_age_filter.h +0 -8
- data/src/core/ext/filters/message_size/message_size_filter.cc +23 -29
- data/src/core/ext/filters/message_size/message_size_filter.h +0 -8
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +0 -8
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -8
- data/src/core/ext/transport/chttp2/alpn/alpn.h +0 -8
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +33 -40
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -8
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +15 -17
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +8 -8
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +23 -28
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +50 -57
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -10
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -10
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -9
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -11
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -9
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +10 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +516 -636
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +29 -13
- data/src/core/ext/transport/chttp2/transport/flow_control.h +196 -53
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +31 -33
- data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -9
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -11
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +63 -81
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +230 -318
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +14 -20
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +5 -16
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -7
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +0 -8
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +8 -11
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +4 -13
- data/src/core/ext/transport/chttp2/transport/internal.h +51 -75
- data/src/core/ext/transport/chttp2/transport/parsing.cc +83 -109
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -8
- data/src/core/ext/transport/chttp2/transport/varint.h +0 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +61 -65
- data/src/core/ext/transport/inproc/inproc_plugin.cc +2 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +177 -188
- data/src/core/ext/transport/inproc/inproc_transport.h +0 -8
- data/src/core/lib/backoff/backoff.cc +39 -44
- data/src/core/lib/backoff/backoff.h +61 -57
- data/src/core/lib/channel/channel_args.cc +8 -10
- data/src/core/lib/channel/channel_args.h +4 -13
- data/src/core/lib/channel/channel_stack.cc +19 -27
- data/src/core/lib/channel/channel_stack.h +27 -47
- data/src/core/lib/channel/channel_stack_builder.cc +11 -14
- data/src/core/lib/channel/channel_stack_builder.h +4 -15
- data/src/core/lib/channel/connected_channel.cc +23 -36
- data/src/core/lib/channel/connected_channel.h +1 -10
- data/src/core/lib/channel/handshaker.cc +31 -40
- data/src/core/lib/channel/handshaker.h +14 -25
- data/src/core/lib/channel/handshaker_factory.cc +6 -6
- data/src/core/lib/channel/handshaker_factory.h +5 -15
- data/src/core/lib/channel/handshaker_registry.cc +9 -13
- data/src/core/lib/channel/handshaker_registry.h +2 -11
- data/src/core/lib/compression/algorithm_metadata.h +0 -8
- data/src/core/lib/compression/message_compress.cc +19 -23
- data/src/core/lib/compression/message_compress.h +2 -12
- data/src/core/lib/compression/stream_compression.cc +1 -1
- data/src/core/lib/compression/stream_compression.h +0 -8
- data/src/core/lib/compression/stream_compression_gzip.cc +12 -11
- data/src/core/lib/compression/stream_compression_gzip.h +0 -8
- data/src/core/lib/compression/stream_compression_identity.h +0 -8
- data/src/core/lib/debug/stats.cc +4 -4
- data/src/core/lib/debug/stats.h +9 -19
- data/src/core/lib/debug/stats_data.cc +85 -116
- data/src/core/lib/debug/stats_data.h +236 -312
- data/src/core/lib/debug/trace.cc +1 -1
- data/src/core/lib/debug/trace.h +0 -12
- data/src/core/lib/{support → gpr++}/abstract.h +8 -3
- data/src/core/lib/{support → gpr++}/atomic.h +5 -5
- data/src/core/lib/{support → gpr++}/atomic_with_atm.h +3 -3
- data/src/core/lib/{support → gpr++}/atomic_with_std.h +3 -3
- data/src/core/lib/gpr++/debug_location.h +52 -0
- data/src/core/lib/gpr++/inlined_vector.h +112 -0
- data/src/core/lib/{support → gpr++}/manual_constructor.h +2 -2
- data/src/core/lib/{support → gpr++}/memory.h +3 -3
- data/src/core/lib/gpr++/orphanable.h +171 -0
- data/src/core/lib/gpr++/ref_counted.h +133 -0
- data/src/core/lib/gpr++/ref_counted_ptr.h +99 -0
- data/src/core/lib/{support → gpr}/alloc.cc +0 -0
- data/src/core/lib/{support → gpr}/arena.cc +1 -1
- data/src/core/lib/{support → gpr}/arena.h +3 -11
- data/src/core/lib/{support → gpr}/atm.cc +0 -0
- data/src/core/lib/{support → gpr}/avl.cc +0 -0
- data/src/core/lib/{support → gpr}/cmdline.cc +1 -1
- data/src/core/lib/{support → gpr}/cpu_iphone.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_linux.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_windows.cc +0 -0
- data/src/core/lib/{support → gpr}/env.h +3 -11
- data/src/core/lib/{support → gpr}/env_linux.cc +2 -2
- data/src/core/lib/{support → gpr}/env_posix.cc +4 -4
- data/src/core/lib/{support → gpr}/env_windows.cc +3 -3
- data/src/core/lib/{support → gpr}/fork.cc +3 -3
- data/src/core/lib/{support → gpr}/fork.h +3 -3
- data/src/core/lib/{support → gpr}/host_port.cc +1 -1
- data/src/core/lib/{support → gpr}/log.cc +3 -3
- data/src/core/lib/{support → gpr}/log_android.cc +3 -3
- data/src/core/lib/{support → gpr}/log_linux.cc +1 -1
- data/src/core/lib/{support → gpr}/log_posix.cc +5 -5
- data/src/core/lib/{support → gpr}/log_windows.cc +3 -3
- data/src/core/lib/{support → gpr}/mpscq.cc +1 -1
- data/src/core/lib/{support → gpr}/mpscq.h +3 -10
- data/src/core/lib/{support → gpr}/murmur_hash.cc +1 -1
- data/src/core/lib/{support → gpr}/murmur_hash.h +3 -11
- data/src/core/lib/{support → gpr}/spinlock.h +3 -3
- data/src/core/lib/{support → gpr}/string.cc +1 -1
- data/src/core/lib/{support → gpr}/string.h +3 -10
- data/src/core/lib/{support → gpr}/string_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/string_util_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/string_windows.cc +1 -1
- data/src/core/lib/{support → gpr}/string_windows.h +3 -11
- data/src/core/lib/{support → gpr}/subprocess_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/subprocess_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/sync.cc +0 -0
- data/src/core/lib/{support → gpr}/sync_posix.cc +10 -1
- data/src/core/lib/{support → gpr}/sync_windows.cc +0 -0
- data/src/core/lib/{support → gpr}/thd.cc +0 -0
- data/src/core/lib/{support → gpr}/thd_internal.h +3 -3
- data/src/core/lib/{support → gpr}/thd_posix.cc +18 -2
- data/src/core/lib/{support → gpr}/thd_windows.cc +2 -1
- data/src/core/lib/{support → gpr}/time.cc +0 -0
- data/src/core/lib/{support → gpr}/time_posix.cc +2 -4
- data/src/core/lib/{support → gpr}/time_precise.cc +1 -1
- data/src/core/lib/{support → gpr}/time_precise.h +3 -11
- data/src/core/lib/{support → gpr}/time_windows.cc +1 -3
- data/src/core/lib/{support → gpr}/tls_pthread.cc +0 -0
- data/src/core/lib/{support → gpr}/tmpfile.h +3 -11
- data/src/core/lib/{support → gpr}/tmpfile_msys.cc +2 -2
- data/src/core/lib/{support → gpr}/tmpfile_posix.cc +2 -2
- data/src/core/lib/{support → gpr}/tmpfile_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/wrap_memcpy.cc +0 -0
- data/src/core/lib/http/format_request.cc +1 -1
- data/src/core/lib/http/format_request.h +0 -8
- data/src/core/lib/http/httpcli.cc +55 -74
- data/src/core/lib/http/httpcli.h +13 -22
- data/src/core/lib/http/httpcli_security_connector.cc +27 -33
- data/src/core/lib/http/parser.h +0 -8
- data/src/core/lib/iomgr/block_annotate.h +10 -17
- data/src/core/lib/iomgr/call_combiner.cc +14 -17
- data/src/core/lib/iomgr/call_combiner.h +16 -34
- data/src/core/lib/iomgr/closure.h +24 -37
- data/src/core/lib/iomgr/combiner.cc +62 -66
- data/src/core/lib/iomgr/combiner.h +6 -16
- data/src/core/lib/iomgr/endpoint.cc +15 -21
- data/src/core/lib/iomgr/endpoint.h +16 -33
- data/src/core/lib/iomgr/endpoint_pair.h +0 -8
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +4 -5
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +4 -6
- data/src/core/lib/iomgr/error.cc +2 -6
- data/src/core/lib/iomgr/error.h +4 -9
- data/src/core/lib/iomgr/error_internal.h +0 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +110 -117
- data/src/core/lib/iomgr/ev_epoll1_linux.h +0 -8
- data/src/core/lib/iomgr/ev_epollex_linux.cc +111 -141
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -8
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +83 -109
- data/src/core/lib/iomgr/ev_epollsig_linux.h +2 -10
- data/src/core/lib/iomgr/ev_poll_posix.cc +103 -125
- data/src/core/lib/iomgr/ev_poll_posix.h +0 -8
- data/src/core/lib/iomgr/ev_posix.cc +35 -50
- data/src/core/lib/iomgr/ev_posix.h +27 -53
- data/src/core/lib/iomgr/exec_ctx.cc +46 -78
- data/src/core/lib/iomgr/exec_ctx.h +127 -60
- data/src/core/lib/iomgr/executor.cc +34 -38
- data/src/core/lib/iomgr/executor.h +3 -11
- data/src/core/lib/iomgr/fork_posix.cc +13 -12
- data/src/core/lib/iomgr/gethostname.h +0 -8
- data/src/core/lib/iomgr/gethostname_sysconf.cc +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +14 -16
- data/src/core/lib/iomgr/iocp_windows.h +1 -10
- data/src/core/lib/iomgr/iomgr.cc +60 -59
- data/src/core/lib/iomgr/iomgr.h +3 -12
- data/src/core/lib/iomgr/iomgr_internal.h +0 -8
- data/src/core/lib/iomgr/iomgr_uv.cc +2 -3
- data/src/core/lib/iomgr/iomgr_uv.h +0 -8
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/load_file.h +0 -8
- data/src/core/lib/iomgr/lockfree_event.cc +7 -8
- data/src/core/lib/iomgr/lockfree_event.h +3 -3
- data/src/core/lib/iomgr/polling_entity.cc +6 -10
- data/src/core/lib/iomgr/polling_entity.h +2 -11
- data/src/core/lib/iomgr/pollset.h +4 -13
- data/src/core/lib/iomgr/pollset_set.h +5 -18
- data/src/core/lib/iomgr/pollset_set_uv.cc +5 -10
- data/src/core/lib/iomgr/pollset_set_windows.cc +5 -10
- data/src/core/lib/iomgr/pollset_uv.cc +8 -9
- data/src/core/lib/iomgr/pollset_uv.h +0 -8
- data/src/core/lib/iomgr/pollset_windows.cc +14 -15
- data/src/core/lib/iomgr/pollset_windows.h +0 -8
- data/src/core/lib/iomgr/port.h +6 -1
- data/src/core/lib/iomgr/resolve_address.h +1 -10
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -12
- data/src/core/lib/iomgr/resolve_address_uv.cc +7 -8
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -9
- data/src/core/lib/iomgr/resource_quota.cc +77 -107
- data/src/core/lib/iomgr/resource_quota.h +8 -25
- data/src/core/lib/iomgr/sockaddr_utils.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +0 -8
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.h +0 -8
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.h +1 -9
- data/src/core/lib/iomgr/socket_utils.h +0 -8
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +0 -8
- data/src/core/lib/iomgr/socket_windows.cc +8 -11
- data/src/core/lib/iomgr/socket_windows.h +3 -14
- data/src/core/lib/iomgr/tcp_client.h +1 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +94 -78
- data/src/core/lib/iomgr/tcp_client_posix.h +36 -8
- data/src/core/lib/iomgr/tcp_client_uv.cc +16 -23
- data/src/core/lib/iomgr/tcp_client_windows.cc +22 -25
- data/src/core/lib/iomgr/tcp_posix.cc +131 -153
- data/src/core/lib/iomgr/tcp_posix.h +3 -12
- data/src/core/lib/iomgr/tcp_server.h +6 -17
- data/src/core/lib/iomgr/tcp_server_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -8
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_uv.cc +23 -34
- data/src/core/lib/iomgr/tcp_server_windows.cc +24 -34
- data/src/core/lib/iomgr/tcp_uv.cc +42 -56
- data/src/core/lib/iomgr/tcp_uv.h +0 -8
- data/src/core/lib/iomgr/tcp_windows.cc +43 -50
- data/src/core/lib/iomgr/tcp_windows.h +1 -9
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -8
- data/src/core/lib/iomgr/timer.h +6 -15
- data/src/core/lib/iomgr/timer_generic.cc +22 -27
- data/src/core/lib/iomgr/timer_heap.h +0 -8
- data/src/core/lib/iomgr/timer_manager.cc +17 -19
- data/src/core/lib/iomgr/timer_manager.h +0 -8
- data/src/core/lib/iomgr/timer_uv.cc +12 -14
- data/src/core/lib/iomgr/udp_server.cc +148 -54
- data/src/core/lib/iomgr/udp_server.h +16 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +0 -8
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.h +12 -20
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +0 -8
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -8
- data/src/core/lib/json/json.h +0 -8
- data/src/core/lib/json/json_reader.h +0 -8
- data/src/core/lib/json/json_writer.h +0 -8
- data/src/core/lib/profiling/basic_timers.cc +3 -2
- data/src/core/lib/profiling/timers.h +0 -8
- data/src/core/lib/security/context/security_context.cc +9 -10
- data/src/core/lib/security/context/security_context.h +0 -8
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +23 -28
- data/src/core/lib/security/credentials/composite/composite_credentials.h +0 -8
- data/src/core/lib/security/credentials/credentials.cc +33 -42
- data/src/core/lib/security/credentials/credentials.h +24 -43
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +16 -22
- data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -8
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +28 -34
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +0 -8
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -13
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +0 -8
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -20
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -10
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +56 -72
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -17
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +47 -55
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +3 -12
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +23 -28
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -13
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +0 -8
- data/src/core/lib/security/transport/auth_filters.h +0 -8
- data/src/core/lib/security/transport/client_auth_filter.cc +45 -54
- data/src/core/lib/security/transport/lb_targets_info.cc +2 -2
- data/src/core/lib/security/transport/lb_targets_info.h +0 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +54 -68
- data/src/core/lib/security/transport/secure_endpoint.h +0 -8
- data/src/core/lib/security/transport/security_connector.cc +62 -86
- data/src/core/lib/security/transport/security_connector.h +22 -39
- data/src/core/lib/security/transport/security_handshaker.cc +83 -106
- data/src/core/lib/security/transport/security_handshaker.h +1 -10
- data/src/core/lib/security/transport/server_auth_filter.cc +31 -38
- data/src/core/lib/security/transport/tsi_error.h +0 -8
- data/src/core/lib/security/util/json_util.h +0 -8
- data/src/core/lib/slice/b64.cc +5 -6
- data/src/core/lib/slice/b64.h +3 -12
- data/src/core/lib/slice/percent_encoding.h +0 -8
- data/src/core/lib/slice/slice.cc +8 -9
- data/src/core/lib/slice/slice_buffer.cc +11 -16
- data/src/core/lib/slice/slice_hash_table.cc +5 -7
- data/src/core/lib/slice/slice_hash_table.h +2 -12
- data/src/core/lib/slice/slice_intern.cc +4 -5
- data/src/core/lib/slice/slice_internal.h +4 -15
- data/src/core/lib/slice/slice_string_helpers.cc +1 -1
- data/src/core/lib/slice/slice_string_helpers.h +1 -9
- data/src/core/lib/surface/alarm.cc +11 -14
- data/src/core/lib/surface/alarm_internal.h +0 -8
- data/src/core/lib/surface/byte_buffer.cc +2 -3
- data/src/core/lib/surface/byte_buffer_reader.cc +7 -9
- data/src/core/lib/surface/call.cc +198 -241
- data/src/core/lib/surface/call.h +9 -23
- data/src/core/lib/surface/call_details.cc +3 -4
- data/src/core/lib/surface/call_log_batch.cc +1 -1
- data/src/core/lib/surface/call_test_only.h +0 -8
- data/src/core/lib/surface/channel.cc +53 -64
- data/src/core/lib/surface/channel.h +12 -23
- data/src/core/lib/surface/channel_init.cc +2 -3
- data/src/core/lib/surface/channel_init.h +2 -12
- data/src/core/lib/surface/channel_ping.cc +7 -9
- data/src/core/lib/surface/channel_stack_type.h +0 -8
- data/src/core/lib/surface/completion_queue.cc +158 -176
- data/src/core/lib/surface/completion_queue.h +9 -20
- data/src/core/lib/surface/completion_queue_factory.h +0 -8
- data/src/core/lib/surface/event_string.cc +1 -1
- data/src/core/lib/surface/event_string.h +0 -8
- data/src/core/lib/surface/init.cc +27 -25
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/init_secure.cc +2 -2
- data/src/core/lib/surface/lame_client.cc +30 -33
- data/src/core/lib/surface/lame_client.h +0 -8
- data/src/core/lib/surface/server.cc +151 -203
- data/src/core/lib/surface/server.h +7 -16
- data/src/core/lib/surface/validate_metadata.h +0 -8
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +1 -1
- data/src/core/lib/transport/byte_stream.cc +24 -38
- data/src/core/lib/transport/byte_stream.h +10 -25
- data/src/core/lib/transport/connectivity_state.cc +9 -13
- data/src/core/lib/transport/connectivity_state.h +4 -14
- data/src/core/lib/transport/error_utils.cc +6 -6
- data/src/core/lib/transport/error_utils.h +2 -11
- data/src/core/lib/transport/metadata.cc +21 -23
- data/src/core/lib/transport/metadata.h +8 -20
- data/src/core/lib/transport/metadata_batch.cc +34 -45
- data/src/core/lib/transport/metadata_batch.h +18 -32
- data/src/core/lib/transport/service_config.cc +11 -15
- data/src/core/lib/transport/service_config.h +3 -13
- data/src/core/lib/transport/static_metadata.cc +1 -1
- data/src/core/lib/transport/static_metadata.h +1 -7
- data/src/core/lib/transport/status_conversion.cc +2 -3
- data/src/core/lib/transport/status_conversion.h +1 -10
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/timeout_encoding.h +1 -9
- data/src/core/lib/transport/transport.cc +36 -50
- data/src/core/lib/transport/transport.h +28 -30
- data/src/core/lib/transport/transport_impl.h +12 -23
- data/src/core/lib/transport/transport_op_string.cc +2 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +34 -34
- data/src/core/tsi/fake_transport_security.cc +7 -10
- data/src/core/tsi/fake_transport_security.h +0 -8
- data/src/core/tsi/gts_transport_security.cc +2 -2
- data/src/core/tsi/gts_transport_security.h +0 -8
- data/src/core/tsi/ssl_transport_security.cc +3 -0
- data/src/core/tsi/ssl_transport_security.h +0 -8
- data/src/core/tsi/ssl_types.h +0 -8
- data/src/core/tsi/transport_security.h +1 -9
- data/src/core/tsi/transport_security_adapter.h +0 -8
- data/src/core/tsi/transport_security_grpc.cc +11 -18
- data/src/core/tsi/transport_security_grpc.h +9 -21
- data/src/core/tsi/transport_security_interface.h +0 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -30
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -48
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_connection_spec.rb +2 -1
- data/src/ruby/spec/client_auth_spec.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +2 -2
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/interceptor_registry_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_spec.rb +12 -12
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +3 -2
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/src/ruby/spec/server_spec.rb +9 -9
- data/src/ruby/spec/support/helpers.rb +35 -1
- metadata +68 -66
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +0 -26
- data/include/grpc/support/histogram.h +0 -64
- data/src/core/lib/support/histogram.cc +0 -227
@@ -21,17 +21,9 @@
|
|
21
21
|
|
22
22
|
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
|
23
23
|
|
24
|
-
#ifdef __cplusplus
|
25
|
-
extern "C" {
|
26
|
-
#endif
|
27
|
-
|
28
24
|
/** Returns a load balancing factory for the glb policy, which tries to connect
|
29
25
|
* to a load balancing server to decide the next successfully connected
|
30
26
|
* subchannel to pick. */
|
31
27
|
grpc_lb_policy_factory* grpc_glb_lb_factory_create();
|
32
28
|
|
33
|
-
#ifdef __cplusplus
|
34
|
-
}
|
35
|
-
#endif
|
36
|
-
|
37
29
|
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_H */
|
@@ -23,10 +23,6 @@
|
|
23
23
|
#include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
|
24
24
|
#include "src/core/lib/slice/slice_hash_table.h"
|
25
25
|
|
26
|
-
#ifdef __cplusplus
|
27
|
-
extern "C" {
|
28
|
-
#endif
|
29
|
-
|
30
26
|
/** Create the channel used for communicating with an LB service.
|
31
27
|
* Note that an LB *service* may be comprised of several LB *servers*.
|
32
28
|
*
|
@@ -35,18 +31,14 @@ extern "C" {
|
|
35
31
|
* \a client_channel_factory will be used for the creation of the LB channel,
|
36
32
|
* alongside the channel args passed in \a args. */
|
37
33
|
grpc_channel* grpc_lb_policy_grpclb_create_lb_channel(
|
38
|
-
|
34
|
+
const char* lb_service_target_addresses,
|
39
35
|
grpc_client_channel_factory* client_channel_factory,
|
40
36
|
grpc_channel_args* args);
|
41
37
|
|
42
38
|
grpc_channel_args* grpc_lb_policy_grpclb_build_lb_channel_args(
|
43
|
-
|
39
|
+
grpc_slice_hash_table* targets_info,
|
44
40
|
grpc_fake_resolver_response_generator* response_generator,
|
45
41
|
const grpc_channel_args* args);
|
46
42
|
|
47
|
-
#ifdef __cplusplus
|
48
|
-
}
|
49
|
-
#endif
|
50
|
-
|
51
43
|
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_CHANNEL_H \
|
52
44
|
*/
|
@@ -22,14 +22,14 @@
|
|
22
22
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
23
23
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h"
|
24
24
|
#include "src/core/lib/channel/channel_args.h"
|
25
|
+
#include "src/core/lib/gpr/string.h"
|
25
26
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
26
27
|
#include "src/core/lib/security/credentials/credentials.h"
|
27
28
|
#include "src/core/lib/security/transport/lb_targets_info.h"
|
28
29
|
#include "src/core/lib/slice/slice_internal.h"
|
29
|
-
#include "src/core/lib/support/string.h"
|
30
30
|
|
31
31
|
grpc_channel* grpc_lb_policy_grpclb_create_lb_channel(
|
32
|
-
|
32
|
+
const char* lb_service_target_addresses,
|
33
33
|
grpc_client_channel_factory* client_channel_factory,
|
34
34
|
grpc_channel_args* args) {
|
35
35
|
grpc_channel_args* new_args = args;
|
@@ -50,19 +50,19 @@ grpc_channel* grpc_lb_policy_grpclb_create_lb_channel(
|
|
50
50
|
new_args = grpc_channel_args_copy_and_add_and_remove(
|
51
51
|
args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove), args_to_add,
|
52
52
|
GPR_ARRAY_SIZE(args_to_add));
|
53
|
-
grpc_channel_credentials_unref(
|
53
|
+
grpc_channel_credentials_unref(creds_sans_call_creds);
|
54
54
|
}
|
55
55
|
grpc_channel* lb_channel = grpc_client_channel_factory_create_channel(
|
56
|
-
|
56
|
+
client_channel_factory, lb_service_target_addresses,
|
57
57
|
GRPC_CLIENT_CHANNEL_TYPE_LOAD_BALANCING, new_args);
|
58
58
|
if (channel_credentials != nullptr) {
|
59
|
-
grpc_channel_args_destroy(
|
59
|
+
grpc_channel_args_destroy(new_args);
|
60
60
|
}
|
61
61
|
return lb_channel;
|
62
62
|
}
|
63
63
|
|
64
64
|
grpc_channel_args* grpc_lb_policy_grpclb_build_lb_channel_args(
|
65
|
-
|
65
|
+
grpc_slice_hash_table* targets_info,
|
66
66
|
grpc_fake_resolver_response_generator* response_generator,
|
67
67
|
const grpc_channel_args* args) {
|
68
68
|
const grpc_arg to_add[] = {
|
@@ -23,10 +23,6 @@
|
|
23
23
|
|
24
24
|
#include <grpc/impl/codegen/grpc_types.h>
|
25
25
|
|
26
|
-
#ifdef __cplusplus
|
27
|
-
extern "C" {
|
28
|
-
#endif
|
29
|
-
|
30
26
|
typedef struct grpc_grpclb_client_stats grpc_grpclb_client_stats;
|
31
27
|
|
32
28
|
typedef struct {
|
@@ -65,9 +61,5 @@ void grpc_grpclb_client_stats_get_locked(
|
|
65
61
|
void grpc_grpclb_dropped_call_counts_destroy(
|
66
62
|
grpc_grpclb_dropped_call_counts* drop_entries);
|
67
63
|
|
68
|
-
#ifdef __cplusplus
|
69
|
-
}
|
70
|
-
#endif
|
71
|
-
|
72
64
|
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_CLIENT_STATS_H \
|
73
65
|
*/
|
@@ -215,9 +215,6 @@ grpc_grpclb_serverlist* grpc_grpclb_response_parse_serverlist(
|
|
215
215
|
return nullptr;
|
216
216
|
}
|
217
217
|
}
|
218
|
-
if (res.server_list.has_expiration_interval) {
|
219
|
-
sl->expiration_interval = res.server_list.expiration_interval;
|
220
|
-
}
|
221
218
|
return sl;
|
222
219
|
}
|
223
220
|
|
@@ -237,8 +234,6 @@ grpc_grpclb_serverlist* grpc_grpclb_serverlist_copy(
|
|
237
234
|
grpc_grpclb_serverlist* copy =
|
238
235
|
(grpc_grpclb_serverlist*)gpr_zalloc(sizeof(grpc_grpclb_serverlist));
|
239
236
|
copy->num_servers = sl->num_servers;
|
240
|
-
memcpy(©->expiration_interval, &sl->expiration_interval,
|
241
|
-
sizeof(grpc_grpclb_duration));
|
242
237
|
copy->servers = (grpc_grpclb_server**)gpr_malloc(sizeof(grpc_grpclb_server*) *
|
243
238
|
sl->num_servers);
|
244
239
|
for (size_t i = 0; i < sl->num_servers; i++) {
|
@@ -257,10 +252,6 @@ bool grpc_grpclb_serverlist_equals(const grpc_grpclb_serverlist* lhs,
|
|
257
252
|
if (lhs->num_servers != rhs->num_servers) {
|
258
253
|
return false;
|
259
254
|
}
|
260
|
-
if (grpc_grpclb_duration_compare(&lhs->expiration_interval,
|
261
|
-
&rhs->expiration_interval) != 0) {
|
262
|
-
return false;
|
263
|
-
}
|
264
255
|
for (size_t i = 0; i < lhs->num_servers; i++) {
|
265
256
|
if (!grpc_grpclb_server_equals(lhs->servers[i], rhs->servers[i])) {
|
266
257
|
return false;
|
@@ -25,10 +25,6 @@
|
|
25
25
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h"
|
26
26
|
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
|
27
27
|
|
28
|
-
#ifdef __cplusplus
|
29
|
-
extern "C" {
|
30
|
-
#endif
|
31
|
-
|
32
28
|
#define GRPC_GRPCLB_SERVICE_NAME_MAX_LENGTH 128
|
33
29
|
|
34
30
|
typedef grpc_lb_v1_Server_ip_address_t grpc_grpclb_ip_address;
|
@@ -39,7 +35,6 @@ typedef grpc_lb_v1_Duration grpc_grpclb_duration;
|
|
39
35
|
typedef struct {
|
40
36
|
grpc_grpclb_server** servers;
|
41
37
|
size_t num_servers;
|
42
|
-
grpc_grpclb_duration expiration_interval;
|
43
38
|
} grpc_grpclb_serverlist;
|
44
39
|
|
45
40
|
/** Create a request for a gRPC LB service under \a lb_service_name */
|
@@ -87,9 +82,5 @@ grpc_millis grpc_grpclb_duration_to_millis(grpc_grpclb_duration* duration_pb);
|
|
87
82
|
void grpc_grpclb_initial_response_destroy(
|
88
83
|
grpc_grpclb_initial_response* response);
|
89
84
|
|
90
|
-
#ifdef __cplusplus
|
91
|
-
}
|
92
|
-
#endif
|
93
|
-
|
94
85
|
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_LOAD_BALANCER_API_H \
|
95
86
|
*/
|
data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c
CHANGED
@@ -61,9 +61,8 @@ const pb_field_t grpc_lb_v1_InitialLoadBalanceResponse_fields[3] = {
|
|
61
61
|
PB_LAST_FIELD
|
62
62
|
};
|
63
63
|
|
64
|
-
const pb_field_t grpc_lb_v1_ServerList_fields[
|
64
|
+
const pb_field_t grpc_lb_v1_ServerList_fields[2] = {
|
65
65
|
PB_FIELD( 1, MESSAGE , REPEATED, CALLBACK, FIRST, grpc_lb_v1_ServerList, servers, servers, &grpc_lb_v1_Server_fields),
|
66
|
-
PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v1_ServerList, expiration_interval, servers, &grpc_lb_v1_Duration_fields),
|
67
66
|
PB_LAST_FIELD
|
68
67
|
};
|
69
68
|
|
@@ -85,7 +84,7 @@ const pb_field_t grpc_lb_v1_Server_fields[5] = {
|
|
85
84
|
* numbers or field sizes that are larger than what can fit in 8 or 16 bit
|
86
85
|
* field descriptors.
|
87
86
|
*/
|
88
|
-
PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceRequest, client_stats) < 65536 && pb_membersize(grpc_lb_v1_ClientStats, timestamp) < 65536 && pb_membersize(grpc_lb_v1_ClientStats, calls_finished_with_drop) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, initial_response) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, server_list) < 65536 && pb_membersize(grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval) < 65536 && pb_membersize(grpc_lb_v1_ServerList, servers) < 65536
|
87
|
+
PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceRequest, client_stats) < 65536 && pb_membersize(grpc_lb_v1_ClientStats, timestamp) < 65536 && pb_membersize(grpc_lb_v1_ClientStats, calls_finished_with_drop) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, initial_response) < 65536 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, server_list) < 65536 && pb_membersize(grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval) < 65536 && pb_membersize(grpc_lb_v1_ServerList, servers) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_grpc_lb_v1_Duration_grpc_lb_v1_Timestamp_grpc_lb_v1_LoadBalanceRequest_grpc_lb_v1_InitialLoadBalanceRequest_grpc_lb_v1_ClientStatsPerToken_grpc_lb_v1_ClientStats_grpc_lb_v1_LoadBalanceResponse_grpc_lb_v1_InitialLoadBalanceResponse_grpc_lb_v1_ServerList_grpc_lb_v1_Server)
|
89
88
|
#endif
|
90
89
|
|
91
90
|
#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
|
@@ -96,7 +95,7 @@ PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request)
|
|
96
95
|
* numbers or field sizes that are larger than what can fit in the default
|
97
96
|
* 8 bit descriptors.
|
98
97
|
*/
|
99
|
-
PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceRequest, client_stats) < 256 && pb_membersize(grpc_lb_v1_ClientStats, timestamp) < 256 && pb_membersize(grpc_lb_v1_ClientStats, calls_finished_with_drop) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, initial_response) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, server_list) < 256 && pb_membersize(grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval) < 256 && pb_membersize(grpc_lb_v1_ServerList, servers) < 256
|
98
|
+
PB_STATIC_ASSERT((pb_membersize(grpc_lb_v1_LoadBalanceRequest, initial_request) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceRequest, client_stats) < 256 && pb_membersize(grpc_lb_v1_ClientStats, timestamp) < 256 && pb_membersize(grpc_lb_v1_ClientStats, calls_finished_with_drop) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, initial_response) < 256 && pb_membersize(grpc_lb_v1_LoadBalanceResponse, server_list) < 256 && pb_membersize(grpc_lb_v1_InitialLoadBalanceResponse, client_stats_report_interval) < 256 && pb_membersize(grpc_lb_v1_ServerList, servers) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_grpc_lb_v1_Duration_grpc_lb_v1_Timestamp_grpc_lb_v1_LoadBalanceRequest_grpc_lb_v1_InitialLoadBalanceRequest_grpc_lb_v1_ClientStatsPerToken_grpc_lb_v1_ClientStats_grpc_lb_v1_LoadBalanceResponse_grpc_lb_v1_InitialLoadBalanceResponse_grpc_lb_v1_ServerList_grpc_lb_v1_Server)
|
100
99
|
#endif
|
101
100
|
|
102
101
|
|
data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h
CHANGED
@@ -14,6 +14,11 @@ extern "C" {
|
|
14
14
|
#endif
|
15
15
|
|
16
16
|
/* Struct definitions */
|
17
|
+
typedef struct _grpc_lb_v1_ServerList {
|
18
|
+
pb_callback_t servers;
|
19
|
+
/* @@protoc_insertion_point(struct:grpc_lb_v1_ServerList) */
|
20
|
+
} grpc_lb_v1_ServerList;
|
21
|
+
|
17
22
|
typedef struct _grpc_lb_v1_ClientStatsPerToken {
|
18
23
|
pb_callback_t load_balance_token;
|
19
24
|
bool has_num_calls;
|
@@ -79,13 +84,6 @@ typedef struct _grpc_lb_v1_InitialLoadBalanceResponse {
|
|
79
84
|
/* @@protoc_insertion_point(struct:grpc_lb_v1_InitialLoadBalanceResponse) */
|
80
85
|
} grpc_lb_v1_InitialLoadBalanceResponse;
|
81
86
|
|
82
|
-
typedef struct _grpc_lb_v1_ServerList {
|
83
|
-
pb_callback_t servers;
|
84
|
-
bool has_expiration_interval;
|
85
|
-
grpc_lb_v1_Duration expiration_interval;
|
86
|
-
/* @@protoc_insertion_point(struct:grpc_lb_v1_ServerList) */
|
87
|
-
} grpc_lb_v1_ServerList;
|
88
|
-
|
89
87
|
typedef struct _grpc_lb_v1_LoadBalanceRequest {
|
90
88
|
bool has_initial_request;
|
91
89
|
grpc_lb_v1_InitialLoadBalanceRequest initial_request;
|
@@ -113,7 +111,7 @@ typedef struct _grpc_lb_v1_LoadBalanceResponse {
|
|
113
111
|
#define grpc_lb_v1_ClientStats_init_default {false, grpc_lb_v1_Timestamp_init_default, false, 0, false, 0, false, 0, false, 0, {{NULL}, NULL}}
|
114
112
|
#define grpc_lb_v1_LoadBalanceResponse_init_default {false, grpc_lb_v1_InitialLoadBalanceResponse_init_default, false, grpc_lb_v1_ServerList_init_default}
|
115
113
|
#define grpc_lb_v1_InitialLoadBalanceResponse_init_default {false, "", false, grpc_lb_v1_Duration_init_default}
|
116
|
-
#define grpc_lb_v1_ServerList_init_default {{{NULL}, NULL}
|
114
|
+
#define grpc_lb_v1_ServerList_init_default {{{NULL}, NULL}}
|
117
115
|
#define grpc_lb_v1_Server_init_default {false, {0, {0}}, false, 0, false, "", false, 0}
|
118
116
|
#define grpc_lb_v1_Duration_init_zero {false, 0, false, 0}
|
119
117
|
#define grpc_lb_v1_Timestamp_init_zero {false, 0, false, 0}
|
@@ -123,10 +121,11 @@ typedef struct _grpc_lb_v1_LoadBalanceResponse {
|
|
123
121
|
#define grpc_lb_v1_ClientStats_init_zero {false, grpc_lb_v1_Timestamp_init_zero, false, 0, false, 0, false, 0, false, 0, {{NULL}, NULL}}
|
124
122
|
#define grpc_lb_v1_LoadBalanceResponse_init_zero {false, grpc_lb_v1_InitialLoadBalanceResponse_init_zero, false, grpc_lb_v1_ServerList_init_zero}
|
125
123
|
#define grpc_lb_v1_InitialLoadBalanceResponse_init_zero {false, "", false, grpc_lb_v1_Duration_init_zero}
|
126
|
-
#define grpc_lb_v1_ServerList_init_zero {{{NULL}, NULL}
|
124
|
+
#define grpc_lb_v1_ServerList_init_zero {{{NULL}, NULL}}
|
127
125
|
#define grpc_lb_v1_Server_init_zero {false, {0, {0}}, false, 0, false, "", false, 0}
|
128
126
|
|
129
127
|
/* Field tags (for use in manual encoding/decoding) */
|
128
|
+
#define grpc_lb_v1_ServerList_servers_tag 1
|
130
129
|
#define grpc_lb_v1_ClientStatsPerToken_load_balance_token_tag 1
|
131
130
|
#define grpc_lb_v1_ClientStatsPerToken_num_calls_tag 2
|
132
131
|
#define grpc_lb_v1_Duration_seconds_tag 1
|
@@ -146,8 +145,6 @@ typedef struct _grpc_lb_v1_LoadBalanceResponse {
|
|
146
145
|
#define grpc_lb_v1_ClientStats_calls_finished_with_drop_tag 8
|
147
146
|
#define grpc_lb_v1_InitialLoadBalanceResponse_load_balancer_delegate_tag 1
|
148
147
|
#define grpc_lb_v1_InitialLoadBalanceResponse_client_stats_report_interval_tag 2
|
149
|
-
#define grpc_lb_v1_ServerList_servers_tag 1
|
150
|
-
#define grpc_lb_v1_ServerList_expiration_interval_tag 3
|
151
148
|
#define grpc_lb_v1_LoadBalanceRequest_initial_request_tag 1
|
152
149
|
#define grpc_lb_v1_LoadBalanceRequest_client_stats_tag 2
|
153
150
|
#define grpc_lb_v1_LoadBalanceResponse_initial_response_tag 1
|
@@ -162,7 +159,7 @@ extern const pb_field_t grpc_lb_v1_ClientStatsPerToken_fields[3];
|
|
162
159
|
extern const pb_field_t grpc_lb_v1_ClientStats_fields[7];
|
163
160
|
extern const pb_field_t grpc_lb_v1_LoadBalanceResponse_fields[3];
|
164
161
|
extern const pb_field_t grpc_lb_v1_InitialLoadBalanceResponse_fields[3];
|
165
|
-
extern const pb_field_t grpc_lb_v1_ServerList_fields[
|
162
|
+
extern const pb_field_t grpc_lb_v1_ServerList_fields[2];
|
166
163
|
extern const pb_field_t grpc_lb_v1_Server_fields[5];
|
167
164
|
|
168
165
|
/* Maximum encoded size of messages (where known) */
|
@@ -31,13 +31,6 @@
|
|
31
31
|
|
32
32
|
grpc_core::TraceFlag grpc_lb_pick_first_trace(false, "pick_first");
|
33
33
|
|
34
|
-
typedef struct pending_pick {
|
35
|
-
struct pending_pick* next;
|
36
|
-
uint32_t initial_metadata_flags;
|
37
|
-
grpc_connected_subchannel** target;
|
38
|
-
grpc_closure* on_complete;
|
39
|
-
} pending_pick;
|
40
|
-
|
41
34
|
typedef struct {
|
42
35
|
/** base policy: must be first */
|
43
36
|
grpc_lb_policy base;
|
@@ -52,17 +45,17 @@ typedef struct {
|
|
52
45
|
/** are we shut down? */
|
53
46
|
bool shutdown;
|
54
47
|
/** list of picks that are waiting on connectivity */
|
55
|
-
|
48
|
+
grpc_lb_policy_pick_state* pending_picks;
|
56
49
|
/** our connectivity state tracker */
|
57
50
|
grpc_connectivity_state_tracker state_tracker;
|
58
51
|
} pick_first_lb_policy;
|
59
52
|
|
60
|
-
static void pf_destroy(
|
53
|
+
static void pf_destroy(grpc_lb_policy* pol) {
|
61
54
|
pick_first_lb_policy* p = (pick_first_lb_policy*)pol;
|
62
55
|
GPR_ASSERT(p->subchannel_list == nullptr);
|
63
56
|
GPR_ASSERT(p->latest_pending_subchannel_list == nullptr);
|
64
57
|
GPR_ASSERT(p->pending_picks == nullptr);
|
65
|
-
grpc_connectivity_state_destroy(
|
58
|
+
grpc_connectivity_state_destroy(&p->state_tracker);
|
66
59
|
gpr_free(p);
|
67
60
|
grpc_subchannel_index_unref();
|
68
61
|
if (grpc_lb_pick_first_trace.enabled()) {
|
@@ -70,54 +63,58 @@ static void pf_destroy(grpc_exec_ctx* exec_ctx, grpc_lb_policy* pol) {
|
|
70
63
|
}
|
71
64
|
}
|
72
65
|
|
73
|
-
static void
|
74
|
-
|
66
|
+
static void pf_shutdown_locked(grpc_lb_policy* pol,
|
67
|
+
grpc_lb_policy* new_policy) {
|
68
|
+
pick_first_lb_policy* p = (pick_first_lb_policy*)pol;
|
69
|
+
grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel shutdown");
|
75
70
|
if (grpc_lb_pick_first_trace.enabled()) {
|
76
71
|
gpr_log(GPR_DEBUG, "Pick First %p Shutting down", p);
|
77
72
|
}
|
78
73
|
p->shutdown = true;
|
79
|
-
|
80
|
-
while ((
|
81
|
-
p->pending_picks =
|
82
|
-
|
83
|
-
|
84
|
-
|
74
|
+
grpc_lb_policy_pick_state* pick;
|
75
|
+
while ((pick = p->pending_picks) != nullptr) {
|
76
|
+
p->pending_picks = pick->next;
|
77
|
+
if (new_policy != nullptr) {
|
78
|
+
// Hand off to new LB policy.
|
79
|
+
if (grpc_lb_policy_pick_locked(new_policy, pick)) {
|
80
|
+
// Synchronous return, schedule closure.
|
81
|
+
GRPC_CLOSURE_SCHED(pick->on_complete, GRPC_ERROR_NONE);
|
82
|
+
}
|
83
|
+
} else {
|
84
|
+
pick->connected_subchannel.reset();
|
85
|
+
GRPC_CLOSURE_SCHED(pick->on_complete, GRPC_ERROR_REF(error));
|
86
|
+
}
|
85
87
|
}
|
86
|
-
grpc_connectivity_state_set(
|
87
|
-
|
88
|
-
"shutdown");
|
88
|
+
grpc_connectivity_state_set(&p->state_tracker, GRPC_CHANNEL_SHUTDOWN,
|
89
|
+
GRPC_ERROR_REF(error), "shutdown");
|
89
90
|
if (p->subchannel_list != nullptr) {
|
90
|
-
grpc_lb_subchannel_list_shutdown_and_unref(
|
91
|
+
grpc_lb_subchannel_list_shutdown_and_unref(p->subchannel_list,
|
91
92
|
"pf_shutdown");
|
92
93
|
p->subchannel_list = nullptr;
|
93
94
|
}
|
94
95
|
if (p->latest_pending_subchannel_list != nullptr) {
|
95
96
|
grpc_lb_subchannel_list_shutdown_and_unref(
|
96
|
-
|
97
|
+
p->latest_pending_subchannel_list, "pf_shutdown");
|
97
98
|
p->latest_pending_subchannel_list = nullptr;
|
98
99
|
}
|
100
|
+
grpc_lb_policy_try_reresolve(&p->base, &grpc_lb_pick_first_trace,
|
101
|
+
GRPC_ERROR_CANCELLED);
|
99
102
|
GRPC_ERROR_UNREF(error);
|
100
103
|
}
|
101
104
|
|
102
|
-
static void
|
103
|
-
|
104
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel shutdown"));
|
105
|
-
}
|
106
|
-
|
107
|
-
static void pf_cancel_pick_locked(grpc_exec_ctx* exec_ctx, grpc_lb_policy* pol,
|
108
|
-
grpc_connected_subchannel** target,
|
105
|
+
static void pf_cancel_pick_locked(grpc_lb_policy* pol,
|
106
|
+
grpc_lb_policy_pick_state* pick,
|
109
107
|
grpc_error* error) {
|
110
108
|
pick_first_lb_policy* p = (pick_first_lb_policy*)pol;
|
111
|
-
|
109
|
+
grpc_lb_policy_pick_state* pp = p->pending_picks;
|
112
110
|
p->pending_picks = nullptr;
|
113
111
|
while (pp != nullptr) {
|
114
|
-
|
115
|
-
if (pp
|
116
|
-
|
117
|
-
GRPC_CLOSURE_SCHED(
|
112
|
+
grpc_lb_policy_pick_state* next = pp->next;
|
113
|
+
if (pp == pick) {
|
114
|
+
pick->connected_subchannel.reset();
|
115
|
+
GRPC_CLOSURE_SCHED(pick->on_complete,
|
118
116
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
119
117
|
"Pick Cancelled", &error, 1));
|
120
|
-
gpr_free(pp);
|
121
118
|
} else {
|
122
119
|
pp->next = p->pending_picks;
|
123
120
|
p->pending_picks = pp;
|
@@ -127,117 +124,110 @@ static void pf_cancel_pick_locked(grpc_exec_ctx* exec_ctx, grpc_lb_policy* pol,
|
|
127
124
|
GRPC_ERROR_UNREF(error);
|
128
125
|
}
|
129
126
|
|
130
|
-
static void pf_cancel_picks_locked(
|
127
|
+
static void pf_cancel_picks_locked(grpc_lb_policy* pol,
|
131
128
|
uint32_t initial_metadata_flags_mask,
|
132
129
|
uint32_t initial_metadata_flags_eq,
|
133
130
|
grpc_error* error) {
|
134
131
|
pick_first_lb_policy* p = (pick_first_lb_policy*)pol;
|
135
|
-
|
132
|
+
grpc_lb_policy_pick_state* pick = p->pending_picks;
|
136
133
|
p->pending_picks = nullptr;
|
137
|
-
while (
|
138
|
-
|
139
|
-
if ((
|
134
|
+
while (pick != nullptr) {
|
135
|
+
grpc_lb_policy_pick_state* next = pick->next;
|
136
|
+
if ((pick->initial_metadata_flags & initial_metadata_flags_mask) ==
|
140
137
|
initial_metadata_flags_eq) {
|
141
|
-
GRPC_CLOSURE_SCHED(
|
138
|
+
GRPC_CLOSURE_SCHED(pick->on_complete,
|
142
139
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
143
140
|
"Pick Cancelled", &error, 1));
|
144
|
-
gpr_free(pp);
|
145
141
|
} else {
|
146
|
-
|
147
|
-
p->pending_picks =
|
142
|
+
pick->next = p->pending_picks;
|
143
|
+
p->pending_picks = pick;
|
148
144
|
}
|
149
|
-
|
145
|
+
pick = next;
|
150
146
|
}
|
151
147
|
GRPC_ERROR_UNREF(error);
|
152
148
|
}
|
153
149
|
|
154
|
-
static void start_picking_locked(
|
155
|
-
pick_first_lb_policy* p) {
|
150
|
+
static void start_picking_locked(pick_first_lb_policy* p) {
|
156
151
|
p->started_picking = true;
|
157
152
|
if (p->subchannel_list != nullptr &&
|
158
153
|
p->subchannel_list->num_subchannels > 0) {
|
159
154
|
p->subchannel_list->checking_subchannel = 0;
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
155
|
+
for (size_t i = 0; i < p->subchannel_list->num_subchannels; ++i) {
|
156
|
+
if (p->subchannel_list->subchannels[i].subchannel != nullptr) {
|
157
|
+
grpc_lb_subchannel_list_ref_for_connectivity_watch(
|
158
|
+
p->subchannel_list, "connectivity_watch+start_picking");
|
159
|
+
grpc_lb_subchannel_data_start_connectivity_watch(
|
160
|
+
&p->subchannel_list->subchannels[i]);
|
161
|
+
break;
|
162
|
+
}
|
163
|
+
}
|
164
164
|
}
|
165
165
|
}
|
166
166
|
|
167
|
-
static void pf_exit_idle_locked(
|
167
|
+
static void pf_exit_idle_locked(grpc_lb_policy* pol) {
|
168
168
|
pick_first_lb_policy* p = (pick_first_lb_policy*)pol;
|
169
169
|
if (!p->started_picking) {
|
170
|
-
start_picking_locked(
|
170
|
+
start_picking_locked(p);
|
171
171
|
}
|
172
172
|
}
|
173
173
|
|
174
|
-
static int pf_pick_locked(
|
175
|
-
|
176
|
-
grpc_connected_subchannel** target,
|
177
|
-
grpc_call_context_element* context, void** user_data,
|
178
|
-
grpc_closure* on_complete) {
|
174
|
+
static int pf_pick_locked(grpc_lb_policy* pol,
|
175
|
+
grpc_lb_policy_pick_state* pick) {
|
179
176
|
pick_first_lb_policy* p = (pick_first_lb_policy*)pol;
|
180
177
|
// If we have a selected subchannel already, return synchronously.
|
181
178
|
if (p->selected != nullptr) {
|
182
|
-
|
183
|
-
"picked");
|
179
|
+
pick->connected_subchannel = p->selected->connected_subchannel;
|
184
180
|
return 1;
|
185
181
|
}
|
186
182
|
// No subchannel selected yet, so handle asynchronously.
|
187
183
|
if (!p->started_picking) {
|
188
|
-
start_picking_locked(
|
184
|
+
start_picking_locked(p);
|
189
185
|
}
|
190
|
-
|
191
|
-
|
192
|
-
pp->target = target;
|
193
|
-
pp->initial_metadata_flags = pick_args->initial_metadata_flags;
|
194
|
-
pp->on_complete = on_complete;
|
195
|
-
p->pending_picks = pp;
|
186
|
+
pick->next = p->pending_picks;
|
187
|
+
p->pending_picks = pick;
|
196
188
|
return 0;
|
197
189
|
}
|
198
190
|
|
199
|
-
static void destroy_unselected_subchannels_locked(
|
200
|
-
pick_first_lb_policy* p) {
|
191
|
+
static void destroy_unselected_subchannels_locked(pick_first_lb_policy* p) {
|
201
192
|
for (size_t i = 0; i < p->subchannel_list->num_subchannels; ++i) {
|
202
193
|
grpc_lb_subchannel_data* sd = &p->subchannel_list->subchannels[i];
|
203
194
|
if (p->selected != sd) {
|
204
|
-
grpc_lb_subchannel_data_unref_subchannel(
|
195
|
+
grpc_lb_subchannel_data_unref_subchannel(sd,
|
205
196
|
"selected_different_subchannel");
|
206
197
|
}
|
207
198
|
}
|
208
199
|
}
|
209
200
|
|
210
201
|
static grpc_connectivity_state pf_check_connectivity_locked(
|
211
|
-
|
202
|
+
grpc_lb_policy* pol, grpc_error** error) {
|
212
203
|
pick_first_lb_policy* p = (pick_first_lb_policy*)pol;
|
213
204
|
return grpc_connectivity_state_get(&p->state_tracker, error);
|
214
205
|
}
|
215
206
|
|
216
|
-
static void pf_notify_on_state_change_locked(
|
217
|
-
grpc_lb_policy* pol,
|
207
|
+
static void pf_notify_on_state_change_locked(grpc_lb_policy* pol,
|
218
208
|
grpc_connectivity_state* current,
|
219
209
|
grpc_closure* notify) {
|
220
210
|
pick_first_lb_policy* p = (pick_first_lb_policy*)pol;
|
221
|
-
grpc_connectivity_state_notify_on_state_change(
|
222
|
-
|
211
|
+
grpc_connectivity_state_notify_on_state_change(&p->state_tracker, current,
|
212
|
+
notify);
|
223
213
|
}
|
224
214
|
|
225
|
-
static void pf_ping_one_locked(
|
226
|
-
grpc_closure*
|
215
|
+
static void pf_ping_one_locked(grpc_lb_policy* pol, grpc_closure* on_initiate,
|
216
|
+
grpc_closure* on_ack) {
|
227
217
|
pick_first_lb_policy* p = (pick_first_lb_policy*)pol;
|
228
218
|
if (p->selected) {
|
229
|
-
|
230
|
-
closure);
|
219
|
+
p->selected->connected_subchannel->Ping(on_initiate, on_ack);
|
231
220
|
} else {
|
232
|
-
GRPC_CLOSURE_SCHED(
|
221
|
+
GRPC_CLOSURE_SCHED(on_initiate,
|
222
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Not connected"));
|
223
|
+
GRPC_CLOSURE_SCHED(on_ack,
|
233
224
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Not connected"));
|
234
225
|
}
|
235
226
|
}
|
236
227
|
|
237
|
-
static void pf_connectivity_changed_locked(
|
238
|
-
grpc_error* error);
|
228
|
+
static void pf_connectivity_changed_locked(void* arg, grpc_error* error);
|
239
229
|
|
240
|
-
static void pf_update_locked(
|
230
|
+
static void pf_update_locked(grpc_lb_policy* policy,
|
241
231
|
const grpc_lb_policy_args* args) {
|
242
232
|
pick_first_lb_policy* p = (pick_first_lb_policy*)policy;
|
243
233
|
const grpc_arg* arg =
|
@@ -246,7 +236,7 @@ static void pf_update_locked(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
|
|
246
236
|
if (p->subchannel_list == nullptr) {
|
247
237
|
// If we don't have a current subchannel list, go into TRANSIENT FAILURE.
|
248
238
|
grpc_connectivity_state_set(
|
249
|
-
|
239
|
+
&p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
|
250
240
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing update in args"),
|
251
241
|
"pf_update_missing");
|
252
242
|
} else {
|
@@ -265,17 +255,17 @@ static void pf_update_locked(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
|
|
265
255
|
(void*)p, (unsigned long)addresses->num_addresses);
|
266
256
|
}
|
267
257
|
grpc_lb_subchannel_list* subchannel_list = grpc_lb_subchannel_list_create(
|
268
|
-
|
258
|
+
&p->base, &grpc_lb_pick_first_trace, addresses, args,
|
269
259
|
pf_connectivity_changed_locked);
|
270
260
|
if (subchannel_list->num_subchannels == 0) {
|
271
261
|
// Empty update or no valid subchannels. Unsubscribe from all current
|
272
262
|
// subchannels and put the channel in TRANSIENT_FAILURE.
|
273
263
|
grpc_connectivity_state_set(
|
274
|
-
|
264
|
+
&p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
|
275
265
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty update"),
|
276
266
|
"pf_update_empty");
|
277
267
|
if (p->subchannel_list != nullptr) {
|
278
|
-
grpc_lb_subchannel_list_shutdown_and_unref(
|
268
|
+
grpc_lb_subchannel_list_shutdown_and_unref(p->subchannel_list,
|
279
269
|
"sl_shutdown_empty_update");
|
280
270
|
}
|
281
271
|
p->subchannel_list = subchannel_list; // Empty list.
|
@@ -286,7 +276,7 @@ static void pf_update_locked(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
|
|
286
276
|
// We don't yet have a selected subchannel, so replace the current
|
287
277
|
// subchannel list immediately.
|
288
278
|
if (p->subchannel_list != nullptr) {
|
289
|
-
grpc_lb_subchannel_list_shutdown_and_unref(
|
279
|
+
grpc_lb_subchannel_list_shutdown_and_unref(p->subchannel_list,
|
290
280
|
"pf_update_before_selected");
|
291
281
|
}
|
292
282
|
p->subchannel_list = subchannel_list;
|
@@ -305,25 +295,24 @@ static void pf_update_locked(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
|
|
305
295
|
subchannel_list->num_subchannels);
|
306
296
|
}
|
307
297
|
if (p->selected->connected_subchannel != nullptr) {
|
308
|
-
sd->connected_subchannel =
|
309
|
-
p->selected->connected_subchannel, "pf_update_includes_selected");
|
298
|
+
sd->connected_subchannel = p->selected->connected_subchannel;
|
310
299
|
}
|
311
300
|
p->selected = sd;
|
312
301
|
if (p->subchannel_list != nullptr) {
|
313
302
|
grpc_lb_subchannel_list_shutdown_and_unref(
|
314
|
-
|
303
|
+
p->subchannel_list, "pf_update_includes_selected");
|
315
304
|
}
|
316
305
|
p->subchannel_list = subchannel_list;
|
317
|
-
destroy_unselected_subchannels_locked(
|
306
|
+
destroy_unselected_subchannels_locked(p);
|
318
307
|
grpc_lb_subchannel_list_ref_for_connectivity_watch(
|
319
308
|
subchannel_list, "connectivity_watch+replace_selected");
|
320
|
-
grpc_lb_subchannel_data_start_connectivity_watch(
|
309
|
+
grpc_lb_subchannel_data_start_connectivity_watch(sd);
|
321
310
|
// If there was a previously pending update (which may or may
|
322
311
|
// not have contained the currently selected subchannel), drop
|
323
312
|
// it, so that it doesn't override what we've done here.
|
324
313
|
if (p->latest_pending_subchannel_list != nullptr) {
|
325
314
|
grpc_lb_subchannel_list_shutdown_and_unref(
|
326
|
-
|
315
|
+
p->latest_pending_subchannel_list,
|
327
316
|
"pf_update_includes_selected+outdated");
|
328
317
|
p->latest_pending_subchannel_list = nullptr;
|
329
318
|
}
|
@@ -343,8 +332,7 @@ static void pf_update_locked(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
|
|
343
332
|
(void*)subchannel_list);
|
344
333
|
}
|
345
334
|
grpc_lb_subchannel_list_shutdown_and_unref(
|
346
|
-
|
347
|
-
"sl_outdated_dont_smash");
|
335
|
+
p->latest_pending_subchannel_list, "sl_outdated_dont_smash");
|
348
336
|
}
|
349
337
|
p->latest_pending_subchannel_list = subchannel_list;
|
350
338
|
}
|
@@ -354,12 +342,11 @@ static void pf_update_locked(grpc_exec_ctx* exec_ctx, grpc_lb_policy* policy,
|
|
354
342
|
grpc_lb_subchannel_list_ref_for_connectivity_watch(
|
355
343
|
subchannel_list, "connectivity_watch+update");
|
356
344
|
grpc_lb_subchannel_data_start_connectivity_watch(
|
357
|
-
|
345
|
+
&subchannel_list->subchannels[0]);
|
358
346
|
}
|
359
347
|
}
|
360
348
|
|
361
|
-
static void pf_connectivity_changed_locked(
|
362
|
-
grpc_error* error) {
|
349
|
+
static void pf_connectivity_changed_locked(void* arg, grpc_error* error) {
|
363
350
|
grpc_lb_subchannel_data* sd = (grpc_lb_subchannel_data*)arg;
|
364
351
|
pick_first_lb_policy* p = (pick_first_lb_policy*)sd->subchannel_list->policy;
|
365
352
|
if (grpc_lb_pick_first_trace.enabled()) {
|
@@ -377,18 +364,18 @@ static void pf_connectivity_changed_locked(grpc_exec_ctx* exec_ctx, void* arg,
|
|
377
364
|
}
|
378
365
|
// If the policy is shutting down, unref and return.
|
379
366
|
if (p->shutdown) {
|
380
|
-
grpc_lb_subchannel_data_stop_connectivity_watch(
|
381
|
-
grpc_lb_subchannel_data_unref_subchannel(
|
382
|
-
grpc_lb_subchannel_list_unref_for_connectivity_watch(
|
383
|
-
|
367
|
+
grpc_lb_subchannel_data_stop_connectivity_watch(sd);
|
368
|
+
grpc_lb_subchannel_data_unref_subchannel(sd, "pf_shutdown");
|
369
|
+
grpc_lb_subchannel_list_unref_for_connectivity_watch(sd->subchannel_list,
|
370
|
+
"pf_shutdown");
|
384
371
|
return;
|
385
372
|
}
|
386
373
|
// If the subchannel list is shutting down, stop watching.
|
387
374
|
if (sd->subchannel_list->shutting_down || error == GRPC_ERROR_CANCELLED) {
|
388
|
-
grpc_lb_subchannel_data_stop_connectivity_watch(
|
389
|
-
grpc_lb_subchannel_data_unref_subchannel(
|
390
|
-
grpc_lb_subchannel_list_unref_for_connectivity_watch(
|
391
|
-
|
375
|
+
grpc_lb_subchannel_data_stop_connectivity_watch(sd);
|
376
|
+
grpc_lb_subchannel_data_unref_subchannel(sd, "pf_sl_shutdown");
|
377
|
+
grpc_lb_subchannel_list_unref_for_connectivity_watch(sd->subchannel_list,
|
378
|
+
"pf_sl_shutdown");
|
392
379
|
return;
|
393
380
|
}
|
394
381
|
// If we're still here, the notification must be for a subchannel in
|
@@ -404,29 +391,44 @@ static void pf_connectivity_changed_locked(grpc_exec_ctx* exec_ctx, void* arg,
|
|
404
391
|
if (sd->curr_connectivity_state != GRPC_CHANNEL_READY &&
|
405
392
|
p->latest_pending_subchannel_list != nullptr) {
|
406
393
|
p->selected = nullptr;
|
394
|
+
grpc_lb_subchannel_data_stop_connectivity_watch(sd);
|
395
|
+
grpc_lb_subchannel_list_unref_for_connectivity_watch(
|
396
|
+
sd->subchannel_list, "selected_not_ready+switch_to_update");
|
407
397
|
grpc_lb_subchannel_list_shutdown_and_unref(
|
408
|
-
|
398
|
+
p->subchannel_list, "selected_not_ready+switch_to_update");
|
409
399
|
p->subchannel_list = p->latest_pending_subchannel_list;
|
410
400
|
p->latest_pending_subchannel_list = nullptr;
|
411
401
|
grpc_connectivity_state_set(
|
412
|
-
|
402
|
+
&p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
|
413
403
|
GRPC_ERROR_REF(error), "selected_not_ready+switch_to_update");
|
414
404
|
} else {
|
405
|
+
// TODO(juanlishen): we re-resolve when the selected subchannel goes to
|
406
|
+
// TRANSIENT_FAILURE because we used to shut down in this case before
|
407
|
+
// re-resolution is introduced. But we need to investigate whether we
|
408
|
+
// really want to take any action instead of waiting for the selected
|
409
|
+
// subchannel reconnecting.
|
410
|
+
GPR_ASSERT(sd->curr_connectivity_state != GRPC_CHANNEL_SHUTDOWN);
|
415
411
|
if (sd->curr_connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
//
|
424
|
-
|
425
|
-
|
426
|
-
grpc_lb_subchannel_data_stop_connectivity_watch(exec_ctx, sd);
|
412
|
+
// If the selected channel goes bad, request a re-resolution.
|
413
|
+
grpc_connectivity_state_set(&p->state_tracker, GRPC_CHANNEL_IDLE,
|
414
|
+
GRPC_ERROR_NONE,
|
415
|
+
"selected_changed+reresolve");
|
416
|
+
p->started_picking = false;
|
417
|
+
grpc_lb_policy_try_reresolve(&p->base, &grpc_lb_pick_first_trace,
|
418
|
+
GRPC_ERROR_NONE);
|
419
|
+
// in transient failure. Rely on re-resolution to recover.
|
420
|
+
p->selected = nullptr;
|
421
|
+
grpc_lb_subchannel_data_stop_connectivity_watch(sd);
|
427
422
|
grpc_lb_subchannel_list_unref_for_connectivity_watch(
|
428
|
-
|
429
|
-
|
423
|
+
sd->subchannel_list, "pf_selected_shutdown");
|
424
|
+
grpc_lb_subchannel_data_unref_subchannel(
|
425
|
+
sd, "pf_selected_shutdown"); // Unrefs connected subchannel
|
426
|
+
} else {
|
427
|
+
grpc_connectivity_state_set(&p->state_tracker,
|
428
|
+
sd->curr_connectivity_state,
|
429
|
+
GRPC_ERROR_REF(error), "selected_changed");
|
430
|
+
// Renew notification.
|
431
|
+
grpc_lb_subchannel_data_start_connectivity_watch(sd);
|
430
432
|
}
|
431
433
|
}
|
432
434
|
return;
|
@@ -444,47 +446,43 @@ static void pf_connectivity_changed_locked(grpc_exec_ctx* exec_ctx, void* arg,
|
|
444
446
|
case GRPC_CHANNEL_READY: {
|
445
447
|
// Case 2. Promote p->latest_pending_subchannel_list to
|
446
448
|
// p->subchannel_list.
|
449
|
+
sd->connected_subchannel =
|
450
|
+
grpc_subchannel_get_connected_subchannel(sd->subchannel);
|
447
451
|
if (sd->subchannel_list == p->latest_pending_subchannel_list) {
|
448
452
|
GPR_ASSERT(p->subchannel_list != nullptr);
|
449
|
-
grpc_lb_subchannel_list_shutdown_and_unref(
|
453
|
+
grpc_lb_subchannel_list_shutdown_and_unref(p->subchannel_list,
|
450
454
|
"finish_update");
|
451
455
|
p->subchannel_list = p->latest_pending_subchannel_list;
|
452
456
|
p->latest_pending_subchannel_list = nullptr;
|
453
457
|
}
|
454
458
|
// Cases 1 and 2.
|
455
|
-
grpc_connectivity_state_set(
|
456
|
-
|
457
|
-
"connecting_ready");
|
458
|
-
sd->connected_subchannel = GRPC_CONNECTED_SUBCHANNEL_REF(
|
459
|
-
grpc_subchannel_get_connected_subchannel(sd->subchannel),
|
460
|
-
"connected");
|
459
|
+
grpc_connectivity_state_set(&p->state_tracker, GRPC_CHANNEL_READY,
|
460
|
+
GRPC_ERROR_NONE, "connecting_ready");
|
461
461
|
p->selected = sd;
|
462
462
|
if (grpc_lb_pick_first_trace.enabled()) {
|
463
463
|
gpr_log(GPR_INFO, "Pick First %p selected subchannel %p", (void*)p,
|
464
464
|
(void*)sd->subchannel);
|
465
465
|
}
|
466
466
|
// Drop all other subchannels, since we are now connected.
|
467
|
-
destroy_unselected_subchannels_locked(
|
467
|
+
destroy_unselected_subchannels_locked(p);
|
468
468
|
// Update any calls that were waiting for a pick.
|
469
|
-
|
470
|
-
while ((
|
471
|
-
p->pending_picks =
|
472
|
-
|
473
|
-
p->selected->connected_subchannel, "picked");
|
469
|
+
grpc_lb_policy_pick_state* pick;
|
470
|
+
while ((pick = p->pending_picks)) {
|
471
|
+
p->pending_picks = pick->next;
|
472
|
+
pick->connected_subchannel = p->selected->connected_subchannel;
|
474
473
|
if (grpc_lb_pick_first_trace.enabled()) {
|
475
474
|
gpr_log(GPR_INFO,
|
476
475
|
"Servicing pending pick with selected subchannel %p",
|
477
476
|
(void*)p->selected);
|
478
477
|
}
|
479
|
-
GRPC_CLOSURE_SCHED(
|
480
|
-
gpr_free(pp);
|
478
|
+
GRPC_CLOSURE_SCHED(pick->on_complete, GRPC_ERROR_NONE);
|
481
479
|
}
|
482
480
|
// Renew notification.
|
483
|
-
grpc_lb_subchannel_data_start_connectivity_watch(
|
481
|
+
grpc_lb_subchannel_data_start_connectivity_watch(sd);
|
484
482
|
break;
|
485
483
|
}
|
486
484
|
case GRPC_CHANNEL_TRANSIENT_FAILURE: {
|
487
|
-
grpc_lb_subchannel_data_stop_connectivity_watch(
|
485
|
+
grpc_lb_subchannel_data_stop_connectivity_watch(sd);
|
488
486
|
do {
|
489
487
|
sd->subchannel_list->checking_subchannel =
|
490
488
|
(sd->subchannel_list->checking_subchannel + 1) %
|
@@ -497,58 +495,38 @@ static void pf_connectivity_changed_locked(grpc_exec_ctx* exec_ctx, void* arg,
|
|
497
495
|
if (sd->subchannel_list->checking_subchannel == 0 &&
|
498
496
|
sd->subchannel_list == p->subchannel_list) {
|
499
497
|
grpc_connectivity_state_set(
|
500
|
-
|
498
|
+
&p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
|
501
499
|
GRPC_ERROR_REF(error), "connecting_transient_failure");
|
502
500
|
}
|
503
501
|
// Reuses the connectivity refs from the previous watch.
|
504
|
-
grpc_lb_subchannel_data_start_connectivity_watch(
|
502
|
+
grpc_lb_subchannel_data_start_connectivity_watch(sd);
|
505
503
|
break;
|
506
504
|
}
|
507
505
|
case GRPC_CHANNEL_CONNECTING:
|
508
506
|
case GRPC_CHANNEL_IDLE: {
|
509
507
|
// Only update connectivity state in case 1.
|
510
508
|
if (sd->subchannel_list == p->subchannel_list) {
|
511
|
-
grpc_connectivity_state_set(
|
512
|
-
|
513
|
-
|
509
|
+
grpc_connectivity_state_set(&p->state_tracker, GRPC_CHANNEL_CONNECTING,
|
510
|
+
GRPC_ERROR_REF(error),
|
511
|
+
"connecting_changed");
|
514
512
|
}
|
515
513
|
// Renew notification.
|
516
|
-
grpc_lb_subchannel_data_start_connectivity_watch(
|
517
|
-
break;
|
518
|
-
}
|
519
|
-
case GRPC_CHANNEL_SHUTDOWN: {
|
520
|
-
grpc_lb_subchannel_data_stop_connectivity_watch(exec_ctx, sd);
|
521
|
-
grpc_lb_subchannel_data_unref_subchannel(exec_ctx, sd,
|
522
|
-
"pf_candidate_shutdown");
|
523
|
-
// Advance to next subchannel and check its state.
|
524
|
-
grpc_lb_subchannel_data* original_sd = sd;
|
525
|
-
do {
|
526
|
-
sd->subchannel_list->checking_subchannel =
|
527
|
-
(sd->subchannel_list->checking_subchannel + 1) %
|
528
|
-
sd->subchannel_list->num_subchannels;
|
529
|
-
sd = &sd->subchannel_list
|
530
|
-
->subchannels[sd->subchannel_list->checking_subchannel];
|
531
|
-
} while (sd->subchannel == nullptr && sd != original_sd);
|
532
|
-
if (sd == original_sd) {
|
533
|
-
grpc_lb_subchannel_list_unref_for_connectivity_watch(
|
534
|
-
exec_ctx, sd->subchannel_list, "pf_candidate_shutdown");
|
535
|
-
shutdown_locked(exec_ctx, p,
|
536
|
-
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
537
|
-
"Pick first exhausted channels", &error, 1));
|
538
|
-
break;
|
539
|
-
}
|
540
|
-
if (sd->subchannel_list == p->subchannel_list) {
|
541
|
-
grpc_connectivity_state_set(exec_ctx, &p->state_tracker,
|
542
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
543
|
-
GRPC_ERROR_REF(error), "subchannel_failed");
|
544
|
-
}
|
545
|
-
// Reuses the connectivity refs from the previous watch.
|
546
|
-
grpc_lb_subchannel_data_start_connectivity_watch(exec_ctx, sd);
|
514
|
+
grpc_lb_subchannel_data_start_connectivity_watch(sd);
|
547
515
|
break;
|
548
516
|
}
|
517
|
+
case GRPC_CHANNEL_SHUTDOWN:
|
518
|
+
GPR_UNREACHABLE_CODE(break);
|
549
519
|
}
|
550
520
|
}
|
551
521
|
|
522
|
+
static void pf_set_reresolve_closure_locked(
|
523
|
+
grpc_lb_policy* policy, grpc_closure* request_reresolution) {
|
524
|
+
pick_first_lb_policy* p = (pick_first_lb_policy*)policy;
|
525
|
+
GPR_ASSERT(!p->shutdown);
|
526
|
+
GPR_ASSERT(policy->request_reresolution == nullptr);
|
527
|
+
policy->request_reresolution = request_reresolution;
|
528
|
+
}
|
529
|
+
|
552
530
|
static const grpc_lb_policy_vtable pick_first_lb_policy_vtable = {
|
553
531
|
pf_destroy,
|
554
532
|
pf_shutdown_locked,
|
@@ -559,21 +537,21 @@ static const grpc_lb_policy_vtable pick_first_lb_policy_vtable = {
|
|
559
537
|
pf_exit_idle_locked,
|
560
538
|
pf_check_connectivity_locked,
|
561
539
|
pf_notify_on_state_change_locked,
|
562
|
-
pf_update_locked
|
540
|
+
pf_update_locked,
|
541
|
+
pf_set_reresolve_closure_locked};
|
563
542
|
|
564
543
|
static void pick_first_factory_ref(grpc_lb_policy_factory* factory) {}
|
565
544
|
|
566
545
|
static void pick_first_factory_unref(grpc_lb_policy_factory* factory) {}
|
567
546
|
|
568
|
-
static grpc_lb_policy* create_pick_first(
|
569
|
-
grpc_lb_policy_factory* factory,
|
547
|
+
static grpc_lb_policy* create_pick_first(grpc_lb_policy_factory* factory,
|
570
548
|
grpc_lb_policy_args* args) {
|
571
549
|
GPR_ASSERT(args->client_channel_factory != nullptr);
|
572
550
|
pick_first_lb_policy* p = (pick_first_lb_policy*)gpr_zalloc(sizeof(*p));
|
573
551
|
if (grpc_lb_pick_first_trace.enabled()) {
|
574
552
|
gpr_log(GPR_DEBUG, "Pick First %p created.", (void*)p);
|
575
553
|
}
|
576
|
-
pf_update_locked(
|
554
|
+
pf_update_locked(&p->base, args);
|
577
555
|
grpc_lb_policy_init(&p->base, &pick_first_lb_policy_vtable, args->combiner);
|
578
556
|
grpc_subchannel_index_ref();
|
579
557
|
return &p->base;
|
@@ -592,8 +570,8 @@ static grpc_lb_policy_factory* pick_first_lb_factory_create() {
|
|
592
570
|
|
593
571
|
/* Plugin registration */
|
594
572
|
|
595
|
-
|
573
|
+
void grpc_lb_policy_pick_first_init() {
|
596
574
|
grpc_register_lb_policy(pick_first_lb_factory_create());
|
597
575
|
}
|
598
576
|
|
599
|
-
|
577
|
+
void grpc_lb_policy_pick_first_shutdown() {}
|