grpc 1.55.0 → 1.56.0.pre3
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 +100 -68
- data/include/grpc/event_engine/event_engine.h +4 -3
- data/include/grpc/grpc_audit_logging.h +96 -0
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/support/json.h +218 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
- data/src/core/ext/filters/client_channel/client_channel.h +6 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
- data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
- data/src/core/ext/filters/client_channel/config_selector.h +9 -24
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
- data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
- data/src/core/ext/filters/client_channel/subchannel.h +3 -43
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -9
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
- data/src/core/ext/xds/xds_api.cc +9 -6
- data/src/core/ext/xds/xds_api.h +3 -2
- data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
- data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
- data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
- data/src/core/ext/xds/xds_client.cc +5 -4
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_cluster.cc +20 -19
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
- data/src/core/ext/xds/xds_common_types.cc +3 -1
- data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
- data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
- data/src/core/ext/xds/xds_http_filters.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
- data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
- data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
- data/src/core/ext/xds/xds_listener.cc +1 -0
- data/src/core/ext/xds/xds_route_config.cc +40 -3
- data/src/core/ext/xds/xds_routing.cc +2 -2
- data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
- data/src/core/lib/avl/avl.h +5 -0
- data/src/core/lib/channel/channel_args.cc +80 -22
- data/src/core/lib/channel/channel_args.h +34 -1
- data/src/core/lib/channel/channel_trace.cc +16 -12
- data/src/core/lib/channel/channelz.cc +159 -132
- data/src/core/lib/channel/channelz.h +42 -35
- data/src/core/lib/channel/channelz_registry.cc +23 -20
- data/src/core/lib/channel/connected_channel.cc +17 -6
- data/src/core/lib/channel/promise_based_filter.cc +0 -4
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression_internal.cc +2 -5
- data/src/core/lib/config/config_vars.cc +20 -18
- data/src/core/lib/config/config_vars.h +4 -4
- data/src/core/lib/config/load_config.cc +13 -0
- data/src/core/lib/config/load_config.h +6 -0
- data/src/core/lib/debug/event_log.h +1 -1
- data/src/core/lib/debug/stats_data.h +1 -1
- data/src/core/lib/debug/trace.cc +24 -55
- data/src/core/lib/debug/trace.h +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
- data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
- data/src/core/lib/event_engine/default_event_engine.cc +13 -1
- data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
- data/src/core/lib/event_engine/poller.h +2 -2
- data/src/core/lib/event_engine/posix.h +4 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
- data/src/core/lib/event_engine/shim.cc +7 -1
- data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
- data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
- data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
- data/src/core/lib/event_engine/windows/iocp.cc +4 -3
- data/src/core/lib/event_engine/windows/iocp.h +3 -3
- data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
- data/src/core/lib/event_engine/windows/win_socket.h +4 -4
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
- data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
- data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
- data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
- data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
- data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
- data/src/core/lib/experiments/config.cc +38 -7
- data/src/core/lib/experiments/config.h +16 -0
- data/src/core/lib/experiments/experiments.cc +67 -20
- data/src/core/lib/experiments/experiments.h +27 -21
- data/src/core/lib/gpr/log_internal.h +55 -0
- data/src/core/lib/gprpp/crash.cc +10 -0
- data/src/core/lib/gprpp/crash.h +3 -0
- data/src/core/lib/gprpp/per_cpu.cc +33 -0
- data/src/core/lib/gprpp/per_cpu.h +29 -6
- data/src/core/lib/gprpp/time.cc +1 -0
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
- data/src/core/lib/iomgr/ev_apple.cc +12 -12
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
- data/src/core/lib/iomgr/iocp_windows.cc +24 -3
- data/src/core/lib/iomgr/iocp_windows.h +11 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
- data/src/core/lib/iomgr/socket_windows.cc +61 -7
- data/src/core/lib/iomgr/socket_windows.h +9 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
- data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
- data/src/core/lib/json/json.h +2 -166
- data/src/core/lib/json/json_object_loader.cc +8 -9
- data/src/core/lib/json/json_object_loader.h +25 -18
- data/src/core/lib/json/json_reader.cc +13 -6
- data/src/core/lib/json/json_util.cc +6 -11
- data/src/core/lib/json/json_writer.cc +7 -8
- data/src/core/lib/load_balancing/lb_policy.h +13 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/matchers/matchers.h +2 -1
- data/src/core/lib/promise/activity.cc +5 -0
- data/src/core/lib/promise/activity.h +10 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -1
- data/src/core/lib/promise/party.cc +31 -13
- data/src/core/lib/promise/party.h +11 -2
- data/src/core/lib/promise/pipe.h +9 -2
- data/src/core/lib/promise/prioritized_race.h +95 -0
- data/src/core/lib/promise/sleep.cc +2 -1
- data/src/core/lib/resolver/server_address.cc +0 -8
- data/src/core/lib/resolver/server_address.h +0 -6
- data/src/core/lib/resource_quota/memory_quota.cc +7 -7
- data/src/core/lib/resource_quota/memory_quota.h +1 -2
- data/src/core/lib/security/authorization/audit_logging.cc +98 -0
- data/src/core/lib/security/authorization/audit_logging.h +73 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
- data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
- data/src/core/lib/security/authorization/rbac_policy.h +19 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
- data/src/core/lib/security/authorization/stdout_logger.h +61 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
- data/src/core/lib/security/util/json_util.cc +1 -0
- data/src/core/lib/service_config/service_config_call_data.h +49 -20
- data/src/core/lib/service_config/service_config_impl.cc +2 -1
- data/src/core/lib/surface/call.cc +38 -23
- data/src/core/lib/surface/completion_queue.cc +6 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/batch_builder.cc +15 -12
- data/src/core/lib/transport/batch_builder.h +39 -35
- data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +8 -9
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
- data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
- data/third_party/cares/cares/include/ares.h +23 -1
- data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
- data/third_party/cares/cares/include/ares_rules.h +2 -2
- data/third_party/cares/cares/include/ares_version.h +3 -3
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
- data/third_party/cares/cares/src/lib/ares_data.c +16 -0
- data/third_party/cares/cares/src/lib/ares_data.h +7 -0
- data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
- data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
- data/third_party/cares/cares/src/lib/ares_init.c +97 -485
- data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
- data/third_party/cares/cares/src/lib/ares_private.h +30 -16
- data/third_party/cares/cares/src/lib/ares_process.c +55 -16
- data/third_party/cares/cares/src/lib/ares_query.c +1 -35
- data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
- data/third_party/cares/cares/src/lib/ares_send.c +5 -7
- data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
- data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
- data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
- data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
- data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
- metadata +50 -14
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
- data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
- data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -0,0 +1,218 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2015 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#ifndef GRPC_SUPPORT_JSON_H
|
18
|
+
#define GRPC_SUPPORT_JSON_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include <stdint.h>
|
23
|
+
|
24
|
+
#include <map>
|
25
|
+
#include <string>
|
26
|
+
#include <utility>
|
27
|
+
#include <vector>
|
28
|
+
|
29
|
+
#include "absl/strings/str_cat.h"
|
30
|
+
#include "absl/types/variant.h"
|
31
|
+
|
32
|
+
namespace grpc_core {
|
33
|
+
namespace experimental {
|
34
|
+
|
35
|
+
// A JSON value, which can be any one of null, boolean, number, string,
|
36
|
+
// object, or array.
|
37
|
+
class Json {
|
38
|
+
public:
|
39
|
+
// The JSON type.
|
40
|
+
enum class Type {
|
41
|
+
kNull, // No payload. Default type when using the zero-arg ctor.
|
42
|
+
kBoolean, // Use boolean() for payload.
|
43
|
+
kNumber, // Numbers are stored in string form to avoid precision
|
44
|
+
// and integer capacity issues. Use string() for payload.
|
45
|
+
kString, // Use string() for payload.
|
46
|
+
kObject, // Use object() for payload.
|
47
|
+
kArray, // Use array() for payload.
|
48
|
+
};
|
49
|
+
|
50
|
+
using Object = std::map<std::string, Json>;
|
51
|
+
using Array = std::vector<Json>;
|
52
|
+
|
53
|
+
// Factory method for kBoolean.
|
54
|
+
static Json FromBool(bool b) {
|
55
|
+
Json json;
|
56
|
+
json.value_ = b;
|
57
|
+
return json;
|
58
|
+
}
|
59
|
+
|
60
|
+
// Factory methods for kNumber.
|
61
|
+
static Json FromNumber(const std::string& str) {
|
62
|
+
Json json;
|
63
|
+
json.value_ = NumberValue{str};
|
64
|
+
return json;
|
65
|
+
}
|
66
|
+
static Json FromNumber(const char* str) {
|
67
|
+
Json json;
|
68
|
+
json.value_ = NumberValue{std::string(str)};
|
69
|
+
return json;
|
70
|
+
}
|
71
|
+
static Json FromNumber(std::string&& str) {
|
72
|
+
Json json;
|
73
|
+
json.value_ = NumberValue{std::move(str)};
|
74
|
+
return json;
|
75
|
+
}
|
76
|
+
static Json FromNumber(int32_t value) {
|
77
|
+
Json json;
|
78
|
+
json.value_ = NumberValue{absl::StrCat(value)};
|
79
|
+
return json;
|
80
|
+
}
|
81
|
+
static Json FromNumber(uint32_t value) {
|
82
|
+
Json json;
|
83
|
+
json.value_ = NumberValue{absl::StrCat(value)};
|
84
|
+
return json;
|
85
|
+
}
|
86
|
+
static Json FromNumber(int64_t value) {
|
87
|
+
Json json;
|
88
|
+
json.value_ = NumberValue{absl::StrCat(value)};
|
89
|
+
return json;
|
90
|
+
}
|
91
|
+
static Json FromNumber(uint64_t value) {
|
92
|
+
Json json;
|
93
|
+
json.value_ = NumberValue{absl::StrCat(value)};
|
94
|
+
return json;
|
95
|
+
}
|
96
|
+
static Json FromNumber(double value) {
|
97
|
+
Json json;
|
98
|
+
json.value_ = NumberValue{absl::StrCat(value)};
|
99
|
+
return json;
|
100
|
+
}
|
101
|
+
|
102
|
+
// Factory methods for kString.
|
103
|
+
static Json FromString(const std::string& str) {
|
104
|
+
Json json;
|
105
|
+
json.value_ = str;
|
106
|
+
return json;
|
107
|
+
}
|
108
|
+
static Json FromString(const char* str) {
|
109
|
+
Json json;
|
110
|
+
json.value_ = std::string(str);
|
111
|
+
return json;
|
112
|
+
}
|
113
|
+
static Json FromString(std::string&& str) {
|
114
|
+
Json json;
|
115
|
+
json.value_ = std::move(str);
|
116
|
+
return json;
|
117
|
+
}
|
118
|
+
|
119
|
+
// Factory methods for kObject.
|
120
|
+
static Json FromObject(const Object& object) {
|
121
|
+
Json json;
|
122
|
+
json.value_ = object;
|
123
|
+
return json;
|
124
|
+
}
|
125
|
+
static Json FromObject(Object&& object) {
|
126
|
+
Json json;
|
127
|
+
json.value_ = std::move(object);
|
128
|
+
return json;
|
129
|
+
}
|
130
|
+
|
131
|
+
// Factory methods for kArray.
|
132
|
+
static Json FromArray(const Array& array) {
|
133
|
+
Json json;
|
134
|
+
json.value_ = array;
|
135
|
+
return json;
|
136
|
+
}
|
137
|
+
static Json FromArray(Array&& array) {
|
138
|
+
Json json;
|
139
|
+
json.value_ = std::move(array);
|
140
|
+
return json;
|
141
|
+
}
|
142
|
+
|
143
|
+
Json() = default;
|
144
|
+
|
145
|
+
// Copyable.
|
146
|
+
Json(const Json& other) = default;
|
147
|
+
Json& operator=(const Json& other) = default;
|
148
|
+
|
149
|
+
// Moveable.
|
150
|
+
Json(Json&& other) noexcept : value_(std::move(other.value_)) {
|
151
|
+
other.value_ = absl::monostate();
|
152
|
+
}
|
153
|
+
Json& operator=(Json&& other) noexcept {
|
154
|
+
value_ = std::move(other.value_);
|
155
|
+
other.value_ = absl::monostate();
|
156
|
+
return *this;
|
157
|
+
}
|
158
|
+
|
159
|
+
// Returns the JSON type.
|
160
|
+
Type type() const {
|
161
|
+
struct ValueFunctor {
|
162
|
+
Json::Type operator()(const absl::monostate&) { return Type::kNull; }
|
163
|
+
Json::Type operator()(bool) { return Type::kBoolean; }
|
164
|
+
Json::Type operator()(const NumberValue&) { return Type::kNumber; }
|
165
|
+
Json::Type operator()(const std::string&) { return Type::kString; }
|
166
|
+
Json::Type operator()(const Object&) { return Type::kObject; }
|
167
|
+
Json::Type operator()(const Array&) { return Type::kArray; }
|
168
|
+
};
|
169
|
+
return absl::visit(ValueFunctor(), value_);
|
170
|
+
}
|
171
|
+
|
172
|
+
// Payload accessor for kBoolean.
|
173
|
+
// Must not be called for other types.
|
174
|
+
bool boolean() const { return absl::get<bool>(value_); }
|
175
|
+
|
176
|
+
// Payload accessor for kNumber or kString.
|
177
|
+
// Must not be called for other types.
|
178
|
+
const std::string& string() const {
|
179
|
+
const NumberValue* num = absl::get_if<NumberValue>(&value_);
|
180
|
+
if (num != nullptr) return num->value;
|
181
|
+
return absl::get<std::string>(value_);
|
182
|
+
}
|
183
|
+
|
184
|
+
// Payload accessor for kObject.
|
185
|
+
// Must not be called for other types.
|
186
|
+
const Object& object() const { return absl::get<Object>(value_); }
|
187
|
+
|
188
|
+
// Payload accessor for kArray.
|
189
|
+
// Must not be called for other types.
|
190
|
+
const Array& array() const { return absl::get<Array>(value_); }
|
191
|
+
|
192
|
+
bool operator==(const Json& other) const { return value_ == other.value_; }
|
193
|
+
bool operator!=(const Json& other) const { return !(*this == other); }
|
194
|
+
|
195
|
+
private:
|
196
|
+
struct NumberValue {
|
197
|
+
std::string value;
|
198
|
+
|
199
|
+
bool operator==(const NumberValue& other) const {
|
200
|
+
return value == other.value;
|
201
|
+
}
|
202
|
+
};
|
203
|
+
using Value = absl::variant<absl::monostate, // kNull
|
204
|
+
bool, // kBoolean
|
205
|
+
NumberValue, // kNumber
|
206
|
+
std::string, // kString
|
207
|
+
Object, // kObject
|
208
|
+
Array>; // kArray
|
209
|
+
|
210
|
+
explicit Json(Value value) : value_(std::move(value)) {}
|
211
|
+
|
212
|
+
Value value_;
|
213
|
+
};
|
214
|
+
|
215
|
+
} // namespace experimental
|
216
|
+
} // namespace grpc_core
|
217
|
+
|
218
|
+
#endif // GRPC_SUPPORT_JSON_H
|
@@ -67,6 +67,11 @@ absl::optional<std::string> BackendMetricFilter::MaybeSerializeBackendMetrics(
|
|
67
67
|
data.mem_utilization);
|
68
68
|
has_data = true;
|
69
69
|
}
|
70
|
+
if (data.application_utilization != -1) {
|
71
|
+
xds_data_orca_v3_OrcaLoadReport_set_application_utilization(
|
72
|
+
response, data.application_utilization);
|
73
|
+
has_data = true;
|
74
|
+
}
|
70
75
|
if (data.qps != -1) {
|
71
76
|
xds_data_orca_v3_OrcaLoadReport_set_rps_fractional(response, data.qps);
|
72
77
|
has_data = true;
|
@@ -69,6 +69,8 @@ const BackendMetricData* ParseBackendMetricData(
|
|
69
69
|
xds_data_orca_v3_OrcaLoadReport_cpu_utilization(msg);
|
70
70
|
backend_metric_data->mem_utilization =
|
71
71
|
xds_data_orca_v3_OrcaLoadReport_mem_utilization(msg);
|
72
|
+
backend_metric_data->application_utilization =
|
73
|
+
xds_data_orca_v3_OrcaLoadReport_application_utilization(msg);
|
72
74
|
backend_metric_data->qps =
|
73
75
|
xds_data_orca_v3_OrcaLoadReport_rps_fractional(msg);
|
74
76
|
backend_metric_data->eps = xds_data_orca_v3_OrcaLoadReport_eps(msg);
|
@@ -20,7 +20,6 @@
|
|
20
20
|
|
21
21
|
#include "absl/base/thread_annotations.h"
|
22
22
|
#include "absl/status/status.h"
|
23
|
-
#include "absl/synchronization/mutex.h"
|
24
23
|
#include "absl/types/optional.h"
|
25
24
|
|
26
25
|
#include <grpc/event_engine/event_engine.h>
|
@@ -36,6 +35,7 @@
|
|
36
35
|
#include "src/core/lib/gprpp/crash.h"
|
37
36
|
#include "src/core/lib/gprpp/dual_ref_counted.h"
|
38
37
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
38
|
+
#include "src/core/lib/gprpp/sync.h"
|
39
39
|
#include "src/core/lib/gprpp/time.h"
|
40
40
|
#include "src/core/lib/iomgr/closure.h"
|
41
41
|
#include "src/core/lib/iomgr/error.h"
|
@@ -169,7 +169,7 @@ class StateWatcher : public DualRefCounted<StateWatcher> {
|
|
169
169
|
|
170
170
|
void StartTimer(Timestamp deadline) {
|
171
171
|
const Duration timeout = deadline - Timestamp::Now();
|
172
|
-
|
172
|
+
MutexLock lock(&mu_);
|
173
173
|
timer_handle_ = channel_->channel_stack()->EventEngine()->RunAfter(
|
174
174
|
timeout, [self = Ref()]() mutable {
|
175
175
|
ApplicationCallbackExecCtx callback_exec_ctx;
|
@@ -186,7 +186,7 @@ class StateWatcher : public DualRefCounted<StateWatcher> {
|
|
186
186
|
GRPC_LOG_IF_ERROR("watch_completion_error", error);
|
187
187
|
}
|
188
188
|
{
|
189
|
-
|
189
|
+
MutexLock lock(&self->mu_);
|
190
190
|
if (self->timer_handle_.has_value()) {
|
191
191
|
self->channel_->channel_stack()->EventEngine()->Cancel(
|
192
192
|
*self->timer_handle_);
|
@@ -238,7 +238,7 @@ class StateWatcher : public DualRefCounted<StateWatcher> {
|
|
238
238
|
// timer_handle_ might be accessed in parallel from multiple threads, e.g.
|
239
239
|
// timer callback fired immediately on an EventEngine thread before
|
240
240
|
// RunAfter() returns.
|
241
|
-
|
241
|
+
Mutex mu_;
|
242
242
|
absl::optional<grpc_event_engine::experimental::EventEngine::TaskHandle>
|
243
243
|
timer_handle_ ABSL_GUARDED_BY(mu_);
|
244
244
|
bool timer_fired_ = false;
|
@@ -42,6 +42,7 @@
|
|
42
42
|
#include <grpc/event_engine/event_engine.h>
|
43
43
|
#include <grpc/slice.h>
|
44
44
|
#include <grpc/status.h>
|
45
|
+
#include <grpc/support/json.h>
|
45
46
|
#include <grpc/support/log.h>
|
46
47
|
#include <grpc/support/string_util.h>
|
47
48
|
#include <grpc/support/time.h>
|
@@ -94,9 +95,6 @@
|
|
94
95
|
// Client channel filter
|
95
96
|
//
|
96
97
|
|
97
|
-
#define GRPC_ARG_HEALTH_CHECK_SERVICE_NAME \
|
98
|
-
"grpc.internal.health_check_service_name"
|
99
|
-
|
100
98
|
namespace grpc_core {
|
101
99
|
|
102
100
|
using internal::ClientChannelMethodParsedConfig;
|
@@ -479,8 +477,8 @@ class ClientChannel::ResolverResultHandler : public Resolver::ResultHandler {
|
|
479
477
|
//
|
480
478
|
|
481
479
|
// This class is a wrapper for Subchannel that hides details of the
|
482
|
-
// channel's implementation (such as the
|
483
|
-
//
|
480
|
+
// channel's implementation (such as the connected subchannel) from the
|
481
|
+
// LB policy API.
|
484
482
|
//
|
485
483
|
// Note that no synchronization is needed here, because even if the
|
486
484
|
// underlying subchannel is shared between channels, this wrapper will only
|
@@ -488,14 +486,12 @@ class ClientChannel::ResolverResultHandler : public Resolver::ResultHandler {
|
|
488
486
|
// control plane work_serializer.
|
489
487
|
class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
490
488
|
public:
|
491
|
-
SubchannelWrapper(ClientChannel* chand, RefCountedPtr<Subchannel> subchannel
|
492
|
-
absl::optional<std::string> health_check_service_name)
|
489
|
+
SubchannelWrapper(ClientChannel* chand, RefCountedPtr<Subchannel> subchannel)
|
493
490
|
: SubchannelInterface(GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)
|
494
491
|
? "SubchannelWrapper"
|
495
492
|
: nullptr),
|
496
493
|
chand_(chand),
|
497
|
-
subchannel_(std::move(subchannel))
|
498
|
-
health_check_service_name_(std::move(health_check_service_name)) {
|
494
|
+
subchannel_(std::move(subchannel)) {
|
499
495
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
500
496
|
gpr_log(GPR_INFO,
|
501
497
|
"chand=%p: creating subchannel wrapper %p for subchannel %p",
|
@@ -548,7 +544,6 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
548
544
|
watcher_wrapper = new WatcherWrapper(std::move(watcher),
|
549
545
|
Ref(DEBUG_LOCATION, "WatcherWrapper"));
|
550
546
|
subchannel_->WatchConnectivityState(
|
551
|
-
health_check_service_name_,
|
552
547
|
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
|
553
548
|
watcher_wrapper));
|
554
549
|
}
|
@@ -557,8 +552,7 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
557
552
|
override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
558
553
|
auto it = watcher_map_.find(watcher);
|
559
554
|
GPR_ASSERT(it != watcher_map_.end());
|
560
|
-
subchannel_->CancelConnectivityStateWatch(
|
561
|
-
it->second);
|
555
|
+
subchannel_->CancelConnectivityStateWatch(it->second);
|
562
556
|
watcher_map_.erase(it);
|
563
557
|
}
|
564
558
|
|
@@ -675,17 +669,13 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
675
669
|
std::string(keepalive_throttling.value()).c_str());
|
676
670
|
}
|
677
671
|
}
|
678
|
-
//
|
679
|
-
//
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
watcher_->OnConnectivityStateChange(
|
686
|
-
state, state == GRPC_CHANNEL_TRANSIENT_FAILURE ? status
|
687
|
-
: absl::OkStatus());
|
688
|
-
}
|
672
|
+
// Propagate status only in state TF.
|
673
|
+
// We specifically want to avoid propagating the status for
|
674
|
+
// state IDLE that the real subchannel gave us only for the
|
675
|
+
// purpose of keepalive propagation.
|
676
|
+
watcher_->OnConnectivityStateChange(
|
677
|
+
state,
|
678
|
+
state == GRPC_CHANNEL_TRANSIENT_FAILURE ? status : absl::OkStatus());
|
689
679
|
}
|
690
680
|
|
691
681
|
std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
|
@@ -695,7 +685,6 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
695
685
|
|
696
686
|
ClientChannel* chand_;
|
697
687
|
RefCountedPtr<Subchannel> subchannel_;
|
698
|
-
absl::optional<std::string> health_check_service_name_;
|
699
688
|
// Maps from the address of the watcher passed to us by the LB policy
|
700
689
|
// to the address of the WrapperWatcher that we passed to the underlying
|
701
690
|
// subchannel. This is needed so that when the LB policy calls
|
@@ -908,13 +897,6 @@ class ClientChannel::ClientChannelControlHelper
|
|
908
897
|
ServerAddress address, const ChannelArgs& args) override
|
909
898
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
910
899
|
if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
|
911
|
-
// Determine health check service name.
|
912
|
-
absl::optional<std::string> health_check_service_name;
|
913
|
-
if (!args.GetBool(GRPC_ARG_INHIBIT_HEALTH_CHECKING).value_or(false)) {
|
914
|
-
health_check_service_name =
|
915
|
-
args.GetOwnedString(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
|
916
|
-
}
|
917
|
-
// Construct channel args for subchannel.
|
918
900
|
ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
|
919
901
|
args, address.args(), chand_->subchannel_pool_,
|
920
902
|
chand_->default_authority_);
|
@@ -926,8 +908,7 @@ class ClientChannel::ClientChannelControlHelper
|
|
926
908
|
// Make sure the subchannel has updated keepalive time.
|
927
909
|
subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
|
928
910
|
// Create and return wrapper for the subchannel.
|
929
|
-
return MakeRefCounted<SubchannelWrapper>(
|
930
|
-
chand_, std::move(subchannel), std::move(health_check_service_name));
|
911
|
+
return MakeRefCounted<SubchannelWrapper>(chand_, std::move(subchannel));
|
931
912
|
}
|
932
913
|
|
933
914
|
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
|
@@ -1199,9 +1180,9 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
|
|
1199
1180
|
// above.
|
1200
1181
|
if (!policy_name.has_value()) policy_name = "pick_first";
|
1201
1182
|
// Now that we have the policy name, construct an empty config for it.
|
1202
|
-
Json config_json = Json::
|
1203
|
-
{std::string(*policy_name), Json::
|
1204
|
-
}};
|
1183
|
+
Json config_json = Json::FromArray({Json::FromObject({
|
1184
|
+
{std::string(*policy_name), Json::FromObject({})},
|
1185
|
+
})});
|
1205
1186
|
auto lb_policy_config =
|
1206
1187
|
CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
|
1207
1188
|
config_json);
|
@@ -1366,11 +1347,8 @@ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
|
|
1366
1347
|
// Otherwise, we go into TRANSIENT_FAILURE.
|
1367
1348
|
if (lb_policy_ == nullptr) {
|
1368
1349
|
// Update connectivity state.
|
1369
|
-
|
1370
|
-
|
1371
|
-
UpdateStateAndPickerLocked(
|
1372
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE, status, "resolver failure",
|
1373
|
-
MakeRefCounted<LoadBalancingPolicy::TransientFailurePicker>(status));
|
1350
|
+
UpdateStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
1351
|
+
"resolver failure");
|
1374
1352
|
{
|
1375
1353
|
MutexLock lock(&resolution_mu_);
|
1376
1354
|
// Update resolver transient failure.
|
@@ -1414,6 +1392,14 @@ absl::Status ClientChannel::CreateOrUpdateLbPolicyLocked(
|
|
1414
1392
|
// Creates a new LB policy.
|
1415
1393
|
OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
|
1416
1394
|
const ChannelArgs& args) {
|
1395
|
+
// The LB policy will start in state CONNECTING but will not
|
1396
|
+
// necessarily send us an update synchronously, so set state to
|
1397
|
+
// CONNECTING (in case the resolver had previously failed and put the
|
1398
|
+
// channel into TRANSIENT_FAILURE) and make sure we have a queueing picker.
|
1399
|
+
UpdateStateAndPickerLocked(
|
1400
|
+
GRPC_CHANNEL_CONNECTING, absl::Status(), "started resolving",
|
1401
|
+
MakeRefCounted<LoadBalancingPolicy::QueuePicker>(nullptr));
|
1402
|
+
// Now create the LB policy.
|
1417
1403
|
LoadBalancingPolicy::Args lb_policy_args;
|
1418
1404
|
lb_policy_args.work_serializer = work_serializer_;
|
1419
1405
|
lb_policy_args.channel_control_helper =
|
@@ -1506,21 +1492,17 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1506
1492
|
|
1507
1493
|
void ClientChannel::CreateResolverLocked() {
|
1508
1494
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1509
|
-
gpr_log(GPR_INFO, "chand=%p: starting name resolution", this
|
1495
|
+
gpr_log(GPR_INFO, "chand=%p: starting name resolution for %s", this,
|
1496
|
+
uri_to_resolve_.c_str());
|
1510
1497
|
}
|
1511
1498
|
resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
|
1512
|
-
uri_to_resolve_
|
1513
|
-
|
1499
|
+
uri_to_resolve_, channel_args_, interested_parties_, work_serializer_,
|
1500
|
+
std::make_unique<ResolverResultHandler>(this));
|
1514
1501
|
// Since the validity of the args was checked when the channel was created,
|
1515
1502
|
// CreateResolver() must return a non-null result.
|
1516
1503
|
GPR_ASSERT(resolver_ != nullptr);
|
1517
|
-
|
1518
|
-
|
1519
|
-
// the picker to a queueing picker somewhere, in case the LB policy
|
1520
|
-
// does not immediately return a new picker.
|
1521
|
-
UpdateStateAndPickerLocked(
|
1522
|
-
GRPC_CHANNEL_CONNECTING, absl::Status(), "started resolving",
|
1523
|
-
MakeRefCounted<LoadBalancingPolicy::QueuePicker>(nullptr));
|
1504
|
+
UpdateStateLocked(GRPC_CHANNEL_CONNECTING, absl::Status(),
|
1505
|
+
"started resolving");
|
1524
1506
|
resolver_->StartLocked();
|
1525
1507
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1526
1508
|
gpr_log(GPR_INFO, "chand=%p: created resolver=%p", this, resolver_.get());
|
@@ -1534,24 +1516,7 @@ void ClientChannel::DestroyResolverAndLbPolicyLocked() {
|
|
1534
1516
|
resolver_.get());
|
1535
1517
|
}
|
1536
1518
|
resolver_.reset();
|
1537
|
-
|
1538
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1539
|
-
gpr_log(GPR_INFO, "chand=%p: shutting down lb_policy=%p", this,
|
1540
|
-
lb_policy_.get());
|
1541
|
-
}
|
1542
|
-
grpc_pollset_set_del_pollset_set(lb_policy_->interested_parties(),
|
1543
|
-
interested_parties_);
|
1544
|
-
lb_policy_.reset();
|
1545
|
-
}
|
1546
|
-
}
|
1547
|
-
}
|
1548
|
-
|
1549
|
-
void ClientChannel::UpdateStateAndPickerLocked(
|
1550
|
-
grpc_connectivity_state state, const absl::Status& status,
|
1551
|
-
const char* reason,
|
1552
|
-
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker) {
|
1553
|
-
// Special case for IDLE and SHUTDOWN states.
|
1554
|
-
if (picker == nullptr || state == GRPC_CHANNEL_SHUTDOWN) {
|
1519
|
+
// Clear resolution state.
|
1555
1520
|
saved_service_config_.reset();
|
1556
1521
|
saved_config_selector_.reset();
|
1557
1522
|
// Acquire resolution lock to update config selector and associated state.
|
@@ -1567,8 +1532,22 @@ void ClientChannel::UpdateStateAndPickerLocked(
|
|
1567
1532
|
config_selector_to_unref = std::move(config_selector_);
|
1568
1533
|
dynamic_filters_to_unref = std::move(dynamic_filters_);
|
1569
1534
|
}
|
1535
|
+
// Clear LB policy if set.
|
1536
|
+
if (lb_policy_ != nullptr) {
|
1537
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1538
|
+
gpr_log(GPR_INFO, "chand=%p: shutting down lb_policy=%p", this,
|
1539
|
+
lb_policy_.get());
|
1540
|
+
}
|
1541
|
+
grpc_pollset_set_del_pollset_set(lb_policy_->interested_parties(),
|
1542
|
+
interested_parties_);
|
1543
|
+
lb_policy_.reset();
|
1544
|
+
}
|
1570
1545
|
}
|
1571
|
-
|
1546
|
+
}
|
1547
|
+
|
1548
|
+
void ClientChannel::UpdateStateLocked(grpc_connectivity_state state,
|
1549
|
+
const absl::Status& status,
|
1550
|
+
const char* reason) {
|
1572
1551
|
state_tracker_.SetState(state, status, reason);
|
1573
1552
|
if (channelz_node_ != nullptr) {
|
1574
1553
|
channelz_node_->SetConnectivityState(state);
|
@@ -1578,19 +1557,24 @@ void ClientChannel::UpdateStateAndPickerLocked(
|
|
1578
1557
|
channelz::ChannelNode::GetChannelConnectivityStateChangeString(
|
1579
1558
|
state)));
|
1580
1559
|
}
|
1560
|
+
}
|
1561
|
+
|
1562
|
+
void ClientChannel::UpdateStateAndPickerLocked(
|
1563
|
+
grpc_connectivity_state state, const absl::Status& status,
|
1564
|
+
const char* reason,
|
1565
|
+
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker) {
|
1566
|
+
UpdateStateLocked(state, status, reason);
|
1581
1567
|
// Grab the LB lock to update the picker and trigger reprocessing of the
|
1582
1568
|
// queued picks.
|
1583
1569
|
// Old picker will be unreffed after releasing the lock.
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1588
|
-
|
1589
|
-
|
1590
|
-
call->RetryPickLocked();
|
1591
|
-
}
|
1592
|
-
lb_queued_calls_.clear();
|
1570
|
+
MutexLock lock(&lb_mu_);
|
1571
|
+
picker_.swap(picker);
|
1572
|
+
// Reprocess queued picks.
|
1573
|
+
for (LoadBalancedCall* call : lb_queued_calls_) {
|
1574
|
+
call->RemoveCallFromLbQueuedCallsLocked();
|
1575
|
+
call->RetryPickLocked();
|
1593
1576
|
}
|
1577
|
+
lb_queued_calls_.clear();
|
1594
1578
|
}
|
1595
1579
|
|
1596
1580
|
namespace {
|
@@ -1704,10 +1688,13 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
|
|
1704
1688
|
StatusIntProperty::ChannelConnectivityState,
|
1705
1689
|
&value) &&
|
1706
1690
|
static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
|
1707
|
-
if (disconnect_error_.ok()) {
|
1691
|
+
if (disconnect_error_.ok()) { // Ignore if we're shutting down.
|
1708
1692
|
// Enter IDLE state.
|
1709
1693
|
UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
|
1710
1694
|
"channel entering IDLE", nullptr);
|
1695
|
+
// TODO(roth): Do we need to check for any queued picks here, in
|
1696
|
+
// case there's a race condition in the client_idle filter?
|
1697
|
+
// And maybe also check for calls in the resolver queue?
|
1711
1698
|
}
|
1712
1699
|
} else {
|
1713
1700
|
// Disconnect.
|
@@ -1832,23 +1819,22 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
|
|
1832
1819
|
chand(), this);
|
1833
1820
|
}
|
1834
1821
|
if (!config_selector.ok()) return config_selector.status();
|
1835
|
-
// Use the ConfigSelector to determine the config for the call.
|
1836
|
-
auto call_config =
|
1837
|
-
(*config_selector)->GetCallConfig({send_initial_metadata(), arena()});
|
1838
|
-
if (!call_config.ok()) {
|
1839
|
-
return absl_status_to_grpc_error(
|
1840
|
-
MaybeRewriteIllegalStatusCode(call_config.status(), "ConfigSelector"));
|
1841
|
-
}
|
1842
1822
|
// Create a ClientChannelServiceConfigCallData for the call. This stores
|
1843
1823
|
// a ref to the ServiceConfig and caches the right set of parsed configs
|
1844
1824
|
// to use for the call. The ClientChannelServiceConfigCallData will store
|
1845
1825
|
// itself in the call context, so that it can be accessed by filters
|
1846
1826
|
// below us in the stack, and it will be cleaned up when the call ends.
|
1847
1827
|
auto* service_config_call_data =
|
1848
|
-
arena()->New<ClientChannelServiceConfigCallData>(
|
1849
|
-
|
1850
|
-
|
1851
|
-
|
1828
|
+
arena()->New<ClientChannelServiceConfigCallData>(arena(), call_context());
|
1829
|
+
// Use the ConfigSelector to determine the config for the call.
|
1830
|
+
absl::Status call_config_status =
|
1831
|
+
(*config_selector)
|
1832
|
+
->GetCallConfig(
|
1833
|
+
{send_initial_metadata(), arena(), service_config_call_data});
|
1834
|
+
if (!call_config_status.ok()) {
|
1835
|
+
return absl_status_to_grpc_error(
|
1836
|
+
MaybeRewriteIllegalStatusCode(call_config_status, "ConfigSelector"));
|
1837
|
+
}
|
1852
1838
|
// Apply our own method params to the call.
|
1853
1839
|
auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
|
1854
1840
|
service_config_call_data->GetMethodParsedConfig(
|
@@ -2355,7 +2341,8 @@ class ClientChannel::LoadBalancedCall::LbCallState
|
|
2355
2341
|
|
2356
2342
|
// Internal API to allow first-party LB policies to access per-call
|
2357
2343
|
// attributes set by the ConfigSelector.
|
2358
|
-
|
2344
|
+
ServiceConfigCallData::CallAttributeInterface* GetCallAttribute(
|
2345
|
+
UniqueTypeName type) const override;
|
2359
2346
|
|
2360
2347
|
private:
|
2361
2348
|
LoadBalancedCall* lb_call_;
|
@@ -2440,15 +2427,12 @@ class ClientChannel::LoadBalancedCall::Metadata
|
|
2440
2427
|
// ClientChannel::LoadBalancedCall::LbCallState
|
2441
2428
|
//
|
2442
2429
|
|
2443
|
-
|
2430
|
+
ServiceConfigCallData::CallAttributeInterface*
|
2444
2431
|
ClientChannel::LoadBalancedCall::LbCallState::GetCallAttribute(
|
2445
|
-
UniqueTypeName type) {
|
2432
|
+
UniqueTypeName type) const {
|
2446
2433
|
auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
|
2447
2434
|
lb_call_->call_context()[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
2448
|
-
|
2449
|
-
auto it = call_attributes.find(type);
|
2450
|
-
if (it == call_attributes.end()) return absl::string_view();
|
2451
|
-
return it->second;
|
2435
|
+
return service_config_call_data->GetCallAttribute(type);
|
2452
2436
|
}
|
2453
2437
|
|
2454
2438
|
//
|
@@ -3033,6 +3017,8 @@ void ClientChannel::FilterBasedLoadBalancedCall::RecvInitialMetadataReady(
|
|
3033
3017
|
// recv_initial_metadata_flags is not populated for clients
|
3034
3018
|
self->call_attempt_tracer()->RecordReceivedInitialMetadata(
|
3035
3019
|
self->recv_initial_metadata_);
|
3020
|
+
auto* peer_string = self->recv_initial_metadata_->get_pointer(PeerString());
|
3021
|
+
if (peer_string != nullptr) self->peer_string_ = peer_string->Ref();
|
3036
3022
|
}
|
3037
3023
|
Closure::Run(DEBUG_LOCATION, self->original_recv_initial_metadata_ready_,
|
3038
3024
|
error);
|
@@ -3076,12 +3062,8 @@ void ClientChannel::FilterBasedLoadBalancedCall::RecvTrailingMetadataReady(
|
|
3076
3062
|
}
|
3077
3063
|
}
|
3078
3064
|
absl::string_view peer_string;
|
3079
|
-
if (self->
|
3080
|
-
|
3081
|
-
self->recv_initial_metadata_->get_pointer(PeerString());
|
3082
|
-
if (peer_string_slice != nullptr) {
|
3083
|
-
peer_string = peer_string_slice->as_string_view();
|
3084
|
-
}
|
3065
|
+
if (self->peer_string_.has_value()) {
|
3066
|
+
peer_string = self->peer_string_->as_string_view();
|
3085
3067
|
}
|
3086
3068
|
self->RecordCallCompletion(status, self->recv_trailing_metadata_,
|
3087
3069
|
self->transport_stream_stats_, peer_string);
|
@@ -65,6 +65,7 @@
|
|
65
65
|
#include "src/core/lib/resolver/resolver.h"
|
66
66
|
#include "src/core/lib/resource_quota/arena.h"
|
67
67
|
#include "src/core/lib/service_config/service_config.h"
|
68
|
+
#include "src/core/lib/slice/slice.h"
|
68
69
|
#include "src/core/lib/surface/channel.h"
|
69
70
|
#include "src/core/lib/transport/connectivity_state.h"
|
70
71
|
#include "src/core/lib/transport/metadata_batch.h"
|
@@ -247,6 +248,10 @@ class ClientChannel {
|
|
247
248
|
OrphanablePtr<LoadBalancingPolicy> CreateLbPolicyLocked(
|
248
249
|
const ChannelArgs& args) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_);
|
249
250
|
|
251
|
+
void UpdateStateLocked(grpc_connectivity_state state,
|
252
|
+
const absl::Status& status, const char* reason)
|
253
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_);
|
254
|
+
|
250
255
|
void UpdateStateAndPickerLocked(
|
251
256
|
grpc_connectivity_state state, const absl::Status& status,
|
252
257
|
const char* reason,
|
@@ -552,6 +557,7 @@ class ClientChannel::FilterBasedLoadBalancedCall
|
|
552
557
|
CallCombiner* call_combiner_;
|
553
558
|
grpc_polling_entity* pollent_;
|
554
559
|
grpc_closure* on_call_destruction_complete_;
|
560
|
+
absl::optional<Slice> peer_string_;
|
555
561
|
|
556
562
|
// Set when we get a cancel_stream op.
|
557
563
|
grpc_error_handle cancel_error_;
|