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
@@ -22,13 +22,11 @@
|
|
22
22
|
|
23
23
|
#include <algorithm>
|
24
24
|
#include <set>
|
25
|
-
#include <string>
|
26
25
|
#include <utility>
|
27
26
|
#include <vector>
|
28
27
|
|
29
28
|
#include "absl/status/status.h"
|
30
29
|
#include "absl/strings/string_view.h"
|
31
|
-
#include "absl/types/optional.h"
|
32
30
|
#include "google/protobuf/duration.upb.h"
|
33
31
|
#include "upb/upb.hpp"
|
34
32
|
#include "xds/service/orca/v3/orca.upb.h"
|
@@ -217,9 +215,7 @@ void OrcaProducer::Start(RefCountedPtr<Subchannel> subchannel) {
|
|
217
215
|
connected_subchannel_ = subchannel_->connected_subchannel();
|
218
216
|
auto connectivity_watcher = MakeRefCounted<ConnectivityWatcher>(WeakRef());
|
219
217
|
connectivity_watcher_ = connectivity_watcher.get();
|
220
|
-
subchannel_->WatchConnectivityState(
|
221
|
-
/*health_check_service_name=*/absl::nullopt,
|
222
|
-
std::move(connectivity_watcher));
|
218
|
+
subchannel_->WatchConnectivityState(std::move(connectivity_watcher));
|
223
219
|
}
|
224
220
|
|
225
221
|
void OrcaProducer::Orphan() {
|
@@ -228,8 +224,7 @@ void OrcaProducer::Orphan() {
|
|
228
224
|
stream_client_.reset();
|
229
225
|
}
|
230
226
|
GPR_ASSERT(subchannel_ != nullptr); // Should not be called before Start().
|
231
|
-
subchannel_->CancelConnectivityStateWatch(
|
232
|
-
/*health_check_service_name=*/absl::nullopt, connectivity_watcher_);
|
227
|
+
subchannel_->CancelConnectivityStateWatch(connectivity_watcher_);
|
233
228
|
subchannel_->RemoveDataProducer(this);
|
234
229
|
}
|
235
230
|
|
@@ -68,6 +68,9 @@ namespace grpc_core {
|
|
68
68
|
|
69
69
|
TraceFlag grpc_outlier_detection_lb_trace(false, "outlier_detection_lb");
|
70
70
|
|
71
|
+
const char* DisableOutlierDetectionAttribute::kName =
|
72
|
+
"disable_outlier_detection";
|
73
|
+
|
71
74
|
namespace {
|
72
75
|
|
73
76
|
using ::grpc_event_engine::experimental::EventEngine;
|
@@ -257,7 +260,12 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
|
|
257
260
|
void Eject(const Timestamp& time) {
|
258
261
|
ejection_time_ = time;
|
259
262
|
++multiplier_;
|
260
|
-
|
263
|
+
// Ejecting the subchannel may cause the child policy to unref the
|
264
|
+
// subchannel, so we need to be prepared for the set to be modified
|
265
|
+
// while we are iterating.
|
266
|
+
for (auto it = subchannels_.begin(); it != subchannels_.end();) {
|
267
|
+
SubchannelWrapper* subchannel = *it;
|
268
|
+
++it;
|
261
269
|
subchannel->Eject();
|
262
270
|
}
|
263
271
|
}
|
@@ -363,6 +371,8 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
|
|
363
371
|
|
364
372
|
~OutlierDetectionLb() override;
|
365
373
|
|
374
|
+
// Returns the address map key for an address, or the empty string if
|
375
|
+
// the address should be ignored.
|
366
376
|
static std::string MakeKeyForAddress(const ServerAddress& address);
|
367
377
|
|
368
378
|
void ShutdownLocked() override;
|
@@ -394,8 +404,13 @@ class OutlierDetectionLb : public LoadBalancingPolicy {
|
|
394
404
|
|
395
405
|
void OutlierDetectionLb::SubchannelWrapper::Eject() {
|
396
406
|
ejected_ = true;
|
397
|
-
|
398
|
-
|
407
|
+
// Ejecting the subchannel may cause the child policy to cancel the watch,
|
408
|
+
// so we need to be prepared for the map to be modified while we are
|
409
|
+
// iterating.
|
410
|
+
for (auto it = watchers_.begin(); it != watchers_.end();) {
|
411
|
+
WatcherWrapper* watcher = it->second;
|
412
|
+
++it;
|
413
|
+
watcher->Eject();
|
399
414
|
}
|
400
415
|
}
|
401
416
|
|
@@ -536,9 +551,21 @@ OutlierDetectionLb::~OutlierDetectionLb() {
|
|
536
551
|
|
537
552
|
std::string OutlierDetectionLb::MakeKeyForAddress(
|
538
553
|
const ServerAddress& address) {
|
554
|
+
// If the address has the DisableOutlierDetectionAttribute attribute,
|
555
|
+
// ignore it.
|
556
|
+
// TODO(roth): This is a hack to prevent outlier_detection from
|
557
|
+
// working with pick_first, as per discussion in
|
558
|
+
// https://github.com/grpc/grpc/issues/32967. Remove this as part of
|
559
|
+
// implementing dualstack backend support.
|
560
|
+
if (address.GetAttribute(DisableOutlierDetectionAttribute::kName) !=
|
561
|
+
nullptr) {
|
562
|
+
return "";
|
563
|
+
}
|
539
564
|
// Use only the address, not the attributes.
|
540
565
|
auto addr_str = grpc_sockaddr_to_string(&address.address(), false);
|
541
|
-
|
566
|
+
// If address couldn't be stringified, ignore it.
|
567
|
+
if (!addr_str.ok()) return "";
|
568
|
+
return std::move(*addr_str);
|
542
569
|
}
|
543
570
|
|
544
571
|
void OutlierDetectionLb::ShutdownLocked() {
|
@@ -611,6 +638,7 @@ absl::Status OutlierDetectionLb::UpdateLocked(UpdateArgs args) {
|
|
611
638
|
std::set<std::string> current_addresses;
|
612
639
|
for (const ServerAddress& address : *args.addresses) {
|
613
640
|
std::string address_key = MakeKeyForAddress(address);
|
641
|
+
if (address_key.empty()) continue;
|
614
642
|
auto& subchannel_state = subchannel_state_map_[address_key];
|
615
643
|
if (subchannel_state == nullptr) {
|
616
644
|
subchannel_state = MakeRefCounted<SubchannelState>();
|
@@ -712,11 +740,19 @@ OrphanablePtr<LoadBalancingPolicy> OutlierDetectionLb::CreateChildPolicyLocked(
|
|
712
740
|
RefCountedPtr<SubchannelInterface> OutlierDetectionLb::Helper::CreateSubchannel(
|
713
741
|
ServerAddress address, const ChannelArgs& args) {
|
714
742
|
if (outlier_detection_policy_->shutting_down_) return nullptr;
|
715
|
-
std::string key = MakeKeyForAddress(address);
|
716
743
|
RefCountedPtr<SubchannelState> subchannel_state;
|
717
|
-
|
718
|
-
if (
|
719
|
-
|
744
|
+
std::string key = MakeKeyForAddress(address);
|
745
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
|
746
|
+
gpr_log(GPR_INFO,
|
747
|
+
"[outlier_detection_lb %p] using key %s for subchannel address %s",
|
748
|
+
outlier_detection_policy_.get(), key.c_str(),
|
749
|
+
address.ToString().c_str());
|
750
|
+
}
|
751
|
+
if (!key.empty()) {
|
752
|
+
auto it = outlier_detection_policy_->subchannel_state_map_.find(key);
|
753
|
+
if (it != outlier_detection_policy_->subchannel_state_map_.end()) {
|
754
|
+
subchannel_state = it->second->Ref();
|
755
|
+
}
|
720
756
|
}
|
721
757
|
auto subchannel = MakeRefCounted<SubchannelWrapper>(
|
722
758
|
subchannel_state,
|
@@ -858,8 +894,10 @@ void OutlierDetectionLb::EjectionTimer::OnTimerLocked() {
|
|
858
894
|
config.success_rate_ejection->minimum_hosts) {
|
859
895
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
|
860
896
|
gpr_log(GPR_INFO,
|
861
|
-
"[outlier_detection_lb %p] running success rate algorithm"
|
862
|
-
|
897
|
+
"[outlier_detection_lb %p] running success rate algorithm: "
|
898
|
+
"stdev_factor=%d, enforcement_percentage=%d",
|
899
|
+
parent_.get(), config.success_rate_ejection->stdev_factor,
|
900
|
+
config.success_rate_ejection->enforcement_percentage);
|
863
901
|
}
|
864
902
|
// calculate ejection threshold: (mean - stdev *
|
865
903
|
// (success_rate_ejection.stdev_factor / 1000))
|
@@ -917,8 +955,10 @@ void OutlierDetectionLb::EjectionTimer::OnTimerLocked() {
|
|
917
955
|
config.failure_percentage_ejection->minimum_hosts) {
|
918
956
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
|
919
957
|
gpr_log(GPR_INFO,
|
920
|
-
"[outlier_detection_lb %p] running failure percentage algorithm"
|
921
|
-
|
958
|
+
"[outlier_detection_lb %p] running failure percentage algorithm: "
|
959
|
+
"threshold=%d, enforcement_percentage=%d",
|
960
|
+
parent_.get(), config.failure_percentage_ejection->threshold,
|
961
|
+
config.failure_percentage_ejection->enforcement_percentage);
|
922
962
|
}
|
923
963
|
for (auto& candidate : failure_percentage_ejection_candidates) {
|
924
964
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_outlier_detection_lb_trace)) {
|
@@ -992,14 +1032,6 @@ class OutlierDetectionLbFactory : public LoadBalancingPolicyFactory {
|
|
992
1032
|
|
993
1033
|
absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
|
994
1034
|
ParseLoadBalancingConfig(const Json& json) const override {
|
995
|
-
if (json.type() == Json::Type::kNull) {
|
996
|
-
// This policy was configured in the deprecated loadBalancingPolicy
|
997
|
-
// field or in the client API.
|
998
|
-
return absl::InvalidArgumentError(
|
999
|
-
"field:loadBalancingPolicy error:outlier_detection policy requires "
|
1000
|
-
"configuration. Please use loadBalancingConfig field of service "
|
1001
|
-
"config instead.");
|
1002
|
-
}
|
1003
1035
|
ValidationErrors errors;
|
1004
1036
|
OutlierDetectionConfig outlier_detection_config;
|
1005
1037
|
RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
|
@@ -21,6 +21,9 @@
|
|
21
21
|
|
22
22
|
#include <stdint.h> // for uint32_t
|
23
23
|
|
24
|
+
#include <memory>
|
25
|
+
#include <string>
|
26
|
+
|
24
27
|
#include "absl/types/optional.h"
|
25
28
|
|
26
29
|
#include "src/core/lib/gprpp/time.h"
|
@@ -28,6 +31,7 @@
|
|
28
31
|
#include "src/core/lib/json/json.h"
|
29
32
|
#include "src/core/lib/json/json_args.h"
|
30
33
|
#include "src/core/lib/json/json_object_loader.h"
|
34
|
+
#include "src/core/lib/resolver/server_address.h"
|
31
35
|
|
32
36
|
namespace grpc_core {
|
33
37
|
|
@@ -38,7 +42,7 @@ struct OutlierDetectionConfig {
|
|
38
42
|
uint32_t max_ejection_percent = 10;
|
39
43
|
struct SuccessRateEjection {
|
40
44
|
uint32_t stdev_factor = 1900;
|
41
|
-
uint32_t enforcement_percentage =
|
45
|
+
uint32_t enforcement_percentage = 100;
|
42
46
|
uint32_t minimum_hosts = 5;
|
43
47
|
uint32_t request_volume = 100;
|
44
48
|
|
@@ -56,7 +60,7 @@ struct OutlierDetectionConfig {
|
|
56
60
|
};
|
57
61
|
struct FailurePercentageEjection {
|
58
62
|
uint32_t threshold = 85;
|
59
|
-
uint32_t enforcement_percentage =
|
63
|
+
uint32_t enforcement_percentage = 100;
|
60
64
|
uint32_t minimum_hosts = 5;
|
61
65
|
uint32_t request_volume = 50;
|
62
66
|
|
@@ -89,6 +93,23 @@ struct OutlierDetectionConfig {
|
|
89
93
|
ValidationErrors* errors);
|
90
94
|
};
|
91
95
|
|
96
|
+
// TODO(roth): This is a horrible hack used to disable outlier detection
|
97
|
+
// when used with the pick_first policy. Remove this as part of
|
98
|
+
// implementing the dualstack backend design.
|
99
|
+
class DisableOutlierDetectionAttribute
|
100
|
+
: public ServerAddress::AttributeInterface {
|
101
|
+
public:
|
102
|
+
static const char* kName;
|
103
|
+
|
104
|
+
std::unique_ptr<AttributeInterface> Copy() const override {
|
105
|
+
return std::make_unique<DisableOutlierDetectionAttribute>();
|
106
|
+
}
|
107
|
+
|
108
|
+
int Cmp(const AttributeInterface*) const override { return true; }
|
109
|
+
|
110
|
+
std::string ToString() const override { return "true"; }
|
111
|
+
};
|
112
|
+
|
92
113
|
} // namespace grpc_core
|
93
114
|
|
94
115
|
#endif // GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_OUTLIER_DETECTION_OUTLIER_DETECTION_H
|
@@ -35,6 +35,7 @@
|
|
35
35
|
#include <grpc/impl/connectivity_state.h>
|
36
36
|
#include <grpc/support/log.h>
|
37
37
|
|
38
|
+
#include "src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h"
|
38
39
|
#include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h"
|
39
40
|
#include "src/core/lib/channel/channel_args.h"
|
40
41
|
#include "src/core/lib/config/core_configuration.h"
|
@@ -42,6 +43,7 @@
|
|
42
43
|
#include "src/core/lib/gprpp/debug_location.h"
|
43
44
|
#include "src/core/lib/gprpp/orphanable.h"
|
44
45
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
46
|
+
#include "src/core/lib/gprpp/work_serializer.h"
|
45
47
|
#include "src/core/lib/json/json.h"
|
46
48
|
#include "src/core/lib/load_balancing/lb_policy.h"
|
47
49
|
#include "src/core/lib/load_balancing/lb_policy_factory.h"
|
@@ -130,6 +132,10 @@ class PickFirst : public LoadBalancingPolicy {
|
|
130
132
|
void set_attempting_index(size_t index) { attempting_index_ = index; }
|
131
133
|
|
132
134
|
private:
|
135
|
+
std::shared_ptr<WorkSerializer> work_serializer() const override {
|
136
|
+
return static_cast<PickFirst*>(policy())->work_serializer();
|
137
|
+
}
|
138
|
+
|
133
139
|
bool in_transient_failure_ = false;
|
134
140
|
size_t attempting_index_ = 0;
|
135
141
|
};
|
@@ -235,12 +241,6 @@ void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
|
|
235
241
|
MakeRefCounted<TransientFailurePicker>(status));
|
236
242
|
channel_control_helper()->RequestReresolution();
|
237
243
|
}
|
238
|
-
// Otherwise, if this is the initial update, report CONNECTING.
|
239
|
-
else if (subchannel_list_.get() == nullptr) {
|
240
|
-
channel_control_helper()->UpdateState(
|
241
|
-
GRPC_CHANNEL_CONNECTING, absl::Status(),
|
242
|
-
MakeRefCounted<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
|
243
|
-
}
|
244
244
|
// If the new update is empty or we don't yet have a selected subchannel in
|
245
245
|
// the current list, replace the current subchannel list immediately.
|
246
246
|
if (latest_pending_subchannel_list_->num_subchannels() == 0 ||
|
@@ -275,6 +275,19 @@ absl::Status PickFirst::UpdateLocked(UpdateArgs args) {
|
|
275
275
|
} else if (args.addresses->empty()) {
|
276
276
|
status = absl::UnavailableError("address list must not be empty");
|
277
277
|
}
|
278
|
+
// TODO(roth): This is a hack to disable outlier_detection when used
|
279
|
+
// with pick_first, for the reasons described in
|
280
|
+
// https://github.com/grpc/grpc/issues/32967. Remove this when
|
281
|
+
// implementing the dualstack design.
|
282
|
+
if (args.addresses.ok()) {
|
283
|
+
ServerAddressList addresses;
|
284
|
+
for (const auto& address : *args.addresses) {
|
285
|
+
addresses.emplace_back(address.WithAttribute(
|
286
|
+
DisableOutlierDetectionAttribute::kName,
|
287
|
+
std::make_unique<DisableOutlierDetectionAttribute>()));
|
288
|
+
}
|
289
|
+
args.addresses = std::move(addresses);
|
290
|
+
}
|
278
291
|
// If the update contains a resolver error and we have a previous update
|
279
292
|
// that was not a resolver error, keep using the previous addresses.
|
280
293
|
if (!args.addresses.ok() && latest_update_args_.config != nullptr) {
|
@@ -903,15 +903,7 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory {
|
|
903
903
|
|
904
904
|
absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
|
905
905
|
ParseLoadBalancingConfig(const Json& json) const override {
|
906
|
-
|
907
|
-
// priority was mentioned as a policy in the deprecated
|
908
|
-
// loadBalancingPolicy field or in the client API.
|
909
|
-
return absl::InvalidArgumentError(
|
910
|
-
"field:loadBalancingPolicy error:priority policy requires "
|
911
|
-
"configuration. Please use loadBalancingConfig field of service "
|
912
|
-
"config instead.");
|
913
|
-
}
|
914
|
-
return LoadRefCountedFromJson<PriorityLbConfig>(
|
906
|
+
return LoadFromJson<RefCountedPtr<PriorityLbConfig>>(
|
915
907
|
json, JsonArgs(), "errors validating priority LB policy config");
|
916
908
|
}
|
917
909
|
};
|
@@ -70,7 +70,7 @@ namespace grpc_core {
|
|
70
70
|
|
71
71
|
TraceFlag grpc_lb_ring_hash_trace(false, "ring_hash_lb");
|
72
72
|
|
73
|
-
UniqueTypeName
|
73
|
+
UniqueTypeName RequestHashAttribute::TypeName() {
|
74
74
|
static UniqueTypeName::Factory kFactory("request_hash");
|
75
75
|
return kFactory.Create();
|
76
76
|
}
|
@@ -232,6 +232,10 @@ class RingHash : public LoadBalancingPolicy {
|
|
232
232
|
absl::Status status);
|
233
233
|
|
234
234
|
private:
|
235
|
+
std::shared_ptr<WorkSerializer> work_serializer() const override {
|
236
|
+
return static_cast<RingHash*>(policy())->work_serializer();
|
237
|
+
}
|
238
|
+
|
235
239
|
size_t num_idle_;
|
236
240
|
size_t num_ready_ = 0;
|
237
241
|
size_t num_connecting_ = 0;
|
@@ -341,7 +345,12 @@ class RingHash : public LoadBalancingPolicy {
|
|
341
345
|
|
342
346
|
RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
|
343
347
|
auto* call_state = static_cast<ClientChannelLbCallState*>(args.call_state);
|
344
|
-
auto
|
348
|
+
auto* hash_attribute = static_cast<RequestHashAttribute*>(
|
349
|
+
call_state->GetCallAttribute(RequestHashAttribute::TypeName()));
|
350
|
+
absl::string_view hash;
|
351
|
+
if (hash_attribute != nullptr) {
|
352
|
+
hash = hash_attribute->request_hash();
|
353
|
+
}
|
345
354
|
uint64_t h;
|
346
355
|
if (!absl::SimpleAtoi(hash, &h)) {
|
347
356
|
return PickResult::Fail(
|
@@ -351,12 +360,12 @@ RingHash::PickResult RingHash::Picker::Pick(PickArgs args) {
|
|
351
360
|
// Ported from https://github.com/RJ/ketama/blob/master/libketama/ketama.c
|
352
361
|
// (ketama_get_server) NOTE: The algorithm depends on using signed integers
|
353
362
|
// for lowp, highp, and first_index. Do not change them!
|
354
|
-
|
355
|
-
|
356
|
-
|
363
|
+
int64_t lowp = 0;
|
364
|
+
int64_t highp = ring.size();
|
365
|
+
int64_t first_index = 0;
|
357
366
|
while (true) {
|
358
367
|
first_index = (lowp + highp) / 2;
|
359
|
-
if (first_index == ring.size()) {
|
368
|
+
if (first_index == static_cast<int64_t>(ring.size())) {
|
360
369
|
first_index = 0;
|
361
370
|
break;
|
362
371
|
}
|
@@ -500,7 +509,7 @@ RingHash::RingHashSubchannelList::Ring::Ring(
|
|
500
509
|
std::ceil(min_normalized_weight * min_ring_size) / min_normalized_weight,
|
501
510
|
static_cast<double>(max_ring_size));
|
502
511
|
// Reserve memory for the entire ring up front.
|
503
|
-
const
|
512
|
+
const uint64_t ring_size = std::ceil(scale);
|
504
513
|
ring_.reserve(ring_size);
|
505
514
|
// Populate the hash ring by walking through the (host, weight) pairs in
|
506
515
|
// normalized_host_weights, and generating (scale * weight) hashes for each
|
@@ -21,15 +21,32 @@
|
|
21
21
|
|
22
22
|
#include <stdint.h>
|
23
23
|
|
24
|
+
#include "absl/strings/string_view.h"
|
25
|
+
|
24
26
|
#include "src/core/lib/gprpp/unique_type_name.h"
|
25
27
|
#include "src/core/lib/gprpp/validation_errors.h"
|
26
28
|
#include "src/core/lib/json/json.h"
|
27
29
|
#include "src/core/lib/json/json_args.h"
|
28
30
|
#include "src/core/lib/json/json_object_loader.h"
|
31
|
+
#include "src/core/lib/service_config/service_config_call_data.h"
|
29
32
|
|
30
33
|
namespace grpc_core {
|
31
34
|
|
32
|
-
|
35
|
+
class RequestHashAttribute
|
36
|
+
: public ServiceConfigCallData::CallAttributeInterface {
|
37
|
+
public:
|
38
|
+
static UniqueTypeName TypeName();
|
39
|
+
|
40
|
+
explicit RequestHashAttribute(absl::string_view request_hash)
|
41
|
+
: request_hash_(request_hash) {}
|
42
|
+
|
43
|
+
absl::string_view request_hash() const { return request_hash_; }
|
44
|
+
|
45
|
+
private:
|
46
|
+
UniqueTypeName type() const override { return TypeName(); }
|
47
|
+
|
48
|
+
absl::string_view request_hash_;
|
49
|
+
};
|
33
50
|
|
34
51
|
// Helper Parsing method to parse ring hash policy configs; for example, ring
|
35
52
|
// hash size validity.
|
@@ -61,6 +61,7 @@
|
|
61
61
|
#include <grpc/impl/propagation_bits.h>
|
62
62
|
#include <grpc/slice.h>
|
63
63
|
#include <grpc/status.h>
|
64
|
+
#include <grpc/support/json.h>
|
64
65
|
#include <grpc/support/log.h>
|
65
66
|
|
66
67
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
@@ -356,7 +357,7 @@ class RlsLb : public LoadBalancingPolicy {
|
|
356
357
|
RefCountedPtr<LoadBalancingPolicy::Config> pending_config_;
|
357
358
|
|
358
359
|
grpc_connectivity_state connectivity_state_ ABSL_GUARDED_BY(&RlsLb::mu_) =
|
359
|
-
|
360
|
+
GRPC_CHANNEL_CONNECTING;
|
360
361
|
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker_
|
361
362
|
ABSL_GUARDED_BY(&RlsLb::mu_);
|
362
363
|
};
|
@@ -731,9 +732,9 @@ RlsLb::ChildPolicyWrapper::ChildPolicyWrapper(RefCountedPtr<RlsLb> lb_policy,
|
|
731
732
|
: DualRefCounted<ChildPolicyWrapper>(
|
732
733
|
GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace) ? "ChildPolicyWrapper"
|
733
734
|
: nullptr),
|
734
|
-
lb_policy_(lb_policy),
|
735
|
+
lb_policy_(std::move(lb_policy)),
|
735
736
|
target_(std::move(target)),
|
736
|
-
picker_(MakeRefCounted<QueuePicker>(
|
737
|
+
picker_(MakeRefCounted<QueuePicker>(nullptr)) {
|
737
738
|
lb_policy_->child_policy_map_.emplace(target_, this);
|
738
739
|
}
|
739
740
|
|
@@ -780,15 +781,15 @@ absl::optional<Json> InsertOrUpdateChildPolicyField(const std::string& field,
|
|
780
781
|
errors->AddError("child policy config is not an object");
|
781
782
|
} else {
|
782
783
|
Json::Object child_config = child_config_json.object();
|
783
|
-
child_config[field] = Json(value);
|
784
|
-
array.emplace_back(
|
785
|
-
|
784
|
+
child_config[field] = Json::FromString(value);
|
785
|
+
array.emplace_back(Json::FromObject(
|
786
|
+
{{child_name, Json::FromObject(std::move(child_config))}}));
|
786
787
|
}
|
787
788
|
}
|
788
789
|
}
|
789
790
|
}
|
790
791
|
if (errors->size() != original_num_errors) return absl::nullopt;
|
791
|
-
return array;
|
792
|
+
return Json::FromArray(std::move(array));
|
792
793
|
}
|
793
794
|
|
794
795
|
void RlsLb::ChildPolicyWrapper::StartUpdate() {
|
@@ -894,6 +895,8 @@ void RlsLb::ChildPolicyWrapper::ChildPolicyHelper::UpdateState(
|
|
894
895
|
{
|
895
896
|
MutexLock lock(&wrapper_->lb_policy_->mu_);
|
896
897
|
if (wrapper_->is_shutdown_) return;
|
898
|
+
// TODO(roth): It looks like this ignores subsequent TF updates that
|
899
|
+
// might change the status used to fail picks, which seems wrong.
|
897
900
|
if (wrapper_->connectivity_state_ == GRPC_CHANNEL_TRANSIENT_FAILURE &&
|
898
901
|
state != GRPC_CHANNEL_READY) {
|
899
902
|
return;
|
@@ -2472,7 +2475,7 @@ void RlsLbConfig::JsonPostLoad(const Json& json, const JsonArgs&,
|
|
2472
2475
|
// a child policy for a given target.
|
2473
2476
|
for (const Json& config : child_policy_config_.array()) {
|
2474
2477
|
if (config.object().begin()->first == (*parsed_config)->name()) {
|
2475
|
-
child_policy_config_ = Json::
|
2478
|
+
child_policy_config_ = Json::FromArray({config});
|
2476
2479
|
break;
|
2477
2480
|
}
|
2478
2481
|
}
|
@@ -2497,7 +2500,7 @@ class RlsLbFactory : public LoadBalancingPolicyFactory {
|
|
2497
2500
|
|
2498
2501
|
absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
|
2499
2502
|
ParseLoadBalancingConfig(const Json& json) const override {
|
2500
|
-
return
|
2503
|
+
return LoadFromJson<RefCountedPtr<RlsLbConfig>>(
|
2501
2504
|
json, JsonArgs(), "errors validing RLS LB policy config");
|
2502
2505
|
}
|
2503
2506
|
};
|
@@ -44,6 +44,7 @@
|
|
44
44
|
#include "src/core/lib/gprpp/debug_location.h"
|
45
45
|
#include "src/core/lib/gprpp/orphanable.h"
|
46
46
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
47
|
+
#include "src/core/lib/gprpp/work_serializer.h"
|
47
48
|
#include "src/core/lib/json/json.h"
|
48
49
|
#include "src/core/lib/load_balancing/lb_policy.h"
|
49
50
|
#include "src/core/lib/load_balancing/lb_policy_factory.h"
|
@@ -153,6 +154,10 @@ class RoundRobin : public LoadBalancingPolicy {
|
|
153
154
|
absl::Status status_for_tf);
|
154
155
|
|
155
156
|
private:
|
157
|
+
std::shared_ptr<WorkSerializer> work_serializer() const override {
|
158
|
+
return static_cast<RoundRobin*>(policy())->work_serializer();
|
159
|
+
}
|
160
|
+
|
156
161
|
std::string CountersString() const {
|
157
162
|
return absl::StrCat("num_subchannels=", num_subchannels(),
|
158
163
|
" num_ready=", num_ready_,
|
@@ -313,12 +318,9 @@ absl::Status RoundRobin::UpdateLocked(UpdateArgs args) {
|
|
313
318
|
return status;
|
314
319
|
}
|
315
320
|
// Otherwise, if this is the initial update, immediately promote it to
|
316
|
-
// subchannel_list_
|
321
|
+
// subchannel_list_.
|
317
322
|
if (subchannel_list_.get() == nullptr) {
|
318
323
|
subchannel_list_ = std::move(latest_pending_subchannel_list_);
|
319
|
-
channel_control_helper()->UpdateState(
|
320
|
-
GRPC_CHANNEL_CONNECTING, absl::Status(),
|
321
|
-
MakeRefCounted<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
|
322
324
|
}
|
323
325
|
return absl::OkStatus();
|
324
326
|
}
|
@@ -30,14 +30,18 @@
|
|
30
30
|
#include "absl/status/status.h"
|
31
31
|
#include "absl/types/optional.h"
|
32
32
|
|
33
|
+
#include <grpc/grpc.h>
|
33
34
|
#include <grpc/impl/connectivity_state.h>
|
34
35
|
#include <grpc/support/log.h>
|
35
36
|
|
37
|
+
#include "src/core/ext/filters/client_channel/client_channel_internal.h"
|
38
|
+
#include "src/core/ext/filters/client_channel/lb_policy/health_check_client.h"
|
36
39
|
#include "src/core/lib/channel/channel_args.h"
|
37
40
|
#include "src/core/lib/gprpp/debug_location.h"
|
38
41
|
#include "src/core/lib/gprpp/dual_ref_counted.h"
|
39
42
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
40
43
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
44
|
+
#include "src/core/lib/gprpp/work_serializer.h"
|
41
45
|
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
42
46
|
#include "src/core/lib/load_balancing/lb_policy.h"
|
43
47
|
#include "src/core/lib/load_balancing/subchannel_interface.h"
|
@@ -218,11 +222,15 @@ class SubchannelList : public DualRefCounted<SubchannelListType> {
|
|
218
222
|
// For accessing Ref() and Unref().
|
219
223
|
friend class SubchannelData<SubchannelListType, SubchannelDataType>;
|
220
224
|
|
225
|
+
virtual std::shared_ptr<WorkSerializer> work_serializer() const = 0;
|
226
|
+
|
221
227
|
// Backpointer to owning policy.
|
222
228
|
LoadBalancingPolicy* policy_;
|
223
229
|
|
224
230
|
const char* tracer_;
|
225
231
|
|
232
|
+
absl::optional<std::string> health_check_service_name_;
|
233
|
+
|
226
234
|
// The list of subchannels.
|
227
235
|
// We use ManualConstructor here to support SubchannelDataType classes
|
228
236
|
// that are not copyable.
|
@@ -317,20 +325,27 @@ template <typename SubchannelListType, typename SubchannelDataType>
|
|
317
325
|
void SubchannelData<SubchannelListType,
|
318
326
|
SubchannelDataType>::StartConnectivityWatchLocked() {
|
319
327
|
if (GPR_UNLIKELY(subchannel_list_->tracer() != nullptr)) {
|
320
|
-
gpr_log(
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
328
|
+
gpr_log(
|
329
|
+
GPR_INFO,
|
330
|
+
"[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
|
331
|
+
" (subchannel %p): starting watch "
|
332
|
+
"(health_check_service_name=\"%s\")",
|
333
|
+
subchannel_list_->tracer(), subchannel_list_->policy(),
|
334
|
+
subchannel_list_, Index(), subchannel_list_->num_subchannels(),
|
335
|
+
subchannel_.get(),
|
336
|
+
subchannel_list()->health_check_service_name_.value_or("N/A").c_str());
|
326
337
|
}
|
327
338
|
GPR_ASSERT(pending_watcher_ == nullptr);
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
339
|
+
auto watcher = std::make_unique<Watcher>(
|
340
|
+
this, subchannel_list()->WeakRef(DEBUG_LOCATION, "Watcher"));
|
341
|
+
pending_watcher_ = watcher.get();
|
342
|
+
if (subchannel_list()->health_check_service_name_.has_value()) {
|
343
|
+
subchannel_->AddDataWatcher(MakeHealthCheckWatcher(
|
344
|
+
subchannel_list_->work_serializer(),
|
345
|
+
*subchannel_list()->health_check_service_name_, std::move(watcher)));
|
346
|
+
} else {
|
347
|
+
subchannel_->WatchConnectivityState(std::move(watcher));
|
348
|
+
}
|
334
349
|
}
|
335
350
|
|
336
351
|
template <typename SubchannelListType, typename SubchannelDataType>
|
@@ -345,7 +360,11 @@ void SubchannelData<SubchannelListType, SubchannelDataType>::
|
|
345
360
|
subchannel_list_, Index(), subchannel_list_->num_subchannels(),
|
346
361
|
subchannel_.get(), reason);
|
347
362
|
}
|
348
|
-
|
363
|
+
// No need to cancel if using health checking, because the data
|
364
|
+
// watcher will be destroyed automatically when the subchannel is.
|
365
|
+
if (!subchannel_list()->health_check_service_name_.has_value()) {
|
366
|
+
subchannel_->CancelConnectivityStateWatch(pending_watcher_);
|
367
|
+
}
|
349
368
|
pending_watcher_ = nullptr;
|
350
369
|
}
|
351
370
|
}
|
@@ -368,6 +387,10 @@ SubchannelList<SubchannelListType, SubchannelDataType>::SubchannelList(
|
|
368
387
|
: DualRefCounted<SubchannelListType>(tracer),
|
369
388
|
policy_(policy),
|
370
389
|
tracer_(tracer) {
|
390
|
+
if (!args.GetBool(GRPC_ARG_INHIBIT_HEALTH_CHECKING).value_or(false)) {
|
391
|
+
health_check_service_name_ =
|
392
|
+
args.GetOwnedString(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
|
393
|
+
}
|
371
394
|
if (GPR_UNLIKELY(tracer_ != nullptr)) {
|
372
395
|
gpr_log(GPR_INFO,
|
373
396
|
"[%s %p] Creating subchannel list %p for %" PRIuPTR " subchannels",
|