grpc 1.24.0 → 1.25.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 +306 -243
- data/etc/roots.pem +0 -100
- data/include/grpc/grpc_security.h +44 -18
- data/include/grpc/impl/codegen/grpc_types.h +15 -0
- data/include/grpc/impl/codegen/port_platform.h +27 -11
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/src/boringssl/err_data.c +695 -650
- data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
- data/src/core/ext/filters/client_channel/client_channel.h +24 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
- data/src/core/ext/filters/client_channel/resolver.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver.h +8 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
- data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
- data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
- data/src/core/ext/filters/client_channel/service_config.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
- data/src/core/ext/filters/client_channel/subchannel.h +7 -9
- data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
- data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
- data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
- data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
- data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
- data/src/core/lib/channel/channel_args.cc +16 -0
- data/src/core/lib/channel/channel_args.h +22 -0
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +20 -20
- data/src/core/lib/channel/handshaker.h +3 -4
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/inlined_vector.h +9 -0
- data/src/core/lib/gprpp/map.h +3 -501
- data/src/core/lib/gprpp/memory.h +45 -41
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +6 -11
- data/src/core/lib/gprpp/ref_counted.h +25 -19
- data/src/core/lib/gprpp/set.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -4
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli_security_connector.cc +15 -11
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/iomgr/buffer_list.cc +4 -5
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +4 -5
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.h +3 -5
- data/src/core/lib/iomgr/closure.h +8 -3
- data/src/core/lib/iomgr/combiner.cc +45 -82
- data/src/core/lib/iomgr/combiner.h +32 -8
- data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
- data/src/core/lib/iomgr/exec_ctx.h +4 -3
- data/src/core/lib/iomgr/executor.cc +4 -2
- data/src/core/lib/iomgr/executor.h +3 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
- data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
- data/src/core/lib/iomgr/executor/threadpool.h +7 -11
- data/src/core/lib/iomgr/resource_quota.cc +55 -51
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
- data/src/core/lib/iomgr/tcp_custom.cc +9 -7
- data/src/core/lib/iomgr/tcp_posix.cc +20 -16
- data/src/core/lib/iomgr/tcp_server.h +1 -4
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +3 -2
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_string.cc +2 -2
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +4 -20
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/security_connector.h +19 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.cc +29 -13
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
- data/src/core/lib/slice/slice.cc +2 -10
- data/src/core/lib/slice/slice_hash_table.h +4 -6
- data/src/core/lib/slice/slice_intern.cc +42 -39
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_utils.h +21 -4
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
- data/src/core/lib/surface/call.cc +3 -3
- data/src/core/lib/surface/channel.cc +7 -0
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/completion_queue.h +4 -2
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/lame_client.cc +33 -18
- data/src/core/lib/surface/server.cc +77 -76
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -7
- data/src/core/lib/transport/connectivity_state.cc +112 -98
- data/src/core/lib/transport/connectivity_state.h +100 -50
- data/src/core/lib/transport/static_metadata.cc +276 -288
- data/src/core/lib/transport/static_metadata.h +73 -76
- data/src/core/lib/transport/status_conversion.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +1 -1
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +12 -4
- data/src/core/lib/transport/transport_op_string.cc +14 -11
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +7 -5
- data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +12 -12
- data/src/core/tsi/ssl_transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +6 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
- data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
- data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
- data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
- data/third_party/boringssl/crypto/base64/base64.c +2 -2
- data/third_party/boringssl/crypto/bio/bio.c +73 -9
- data/third_party/boringssl/crypto/bio/connect.c +4 -0
- data/third_party/boringssl/crypto/bio/fd.c +4 -0
- data/third_party/boringssl/crypto/bio/file.c +5 -2
- data/third_party/boringssl/crypto/bio/socket.c +4 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
- data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
- data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
- data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
- data/third_party/boringssl/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
- data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
- data/third_party/boringssl/crypto/conf/conf.c +7 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
- data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
- data/third_party/boringssl/crypto/cpu-intel.c +45 -51
- data/third_party/boringssl/crypto/crypto.c +39 -22
- data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
- data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
- data/third_party/boringssl/crypto/engine/engine.c +2 -1
- data/third_party/boringssl/crypto/err/err.c +2 -0
- data/third_party/boringssl/crypto/err/internal.h +2 -2
- data/third_party/boringssl/crypto/evp/evp.c +89 -8
- data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
- data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
- data/third_party/boringssl/crypto/evp/internal.h +18 -1
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
- data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
- data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
- data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
- data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
- data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
- data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
- data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
- data/third_party/boringssl/crypto/hrss/internal.h +62 -0
- data/third_party/boringssl/crypto/internal.h +95 -20
- data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
- data/third_party/boringssl/crypto/mem.c +39 -2
- data/third_party/boringssl/crypto/obj/obj.c +4 -4
- data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
- data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
- data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
- data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
- data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
- data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
- data/third_party/boringssl/crypto/pool/internal.h +1 -1
- data/third_party/boringssl/crypto/pool/pool.c +21 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
- data/third_party/boringssl/crypto/stack/stack.c +83 -32
- data/third_party/boringssl/crypto/thread_none.c +2 -2
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +38 -19
- data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
- data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
- data/third_party/boringssl/crypto/x509/by_file.c +12 -10
- data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
- data/third_party/boringssl/crypto/x509/t_req.c +1 -3
- data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
- data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
- data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
- data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
- data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
- data/third_party/boringssl/crypto/x509/x509name.c +2 -3
- data/third_party/boringssl/crypto/x509/x_all.c +109 -210
- data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
- data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
- data/third_party/boringssl/include/openssl/aead.h +45 -19
- data/third_party/boringssl/include/openssl/aes.h +32 -7
- data/third_party/boringssl/include/openssl/asn1.h +7 -77
- data/third_party/boringssl/include/openssl/base.h +120 -6
- data/third_party/boringssl/include/openssl/base64.h +4 -1
- data/third_party/boringssl/include/openssl/bio.h +112 -81
- data/third_party/boringssl/include/openssl/blowfish.h +3 -3
- data/third_party/boringssl/include/openssl/bn.h +55 -29
- data/third_party/boringssl/include/openssl/buf.h +2 -2
- data/third_party/boringssl/include/openssl/bytestring.h +54 -32
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +46 -16
- data/third_party/boringssl/include/openssl/cmac.h +6 -2
- data/third_party/boringssl/include/openssl/conf.h +3 -6
- data/third_party/boringssl/include/openssl/cpu.h +25 -9
- data/third_party/boringssl/include/openssl/crypto.h +32 -10
- data/third_party/boringssl/include/openssl/curve25519.h +4 -4
- data/third_party/boringssl/include/openssl/dh.h +3 -2
- data/third_party/boringssl/include/openssl/digest.h +21 -7
- data/third_party/boringssl/include/openssl/dsa.h +8 -2
- data/third_party/boringssl/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl/include/openssl/ec.h +25 -21
- data/third_party/boringssl/include/openssl/ec_key.h +36 -8
- data/third_party/boringssl/include/openssl/ecdh.h +17 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
- data/third_party/boringssl/include/openssl/engine.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -0
- data/third_party/boringssl/include/openssl/evp.h +199 -42
- data/third_party/boringssl/include/openssl/hmac.h +4 -4
- data/third_party/boringssl/include/openssl/hrss.h +100 -0
- data/third_party/boringssl/include/openssl/lhash.h +131 -23
- data/third_party/boringssl/include/openssl/md4.h +6 -4
- data/third_party/boringssl/include/openssl/md5.h +6 -4
- data/third_party/boringssl/include/openssl/mem.h +6 -2
- data/third_party/boringssl/include/openssl/nid.h +3 -0
- data/third_party/boringssl/include/openssl/obj.h +3 -0
- data/third_party/boringssl/include/openssl/pem.h +102 -64
- data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
- data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
- data/third_party/boringssl/include/openssl/pool.h +13 -2
- data/third_party/boringssl/include/openssl/ripemd.h +5 -4
- data/third_party/boringssl/include/openssl/rsa.h +46 -15
- data/third_party/boringssl/include/openssl/sha.h +40 -28
- data/third_party/boringssl/include/openssl/siphash.h +37 -0
- data/third_party/boringssl/include/openssl/span.h +17 -9
- data/third_party/boringssl/include/openssl/ssl.h +766 -393
- data/third_party/boringssl/include/openssl/ssl3.h +4 -3
- data/third_party/boringssl/include/openssl/stack.h +134 -77
- data/third_party/boringssl/include/openssl/thread.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +25 -9
- data/third_party/boringssl/include/openssl/type_check.h +14 -15
- data/third_party/boringssl/include/openssl/x509.h +28 -3
- data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
- data/third_party/boringssl/include/openssl/x509v3.h +17 -13
- data/third_party/boringssl/ssl/d1_both.cc +9 -18
- data/third_party/boringssl/ssl/d1_lib.cc +4 -3
- data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
- data/third_party/boringssl/ssl/dtls_method.cc +0 -1
- data/third_party/boringssl/ssl/dtls_record.cc +28 -28
- data/third_party/boringssl/ssl/handoff.cc +295 -91
- data/third_party/boringssl/ssl/handshake.cc +133 -72
- data/third_party/boringssl/ssl/handshake_client.cc +218 -189
- data/third_party/boringssl/ssl/handshake_server.cc +399 -272
- data/third_party/boringssl/ssl/internal.h +1413 -928
- data/third_party/boringssl/ssl/s3_both.cc +175 -36
- data/third_party/boringssl/ssl/s3_lib.cc +9 -13
- data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
- data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
- data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
- data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
- data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
- data/third_party/boringssl/ssl/ssl_file.cc +2 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
- data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
- data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
- data/third_party/boringssl/ssl/ssl_session.cc +230 -178
- data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
- data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
- data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
- data/third_party/boringssl/ssl/t1_enc.cc +5 -96
- data/third_party/boringssl/ssl/t1_lib.cc +931 -678
- data/third_party/boringssl/ssl/tls13_both.cc +251 -121
- data/third_party/boringssl/ssl/tls13_client.cc +129 -73
- data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
- data/third_party/boringssl/ssl/tls13_server.cc +259 -192
- data/third_party/boringssl/ssl/tls_method.cc +26 -21
- data/third_party/boringssl/ssl/tls_record.cc +42 -47
- data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
- data/third_party/boringssl/third_party/fiat/p256.c +238 -999
- data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
- data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +2 -1
- metadata +71 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -47
- data/src/core/lib/gprpp/pair.h +0 -38
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -53,6 +53,7 @@
|
|
53
53
|
#include "src/core/lib/gprpp/inlined_vector.h"
|
54
54
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
55
55
|
#include "src/core/lib/gprpp/map.h"
|
56
|
+
#include "src/core/lib/gprpp/set.h"
|
56
57
|
#include "src/core/lib/gprpp/sync.h"
|
57
58
|
#include "src/core/lib/iomgr/combiner.h"
|
58
59
|
#include "src/core/lib/iomgr/iomgr.h"
|
@@ -152,43 +153,49 @@ class ChannelData {
|
|
152
153
|
SubchannelInterface* subchannel) const;
|
153
154
|
|
154
155
|
grpc_connectivity_state CheckConnectivityState(bool try_to_connect);
|
156
|
+
|
155
157
|
void AddExternalConnectivityWatcher(grpc_polling_entity pollent,
|
156
158
|
grpc_connectivity_state* state,
|
157
159
|
grpc_closure* on_complete,
|
158
160
|
grpc_closure* watcher_timer_init) {
|
159
|
-
|
160
|
-
|
161
|
-
|
161
|
+
MutexLock lock(&external_watchers_mu_);
|
162
|
+
// Will be deleted when the watch is complete.
|
163
|
+
GPR_ASSERT(external_watchers_[on_complete] == nullptr);
|
164
|
+
external_watchers_[on_complete] = New<ExternalConnectivityWatcher>(
|
165
|
+
this, pollent, state, on_complete, watcher_timer_init);
|
166
|
+
}
|
167
|
+
|
168
|
+
void RemoveExternalConnectivityWatcher(grpc_closure* on_complete,
|
169
|
+
bool cancel) {
|
170
|
+
MutexLock lock(&external_watchers_mu_);
|
171
|
+
auto it = external_watchers_.find(on_complete);
|
172
|
+
if (it != external_watchers_.end()) {
|
173
|
+
if (cancel) it->second->Cancel();
|
174
|
+
external_watchers_.erase(it);
|
175
|
+
}
|
162
176
|
}
|
177
|
+
|
163
178
|
int NumExternalConnectivityWatchers() const {
|
164
|
-
|
179
|
+
MutexLock lock(&external_watchers_mu_);
|
180
|
+
return static_cast<int>(external_watchers_.size());
|
165
181
|
}
|
166
182
|
|
183
|
+
void AddConnectivityWatcher(
|
184
|
+
grpc_connectivity_state initial_state,
|
185
|
+
OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher);
|
186
|
+
void RemoveConnectivityWatcher(
|
187
|
+
AsyncConnectivityStateWatcherInterface* watcher);
|
188
|
+
|
167
189
|
private:
|
168
190
|
class SubchannelWrapper;
|
169
191
|
class ClientChannelControlHelper;
|
192
|
+
class ConnectivityWatcherAdder;
|
193
|
+
class ConnectivityWatcherRemover;
|
170
194
|
|
171
|
-
|
195
|
+
// Represents a pending connectivity callback from an external caller
|
196
|
+
// via grpc_client_channel_watch_connectivity_state().
|
197
|
+
class ExternalConnectivityWatcher : public ConnectivityStateWatcherInterface {
|
172
198
|
public:
|
173
|
-
class WatcherList {
|
174
|
-
public:
|
175
|
-
WatcherList() { gpr_mu_init(&mu_); }
|
176
|
-
~WatcherList() { gpr_mu_destroy(&mu_); }
|
177
|
-
|
178
|
-
int size() const;
|
179
|
-
ExternalConnectivityWatcher* Lookup(grpc_closure* on_complete) const;
|
180
|
-
void Add(ExternalConnectivityWatcher* watcher);
|
181
|
-
void Remove(const ExternalConnectivityWatcher* watcher);
|
182
|
-
|
183
|
-
private:
|
184
|
-
// head_ is guarded by a mutex, since the size() method needs to
|
185
|
-
// iterate over the list, and it's called from the C-core API
|
186
|
-
// function grpc_channel_num_external_connectivity_watchers(), which
|
187
|
-
// is synchronous and therefore cannot run in the combiner.
|
188
|
-
mutable gpr_mu mu_;
|
189
|
-
ExternalConnectivityWatcher* head_ = nullptr;
|
190
|
-
};
|
191
|
-
|
192
199
|
ExternalConnectivityWatcher(ChannelData* chand, grpc_polling_entity pollent,
|
193
200
|
grpc_connectivity_state* state,
|
194
201
|
grpc_closure* on_complete,
|
@@ -196,17 +203,23 @@ class ChannelData {
|
|
196
203
|
|
197
204
|
~ExternalConnectivityWatcher();
|
198
205
|
|
206
|
+
void Notify(grpc_connectivity_state state) override;
|
207
|
+
|
208
|
+
void Cancel();
|
209
|
+
|
199
210
|
private:
|
200
|
-
static void
|
201
|
-
static void
|
211
|
+
static void AddWatcherLocked(void* arg, grpc_error* ignored);
|
212
|
+
static void RemoveWatcherLocked(void* arg, grpc_error* ignored);
|
202
213
|
|
203
214
|
ChannelData* chand_;
|
204
215
|
grpc_polling_entity pollent_;
|
216
|
+
grpc_connectivity_state initial_state_;
|
205
217
|
grpc_connectivity_state* state_;
|
206
218
|
grpc_closure* on_complete_;
|
207
219
|
grpc_closure* watcher_timer_init_;
|
208
|
-
grpc_closure
|
209
|
-
|
220
|
+
grpc_closure add_closure_;
|
221
|
+
grpc_closure remove_closure_;
|
222
|
+
Atomic<bool> done_{false};
|
210
223
|
};
|
211
224
|
|
212
225
|
ChannelData(grpc_channel_element_args* args, grpc_error** error);
|
@@ -269,12 +282,11 @@ class ChannelData {
|
|
269
282
|
//
|
270
283
|
// Fields used in the control plane. Guarded by combiner.
|
271
284
|
//
|
272
|
-
|
285
|
+
Combiner* combiner_;
|
273
286
|
grpc_pollset_set* interested_parties_;
|
274
287
|
RefCountedPtr<SubchannelPoolInterface> subchannel_pool_;
|
275
288
|
OrphanablePtr<ResolvingLoadBalancingPolicy> resolving_lb_policy_;
|
276
|
-
|
277
|
-
ExternalConnectivityWatcher::WatcherList external_connectivity_watcher_list_;
|
289
|
+
ConnectivityStateTracker state_tracker_;
|
278
290
|
UniquePtr<char> health_check_service_name_;
|
279
291
|
RefCountedPtr<ServiceConfig> saved_service_config_;
|
280
292
|
bool received_first_resolver_result_ = false;
|
@@ -283,9 +295,7 @@ class ChannelData {
|
|
283
295
|
// The set of SubchannelWrappers that currently exist.
|
284
296
|
// No need to hold a ref, since the map is updated in the control-plane
|
285
297
|
// combiner when the SubchannelWrappers are created and destroyed.
|
286
|
-
|
287
|
-
// currently have a set implementation, we use a map and ignore the value.
|
288
|
-
Map<SubchannelWrapper*, bool> subchannel_wrappers_;
|
298
|
+
Set<SubchannelWrapper*> subchannel_wrappers_;
|
289
299
|
// Pending ConnectedSubchannel updates for each SubchannelWrapper.
|
290
300
|
// Updates are queued here in the control plane combiner and then applied
|
291
301
|
// in the data plane mutex when the picker is updated.
|
@@ -305,6 +315,13 @@ class ChannelData {
|
|
305
315
|
gpr_mu info_mu_;
|
306
316
|
UniquePtr<char> info_lb_policy_name_;
|
307
317
|
UniquePtr<char> info_service_config_json_;
|
318
|
+
|
319
|
+
//
|
320
|
+
// Fields guarded by a mutex, since they need to be accessed
|
321
|
+
// synchronously via grpc_channel_num_external_connectivity_watchers().
|
322
|
+
//
|
323
|
+
mutable Mutex external_watchers_mu_;
|
324
|
+
Map<grpc_closure*, ExternalConnectivityWatcher*> external_watchers_;
|
308
325
|
};
|
309
326
|
|
310
327
|
//
|
@@ -357,35 +374,39 @@ class CallData {
|
|
357
374
|
GRPC_ERROR_NONE);
|
358
375
|
}
|
359
376
|
|
360
|
-
|
361
|
-
static_assert(sizeof(grpc_linked_mdelem*) <= sizeof(
|
377
|
+
iterator begin() const override {
|
378
|
+
static_assert(sizeof(grpc_linked_mdelem*) <= sizeof(intptr_t),
|
362
379
|
"iterator size too large");
|
363
|
-
return reinterpret_cast<
|
380
|
+
return iterator(this, reinterpret_cast<intptr_t>(batch_->list.head));
|
364
381
|
}
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
*it = reinterpret_cast<Iterator>(
|
370
|
-
reinterpret_cast<grpc_linked_mdelem*>(*it)->next);
|
371
|
-
}
|
372
|
-
StringView Key(Iterator it) const override {
|
373
|
-
return StringView(
|
374
|
-
GRPC_MDKEY(reinterpret_cast<grpc_linked_mdelem*>(it)->md));
|
375
|
-
}
|
376
|
-
StringView Value(Iterator it) const override {
|
377
|
-
return StringView(
|
378
|
-
GRPC_MDVALUE(reinterpret_cast<grpc_linked_mdelem*>(it)->md));
|
382
|
+
iterator end() const override {
|
383
|
+
static_assert(sizeof(grpc_linked_mdelem*) <= sizeof(intptr_t),
|
384
|
+
"iterator size too large");
|
385
|
+
return iterator(this, 0);
|
379
386
|
}
|
380
387
|
|
381
|
-
|
388
|
+
iterator erase(iterator it) override {
|
382
389
|
grpc_linked_mdelem* linked_mdelem =
|
383
|
-
reinterpret_cast<grpc_linked_mdelem*>(
|
384
|
-
|
390
|
+
reinterpret_cast<grpc_linked_mdelem*>(GetIteratorHandle(it));
|
391
|
+
intptr_t handle = reinterpret_cast<intptr_t>(linked_mdelem->next);
|
385
392
|
grpc_metadata_batch_remove(batch_, linked_mdelem);
|
393
|
+
return iterator(this, handle);
|
386
394
|
}
|
387
395
|
|
388
396
|
private:
|
397
|
+
intptr_t IteratorHandleNext(intptr_t handle) const override {
|
398
|
+
grpc_linked_mdelem* linked_mdelem =
|
399
|
+
reinterpret_cast<grpc_linked_mdelem*>(handle);
|
400
|
+
return reinterpret_cast<intptr_t>(linked_mdelem->next);
|
401
|
+
}
|
402
|
+
std::pair<StringView, StringView> IteratorHandleGet(
|
403
|
+
intptr_t handle) const override {
|
404
|
+
grpc_linked_mdelem* linked_mdelem =
|
405
|
+
reinterpret_cast<grpc_linked_mdelem*>(handle);
|
406
|
+
return std::make_pair(StringView(GRPC_MDKEY(linked_mdelem->md)),
|
407
|
+
StringView(GRPC_MDVALUE(linked_mdelem->md)));
|
408
|
+
}
|
409
|
+
|
389
410
|
CallData* calld_;
|
390
411
|
grpc_metadata_batch* batch_;
|
391
412
|
};
|
@@ -743,11 +764,9 @@ class CallData {
|
|
743
764
|
LbCallState lb_call_state_;
|
744
765
|
const LoadBalancingPolicy::BackendMetricData* backend_metric_data_ = nullptr;
|
745
766
|
RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
|
746
|
-
void
|
747
|
-
|
748
|
-
|
749
|
-
LoadBalancingPolicy::CallState* call_state) = nullptr;
|
750
|
-
void* lb_recv_trailing_metadata_ready_user_data_ = nullptr;
|
767
|
+
std::function<void(grpc_error*, LoadBalancingPolicy::MetadataInterface*,
|
768
|
+
LoadBalancingPolicy::CallState*)>
|
769
|
+
lb_recv_trailing_metadata_ready_;
|
751
770
|
grpc_closure pick_closure_;
|
752
771
|
|
753
772
|
// For intercepting recv_trailing_metadata_ready for the LB policy.
|
@@ -842,7 +861,7 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
|
|
842
861
|
}
|
843
862
|
++it->second;
|
844
863
|
}
|
845
|
-
chand_->subchannel_wrappers_
|
864
|
+
chand_->subchannel_wrappers_.insert(this);
|
846
865
|
}
|
847
866
|
|
848
867
|
~SubchannelWrapper() {
|
@@ -994,8 +1013,7 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
|
|
994
1013
|
"subchannel %p (connected_subchannel=%p state=%s); "
|
995
1014
|
"hopping into combiner",
|
996
1015
|
parent_->chand_, parent_.get(), parent_->subchannel_,
|
997
|
-
connected_subchannel.get(),
|
998
|
-
grpc_connectivity_state_name(new_state));
|
1016
|
+
connected_subchannel.get(), ConnectivityStateName(new_state));
|
999
1017
|
}
|
1000
1018
|
// Will delete itself.
|
1001
1019
|
New<Updater>(Ref(), new_state, std::move(connected_subchannel));
|
@@ -1026,10 +1044,10 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
|
|
1026
1044
|
: parent_(std::move(parent)),
|
1027
1045
|
state_(new_state),
|
1028
1046
|
connected_subchannel_(std::move(connected_subchannel)) {
|
1029
|
-
|
1030
|
-
&closure_, ApplyUpdateInControlPlaneCombiner,
|
1031
|
-
|
1032
|
-
|
1047
|
+
parent_->parent_->chand_->combiner_->Run(
|
1048
|
+
GRPC_CLOSURE_INIT(&closure_, ApplyUpdateInControlPlaneCombiner,
|
1049
|
+
this, nullptr),
|
1050
|
+
GRPC_ERROR_NONE);
|
1033
1051
|
}
|
1034
1052
|
|
1035
1053
|
private:
|
@@ -1044,7 +1062,7 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
|
|
1044
1062
|
self->parent_->parent_->chand_, self->parent_->parent_.get(),
|
1045
1063
|
self->parent_->parent_->subchannel_,
|
1046
1064
|
self->connected_subchannel_.get(),
|
1047
|
-
|
1065
|
+
ConnectivityStateName(self->state_),
|
1048
1066
|
self->parent_->watcher_.get());
|
1049
1067
|
}
|
1050
1068
|
// Ignore update if the parent WatcherWrapper has been replaced
|
@@ -1105,55 +1123,6 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
|
|
1105
1123
|
RefCountedPtr<ConnectedSubchannel> connected_subchannel_in_data_plane_;
|
1106
1124
|
};
|
1107
1125
|
|
1108
|
-
//
|
1109
|
-
// ChannelData::ExternalConnectivityWatcher::WatcherList
|
1110
|
-
//
|
1111
|
-
|
1112
|
-
int ChannelData::ExternalConnectivityWatcher::WatcherList::size() const {
|
1113
|
-
MutexLock lock(&mu_);
|
1114
|
-
int count = 0;
|
1115
|
-
for (ExternalConnectivityWatcher* w = head_; w != nullptr; w = w->next_) {
|
1116
|
-
++count;
|
1117
|
-
}
|
1118
|
-
return count;
|
1119
|
-
}
|
1120
|
-
|
1121
|
-
ChannelData::ExternalConnectivityWatcher*
|
1122
|
-
ChannelData::ExternalConnectivityWatcher::WatcherList::Lookup(
|
1123
|
-
grpc_closure* on_complete) const {
|
1124
|
-
MutexLock lock(&mu_);
|
1125
|
-
ExternalConnectivityWatcher* w = head_;
|
1126
|
-
while (w != nullptr && w->on_complete_ != on_complete) {
|
1127
|
-
w = w->next_;
|
1128
|
-
}
|
1129
|
-
return w;
|
1130
|
-
}
|
1131
|
-
|
1132
|
-
void ChannelData::ExternalConnectivityWatcher::WatcherList::Add(
|
1133
|
-
ExternalConnectivityWatcher* watcher) {
|
1134
|
-
GPR_ASSERT(Lookup(watcher->on_complete_) == nullptr);
|
1135
|
-
MutexLock lock(&mu_);
|
1136
|
-
GPR_ASSERT(watcher->next_ == nullptr);
|
1137
|
-
watcher->next_ = head_;
|
1138
|
-
head_ = watcher;
|
1139
|
-
}
|
1140
|
-
|
1141
|
-
void ChannelData::ExternalConnectivityWatcher::WatcherList::Remove(
|
1142
|
-
const ExternalConnectivityWatcher* watcher) {
|
1143
|
-
MutexLock lock(&mu_);
|
1144
|
-
if (watcher == head_) {
|
1145
|
-
head_ = watcher->next_;
|
1146
|
-
return;
|
1147
|
-
}
|
1148
|
-
for (ExternalConnectivityWatcher* w = head_; w != nullptr; w = w->next_) {
|
1149
|
-
if (w->next_ == watcher) {
|
1150
|
-
w->next_ = w->next_->next_;
|
1151
|
-
return;
|
1152
|
-
}
|
1153
|
-
}
|
1154
|
-
GPR_UNREACHABLE_CODE(return );
|
1155
|
-
}
|
1156
|
-
|
1157
1126
|
//
|
1158
1127
|
// ChannelData::ExternalConnectivityWatcher
|
1159
1128
|
//
|
@@ -1164,15 +1133,15 @@ ChannelData::ExternalConnectivityWatcher::ExternalConnectivityWatcher(
|
|
1164
1133
|
grpc_closure* watcher_timer_init)
|
1165
1134
|
: chand_(chand),
|
1166
1135
|
pollent_(pollent),
|
1136
|
+
initial_state_(*state),
|
1167
1137
|
state_(state),
|
1168
1138
|
on_complete_(on_complete),
|
1169
1139
|
watcher_timer_init_(watcher_timer_init) {
|
1170
1140
|
grpc_polling_entity_add_to_pollset_set(&pollent_,
|
1171
1141
|
chand_->interested_parties_);
|
1172
1142
|
GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ExternalConnectivityWatcher");
|
1173
|
-
|
1174
|
-
GRPC_CLOSURE_INIT(&
|
1175
|
-
grpc_combiner_scheduler(chand_->combiner_)),
|
1143
|
+
chand_->combiner_->Run(
|
1144
|
+
GRPC_CLOSURE_INIT(&add_closure_, AddWatcherLocked, this, nullptr),
|
1176
1145
|
GRPC_ERROR_NONE);
|
1177
1146
|
}
|
1178
1147
|
|
@@ -1183,43 +1152,129 @@ ChannelData::ExternalConnectivityWatcher::~ExternalConnectivityWatcher() {
|
|
1183
1152
|
"ExternalConnectivityWatcher");
|
1184
1153
|
}
|
1185
1154
|
|
1186
|
-
void ChannelData::ExternalConnectivityWatcher::
|
1187
|
-
|
1155
|
+
void ChannelData::ExternalConnectivityWatcher::Notify(
|
1156
|
+
grpc_connectivity_state state) {
|
1157
|
+
bool done = false;
|
1158
|
+
if (!done_.CompareExchangeStrong(&done, true, MemoryOrder::RELAXED,
|
1159
|
+
MemoryOrder::RELAXED)) {
|
1160
|
+
return; // Already done.
|
1161
|
+
}
|
1162
|
+
// Remove external watcher.
|
1163
|
+
chand_->RemoveExternalConnectivityWatcher(on_complete_, /*cancel=*/false);
|
1164
|
+
// Report new state to the user.
|
1165
|
+
*state_ = state;
|
1166
|
+
GRPC_CLOSURE_SCHED(on_complete_, GRPC_ERROR_NONE);
|
1167
|
+
// Hop back into the combiner to clean up.
|
1168
|
+
// Not needed in state SHUTDOWN, because the tracker will
|
1169
|
+
// automatically remove all watchers in that case.
|
1170
|
+
if (state != GRPC_CHANNEL_SHUTDOWN) {
|
1171
|
+
chand_->combiner_->Run(
|
1172
|
+
GRPC_CLOSURE_INIT(&remove_closure_, RemoveWatcherLocked, this, nullptr),
|
1173
|
+
GRPC_ERROR_NONE);
|
1174
|
+
}
|
1175
|
+
}
|
1176
|
+
|
1177
|
+
void ChannelData::ExternalConnectivityWatcher::Cancel() {
|
1178
|
+
bool done = false;
|
1179
|
+
if (!done_.CompareExchangeStrong(&done, true, MemoryOrder::RELAXED,
|
1180
|
+
MemoryOrder::RELAXED)) {
|
1181
|
+
return; // Already done.
|
1182
|
+
}
|
1183
|
+
GRPC_CLOSURE_SCHED(on_complete_, GRPC_ERROR_CANCELLED);
|
1184
|
+
// Hop back into the combiner to clean up.
|
1185
|
+
chand_->combiner_->Run(
|
1186
|
+
GRPC_CLOSURE_INIT(&remove_closure_, RemoveWatcherLocked, this, nullptr),
|
1187
|
+
GRPC_ERROR_NONE);
|
1188
|
+
}
|
1189
|
+
|
1190
|
+
void ChannelData::ExternalConnectivityWatcher::AddWatcherLocked(
|
1191
|
+
void* arg, grpc_error* ignored) {
|
1188
1192
|
ExternalConnectivityWatcher* self =
|
1189
1193
|
static_cast<ExternalConnectivityWatcher*>(arg);
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
+
// This assumes that the closure is scheduled on the ExecCtx scheduler
|
1195
|
+
// and that GRPC_CLOSURE_RUN() will run the closure immediately.
|
1196
|
+
GRPC_CLOSURE_RUN(self->watcher_timer_init_, GRPC_ERROR_NONE);
|
1197
|
+
// Add new watcher.
|
1198
|
+
self->chand_->state_tracker_.AddWatcher(
|
1199
|
+
self->initial_state_,
|
1200
|
+
OrphanablePtr<ConnectivityStateWatcherInterface>(self));
|
1194
1201
|
}
|
1195
1202
|
|
1196
|
-
void ChannelData::ExternalConnectivityWatcher::
|
1203
|
+
void ChannelData::ExternalConnectivityWatcher::RemoveWatcherLocked(
|
1197
1204
|
void* arg, grpc_error* ignored) {
|
1198
1205
|
ExternalConnectivityWatcher* self =
|
1199
1206
|
static_cast<ExternalConnectivityWatcher*>(arg);
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1207
|
+
self->chand_->state_tracker_.RemoveWatcher(self);
|
1208
|
+
}
|
1209
|
+
|
1210
|
+
//
|
1211
|
+
// ChannelData::ConnectivityWatcherAdder
|
1212
|
+
//
|
1213
|
+
|
1214
|
+
class ChannelData::ConnectivityWatcherAdder {
|
1215
|
+
public:
|
1216
|
+
ConnectivityWatcherAdder(
|
1217
|
+
ChannelData* chand, grpc_connectivity_state initial_state,
|
1218
|
+
OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher)
|
1219
|
+
: chand_(chand),
|
1220
|
+
initial_state_(initial_state),
|
1221
|
+
watcher_(std::move(watcher)) {
|
1222
|
+
GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ConnectivityWatcherAdder");
|
1223
|
+
chand_->combiner_->Run(
|
1224
|
+
GRPC_CLOSURE_INIT(&closure_,
|
1225
|
+
&ConnectivityWatcherAdder::AddWatcherLocked, this,
|
1226
|
+
nullptr),
|
1227
|
+
GRPC_ERROR_NONE);
|
1228
|
+
}
|
1229
|
+
|
1230
|
+
private:
|
1231
|
+
static void AddWatcherLocked(void* arg, grpc_error* error) {
|
1232
|
+
ConnectivityWatcherAdder* self =
|
1233
|
+
static_cast<ConnectivityWatcherAdder*>(arg);
|
1234
|
+
self->chand_->state_tracker_.AddWatcher(self->initial_state_,
|
1235
|
+
std::move(self->watcher_));
|
1236
|
+
GRPC_CHANNEL_STACK_UNREF(self->chand_->owning_stack_,
|
1237
|
+
"ConnectivityWatcherAdder");
|
1210
1238
|
Delete(self);
|
1211
|
-
return;
|
1212
1239
|
}
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1217
|
-
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1221
|
-
|
1222
|
-
|
1240
|
+
|
1241
|
+
ChannelData* chand_;
|
1242
|
+
grpc_connectivity_state initial_state_;
|
1243
|
+
OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher_;
|
1244
|
+
grpc_closure closure_;
|
1245
|
+
};
|
1246
|
+
|
1247
|
+
//
|
1248
|
+
// ChannelData::ConnectivityWatcherRemover
|
1249
|
+
//
|
1250
|
+
|
1251
|
+
class ChannelData::ConnectivityWatcherRemover {
|
1252
|
+
public:
|
1253
|
+
ConnectivityWatcherRemover(ChannelData* chand,
|
1254
|
+
AsyncConnectivityStateWatcherInterface* watcher)
|
1255
|
+
: chand_(chand), watcher_(watcher) {
|
1256
|
+
GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ConnectivityWatcherRemover");
|
1257
|
+
chand_->combiner_->Run(
|
1258
|
+
GRPC_CLOSURE_INIT(&closure_,
|
1259
|
+
&ConnectivityWatcherRemover::RemoveWatcherLocked,
|
1260
|
+
this, nullptr),
|
1261
|
+
GRPC_ERROR_NONE);
|
1262
|
+
}
|
1263
|
+
|
1264
|
+
private:
|
1265
|
+
static void RemoveWatcherLocked(void* arg, grpc_error* error) {
|
1266
|
+
ConnectivityWatcherRemover* self =
|
1267
|
+
static_cast<ConnectivityWatcherRemover*>(arg);
|
1268
|
+
self->chand_->state_tracker_.RemoveWatcher(self->watcher_);
|
1269
|
+
GRPC_CHANNEL_STACK_UNREF(self->chand_->owning_stack_,
|
1270
|
+
"ConnectivityWatcherRemover");
|
1271
|
+
Delete(self);
|
1272
|
+
}
|
1273
|
+
|
1274
|
+
ChannelData* chand_;
|
1275
|
+
AsyncConnectivityStateWatcherInterface* watcher_;
|
1276
|
+
grpc_closure closure_;
|
1277
|
+
};
|
1223
1278
|
|
1224
1279
|
//
|
1225
1280
|
// ChannelData::ClientChannelControlHelper
|
@@ -1271,7 +1326,7 @@ class ChannelData::ClientChannelControlHelper
|
|
1271
1326
|
? ""
|
1272
1327
|
: " (ignoring -- channel shutting down)";
|
1273
1328
|
gpr_log(GPR_INFO, "chand=%p: update: state=%s picker=%p%s", chand_,
|
1274
|
-
|
1329
|
+
ConnectivityStateName(state), picker.get(), extra);
|
1275
1330
|
}
|
1276
1331
|
// Do update only if not shutting down.
|
1277
1332
|
if (disconnect_error == GRPC_ERROR_NONE) {
|
@@ -1362,14 +1417,13 @@ ChannelData::ChannelData(grpc_channel_element_args* args, grpc_error** error)
|
|
1362
1417
|
combiner_(grpc_combiner_create()),
|
1363
1418
|
interested_parties_(grpc_pollset_set_create()),
|
1364
1419
|
subchannel_pool_(GetSubchannelPool(args->channel_args)),
|
1420
|
+
state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
|
1365
1421
|
disconnect_error_(GRPC_ERROR_NONE) {
|
1366
1422
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1367
1423
|
gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
|
1368
1424
|
this, owning_stack_);
|
1369
1425
|
}
|
1370
1426
|
// Initialize data members.
|
1371
|
-
grpc_connectivity_state_init(&state_tracker_, GRPC_CHANNEL_IDLE,
|
1372
|
-
"client_channel");
|
1373
1427
|
gpr_mu_init(&info_mu_);
|
1374
1428
|
// Start backup polling.
|
1375
1429
|
grpc_client_channel_start_backup_polling(interested_parties_);
|
@@ -1433,7 +1487,6 @@ ChannelData::~ChannelData() {
|
|
1433
1487
|
grpc_pollset_set_destroy(interested_parties_);
|
1434
1488
|
GRPC_COMBINER_UNREF(combiner_, "client_channel");
|
1435
1489
|
GRPC_ERROR_UNREF(disconnect_error_.Load(MemoryOrder::RELAXED));
|
1436
|
-
grpc_connectivity_state_destroy(&state_tracker_);
|
1437
1490
|
gpr_mu_destroy(&info_mu_);
|
1438
1491
|
}
|
1439
1492
|
|
@@ -1447,7 +1500,7 @@ void ChannelData::UpdateStateAndPickerLocked(
|
|
1447
1500
|
received_first_resolver_result_ = false;
|
1448
1501
|
}
|
1449
1502
|
// Update connectivity state.
|
1450
|
-
|
1503
|
+
state_tracker_.SetState(state, reason);
|
1451
1504
|
if (channelz_node_ != nullptr) {
|
1452
1505
|
channelz_node_->SetConnectivityState(state);
|
1453
1506
|
channelz_node_->AddTraceEvent(
|
@@ -1537,9 +1590,7 @@ void ChannelData::CreateResolvingLoadBalancingPolicyLocked() {
|
|
1537
1590
|
// Instantiate resolving LB policy.
|
1538
1591
|
LoadBalancingPolicy::Args lb_args;
|
1539
1592
|
lb_args.combiner = combiner_;
|
1540
|
-
lb_args.channel_control_helper =
|
1541
|
-
UniquePtr<LoadBalancingPolicy::ChannelControlHelper>(
|
1542
|
-
New<ClientChannelControlHelper>(this));
|
1593
|
+
lb_args.channel_control_helper = MakeUnique<ClientChannelControlHelper>(this);
|
1543
1594
|
lb_args.args = channel_args_;
|
1544
1595
|
UniquePtr<char> target_uri(gpr_strdup(target_uri_.get()));
|
1545
1596
|
resolving_lb_policy_.reset(New<ResolvingLoadBalancingPolicy>(
|
@@ -1692,8 +1743,8 @@ bool ChannelData::ProcessResolverResultLocked(
|
|
1692
1743
|
chand->health_check_service_name_.reset();
|
1693
1744
|
}
|
1694
1745
|
// Update health check service name used by existing subchannel wrappers.
|
1695
|
-
for (
|
1696
|
-
|
1746
|
+
for (auto* subchannel_wrapper : chand->subchannel_wrappers_) {
|
1747
|
+
subchannel_wrapper->UpdateHealthCheckServiceName(
|
1697
1748
|
UniquePtr<char>(gpr_strdup(chand->health_check_service_name_.get())));
|
1698
1749
|
}
|
1699
1750
|
// Save service config.
|
@@ -1736,7 +1787,7 @@ bool ChannelData::ProcessResolverResultLocked(
|
|
1736
1787
|
}
|
1737
1788
|
|
1738
1789
|
grpc_error* ChannelData::DoPingLocked(grpc_transport_op* op) {
|
1739
|
-
if (
|
1790
|
+
if (state_tracker_.state() != GRPC_CHANNEL_READY) {
|
1740
1791
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("channel not connected");
|
1741
1792
|
}
|
1742
1793
|
LoadBalancingPolicy::PickResult result =
|
@@ -1764,12 +1815,12 @@ void ChannelData::StartTransportOpLocked(void* arg, grpc_error* ignored) {
|
|
1764
1815
|
static_cast<grpc_channel_element*>(op->handler_private.extra_arg);
|
1765
1816
|
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
1766
1817
|
// Connectivity watch.
|
1767
|
-
if (op->
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
op->
|
1818
|
+
if (op->start_connectivity_watch != nullptr) {
|
1819
|
+
chand->state_tracker_.AddWatcher(op->start_connectivity_watch_state,
|
1820
|
+
std::move(op->start_connectivity_watch));
|
1821
|
+
}
|
1822
|
+
if (op->stop_connectivity_watch != nullptr) {
|
1823
|
+
chand->state_tracker_.RemoveWatcher(op->stop_connectivity_watch);
|
1773
1824
|
}
|
1774
1825
|
// Ping.
|
1775
1826
|
if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
|
@@ -1813,9 +1864,8 @@ void ChannelData::StartTransportOpLocked(void* arg, grpc_error* ignored) {
|
|
1813
1864
|
MemoryOrder::RELEASE);
|
1814
1865
|
chand->UpdateStateAndPickerLocked(
|
1815
1866
|
GRPC_CHANNEL_SHUTDOWN, "shutdown from API",
|
1816
|
-
|
1817
|
-
|
1818
|
-
GRPC_ERROR_REF(op->disconnect_with_error))));
|
1867
|
+
MakeUnique<LoadBalancingPolicy::TransientFailurePicker>(
|
1868
|
+
GRPC_ERROR_REF(op->disconnect_with_error)));
|
1819
1869
|
}
|
1820
1870
|
}
|
1821
1871
|
GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_, "start_transport_op");
|
@@ -1833,10 +1883,9 @@ void ChannelData::StartTransportOp(grpc_channel_element* elem,
|
|
1833
1883
|
// Pop into control plane combiner for remaining ops.
|
1834
1884
|
op->handler_private.extra_arg = elem;
|
1835
1885
|
GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "start_transport_op");
|
1836
|
-
|
1886
|
+
chand->combiner_->Run(
|
1837
1887
|
GRPC_CLOSURE_INIT(&op->handler_private.closure,
|
1838
|
-
ChannelData::StartTransportOpLocked, op,
|
1839
|
-
grpc_combiner_scheduler(chand->combiner_)),
|
1888
|
+
ChannelData::StartTransportOpLocked, op, nullptr),
|
1840
1889
|
GRPC_ERROR_NONE);
|
1841
1890
|
}
|
1842
1891
|
|
@@ -1900,16 +1949,26 @@ void ChannelData::TryToConnectLocked(void* arg, grpc_error* error_ignored) {
|
|
1900
1949
|
|
1901
1950
|
grpc_connectivity_state ChannelData::CheckConnectivityState(
|
1902
1951
|
bool try_to_connect) {
|
1903
|
-
grpc_connectivity_state out =
|
1952
|
+
grpc_connectivity_state out = state_tracker_.state();
|
1904
1953
|
if (out == GRPC_CHANNEL_IDLE && try_to_connect) {
|
1905
1954
|
GRPC_CHANNEL_STACK_REF(owning_stack_, "TryToConnect");
|
1906
|
-
|
1907
|
-
|
1908
|
-
GRPC_ERROR_NONE);
|
1955
|
+
combiner_->Run(GRPC_CLOSURE_CREATE(TryToConnectLocked, this, nullptr),
|
1956
|
+
GRPC_ERROR_NONE);
|
1909
1957
|
}
|
1910
1958
|
return out;
|
1911
1959
|
}
|
1912
1960
|
|
1961
|
+
void ChannelData::AddConnectivityWatcher(
|
1962
|
+
grpc_connectivity_state initial_state,
|
1963
|
+
OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher) {
|
1964
|
+
New<ConnectivityWatcherAdder>(this, initial_state, std::move(watcher));
|
1965
|
+
}
|
1966
|
+
|
1967
|
+
void ChannelData::RemoveConnectivityWatcher(
|
1968
|
+
AsyncConnectivityStateWatcherInterface* watcher) {
|
1969
|
+
New<ConnectivityWatcherRemover>(this, watcher);
|
1970
|
+
}
|
1971
|
+
|
1913
1972
|
//
|
1914
1973
|
// CallData implementation
|
1915
1974
|
//
|
@@ -2201,9 +2260,8 @@ void CallData::RecvTrailingMetadataReadyForLoadBalancingPolicy(
|
|
2201
2260
|
CallData* calld = static_cast<CallData*>(arg);
|
2202
2261
|
// Invoke callback to LB policy.
|
2203
2262
|
Metadata trailing_metadata(calld, calld->recv_trailing_metadata_);
|
2204
|
-
calld->lb_recv_trailing_metadata_ready_(
|
2205
|
-
|
2206
|
-
&trailing_metadata, &calld->lb_call_state_);
|
2263
|
+
calld->lb_recv_trailing_metadata_ready_(error, &trailing_metadata,
|
2264
|
+
&calld->lb_call_state_);
|
2207
2265
|
// Chain to original callback.
|
2208
2266
|
GRPC_CLOSURE_RUN(calld->original_recv_trailing_metadata_ready_,
|
2209
2267
|
GRPC_ERROR_REF(error));
|
@@ -3902,8 +3960,6 @@ bool CallData::PickSubchannelLocked(grpc_call_element* elem,
|
|
3902
3960
|
GPR_ASSERT(connected_subchannel_ != nullptr);
|
3903
3961
|
}
|
3904
3962
|
lb_recv_trailing_metadata_ready_ = result.recv_trailing_metadata_ready;
|
3905
|
-
lb_recv_trailing_metadata_ready_user_data_ =
|
3906
|
-
result.recv_trailing_metadata_ready_user_data;
|
3907
3963
|
*error = result.error;
|
3908
3964
|
return true;
|
3909
3965
|
}
|
@@ -3950,10 +4006,32 @@ void grpc_client_channel_watch_connectivity_state(
|
|
3950
4006
|
grpc_connectivity_state* state, grpc_closure* closure,
|
3951
4007
|
grpc_closure* watcher_timer_init) {
|
3952
4008
|
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
4009
|
+
if (state == nullptr) {
|
4010
|
+
// Handle cancellation.
|
4011
|
+
GPR_ASSERT(watcher_timer_init == nullptr);
|
4012
|
+
chand->RemoveExternalConnectivityWatcher(closure, /*cancel=*/true);
|
4013
|
+
return;
|
4014
|
+
}
|
4015
|
+
// Handle addition.
|
3953
4016
|
return chand->AddExternalConnectivityWatcher(pollent, state, closure,
|
3954
4017
|
watcher_timer_init);
|
3955
4018
|
}
|
3956
4019
|
|
4020
|
+
void grpc_client_channel_start_connectivity_watch(
|
4021
|
+
grpc_channel_element* elem, grpc_connectivity_state initial_state,
|
4022
|
+
grpc_core::OrphanablePtr<grpc_core::AsyncConnectivityStateWatcherInterface>
|
4023
|
+
watcher) {
|
4024
|
+
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
4025
|
+
chand->AddConnectivityWatcher(initial_state, std::move(watcher));
|
4026
|
+
}
|
4027
|
+
|
4028
|
+
void grpc_client_channel_stop_connectivity_watch(
|
4029
|
+
grpc_channel_element* elem,
|
4030
|
+
grpc_core::AsyncConnectivityStateWatcherInterface* watcher) {
|
4031
|
+
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
4032
|
+
chand->RemoveConnectivityWatcher(watcher);
|
4033
|
+
}
|
4034
|
+
|
3957
4035
|
grpc_core::RefCountedPtr<grpc_core::SubchannelCall>
|
3958
4036
|
grpc_client_channel_get_subchannel_call(grpc_call_element* elem) {
|
3959
4037
|
auto* calld = static_cast<CallData*>(elem->call_data);
|