grpc 1.55.0 → 1.56.0
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 +48 -12
- 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
@@ -24,6 +24,7 @@
|
|
24
24
|
#include <grpc/support/log_windows.h>
|
25
25
|
|
26
26
|
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
27
|
+
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
27
28
|
#include "src/core/lib/event_engine/trace.h"
|
28
29
|
#include "src/core/lib/event_engine/windows/windows_endpoint.h"
|
29
30
|
#include "src/core/lib/gprpp/debug_location.h"
|
@@ -50,11 +51,11 @@ void DumpSliceBuffer(SliceBuffer* buffer, absl::string_view context_string) {
|
|
50
51
|
WindowsEndpoint::WindowsEndpoint(
|
51
52
|
const EventEngine::ResolvedAddress& peer_address,
|
52
53
|
std::unique_ptr<WinSocket> socket, MemoryAllocator&& allocator,
|
53
|
-
const EndpointConfig& /* config */,
|
54
|
+
const EndpointConfig& /* config */, ThreadPool* thread_pool,
|
54
55
|
std::shared_ptr<EventEngine> engine)
|
55
56
|
: peer_address_(peer_address),
|
56
57
|
allocator_(std::move(allocator)),
|
57
|
-
|
58
|
+
thread_pool_(thread_pool),
|
58
59
|
io_state_(std::make_shared<AsyncIOState>(this, std::move(socket),
|
59
60
|
std::move(engine))) {
|
60
61
|
char addr[EventEngine::ResolvedAddress::MAX_SIZE_BYTES];
|
@@ -100,7 +101,7 @@ absl::Status WindowsEndpoint::DoTcpRead(SliceBuffer* buffer) {
|
|
100
101
|
// Data or some error was returned immediately.
|
101
102
|
io_state_->socket->read_info()->SetResult(
|
102
103
|
{/*wsa_error=*/wsa_error, /*bytes_read=*/bytes_read});
|
103
|
-
|
104
|
+
thread_pool_->Run(&io_state_->handle_read_event);
|
104
105
|
return absl::OkStatus();
|
105
106
|
}
|
106
107
|
// If the endpoint has already received some data, and the next call would
|
@@ -126,7 +127,7 @@ absl::Status WindowsEndpoint::DoTcpRead(SliceBuffer* buffer) {
|
|
126
127
|
bool WindowsEndpoint::Read(absl::AnyInvocable<void(absl::Status)> on_read,
|
127
128
|
SliceBuffer* buffer, const ReadArgs* /* args */) {
|
128
129
|
if (io_state_->socket->IsShutdown()) {
|
129
|
-
|
130
|
+
thread_pool_->Run([on_read = std::move(on_read)]() mutable {
|
130
131
|
on_read(absl::UnavailableError("Socket is shutting down."));
|
131
132
|
});
|
132
133
|
return false;
|
@@ -143,7 +144,7 @@ bool WindowsEndpoint::Read(absl::AnyInvocable<void(absl::Status)> on_read,
|
|
143
144
|
auto status = DoTcpRead(buffer);
|
144
145
|
if (!status.ok()) {
|
145
146
|
// The read could not be completed.
|
146
|
-
io_state_->endpoint->
|
147
|
+
io_state_->endpoint->thread_pool_->Run([this, status]() {
|
147
148
|
io_state_->handle_read_event.ExecuteCallbackAndReset(status);
|
148
149
|
});
|
149
150
|
}
|
@@ -154,7 +155,7 @@ bool WindowsEndpoint::Write(absl::AnyInvocable<void(absl::Status)> on_writable,
|
|
154
155
|
SliceBuffer* data, const WriteArgs* /* args */) {
|
155
156
|
GRPC_EVENT_ENGINE_ENDPOINT_TRACE("WindowsEndpoint::%p writing", this);
|
156
157
|
if (io_state_->socket->IsShutdown()) {
|
157
|
-
|
158
|
+
thread_pool_->Run([on_writable = std::move(on_writable)]() mutable {
|
158
159
|
on_writable(absl::UnavailableError("Socket is shutting down."));
|
159
160
|
});
|
160
161
|
return false;
|
@@ -182,7 +183,7 @@ bool WindowsEndpoint::Write(absl::AnyInvocable<void(absl::Status)> on_writable,
|
|
182
183
|
if (status == 0) {
|
183
184
|
if (bytes_sent == data->Length()) {
|
184
185
|
// Write completed, exiting early
|
185
|
-
|
186
|
+
thread_pool_->Run(
|
186
187
|
[cb = std::move(on_writable)]() mutable { cb(absl::OkStatus()); });
|
187
188
|
return false;
|
188
189
|
}
|
@@ -203,7 +204,7 @@ bool WindowsEndpoint::Write(absl::AnyInvocable<void(absl::Status)> on_writable,
|
|
203
204
|
// then we can avoid doing an async write operation at all.
|
204
205
|
int wsa_error = WSAGetLastError();
|
205
206
|
if (wsa_error != WSAEWOULDBLOCK) {
|
206
|
-
|
207
|
+
thread_pool_->Run([cb = std::move(on_writable), wsa_error]() mutable {
|
207
208
|
cb(GRPC_WSA_ERROR(wsa_error, "WSASend"));
|
208
209
|
});
|
209
210
|
return false;
|
@@ -217,7 +218,7 @@ bool WindowsEndpoint::Write(absl::AnyInvocable<void(absl::Status)> on_writable,
|
|
217
218
|
if (status != 0) {
|
218
219
|
int wsa_error = WSAGetLastError();
|
219
220
|
if (wsa_error != WSA_IO_PENDING) {
|
220
|
-
|
221
|
+
thread_pool_->Run([cb = std::move(on_writable), wsa_error]() mutable {
|
221
222
|
cb(GRPC_WSA_ERROR(wsa_error, "WSASend"));
|
222
223
|
});
|
223
224
|
return false;
|
@@ -319,7 +320,7 @@ void WindowsEndpoint::HandleReadClosure::Run() {
|
|
319
320
|
bool WindowsEndpoint::HandleReadClosure::MaybeFinishIfDataHasAlreadyBeenRead() {
|
320
321
|
if (last_read_buffer_.Length() > 0) {
|
321
322
|
buffer_->Swap(last_read_buffer_);
|
322
|
-
io_state_->endpoint->
|
323
|
+
io_state_->endpoint->thread_pool_->Run(
|
323
324
|
[this]() { ExecuteCallbackAndReset(absl::OkStatus()); });
|
324
325
|
return true;
|
325
326
|
}
|
@@ -19,6 +19,7 @@
|
|
19
19
|
|
20
20
|
#include <grpc/event_engine/event_engine.h>
|
21
21
|
|
22
|
+
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
22
23
|
#include "src/core/lib/event_engine/windows/win_socket.h"
|
23
24
|
|
24
25
|
namespace grpc_event_engine {
|
@@ -29,7 +30,7 @@ class WindowsEndpoint : public EventEngine::Endpoint {
|
|
29
30
|
WindowsEndpoint(const EventEngine::ResolvedAddress& peer_address,
|
30
31
|
std::unique_ptr<WinSocket> socket,
|
31
32
|
MemoryAllocator&& allocator, const EndpointConfig& config,
|
32
|
-
|
33
|
+
ThreadPool* thread_pool, std::shared_ptr<EventEngine> engine);
|
33
34
|
~WindowsEndpoint() override;
|
34
35
|
bool Read(absl::AnyInvocable<void(absl::Status)> on_read, SliceBuffer* buffer,
|
35
36
|
const ReadArgs* args) override;
|
@@ -107,7 +108,7 @@ class WindowsEndpoint : public EventEngine::Endpoint {
|
|
107
108
|
EventEngine::ResolvedAddress local_address_;
|
108
109
|
std::string local_address_string_;
|
109
110
|
MemoryAllocator allocator_;
|
110
|
-
|
111
|
+
ThreadPool* thread_pool_;
|
111
112
|
std::shared_ptr<AsyncIOState> io_state_;
|
112
113
|
};
|
113
114
|
|
@@ -25,13 +25,14 @@
|
|
25
25
|
#include <grpc/event_engine/event_engine.h>
|
26
26
|
#include <grpc/event_engine/memory_allocator.h>
|
27
27
|
#include <grpc/event_engine/slice_buffer.h>
|
28
|
+
#include <grpc/support/cpu.h>
|
28
29
|
|
29
30
|
#include "src/core/lib/event_engine/channel_args_endpoint_config.h"
|
30
31
|
#include "src/core/lib/event_engine/common_closures.h"
|
31
|
-
#include "src/core/lib/event_engine/executor/executor.h"
|
32
32
|
#include "src/core/lib/event_engine/handle_containers.h"
|
33
33
|
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
|
34
34
|
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
35
|
+
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
35
36
|
#include "src/core/lib/event_engine/trace.h"
|
36
37
|
#include "src/core/lib/event_engine/utils.h"
|
37
38
|
#include "src/core/lib/event_engine/windows/iocp.h"
|
@@ -48,21 +49,21 @@ namespace experimental {
|
|
48
49
|
|
49
50
|
// ---- IOCPWorkClosure ----
|
50
51
|
|
51
|
-
WindowsEventEngine::IOCPWorkClosure::IOCPWorkClosure(
|
52
|
+
WindowsEventEngine::IOCPWorkClosure::IOCPWorkClosure(ThreadPool* thread_pool,
|
52
53
|
IOCP* iocp)
|
53
|
-
:
|
54
|
-
|
54
|
+
: thread_pool_(thread_pool), iocp_(iocp) {
|
55
|
+
thread_pool_->Run(this);
|
55
56
|
}
|
56
57
|
|
57
58
|
void WindowsEventEngine::IOCPWorkClosure::Run() {
|
58
59
|
auto result = iocp_->Work(std::chrono::seconds(60), [this] {
|
59
60
|
workers_.fetch_add(1);
|
60
|
-
|
61
|
+
thread_pool_->Run(this);
|
61
62
|
});
|
62
63
|
if (result == Poller::WorkResult::kDeadlineExceeded) {
|
63
64
|
// iocp received no messages. restart the worker
|
64
65
|
workers_.fetch_add(1);
|
65
|
-
|
66
|
+
thread_pool_->Run(this);
|
66
67
|
}
|
67
68
|
if (workers_.fetch_sub(1) == 1) done_signal_.Notify();
|
68
69
|
}
|
@@ -97,10 +98,11 @@ struct WindowsEventEngine::TimerClosure final : public EventEngine::Closure {
|
|
97
98
|
};
|
98
99
|
|
99
100
|
WindowsEventEngine::WindowsEventEngine()
|
100
|
-
:
|
101
|
-
|
102
|
-
|
103
|
-
|
101
|
+
: thread_pool_(
|
102
|
+
MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 2u, 16u))),
|
103
|
+
iocp_(thread_pool_.get()),
|
104
|
+
timer_manager_(thread_pool_),
|
105
|
+
iocp_worker_(thread_pool_.get(), &iocp_) {
|
104
106
|
WSADATA wsaData;
|
105
107
|
int status = WSAStartup(MAKEWORD(2, 0), &wsaData);
|
106
108
|
GPR_ASSERT(status == 0);
|
@@ -140,7 +142,7 @@ WindowsEventEngine::~WindowsEventEngine() {
|
|
140
142
|
iocp_.Shutdown();
|
141
143
|
GPR_ASSERT(WSACleanup() == 0);
|
142
144
|
timer_manager_.Shutdown();
|
143
|
-
|
145
|
+
thread_pool_->Quiesce();
|
144
146
|
}
|
145
147
|
|
146
148
|
bool WindowsEventEngine::Cancel(EventEngine::TaskHandle handle) {
|
@@ -167,11 +169,11 @@ EventEngine::TaskHandle WindowsEventEngine::RunAfter(
|
|
167
169
|
}
|
168
170
|
|
169
171
|
void WindowsEventEngine::Run(absl::AnyInvocable<void()> closure) {
|
170
|
-
|
172
|
+
thread_pool_->Run(std::move(closure));
|
171
173
|
}
|
172
174
|
|
173
175
|
void WindowsEventEngine::Run(EventEngine::Closure* closure) {
|
174
|
-
|
176
|
+
thread_pool_->Run(closure);
|
175
177
|
}
|
176
178
|
|
177
179
|
EventEngine::TaskHandle WindowsEventEngine::RunAfterInternal(
|
@@ -219,12 +221,12 @@ void WindowsEventEngine::OnConnectCompleted(
|
|
219
221
|
state->socket->Shutdown(DEBUG_LOCATION, "ConnectEx failure");
|
220
222
|
endpoint = GRPC_WSA_ERROR(overlapped_result.wsa_error, "ConnectEx");
|
221
223
|
} else {
|
222
|
-
// This code should be running in
|
224
|
+
// This code should be running in a thread pool thread already, so the
|
223
225
|
// callback can be run directly.
|
224
226
|
ChannelArgsEndpointConfig cfg;
|
225
227
|
endpoint = std::make_unique<WindowsEndpoint>(
|
226
228
|
state->address, std::move(state->socket), std::move(state->allocator),
|
227
|
-
cfg,
|
229
|
+
cfg, thread_pool_.get(), shared_from_this());
|
228
230
|
}
|
229
231
|
}
|
230
232
|
cb(std::move(endpoint));
|
@@ -400,8 +402,8 @@ WindowsEventEngine::CreateListener(
|
|
400
402
|
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
|
401
403
|
return std::make_unique<WindowsEventEngineListener>(
|
402
404
|
&iocp_, std::move(on_accept), std::move(on_shutdown),
|
403
|
-
std::move(memory_allocator_factory), shared_from_this(),
|
404
|
-
config);
|
405
|
+
std::move(memory_allocator_factory), shared_from_this(),
|
406
|
+
thread_pool_.get(), config);
|
405
407
|
}
|
406
408
|
} // namespace experimental
|
407
409
|
} // namespace grpc_event_engine
|
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
#include "src/core/lib/event_engine/handle_containers.h"
|
32
32
|
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
|
33
|
-
#include "src/core/lib/event_engine/thread_pool.h"
|
33
|
+
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
34
34
|
#include "src/core/lib/event_engine/windows/iocp.h"
|
35
35
|
#include "src/core/lib/event_engine/windows/windows_endpoint.h"
|
36
36
|
#include "src/core/lib/gprpp/sync.h"
|
@@ -88,11 +88,11 @@ class WindowsEventEngine : public EventEngine,
|
|
88
88
|
absl::AnyInvocable<void()> closure) override;
|
89
89
|
bool Cancel(TaskHandle handle) override;
|
90
90
|
|
91
|
-
// Retrieve the base
|
91
|
+
// Retrieve the base ThreadPool.
|
92
92
|
// This is public because most classes that know the concrete
|
93
93
|
// WindowsEventEngine type are effectively friends.
|
94
94
|
// Not intended for external use.
|
95
|
-
|
95
|
+
ThreadPool* thread_pool() { return thread_pool_.get(); }
|
96
96
|
IOCP* poller() { return &iocp_; }
|
97
97
|
|
98
98
|
private:
|
@@ -116,14 +116,14 @@ class WindowsEventEngine : public EventEngine,
|
|
116
116
|
// A poll worker which schedules itself unless kicked
|
117
117
|
class IOCPWorkClosure : public EventEngine::Closure {
|
118
118
|
public:
|
119
|
-
explicit IOCPWorkClosure(
|
119
|
+
explicit IOCPWorkClosure(ThreadPool* thread_pool, IOCP* iocp);
|
120
120
|
void Run() override;
|
121
121
|
void WaitForShutdown();
|
122
122
|
|
123
123
|
private:
|
124
124
|
std::atomic<int> workers_{1};
|
125
125
|
grpc_core::Notification done_signal_;
|
126
|
-
|
126
|
+
ThreadPool* thread_pool_;
|
127
127
|
IOCP* iocp_;
|
128
128
|
};
|
129
129
|
|
@@ -150,7 +150,7 @@ class WindowsEventEngine : public EventEngine,
|
|
150
150
|
ConnectionHandleSet known_connection_handles_ ABSL_GUARDED_BY(connection_mu_);
|
151
151
|
std::atomic<intptr_t> aba_token_{0};
|
152
152
|
|
153
|
-
std::shared_ptr<ThreadPool>
|
153
|
+
std::shared_ptr<ThreadPool> thread_pool_;
|
154
154
|
IOCP iocp_;
|
155
155
|
TimerManager timer_manager_;
|
156
156
|
IOCPWorkClosure iocp_worker_;
|
@@ -201,7 +201,7 @@ void WindowsEventEngineListener::SinglePortSocketListener::
|
|
201
201
|
peer_address, listener_->iocp_->Watch(io_state_->accept_socket),
|
202
202
|
listener_->memory_allocator_factory_->CreateMemoryAllocator(
|
203
203
|
absl::StrFormat("listener endpoint %s", peer_name)),
|
204
|
-
listener_->config_, listener_->
|
204
|
+
listener_->config_, listener_->thread_pool_, listener_->engine_);
|
205
205
|
listener_->accept_cb_(
|
206
206
|
std::move(endpoint),
|
207
207
|
listener_->memory_allocator_factory_->CreateMemoryAllocator(
|
@@ -265,12 +265,12 @@ WindowsEventEngineListener::WindowsEventEngineListener(
|
|
265
265
|
IOCP* iocp, AcceptCallback accept_cb,
|
266
266
|
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
267
267
|
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory,
|
268
|
-
std::shared_ptr<EventEngine> engine,
|
268
|
+
std::shared_ptr<EventEngine> engine, ThreadPool* thread_pool,
|
269
269
|
const EndpointConfig& config)
|
270
270
|
: iocp_(iocp),
|
271
271
|
config_(config),
|
272
272
|
engine_(std::move(engine)),
|
273
|
-
|
273
|
+
thread_pool_(thread_pool),
|
274
274
|
memory_allocator_factory_(std::move(memory_allocator_factory)),
|
275
275
|
accept_cb_(std::move(accept_cb)),
|
276
276
|
on_shutdown_(std::move(on_shutdown)) {}
|
@@ -27,6 +27,7 @@
|
|
27
27
|
#include <grpc/event_engine/memory_allocator.h>
|
28
28
|
|
29
29
|
#include "src/core/lib/event_engine/common_closures.h"
|
30
|
+
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
30
31
|
#include "src/core/lib/event_engine/windows/iocp.h"
|
31
32
|
#include "src/core/lib/gprpp/sync.h"
|
32
33
|
|
@@ -39,7 +40,7 @@ class WindowsEventEngineListener : public EventEngine::Listener {
|
|
39
40
|
IOCP* iocp, AcceptCallback accept_cb,
|
40
41
|
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
41
42
|
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory,
|
42
|
-
std::shared_ptr<EventEngine> engine,
|
43
|
+
std::shared_ptr<EventEngine> engine, ThreadPool* thread_pool_,
|
43
44
|
const EndpointConfig& config);
|
44
45
|
~WindowsEventEngineListener() override;
|
45
46
|
absl::StatusOr<int> Bind(const EventEngine::ResolvedAddress& addr) override;
|
@@ -136,7 +137,7 @@ class WindowsEventEngineListener : public EventEngine::Listener {
|
|
136
137
|
IOCP* const iocp_;
|
137
138
|
const EndpointConfig& config_;
|
138
139
|
std::shared_ptr<EventEngine> engine_;
|
139
|
-
|
140
|
+
ThreadPool* thread_pool_;
|
140
141
|
const std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory_;
|
141
142
|
AcceptCallback accept_cb_;
|
142
143
|
absl::AnyInvocable<void(absl::Status)> on_shutdown_;
|
@@ -0,0 +1,63 @@
|
|
1
|
+
// Copyright 2023 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
#include <grpc/support/port_platform.h>
|
15
|
+
|
16
|
+
#include "src/core/lib/event_engine/work_queue/basic_work_queue.h"
|
17
|
+
|
18
|
+
#include <utility>
|
19
|
+
|
20
|
+
#include "src/core/lib/event_engine/common_closures.h"
|
21
|
+
#include "src/core/lib/gprpp/sync.h"
|
22
|
+
|
23
|
+
namespace grpc_event_engine {
|
24
|
+
namespace experimental {
|
25
|
+
|
26
|
+
bool BasicWorkQueue::Empty() const {
|
27
|
+
grpc_core::MutexLock lock(&mu_);
|
28
|
+
return q_.empty();
|
29
|
+
}
|
30
|
+
|
31
|
+
size_t BasicWorkQueue::Size() const {
|
32
|
+
grpc_core::MutexLock lock(&mu_);
|
33
|
+
return q_.size();
|
34
|
+
}
|
35
|
+
|
36
|
+
EventEngine::Closure* BasicWorkQueue::PopMostRecent() {
|
37
|
+
grpc_core::MutexLock lock(&mu_);
|
38
|
+
if (q_.empty()) return nullptr;
|
39
|
+
auto tmp = q_.back();
|
40
|
+
q_.pop_back();
|
41
|
+
return tmp;
|
42
|
+
}
|
43
|
+
|
44
|
+
EventEngine::Closure* BasicWorkQueue::PopOldest() {
|
45
|
+
grpc_core::MutexLock lock(&mu_);
|
46
|
+
if (q_.empty()) return nullptr;
|
47
|
+
auto tmp = q_.front();
|
48
|
+
q_.pop_front();
|
49
|
+
return tmp;
|
50
|
+
}
|
51
|
+
|
52
|
+
void BasicWorkQueue::Add(EventEngine::Closure* closure) {
|
53
|
+
grpc_core::MutexLock lock(&mu_);
|
54
|
+
q_.push_back(closure);
|
55
|
+
}
|
56
|
+
|
57
|
+
void BasicWorkQueue::Add(absl::AnyInvocable<void()> invocable) {
|
58
|
+
grpc_core::MutexLock lock(&mu_);
|
59
|
+
q_.push_back(SelfDeletingClosure::Create(std::move(invocable)));
|
60
|
+
}
|
61
|
+
|
62
|
+
} // namespace experimental
|
63
|
+
} // namespace grpc_event_engine
|
@@ -0,0 +1,71 @@
|
|
1
|
+
// Copyright 2023 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_WORK_QUEUE_BASIC_WORK_QUEUE_H
|
15
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_WORK_QUEUE_BASIC_WORK_QUEUE_H
|
16
|
+
#include <grpc/support/port_platform.h>
|
17
|
+
|
18
|
+
#include <stddef.h>
|
19
|
+
|
20
|
+
#include <deque>
|
21
|
+
|
22
|
+
#include "absl/base/thread_annotations.h"
|
23
|
+
#include "absl/functional/any_invocable.h"
|
24
|
+
|
25
|
+
#include <grpc/event_engine/event_engine.h>
|
26
|
+
|
27
|
+
#include "src/core/lib/event_engine/work_queue/work_queue.h"
|
28
|
+
#include "src/core/lib/gprpp/sync.h"
|
29
|
+
|
30
|
+
namespace grpc_event_engine {
|
31
|
+
namespace experimental {
|
32
|
+
|
33
|
+
// A basic WorkQueue implementation that guards an std::deque with a Mutex
|
34
|
+
//
|
35
|
+
// Implementation note: q_.back is the most recent. q_.front is the oldest. New
|
36
|
+
// closures are added to the back.
|
37
|
+
class BasicWorkQueue : public WorkQueue {
|
38
|
+
public:
|
39
|
+
BasicWorkQueue() = default;
|
40
|
+
// Returns whether the queue is empty
|
41
|
+
bool Empty() const override ABSL_LOCKS_EXCLUDED(mu_);
|
42
|
+
// Returns the size of the queue.
|
43
|
+
size_t Size() const override ABSL_LOCKS_EXCLUDED(mu_);
|
44
|
+
// Returns the most recent element from the queue, or nullptr if either empty
|
45
|
+
// or the queue is under contention. This is the fastest way to retrieve
|
46
|
+
// elements from the queue.
|
47
|
+
//
|
48
|
+
// This method may return nullptr even if the queue is not empty.
|
49
|
+
EventEngine::Closure* PopMostRecent() override ABSL_LOCKS_EXCLUDED(mu_);
|
50
|
+
// Returns the most recent element from the queue, or nullptr if either empty
|
51
|
+
// or the queue is under contention.
|
52
|
+
// This is expected to be the slower of the two ways to retrieve closures from
|
53
|
+
// the queue.
|
54
|
+
//
|
55
|
+
// This method may return nullptr even if the queue is not empty.
|
56
|
+
EventEngine::Closure* PopOldest() override ABSL_LOCKS_EXCLUDED(mu_);
|
57
|
+
// Adds a closure to the queue.
|
58
|
+
void Add(EventEngine::Closure* closure) override ABSL_LOCKS_EXCLUDED(mu_);
|
59
|
+
// Wraps an AnyInvocable and adds it to the the queue.
|
60
|
+
void Add(absl::AnyInvocable<void()> invocable) override
|
61
|
+
ABSL_LOCKS_EXCLUDED(mu_);
|
62
|
+
|
63
|
+
private:
|
64
|
+
mutable grpc_core::Mutex mu_;
|
65
|
+
std::deque<EventEngine::Closure*> q_ ABSL_GUARDED_BY(mu_);
|
66
|
+
};
|
67
|
+
|
68
|
+
} // namespace experimental
|
69
|
+
} // namespace grpc_event_engine
|
70
|
+
|
71
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_WORK_QUEUE_BASIC_WORK_QUEUE_H
|
@@ -0,0 +1,62 @@
|
|
1
|
+
// Copyright 2022 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_WORK_QUEUE_WORK_QUEUE_H
|
15
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_WORK_QUEUE_WORK_QUEUE_H
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include <stddef.h>
|
20
|
+
|
21
|
+
#include "absl/functional/any_invocable.h"
|
22
|
+
|
23
|
+
#include <grpc/event_engine/event_engine.h>
|
24
|
+
|
25
|
+
namespace grpc_event_engine {
|
26
|
+
namespace experimental {
|
27
|
+
|
28
|
+
// An interface for thread-safe EventEngine callback work queues.
|
29
|
+
//
|
30
|
+
// Implementations should be optimized for LIFO operations using PopMostRecent.
|
31
|
+
// All methods must be guaranteed thread-safe.
|
32
|
+
class WorkQueue {
|
33
|
+
public:
|
34
|
+
virtual ~WorkQueue() = default;
|
35
|
+
// Returns whether the queue is empty.
|
36
|
+
virtual bool Empty() const = 0;
|
37
|
+
// Returns the size of the queue.
|
38
|
+
virtual size_t Size() const = 0;
|
39
|
+
// Returns the most recent element from the queue. This is the fastest way to
|
40
|
+
// retrieve elements from the queue.
|
41
|
+
//
|
42
|
+
// Implementations are permitted to return nullptr even if the queue is not
|
43
|
+
// empty. This is to support potential optimizations.
|
44
|
+
virtual EventEngine::Closure* PopMostRecent() = 0;
|
45
|
+
// Returns the most recent element from the queue, or nullptr if either empty
|
46
|
+
// or the queue is under contention.
|
47
|
+
// This is expected to be the slower of the two ways to retrieve closures from
|
48
|
+
// the queue.
|
49
|
+
//
|
50
|
+
// Implementations are permitted to return nullptr even if the queue is not
|
51
|
+
// empty. This is to support potential optimizations.
|
52
|
+
virtual EventEngine::Closure* PopOldest() = 0;
|
53
|
+
// Adds a closure to the queue.
|
54
|
+
virtual void Add(EventEngine::Closure* closure) = 0;
|
55
|
+
// Wraps an AnyInvocable and adds it to the the queue.
|
56
|
+
virtual void Add(absl::AnyInvocable<void()> invocable) = 0;
|
57
|
+
};
|
58
|
+
|
59
|
+
} // namespace experimental
|
60
|
+
} // namespace grpc_event_engine
|
61
|
+
|
62
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_WORK_QUEUE_WORK_QUEUE_H
|
@@ -21,7 +21,9 @@
|
|
21
21
|
#include <algorithm>
|
22
22
|
#include <atomic>
|
23
23
|
#include <string>
|
24
|
+
#include <utility>
|
24
25
|
|
26
|
+
#include "absl/functional/any_invocable.h"
|
25
27
|
#include "absl/strings/ascii.h"
|
26
28
|
#include "absl/strings/str_cat.h"
|
27
29
|
#include "absl/strings/str_split.h"
|
@@ -48,15 +50,23 @@ struct ForcedExperiment {
|
|
48
50
|
};
|
49
51
|
ForcedExperiment g_forced_experiments[kNumExperiments];
|
50
52
|
|
51
|
-
std::atomic<bool> g_loaded;
|
53
|
+
std::atomic<bool> g_loaded(false);
|
54
|
+
|
55
|
+
absl::AnyInvocable<bool(struct ExperimentMetadata)>* g_check_constraints_cb =
|
56
|
+
nullptr;
|
52
57
|
|
53
58
|
GPR_ATTRIBUTE_NOINLINE Experiments LoadExperimentsFromConfigVariable() {
|
54
|
-
|
59
|
+
g_loaded.store(true, std::memory_order_relaxed);
|
55
60
|
// Set defaults from metadata.
|
56
61
|
Experiments experiments;
|
57
62
|
for (size_t i = 0; i < kNumExperiments; i++) {
|
58
63
|
if (!g_forced_experiments[i].forced) {
|
59
|
-
|
64
|
+
if (g_check_constraints_cb != nullptr) {
|
65
|
+
experiments.enabled[i] =
|
66
|
+
(*g_check_constraints_cb)(g_experiment_metadata[i]);
|
67
|
+
} else {
|
68
|
+
experiments.enabled[i] = g_experiment_metadata[i].default_value;
|
69
|
+
}
|
60
70
|
} else {
|
61
71
|
experiments.enabled[i] = g_forced_experiments[i].value;
|
62
72
|
}
|
@@ -92,14 +102,23 @@ GPR_ATTRIBUTE_NOINLINE Experiments LoadExperimentsFromConfigVariable() {
|
|
92
102
|
}
|
93
103
|
return experiments;
|
94
104
|
}
|
95
|
-
} // namespace
|
96
105
|
|
97
|
-
|
106
|
+
Experiments& ExperimentsSingleton() {
|
98
107
|
// One time initialization:
|
99
|
-
static
|
108
|
+
static NoDestruct<Experiments> experiments{
|
100
109
|
LoadExperimentsFromConfigVariable()};
|
110
|
+
return *experiments;
|
111
|
+
}
|
112
|
+
} // namespace
|
113
|
+
|
114
|
+
void TestOnlyReloadExperimentsFromConfigVariables() {
|
115
|
+
ExperimentsSingleton() = LoadExperimentsFromConfigVariable();
|
116
|
+
PrintExperimentsList();
|
117
|
+
}
|
118
|
+
|
119
|
+
bool IsExperimentEnabled(size_t experiment_id) {
|
101
120
|
// Normal path: just return the value;
|
102
|
-
return
|
121
|
+
return ExperimentsSingleton().enabled[experiment_id];
|
103
122
|
}
|
104
123
|
|
105
124
|
void PrintExperimentsList() {
|
@@ -142,6 +161,13 @@ void ForceEnableExperiment(absl::string_view experiment, bool enable) {
|
|
142
161
|
std::string(experiment).c_str(), enable ? "enable" : "disable");
|
143
162
|
}
|
144
163
|
|
164
|
+
void RegisterExperimentConstraintsValidator(
|
165
|
+
absl::AnyInvocable<bool(struct ExperimentMetadata)> check_constraints_cb) {
|
166
|
+
g_check_constraints_cb =
|
167
|
+
new absl::AnyInvocable<bool(struct ExperimentMetadata)>(
|
168
|
+
std::move(check_constraints_cb));
|
169
|
+
}
|
170
|
+
|
145
171
|
} // namespace grpc_core
|
146
172
|
#else
|
147
173
|
namespace grpc_core {
|
@@ -150,5 +176,10 @@ void ForceEnableExperiment(absl::string_view experiment_name, bool) {
|
|
150
176
|
Crash(absl::StrCat("ForceEnableExperiment(\"", experiment_name,
|
151
177
|
"\") called in final build"));
|
152
178
|
}
|
179
|
+
|
180
|
+
void RegisterExperimentConstraintsValidator(
|
181
|
+
absl::AnyInvocable<
|
182
|
+
bool(struct ExperimentMetadata)> /*check_constraints_cb*/) {}
|
183
|
+
|
153
184
|
} // namespace grpc_core
|
154
185
|
#endif
|
@@ -19,6 +19,7 @@
|
|
19
19
|
|
20
20
|
#include <stddef.h>
|
21
21
|
|
22
|
+
#include "absl/functional/any_invocable.h"
|
22
23
|
#include "absl/strings/string_view.h"
|
23
24
|
|
24
25
|
// #define GRPC_EXPERIMENTS_ARE_FINAL
|
@@ -30,6 +31,12 @@ namespace grpc_core {
|
|
30
31
|
// Experiments are numbered by their order in the g_experiment_metadata array
|
31
32
|
// declared in experiments.h.
|
32
33
|
bool IsExperimentEnabled(size_t experiment_id);
|
34
|
+
|
35
|
+
// Reload experiment state from config variables.
|
36
|
+
// Does not change ForceEnableExperiment state.
|
37
|
+
// Expects the caller to handle global thread safety - so really only
|
38
|
+
// appropriate for carefully written tests.
|
39
|
+
void TestOnlyReloadExperimentsFromConfigVariables();
|
33
40
|
#endif
|
34
41
|
|
35
42
|
// Print out a list of all experiments that are built into this binary.
|
@@ -45,9 +52,18 @@ void ForceEnableExperiment(absl::string_view experiment_name, bool enable);
|
|
45
52
|
struct ExperimentMetadata {
|
46
53
|
const char* name;
|
47
54
|
const char* description;
|
55
|
+
const char* additional_constaints;
|
48
56
|
bool default_value;
|
57
|
+
bool allow_in_fuzzing_config;
|
49
58
|
};
|
50
59
|
|
60
|
+
// Register a function to be called to validate the value an experiment can
|
61
|
+
// take subject to additional constraints.
|
62
|
+
// The function will take the ExperimentMetadata as its argument. It will return
|
63
|
+
// a bool value indicating the actual value the experiment should take.
|
64
|
+
void RegisterExperimentConstraintsValidator(
|
65
|
+
absl::AnyInvocable<bool(struct ExperimentMetadata)> check_constraints_cb);
|
66
|
+
|
51
67
|
} // namespace grpc_core
|
52
68
|
|
53
69
|
#endif // GRPC_SRC_CORE_LIB_EXPERIMENTS_CONFIG_H
|