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
@@ -34,9 +34,9 @@
|
|
34
34
|
#include "src/core/lib/channel/channelz.h"
|
35
35
|
#include "src/core/lib/channel/connected_channel.h"
|
36
36
|
#include "src/core/lib/debug/stats.h"
|
37
|
-
#include "src/core/lib/gpr/mpscq.h"
|
38
37
|
#include "src/core/lib/gpr/spinlock.h"
|
39
38
|
#include "src/core/lib/gpr/string.h"
|
39
|
+
#include "src/core/lib/gprpp/mpscq.h"
|
40
40
|
#include "src/core/lib/iomgr/executor.h"
|
41
41
|
#include "src/core/lib/iomgr/iomgr.h"
|
42
42
|
#include "src/core/lib/slice/slice_internal.h"
|
@@ -50,6 +50,8 @@
|
|
50
50
|
|
51
51
|
grpc_core::TraceFlag grpc_server_channel_trace(false, "server_channel");
|
52
52
|
|
53
|
+
using grpc_core::LockedMultiProducerSingleConsumerQueue;
|
54
|
+
|
53
55
|
static void server_on_recv_initial_metadata(void* ptr, grpc_error* error);
|
54
56
|
static void server_recv_trailing_metadata_ready(void* user_data,
|
55
57
|
grpc_error* error);
|
@@ -70,7 +72,9 @@ enum requested_call_type { BATCH_CALL, REGISTERED_CALL };
|
|
70
72
|
struct registered_method;
|
71
73
|
|
72
74
|
struct requested_call {
|
73
|
-
|
75
|
+
grpc_core::ManualConstructor<
|
76
|
+
grpc_core::MultiProducerSingleConsumerQueue::Node>
|
77
|
+
mpscq_node;
|
74
78
|
requested_call_type type;
|
75
79
|
size_t cq_idx;
|
76
80
|
void* tag;
|
@@ -95,13 +99,12 @@ struct channel_registered_method {
|
|
95
99
|
registered_method* server_registered_method;
|
96
100
|
uint32_t flags;
|
97
101
|
bool has_host;
|
98
|
-
|
99
|
-
|
102
|
+
grpc_core::ExternallyManagedSlice method;
|
103
|
+
grpc_core::ExternallyManagedSlice host;
|
100
104
|
};
|
101
105
|
|
102
106
|
struct channel_data {
|
103
107
|
grpc_server* server;
|
104
|
-
grpc_connectivity_state connectivity_state;
|
105
108
|
grpc_channel* channel;
|
106
109
|
size_t cq_idx;
|
107
110
|
/* linked list of all channels on a server */
|
@@ -111,7 +114,6 @@ struct channel_data {
|
|
111
114
|
uint32_t registered_method_slots;
|
112
115
|
uint32_t registered_method_max_probes;
|
113
116
|
grpc_closure finish_destroy_channel_closure;
|
114
|
-
grpc_closure channel_connectivity_changed;
|
115
117
|
intptr_t channelz_socket_uuid;
|
116
118
|
};
|
117
119
|
|
@@ -198,7 +200,7 @@ struct request_matcher {
|
|
198
200
|
grpc_server* server;
|
199
201
|
call_data* pending_head;
|
200
202
|
call_data* pending_tail;
|
201
|
-
|
203
|
+
LockedMultiProducerSingleConsumerQueue* requests_per_cq;
|
202
204
|
};
|
203
205
|
|
204
206
|
struct registered_method {
|
@@ -350,17 +352,17 @@ static void channel_broadcaster_shutdown(channel_broadcaster* cb,
|
|
350
352
|
static void request_matcher_init(request_matcher* rm, grpc_server* server) {
|
351
353
|
rm->server = server;
|
352
354
|
rm->pending_head = rm->pending_tail = nullptr;
|
353
|
-
rm->requests_per_cq = static_cast<
|
355
|
+
rm->requests_per_cq = static_cast<LockedMultiProducerSingleConsumerQueue*>(
|
354
356
|
gpr_malloc(sizeof(*rm->requests_per_cq) * server->cq_count));
|
355
357
|
for (size_t i = 0; i < server->cq_count; i++) {
|
356
|
-
|
358
|
+
new (&rm->requests_per_cq[i]) LockedMultiProducerSingleConsumerQueue();
|
357
359
|
}
|
358
360
|
}
|
359
361
|
|
360
362
|
static void request_matcher_destroy(request_matcher* rm) {
|
361
363
|
for (size_t i = 0; i < rm->server->cq_count; i++) {
|
362
|
-
GPR_ASSERT(
|
363
|
-
|
364
|
+
GPR_ASSERT(rm->requests_per_cq[i].Pop() == nullptr);
|
365
|
+
rm->requests_per_cq[i].~LockedMultiProducerSingleConsumerQueue();
|
364
366
|
}
|
365
367
|
gpr_free(rm->requests_per_cq);
|
366
368
|
}
|
@@ -389,7 +391,7 @@ static void request_matcher_kill_requests(grpc_server* server,
|
|
389
391
|
requested_call* rc;
|
390
392
|
for (size_t i = 0; i < server->cq_count; i++) {
|
391
393
|
while ((rc = reinterpret_cast<requested_call*>(
|
392
|
-
|
394
|
+
rm->requests_per_cq[i].Pop())) != nullptr) {
|
393
395
|
fail_call(server, i, rc, GRPC_ERROR_REF(error));
|
394
396
|
}
|
395
397
|
}
|
@@ -454,7 +456,7 @@ static void finish_destroy_channel(void* cd, grpc_error* error) {
|
|
454
456
|
server_unref(server);
|
455
457
|
}
|
456
458
|
|
457
|
-
static void destroy_channel(channel_data* chand
|
459
|
+
static void destroy_channel(channel_data* chand) {
|
458
460
|
if (is_channel_orphaned(chand)) return;
|
459
461
|
GPR_ASSERT(chand->server != nullptr);
|
460
462
|
orphan_channel(chand);
|
@@ -463,12 +465,9 @@ static void destroy_channel(channel_data* chand, grpc_error* error) {
|
|
463
465
|
GRPC_CLOSURE_INIT(&chand->finish_destroy_channel_closure,
|
464
466
|
finish_destroy_channel, chand, grpc_schedule_on_exec_ctx);
|
465
467
|
|
466
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_server_channel_trace)
|
467
|
-
|
468
|
-
const char* msg = grpc_error_string(error);
|
469
|
-
gpr_log(GPR_INFO, "Disconnected client: %s", msg);
|
468
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_server_channel_trace)) {
|
469
|
+
gpr_log(GPR_INFO, "Disconnected client");
|
470
470
|
}
|
471
|
-
GRPC_ERROR_UNREF(error);
|
472
471
|
|
473
472
|
grpc_transport_op* op =
|
474
473
|
grpc_make_transport_op(&chand->finish_destroy_channel_closure);
|
@@ -534,8 +533,8 @@ static void publish_new_rpc(void* arg, grpc_error* error) {
|
|
534
533
|
|
535
534
|
for (size_t i = 0; i < server->cq_count; i++) {
|
536
535
|
size_t cq_idx = (chand->cq_idx + i) % server->cq_count;
|
537
|
-
requested_call* rc =
|
538
|
-
|
536
|
+
requested_call* rc =
|
537
|
+
reinterpret_cast<requested_call*>(rm->requests_per_cq[cq_idx].TryPop());
|
539
538
|
if (rc == nullptr) {
|
540
539
|
continue;
|
541
540
|
} else {
|
@@ -556,8 +555,8 @@ static void publish_new_rpc(void* arg, grpc_error* error) {
|
|
556
555
|
// added to the pending list.
|
557
556
|
for (size_t i = 0; i < server->cq_count; i++) {
|
558
557
|
size_t cq_idx = (chand->cq_idx + i) % server->cq_count;
|
559
|
-
requested_call* rc =
|
560
|
-
|
558
|
+
requested_call* rc =
|
559
|
+
reinterpret_cast<requested_call*>(rm->requests_per_cq[cq_idx].Pop());
|
561
560
|
if (rc == nullptr) {
|
562
561
|
continue;
|
563
562
|
} else {
|
@@ -631,8 +630,8 @@ static void start_new_rpc(grpc_call_element* elem) {
|
|
631
630
|
chand->registered_method_slots];
|
632
631
|
if (rm->server_registered_method == nullptr) break;
|
633
632
|
if (!rm->has_host) continue;
|
634
|
-
if (
|
635
|
-
if (
|
633
|
+
if (rm->host != calld->host) continue;
|
634
|
+
if (rm->method != calld->path) continue;
|
636
635
|
if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
|
637
636
|
0 == (calld->recv_initial_metadata_flags &
|
638
637
|
GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST)) {
|
@@ -649,7 +648,7 @@ static void start_new_rpc(grpc_call_element* elem) {
|
|
649
648
|
chand->registered_method_slots];
|
650
649
|
if (rm->server_registered_method == nullptr) break;
|
651
650
|
if (rm->has_host) continue;
|
652
|
-
if (
|
651
|
+
if (rm->method != calld->path) continue;
|
653
652
|
if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
|
654
653
|
0 == (calld->recv_initial_metadata_flags &
|
655
654
|
GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST)) {
|
@@ -887,43 +886,25 @@ static void accept_stream(void* cd, grpc_transport* transport,
|
|
887
886
|
grpc_call_start_batch_and_execute(call, &op, 1, &calld->got_initial_metadata);
|
888
887
|
}
|
889
888
|
|
890
|
-
static
|
891
|
-
|
892
|
-
grpc_server* server = chand->server;
|
893
|
-
if (chand->connectivity_state != GRPC_CHANNEL_SHUTDOWN) {
|
894
|
-
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
895
|
-
op->on_connectivity_state_change = &chand->channel_connectivity_changed;
|
896
|
-
op->connectivity_state = &chand->connectivity_state;
|
897
|
-
grpc_channel_next_op(grpc_channel_stack_element(
|
898
|
-
grpc_channel_get_channel_stack(chand->channel), 0),
|
899
|
-
op);
|
900
|
-
} else {
|
901
|
-
gpr_mu_lock(&server->mu_global);
|
902
|
-
destroy_channel(chand, GRPC_ERROR_REF(error));
|
903
|
-
gpr_mu_unlock(&server->mu_global);
|
904
|
-
GRPC_CHANNEL_INTERNAL_UNREF(chand->channel, "connectivity");
|
905
|
-
}
|
906
|
-
}
|
907
|
-
|
908
|
-
static grpc_error* init_call_elem(grpc_call_element* elem,
|
909
|
-
const grpc_call_element_args* args) {
|
889
|
+
static grpc_error* server_init_call_elem(grpc_call_element* elem,
|
890
|
+
const grpc_call_element_args* args) {
|
910
891
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
911
892
|
server_ref(chand->server);
|
912
893
|
new (elem->call_data) call_data(elem, *args);
|
913
894
|
return GRPC_ERROR_NONE;
|
914
895
|
}
|
915
896
|
|
916
|
-
static void
|
917
|
-
|
918
|
-
|
897
|
+
static void server_destroy_call_elem(grpc_call_element* elem,
|
898
|
+
const grpc_call_final_info* final_info,
|
899
|
+
grpc_closure* ignored) {
|
919
900
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
920
901
|
calld->~call_data();
|
921
902
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
922
903
|
server_unref(chand->server);
|
923
904
|
}
|
924
905
|
|
925
|
-
static grpc_error*
|
926
|
-
|
906
|
+
static grpc_error* server_init_channel_elem(grpc_channel_element* elem,
|
907
|
+
grpc_channel_element_args* args) {
|
927
908
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
928
909
|
GPR_ASSERT(args->is_first);
|
929
910
|
GPR_ASSERT(!args->is_last);
|
@@ -931,21 +912,23 @@ static grpc_error* init_channel_elem(grpc_channel_element* elem,
|
|
931
912
|
chand->channel = nullptr;
|
932
913
|
chand->next = chand->prev = chand;
|
933
914
|
chand->registered_methods = nullptr;
|
934
|
-
chand->connectivity_state = GRPC_CHANNEL_IDLE;
|
935
|
-
GRPC_CLOSURE_INIT(&chand->channel_connectivity_changed,
|
936
|
-
channel_connectivity_changed, chand,
|
937
|
-
grpc_schedule_on_exec_ctx);
|
938
915
|
return GRPC_ERROR_NONE;
|
939
916
|
}
|
940
917
|
|
941
|
-
static void
|
918
|
+
static void server_destroy_channel_elem(grpc_channel_element* elem) {
|
942
919
|
size_t i;
|
943
920
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
944
921
|
if (chand->registered_methods) {
|
945
922
|
for (i = 0; i < chand->registered_method_slots; i++) {
|
946
923
|
grpc_slice_unref_internal(chand->registered_methods[i].method);
|
924
|
+
GPR_DEBUG_ASSERT(chand->registered_methods[i].method.refcount ==
|
925
|
+
&grpc_core::kNoopRefcount ||
|
926
|
+
chand->registered_methods[i].method.refcount == nullptr);
|
947
927
|
if (chand->registered_methods[i].has_host) {
|
948
928
|
grpc_slice_unref_internal(chand->registered_methods[i].host);
|
929
|
+
GPR_DEBUG_ASSERT(chand->registered_methods[i].host.refcount ==
|
930
|
+
&grpc_core::kNoopRefcount ||
|
931
|
+
chand->registered_methods[i].host.refcount == nullptr);
|
949
932
|
}
|
950
933
|
}
|
951
934
|
gpr_free(chand->registered_methods);
|
@@ -970,12 +953,12 @@ const grpc_channel_filter grpc_server_top_filter = {
|
|
970
953
|
server_start_transport_stream_op_batch,
|
971
954
|
grpc_channel_next_op,
|
972
955
|
sizeof(call_data),
|
973
|
-
|
956
|
+
server_init_call_elem,
|
974
957
|
grpc_call_stack_ignore_set_pollset_or_pollset_set,
|
975
|
-
|
958
|
+
server_destroy_call_elem,
|
976
959
|
sizeof(channel_data),
|
977
|
-
|
978
|
-
|
960
|
+
server_init_channel_elem,
|
961
|
+
server_destroy_channel_elem,
|
979
962
|
grpc_channel_next_get_info,
|
980
963
|
"server",
|
981
964
|
};
|
@@ -1145,6 +1128,31 @@ void grpc_server_get_pollsets(grpc_server* server, grpc_pollset*** pollsets,
|
|
1145
1128
|
*pollsets = server->pollsets;
|
1146
1129
|
}
|
1147
1130
|
|
1131
|
+
class ConnectivityWatcher
|
1132
|
+
: public grpc_core::AsyncConnectivityStateWatcherInterface {
|
1133
|
+
public:
|
1134
|
+
explicit ConnectivityWatcher(channel_data* chand) : chand_(chand) {
|
1135
|
+
GRPC_CHANNEL_INTERNAL_REF(chand_->channel, "connectivity");
|
1136
|
+
}
|
1137
|
+
|
1138
|
+
~ConnectivityWatcher() {
|
1139
|
+
GRPC_CHANNEL_INTERNAL_UNREF(chand_->channel, "connectivity");
|
1140
|
+
}
|
1141
|
+
|
1142
|
+
private:
|
1143
|
+
void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
|
1144
|
+
// Don't do anything until we are being shut down.
|
1145
|
+
if (new_state != GRPC_CHANNEL_SHUTDOWN) return;
|
1146
|
+
// Shut down channel.
|
1147
|
+
grpc_server* server = chand_->server;
|
1148
|
+
gpr_mu_lock(&server->mu_global);
|
1149
|
+
destroy_channel(chand_);
|
1150
|
+
gpr_mu_unlock(&server->mu_global);
|
1151
|
+
}
|
1152
|
+
|
1153
|
+
channel_data* chand_;
|
1154
|
+
};
|
1155
|
+
|
1148
1156
|
void grpc_server_setup_transport(
|
1149
1157
|
grpc_server* s, grpc_transport* transport, grpc_pollset* accepting_pollset,
|
1150
1158
|
const grpc_channel_args* args,
|
@@ -1200,18 +1208,13 @@ void grpc_server_setup_transport(
|
|
1200
1208
|
chand->registered_methods =
|
1201
1209
|
static_cast<channel_registered_method*>(gpr_zalloc(alloc));
|
1202
1210
|
for (rm = s->registered_methods; rm; rm = rm->next) {
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
if (
|
1207
|
-
host =
|
1208
|
-
has_host = true;
|
1209
|
-
} else {
|
1210
|
-
has_host = false;
|
1211
|
+
grpc_core::ExternallyManagedSlice host;
|
1212
|
+
grpc_core::ExternallyManagedSlice method(rm->method);
|
1213
|
+
const bool has_host = rm->host != nullptr;
|
1214
|
+
if (has_host) {
|
1215
|
+
host = grpc_core::ExternallyManagedSlice(rm->host);
|
1211
1216
|
}
|
1212
|
-
|
1213
|
-
hash = GRPC_MDSTR_KV_HASH(has_host ? grpc_slice_hash_internal(host) : 0,
|
1214
|
-
grpc_slice_hash_internal(method));
|
1217
|
+
hash = GRPC_MDSTR_KV_HASH(has_host ? host.Hash() : 0, method.Hash());
|
1215
1218
|
for (probes = 0; chand->registered_methods[(hash + probes) % slots]
|
1216
1219
|
.server_registered_method != nullptr;
|
1217
1220
|
probes++)
|
@@ -1237,13 +1240,12 @@ void grpc_server_setup_transport(
|
|
1237
1240
|
chand->next->prev = chand->prev->next = chand;
|
1238
1241
|
gpr_mu_unlock(&s->mu_global);
|
1239
1242
|
|
1240
|
-
GRPC_CHANNEL_INTERNAL_REF(channel, "connectivity");
|
1241
1243
|
op = grpc_make_transport_op(nullptr);
|
1242
1244
|
op->set_accept_stream = true;
|
1243
1245
|
op->set_accept_stream_fn = accept_stream;
|
1244
1246
|
op->set_accept_stream_user_data = chand;
|
1245
|
-
op->
|
1246
|
-
|
1247
|
+
op->start_connectivity_watch.reset(
|
1248
|
+
grpc_core::New<ConnectivityWatcher>(chand));
|
1247
1249
|
if (gpr_atm_acq_load(&s->shutdown_flag) != 0) {
|
1248
1250
|
op->disconnect_with_error =
|
1249
1251
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown");
|
@@ -1430,13 +1432,12 @@ static grpc_call_error queue_call_request(grpc_server* server, size_t cq_idx,
|
|
1430
1432
|
rm = &rc->data.registered.method->matcher;
|
1431
1433
|
break;
|
1432
1434
|
}
|
1433
|
-
if (
|
1435
|
+
if (rm->requests_per_cq[cq_idx].Push(rc->mpscq_node.get())) {
|
1434
1436
|
/* this was the first queued request: we need to lock and start
|
1435
1437
|
matching calls */
|
1436
1438
|
gpr_mu_lock(&server->mu_call);
|
1437
1439
|
while ((calld = rm->pending_head) != nullptr) {
|
1438
|
-
rc = reinterpret_cast<requested_call*>(
|
1439
|
-
gpr_locked_mpscq_pop(&rm->requests_per_cq[cq_idx]));
|
1440
|
+
rc = reinterpret_cast<requested_call*>(rm->requests_per_cq[cq_idx].Pop());
|
1440
1441
|
if (rc == nullptr) break;
|
1441
1442
|
rm->pending_head = calld->pending_next;
|
1442
1443
|
gpr_mu_unlock(&server->mu_call);
|
@@ -22,7 +22,6 @@
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
24
|
#include <grpc/slice_buffer.h>
|
25
|
-
#include "src/core/lib/gprpp/abstract.h"
|
26
25
|
#include "src/core/lib/gprpp/orphanable.h"
|
27
26
|
#include "src/core/lib/iomgr/closure.h"
|
28
27
|
|
@@ -45,14 +44,13 @@ class ByteStream : public Orphanable {
|
|
45
44
|
//
|
46
45
|
// max_size_hint can be set as a hint as to the maximum number
|
47
46
|
// of bytes that would be acceptable to read.
|
48
|
-
virtual bool Next(size_t max_size_hint,
|
49
|
-
grpc_closure* on_complete) GRPC_ABSTRACT;
|
47
|
+
virtual bool Next(size_t max_size_hint, grpc_closure* on_complete) = 0;
|
50
48
|
|
51
49
|
// Returns the next slice in the byte stream when it is available, as
|
52
50
|
// indicated by Next().
|
53
51
|
//
|
54
52
|
// Once a slice is returned into *slice, it is owned by the caller.
|
55
|
-
virtual grpc_error* Pull(grpc_slice* slice)
|
53
|
+
virtual grpc_error* Pull(grpc_slice* slice) = 0;
|
56
54
|
|
57
55
|
// Shuts down the byte stream.
|
58
56
|
//
|
@@ -61,15 +59,13 @@ class ByteStream : public Orphanable {
|
|
61
59
|
//
|
62
60
|
// The next call to Pull() (if any) will return the error passed to
|
63
61
|
// Shutdown().
|
64
|
-
virtual void Shutdown(grpc_error* error)
|
62
|
+
virtual void Shutdown(grpc_error* error) = 0;
|
65
63
|
|
66
64
|
uint32_t length() const { return length_; }
|
67
65
|
uint32_t flags() const { return flags_; }
|
68
66
|
|
69
67
|
void set_flags(uint32_t flags) { flags_ = flags; }
|
70
68
|
|
71
|
-
GRPC_ABSTRACT_BASE_CLASS
|
72
|
-
|
73
69
|
protected:
|
74
70
|
ByteStream(uint32_t length, uint32_t flags)
|
75
71
|
: length_(length), flags_(flags) {}
|
@@ -26,9 +26,14 @@
|
|
26
26
|
#include <grpc/support/log.h>
|
27
27
|
#include <grpc/support/string_util.h>
|
28
28
|
|
29
|
-
|
29
|
+
#include "src/core/lib/iomgr/combiner.h"
|
30
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
30
31
|
|
31
|
-
|
32
|
+
namespace grpc_core {
|
33
|
+
|
34
|
+
TraceFlag grpc_connectivity_state_trace(false, "connectivity_state");
|
35
|
+
|
36
|
+
const char* ConnectivityStateName(grpc_connectivity_state state) {
|
32
37
|
switch (state) {
|
33
38
|
case GRPC_CHANNEL_IDLE:
|
34
39
|
return "IDLE";
|
@@ -44,122 +49,131 @@ const char* grpc_connectivity_state_name(grpc_connectivity_state state) {
|
|
44
49
|
GPR_UNREACHABLE_CODE(return "UNKNOWN");
|
45
50
|
}
|
46
51
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
gpr_atm_no_barrier_store(&tracker->current_state_atm, init_state);
|
51
|
-
tracker->watchers = nullptr;
|
52
|
-
tracker->name = gpr_strdup(name);
|
53
|
-
}
|
54
|
-
|
55
|
-
void grpc_connectivity_state_destroy(grpc_connectivity_state_tracker* tracker) {
|
56
|
-
grpc_error* error;
|
57
|
-
grpc_connectivity_state_watcher* w;
|
58
|
-
while ((w = tracker->watchers)) {
|
59
|
-
tracker->watchers = w->next;
|
52
|
+
//
|
53
|
+
// AsyncConnectivityStateWatcherInterface
|
54
|
+
//
|
60
55
|
|
61
|
-
|
62
|
-
|
63
|
-
|
56
|
+
// A fire-and-forget class to asynchronously deliver a connectivity
|
57
|
+
// state notification to a watcher.
|
58
|
+
class AsyncConnectivityStateWatcherInterface::Notifier {
|
59
|
+
public:
|
60
|
+
Notifier(RefCountedPtr<AsyncConnectivityStateWatcherInterface> watcher,
|
61
|
+
grpc_connectivity_state state, Combiner* combiner)
|
62
|
+
: watcher_(std::move(watcher)), state_(state) {
|
63
|
+
if (combiner != nullptr) {
|
64
|
+
combiner->Run(
|
65
|
+
GRPC_CLOSURE_INIT(&closure_, SendNotification, this, nullptr),
|
66
|
+
GRPC_ERROR_NONE);
|
64
67
|
} else {
|
65
|
-
|
66
|
-
|
68
|
+
GRPC_CLOSURE_INIT(&closure_, SendNotification, this,
|
69
|
+
grpc_schedule_on_exec_ctx);
|
70
|
+
GRPC_CLOSURE_SCHED(&closure_, GRPC_ERROR_NONE);
|
67
71
|
}
|
68
|
-
GRPC_CLOSURE_SCHED(w->notify, error);
|
69
|
-
gpr_free(w);
|
70
72
|
}
|
71
|
-
gpr_free(tracker->name);
|
72
|
-
}
|
73
73
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
74
|
+
private:
|
75
|
+
static void SendNotification(void* arg, grpc_error* ignored) {
|
76
|
+
Notifier* self = static_cast<Notifier*>(arg);
|
77
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_connectivity_state_trace)) {
|
78
|
+
gpr_log(GPR_INFO, "watcher %p: delivering async notification for %s",
|
79
|
+
self->watcher_.get(), ConnectivityStateName(self->state_));
|
80
|
+
}
|
81
|
+
self->watcher_->OnConnectivityStateChange(self->state_);
|
82
|
+
Delete(self);
|
81
83
|
}
|
82
|
-
|
84
|
+
|
85
|
+
RefCountedPtr<AsyncConnectivityStateWatcherInterface> watcher_;
|
86
|
+
const grpc_connectivity_state state_;
|
87
|
+
grpc_closure closure_;
|
88
|
+
};
|
89
|
+
|
90
|
+
void AsyncConnectivityStateWatcherInterface::Notify(
|
91
|
+
grpc_connectivity_state state) {
|
92
|
+
New<Notifier>(Ref(), state, combiner_); // Deletes itself when done.
|
83
93
|
}
|
84
94
|
|
85
|
-
|
86
|
-
|
87
|
-
|
95
|
+
//
|
96
|
+
// ConnectivityStateTracker
|
97
|
+
//
|
98
|
+
|
99
|
+
ConnectivityStateTracker::~ConnectivityStateTracker() {
|
100
|
+
grpc_connectivity_state current_state = state_.Load(MemoryOrder::RELAXED);
|
101
|
+
if (current_state == GRPC_CHANNEL_SHUTDOWN) return;
|
102
|
+
for (const auto& p : watchers_) {
|
103
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_connectivity_state_trace)) {
|
104
|
+
gpr_log(GPR_INFO,
|
105
|
+
"ConnectivityStateTracker %s[%p]: notifying watcher %p: %s -> %s",
|
106
|
+
name_, this, p.first, ConnectivityStateName(current_state),
|
107
|
+
ConnectivityStateName(GRPC_CHANNEL_SHUTDOWN));
|
108
|
+
}
|
109
|
+
p.second->Notify(GRPC_CHANNEL_SHUTDOWN);
|
110
|
+
}
|
88
111
|
}
|
89
112
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
grpc_connectivity_state cur = static_cast<grpc_connectivity_state>(
|
94
|
-
gpr_atm_no_barrier_load(&tracker->current_state_atm));
|
113
|
+
void ConnectivityStateTracker::AddWatcher(
|
114
|
+
grpc_connectivity_state initial_state,
|
115
|
+
OrphanablePtr<ConnectivityStateWatcherInterface> watcher) {
|
95
116
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_connectivity_state_trace)) {
|
96
|
-
|
97
|
-
|
98
|
-
tracker->name, notify);
|
99
|
-
} else {
|
100
|
-
gpr_log(GPR_INFO, "CONWATCH: %p %s: from %s [cur=%s] notify=%p", tracker,
|
101
|
-
tracker->name, grpc_connectivity_state_name(*current),
|
102
|
-
grpc_connectivity_state_name(cur), notify);
|
103
|
-
}
|
117
|
+
gpr_log(GPR_INFO, "ConnectivityStateTracker %s[%p]: add watcher %p", name_,
|
118
|
+
this, watcher.get());
|
104
119
|
}
|
105
|
-
|
106
|
-
|
107
|
-
if (
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
}
|
113
|
-
while (w != nullptr) {
|
114
|
-
grpc_connectivity_state_watcher* rm_candidate = w->next;
|
115
|
-
if (rm_candidate != nullptr && rm_candidate->notify == notify) {
|
116
|
-
GRPC_CLOSURE_SCHED(notify, GRPC_ERROR_CANCELLED);
|
117
|
-
w->next = w->next->next;
|
118
|
-
gpr_free(rm_candidate);
|
119
|
-
return false;
|
120
|
-
}
|
121
|
-
w = w->next;
|
122
|
-
}
|
123
|
-
return false;
|
124
|
-
} else {
|
125
|
-
if (cur != *current) {
|
126
|
-
*current = cur;
|
127
|
-
GRPC_CLOSURE_SCHED(notify, GRPC_ERROR_NONE);
|
128
|
-
} else {
|
129
|
-
grpc_connectivity_state_watcher* w =
|
130
|
-
static_cast<grpc_connectivity_state_watcher*>(gpr_malloc(sizeof(*w)));
|
131
|
-
w->current = current;
|
132
|
-
w->notify = notify;
|
133
|
-
w->next = tracker->watchers;
|
134
|
-
tracker->watchers = w;
|
120
|
+
grpc_connectivity_state current_state = state_.Load(MemoryOrder::RELAXED);
|
121
|
+
if (initial_state != current_state) {
|
122
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_connectivity_state_trace)) {
|
123
|
+
gpr_log(GPR_INFO,
|
124
|
+
"ConnectivityStateTracker %s[%p]: notifying watcher %p: %s -> %s",
|
125
|
+
name_, this, watcher.get(), ConnectivityStateName(initial_state),
|
126
|
+
ConnectivityStateName(current_state));
|
135
127
|
}
|
136
|
-
|
128
|
+
watcher->Notify(current_state);
|
129
|
+
}
|
130
|
+
// If we're in state SHUTDOWN, don't add the watcher, so that it will
|
131
|
+
// be orphaned immediately.
|
132
|
+
if (current_state != GRPC_CHANNEL_SHUTDOWN) {
|
133
|
+
watchers_.insert(std::make_pair(watcher.get(), std::move(watcher)));
|
137
134
|
}
|
138
135
|
}
|
139
136
|
|
140
|
-
void
|
141
|
-
|
142
|
-
const char* reason) {
|
143
|
-
grpc_connectivity_state cur = static_cast<grpc_connectivity_state>(
|
144
|
-
gpr_atm_no_barrier_load(&tracker->current_state_atm));
|
145
|
-
grpc_connectivity_state_watcher* w;
|
137
|
+
void ConnectivityStateTracker::RemoveWatcher(
|
138
|
+
ConnectivityStateWatcherInterface* watcher) {
|
146
139
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_connectivity_state_trace)) {
|
147
|
-
gpr_log(GPR_INFO, "
|
148
|
-
|
149
|
-
grpc_connectivity_state_name(state), reason);
|
140
|
+
gpr_log(GPR_INFO, "ConnectivityStateTracker %s[%p]: remove watcher %p",
|
141
|
+
name_, this, watcher);
|
150
142
|
}
|
151
|
-
|
152
|
-
|
143
|
+
watchers_.erase(watcher);
|
144
|
+
}
|
145
|
+
|
146
|
+
void ConnectivityStateTracker::SetState(grpc_connectivity_state state,
|
147
|
+
const char* reason) {
|
148
|
+
grpc_connectivity_state current_state = state_.Load(MemoryOrder::RELAXED);
|
149
|
+
if (state == current_state) return;
|
150
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_connectivity_state_trace)) {
|
151
|
+
gpr_log(GPR_INFO, "ConnectivityStateTracker %s[%p]: %s -> %s (%s)", name_,
|
152
|
+
this, ConnectivityStateName(current_state),
|
153
|
+
ConnectivityStateName(state), reason);
|
153
154
|
}
|
154
|
-
|
155
|
-
|
156
|
-
while ((w = tracker->watchers) != nullptr) {
|
157
|
-
*w->current = state;
|
158
|
-
tracker->watchers = w->next;
|
155
|
+
state_.Store(state, MemoryOrder::RELAXED);
|
156
|
+
for (const auto& p : watchers_) {
|
159
157
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_connectivity_state_trace)) {
|
160
|
-
gpr_log(GPR_INFO,
|
158
|
+
gpr_log(GPR_INFO,
|
159
|
+
"ConnectivityStateTracker %s[%p]: notifying watcher %p: %s -> %s",
|
160
|
+
name_, this, p.first, ConnectivityStateName(current_state),
|
161
|
+
ConnectivityStateName(state));
|
161
162
|
}
|
162
|
-
|
163
|
-
gpr_free(w);
|
163
|
+
p.second->Notify(state);
|
164
164
|
}
|
165
|
+
// If the new state is SHUTDOWN, orphan all of the watchers. This
|
166
|
+
// avoids the need for the callers to explicitly cancel them.
|
167
|
+
if (state == GRPC_CHANNEL_SHUTDOWN) watchers_.clear();
|
165
168
|
}
|
169
|
+
|
170
|
+
grpc_connectivity_state ConnectivityStateTracker::state() const {
|
171
|
+
grpc_connectivity_state state = state_.Load(MemoryOrder::RELAXED);
|
172
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_connectivity_state_trace)) {
|
173
|
+
gpr_log(GPR_INFO, "ConnectivityStateTracker %s[%p]: get current state: %s",
|
174
|
+
name_, this, ConnectivityStateName(state));
|
175
|
+
}
|
176
|
+
return state;
|
177
|
+
}
|
178
|
+
|
179
|
+
} // namespace grpc_core
|