grpc 1.55.3 → 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 -70
- 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 +82 -98
- data/src/core/ext/filters/client_channel/client_channel.h +4 -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/hpack_parser.cc +543 -567
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +9 -150
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +32 -46
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +5 -18
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
- data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
- 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/backoff/random_early_detection.h +0 -5
- 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 +3 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -33
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -11
- 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 +156 -140
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
- 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/validate_metadata.cc +22 -37
- data/src/core/lib/surface/validate_metadata.h +3 -13
- 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 -16
- 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/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +0 -176
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +0 -325
- data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -18,13 +18,12 @@
|
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
|
-
#include <utility>
|
22
|
-
|
23
21
|
#include <grpc/support/atm.h>
|
24
22
|
|
25
23
|
// FIXME: "posix" files shouldn't be depending on _GNU_SOURCE
|
26
24
|
#ifndef _GNU_SOURCE
|
27
25
|
#define _GNU_SOURCE
|
26
|
+
#include <grpc/event_engine/event_engine.h>
|
28
27
|
#endif
|
29
28
|
|
30
29
|
#include "src/core/lib/iomgr/port.h"
|
@@ -49,7 +48,6 @@
|
|
49
48
|
|
50
49
|
#include <grpc/byte_buffer.h>
|
51
50
|
#include <grpc/event_engine/endpoint_config.h>
|
52
|
-
#include <grpc/event_engine/event_engine.h>
|
53
51
|
#include <grpc/support/alloc.h>
|
54
52
|
#include <grpc/support/log.h>
|
55
53
|
#include <grpc/support/sync.h>
|
@@ -80,8 +78,6 @@
|
|
80
78
|
#include "src/core/lib/transport/error_utils.h"
|
81
79
|
|
82
80
|
static std::atomic<int64_t> num_dropped_connections{0};
|
83
|
-
static constexpr grpc_core::Duration kRetryAcceptWaitTime{
|
84
|
-
grpc_core::Duration::Seconds(1)};
|
85
81
|
|
86
82
|
using ::grpc_event_engine::experimental::EndpointConfig;
|
87
83
|
using ::grpc_event_engine::experimental::EventEngine;
|
@@ -93,99 +89,118 @@ using ::grpc_event_engine::experimental::SliceBuffer;
|
|
93
89
|
static grpc_error_handle CreateEventEngineListener(
|
94
90
|
grpc_tcp_server* s, grpc_closure* shutdown_complete,
|
95
91
|
const EndpointConfig& config, grpc_tcp_server** server) {
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
if (
|
111
|
-
|
112
|
-
|
92
|
+
absl::StatusOr<std::unique_ptr<EventEngine::Listener>> listener;
|
93
|
+
if (grpc_event_engine::experimental::EventEngineSupportsFd()) {
|
94
|
+
PosixEventEngineWithFdSupport::PosixAcceptCallback accept_cb =
|
95
|
+
[s](int listener_fd, std::unique_ptr<EventEngine::Endpoint> ep,
|
96
|
+
bool is_external, MemoryAllocator /*allocator*/,
|
97
|
+
SliceBuffer* pending_data) {
|
98
|
+
grpc_core::ApplicationCallbackExecCtx app_ctx;
|
99
|
+
grpc_core::ExecCtx exec_ctx;
|
100
|
+
grpc_tcp_server_acceptor* acceptor =
|
101
|
+
static_cast<grpc_tcp_server_acceptor*>(
|
102
|
+
gpr_malloc(sizeof(*acceptor)));
|
103
|
+
acceptor->from_server = s;
|
104
|
+
acceptor->port_index = -1;
|
105
|
+
acceptor->fd_index = -1;
|
106
|
+
if (!is_external) {
|
107
|
+
auto it = s->listen_fd_to_index_map.find(listener_fd);
|
108
|
+
if (it != s->listen_fd_to_index_map.end()) {
|
109
|
+
acceptor->port_index = std::get<0>(it->second);
|
110
|
+
acceptor->fd_index = std::get<1>(it->second);
|
111
|
+
}
|
112
|
+
} else {
|
113
|
+
// External connection handling.
|
114
|
+
grpc_resolved_address addr;
|
115
|
+
memset(&addr, 0, sizeof(addr));
|
116
|
+
addr.len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
|
117
|
+
// Get the fd of the socket connected to peer.
|
118
|
+
int fd = reinterpret_cast<grpc_event_engine::experimental::
|
119
|
+
PosixEndpointWithFdSupport*>(ep.get())
|
120
|
+
->GetWrappedFd();
|
121
|
+
if (getpeername(fd, reinterpret_cast<struct sockaddr*>(addr.addr),
|
122
|
+
&(addr.len)) < 0) {
|
123
|
+
gpr_log(GPR_ERROR, "Failed getpeername: %s",
|
124
|
+
grpc_core::StrError(errno).c_str());
|
125
|
+
close(fd);
|
126
|
+
return;
|
127
|
+
}
|
128
|
+
(void)grpc_set_socket_no_sigpipe_if_possible(fd);
|
129
|
+
auto addr_uri = grpc_sockaddr_to_uri(&addr);
|
130
|
+
if (!addr_uri.ok()) {
|
131
|
+
gpr_log(GPR_ERROR, "Invalid address: %s",
|
132
|
+
addr_uri.status().ToString().c_str());
|
133
|
+
return;
|
134
|
+
}
|
135
|
+
if (grpc_tcp_trace.enabled()) {
|
136
|
+
gpr_log(GPR_INFO,
|
137
|
+
"SERVER_CONNECT: incoming external connection: %s",
|
138
|
+
addr_uri->c_str());
|
139
|
+
}
|
113
140
|
}
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
&(addr.len)) < 0) {
|
127
|
-
gpr_log(GPR_ERROR, "Failed getpeername: %s",
|
128
|
-
grpc_core::StrError(errno).c_str());
|
129
|
-
close(fd);
|
130
|
-
return;
|
141
|
+
grpc_pollset* read_notifier_pollset =
|
142
|
+
(*(s->pollsets))[static_cast<size_t>(gpr_atm_no_barrier_fetch_add(
|
143
|
+
&s->next_pollset_to_assign, 1)) %
|
144
|
+
s->pollsets->size()];
|
145
|
+
acceptor->external_connection = is_external;
|
146
|
+
acceptor->listener_fd = listener_fd;
|
147
|
+
grpc_byte_buffer* buf = nullptr;
|
148
|
+
if (pending_data != nullptr && pending_data->Length() > 0) {
|
149
|
+
buf = grpc_raw_byte_buffer_create(nullptr, 0);
|
150
|
+
grpc_slice_buffer_swap(&buf->data.raw.slice_buffer,
|
151
|
+
pending_data->c_slice_buffer());
|
152
|
+
pending_data->Clear();
|
131
153
|
}
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
shutdown_complete, absl_status_to_grpc_error(status));
|
183
|
-
delete s->fd_handler;
|
184
|
-
delete s;
|
185
|
-
},
|
186
|
-
config,
|
187
|
-
std::make_unique<MemoryQuotaBasedMemoryAllocatorFactory>(
|
188
|
-
s->memory_quota));
|
154
|
+
acceptor->pending_data = buf;
|
155
|
+
s->on_accept_cb(s->on_accept_cb_arg,
|
156
|
+
grpc_event_engine::experimental::
|
157
|
+
grpc_event_engine_endpoint_create(std::move(ep)),
|
158
|
+
read_notifier_pollset, acceptor);
|
159
|
+
};
|
160
|
+
PosixEventEngineWithFdSupport* engine_ptr =
|
161
|
+
reinterpret_cast<PosixEventEngineWithFdSupport*>(
|
162
|
+
config.GetVoidPointer(GRPC_INTERNAL_ARG_EVENT_ENGINE));
|
163
|
+
// Keeps the engine alive for some tests that have not otherwise
|
164
|
+
// instantiated an EventEngine
|
165
|
+
std::shared_ptr<EventEngine> keeper;
|
166
|
+
if (engine_ptr == nullptr) {
|
167
|
+
keeper = grpc_event_engine::experimental::GetDefaultEventEngine();
|
168
|
+
engine_ptr =
|
169
|
+
reinterpret_cast<PosixEventEngineWithFdSupport*>(keeper.get());
|
170
|
+
}
|
171
|
+
listener = engine_ptr->CreatePosixListener(
|
172
|
+
std::move(accept_cb),
|
173
|
+
[s, shutdown_complete](absl::Status status) {
|
174
|
+
grpc_event_engine::experimental::RunEventEngineClosure(
|
175
|
+
shutdown_complete, absl_status_to_grpc_error(status));
|
176
|
+
delete s->fd_handler;
|
177
|
+
delete s;
|
178
|
+
},
|
179
|
+
config,
|
180
|
+
std::make_unique<MemoryQuotaBasedMemoryAllocatorFactory>(
|
181
|
+
s->memory_quota));
|
182
|
+
} else {
|
183
|
+
EventEngine::Listener::AcceptCallback accept_cb =
|
184
|
+
[s](std::unique_ptr<EventEngine::Endpoint> ep, MemoryAllocator) {
|
185
|
+
s->on_accept_cb(s->on_accept_cb_arg,
|
186
|
+
grpc_event_engine::experimental::
|
187
|
+
grpc_event_engine_endpoint_create(std::move(ep)),
|
188
|
+
nullptr, nullptr);
|
189
|
+
};
|
190
|
+
auto ee = grpc_event_engine::experimental::GetDefaultEventEngine();
|
191
|
+
listener = ee->CreateListener(
|
192
|
+
std::move(accept_cb),
|
193
|
+
[s, ee, shutdown_complete](absl::Status status) {
|
194
|
+
GPR_ASSERT(gpr_atm_no_barrier_load(&s->refs.count) == 0);
|
195
|
+
grpc_event_engine::experimental::RunEventEngineClosure(
|
196
|
+
shutdown_complete, absl_status_to_grpc_error(status));
|
197
|
+
delete s->fd_handler;
|
198
|
+
delete s;
|
199
|
+
},
|
200
|
+
config,
|
201
|
+
std::make_unique<MemoryQuotaBasedMemoryAllocatorFactory>(
|
202
|
+
s->memory_quota));
|
203
|
+
}
|
189
204
|
if (!listener.ok()) {
|
190
205
|
delete s;
|
191
206
|
*server = nullptr;
|
@@ -346,38 +361,22 @@ static void on_read(void* arg, grpc_error_handle err) {
|
|
346
361
|
if (fd < 0) {
|
347
362
|
if (errno == EINTR) {
|
348
363
|
continue;
|
349
|
-
}
|
350
|
-
|
351
|
-
// happens, the connection is left in the accept queue until either a
|
352
|
-
// read event triggers the on_read callback, or time has passed and the
|
353
|
-
// accept should be re-tried regardless. This callback is not cancelled,
|
354
|
-
// so a spurious wakeup may occur even when there's nothing to accept.
|
355
|
-
// This is not a performant code path, but if an fd limit has been
|
356
|
-
// reached, the system is likely in an unhappy state regardless.
|
357
|
-
if (errno == EMFILE) {
|
358
|
-
GRPC_LOG_EVERY_N_SEC(1, GPR_ERROR, "%s",
|
359
|
-
"File descriptor limit reached. Retrying.");
|
360
|
-
grpc_fd_notify_on_read(sp->emfd, &sp->read_closure);
|
361
|
-
if (gpr_atm_full_xchg(&sp->retry_timer_armed, true)) return;
|
362
|
-
grpc_timer_init(&sp->retry_timer,
|
363
|
-
grpc_core::Timestamp::Now() + kRetryAcceptWaitTime,
|
364
|
-
&sp->retry_closure);
|
365
|
-
return;
|
366
|
-
}
|
367
|
-
if (errno == EAGAIN || errno == ECONNABORTED || errno == EWOULDBLOCK) {
|
364
|
+
} else if (errno == EAGAIN || errno == ECONNABORTED ||
|
365
|
+
errno == EWOULDBLOCK) {
|
368
366
|
grpc_fd_notify_on_read(sp->emfd, &sp->read_closure);
|
369
367
|
return;
|
370
|
-
}
|
371
|
-
gpr_mu_lock(&sp->server->mu);
|
372
|
-
if (!sp->server->shutdown_listeners) {
|
373
|
-
gpr_log(GPR_ERROR, "Failed accept4: %s",
|
374
|
-
grpc_core::StrError(errno).c_str());
|
375
368
|
} else {
|
376
|
-
|
377
|
-
|
369
|
+
gpr_mu_lock(&sp->server->mu);
|
370
|
+
if (!sp->server->shutdown_listeners) {
|
371
|
+
gpr_log(GPR_ERROR, "Failed accept4: %s",
|
372
|
+
grpc_core::StrError(errno).c_str());
|
373
|
+
} else {
|
374
|
+
// if we have shutdown listeners, accept4 could fail, and we
|
375
|
+
// needn't notify users
|
376
|
+
}
|
377
|
+
gpr_mu_unlock(&sp->server->mu);
|
378
|
+
goto error;
|
378
379
|
}
|
379
|
-
gpr_mu_unlock(&sp->server->mu);
|
380
|
-
goto error;
|
381
380
|
}
|
382
381
|
|
383
382
|
if (sp->server->memory_quota->IsMemoryPressureHigh()) {
|
@@ -570,7 +569,6 @@ static grpc_error_handle clone_port(grpc_tcp_listener* listener,
|
|
570
569
|
sp->port_index = listener->port_index;
|
571
570
|
sp->fd_index = listener->fd_index + count - i;
|
572
571
|
GPR_ASSERT(sp->emfd);
|
573
|
-
grpc_tcp_server_listener_initialize_retry_timer(sp);
|
574
572
|
while (listener->server->tail->next != nullptr) {
|
575
573
|
listener->server->tail = listener->server->tail->next;
|
576
574
|
}
|
@@ -589,16 +587,27 @@ static grpc_error_handle tcp_server_add_port(grpc_tcp_server* s,
|
|
589
587
|
return absl::UnknownError("Server already shutdown");
|
590
588
|
}
|
591
589
|
int fd_index = 0;
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
590
|
+
absl::StatusOr<int> port;
|
591
|
+
if (grpc_event_engine::experimental::EventEngineSupportsFd()) {
|
592
|
+
port =
|
593
|
+
static_cast<
|
594
|
+
grpc_event_engine::experimental::PosixListenerWithFdSupport*>(
|
595
|
+
s->ee_listener.get())
|
596
|
+
->BindWithFd(
|
597
|
+
grpc_event_engine::experimental::CreateResolvedAddress(*addr),
|
598
|
+
[s, &fd_index](absl::StatusOr<int> listen_fd) {
|
599
|
+
if (!listen_fd.ok()) {
|
600
|
+
return;
|
601
|
+
}
|
602
|
+
GPR_DEBUG_ASSERT(*listen_fd > 0);
|
603
|
+
s->listen_fd_to_index_map.insert_or_assign(
|
604
|
+
*listen_fd,
|
605
|
+
std::make_tuple(s->n_bind_ports, fd_index++));
|
606
|
+
});
|
607
|
+
} else {
|
608
|
+
port = s->ee_listener->Bind(
|
609
|
+
grpc_event_engine::experimental::CreateResolvedAddress(*addr));
|
610
|
+
}
|
602
611
|
if (port.ok()) {
|
603
612
|
s->n_bind_ports++;
|
604
613
|
*out_port = *port;
|
@@ -798,13 +807,16 @@ static void tcp_server_shutdown_listeners(grpc_tcp_server* s) {
|
|
798
807
|
gpr_mu_lock(&s->mu);
|
799
808
|
s->shutdown_listeners = true;
|
800
809
|
if (grpc_event_engine::experimental::UseEventEngineListener()) {
|
801
|
-
|
810
|
+
if (grpc_event_engine::experimental::EventEngineSupportsFd()) {
|
811
|
+
static_cast<grpc_event_engine::experimental::PosixListenerWithFdSupport*>(
|
812
|
+
s->ee_listener.get())
|
813
|
+
->ShutdownListeningFds();
|
814
|
+
}
|
802
815
|
}
|
803
816
|
/* shutdown all fd's */
|
804
817
|
if (s->active_ports) {
|
805
818
|
grpc_tcp_listener* sp;
|
806
819
|
for (sp = s->head; sp; sp = sp->next) {
|
807
|
-
grpc_timer_cancel(&sp->retry_timer);
|
808
820
|
grpc_fd_shutdown(sp->emfd, GRPC_ERROR_CREATE("Server shutdown"));
|
809
821
|
}
|
810
822
|
}
|
@@ -829,15 +841,19 @@ class ExternalConnectionHandler : public grpc_core::TcpServerFdHandler {
|
|
829
841
|
// TODO(yangg) resolve duplicate code with on_read
|
830
842
|
void Handle(int listener_fd, int fd, grpc_byte_buffer* buf) override {
|
831
843
|
if (grpc_event_engine::experimental::UseEventEngineListener()) {
|
844
|
+
GPR_ASSERT(grpc_event_engine::experimental::EventEngineSupportsFd());
|
832
845
|
grpc_event_engine::experimental::SliceBuffer pending_data;
|
833
846
|
if (buf != nullptr) {
|
834
847
|
pending_data =
|
835
848
|
grpc_event_engine::experimental::SliceBuffer::TakeCSliceBuffer(
|
836
849
|
buf->data.raw.slice_buffer);
|
837
850
|
}
|
838
|
-
GPR_ASSERT(GRPC_LOG_IF_ERROR(
|
839
|
-
|
840
|
-
|
851
|
+
GPR_ASSERT(GRPC_LOG_IF_ERROR(
|
852
|
+
"listener_handle_external_connection",
|
853
|
+
static_cast<
|
854
|
+
grpc_event_engine::experimental::PosixListenerWithFdSupport*>(
|
855
|
+
s_->ee_listener.get())
|
856
|
+
->HandleExternalConnection(listener_fd, fd, &pending_data)));
|
841
857
|
return;
|
842
858
|
}
|
843
859
|
grpc_pollset* read_notifier_pollset;
|
@@ -30,7 +30,6 @@
|
|
30
30
|
#include "src/core/lib/iomgr/resolve_address.h"
|
31
31
|
#include "src/core/lib/iomgr/socket_utils_posix.h"
|
32
32
|
#include "src/core/lib/iomgr/tcp_server.h"
|
33
|
-
#include "src/core/lib/iomgr/timer.h"
|
34
33
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
35
34
|
|
36
35
|
// one listening port
|
@@ -53,11 +52,6 @@ typedef struct grpc_tcp_listener {
|
|
53
52
|
// identified while iterating through 'next'.
|
54
53
|
struct grpc_tcp_listener* sibling;
|
55
54
|
int is_sibling;
|
56
|
-
// If an accept4() call fails, a timer is started to drain the accept queue in
|
57
|
-
// case no further connection attempts reach the gRPC server.
|
58
|
-
grpc_closure retry_closure;
|
59
|
-
grpc_timer retry_timer;
|
60
|
-
gpr_atm retry_timer_armed;
|
61
55
|
} grpc_tcp_listener;
|
62
56
|
|
63
57
|
// the overall server
|
@@ -113,7 +107,7 @@ struct grpc_tcp_server {
|
|
113
107
|
/* used when event engine based servers are enabled */
|
114
108
|
int n_bind_ports = 0;
|
115
109
|
absl::flat_hash_map<int, std::tuple<int, int>> listen_fd_to_index_map;
|
116
|
-
std::unique_ptr<grpc_event_engine::experimental::
|
110
|
+
std::unique_ptr<grpc_event_engine::experimental::EventEngine::Listener>
|
117
111
|
ee_listener = nullptr;
|
118
112
|
/* used to store a pre-allocated FD assigned to a socket */
|
119
113
|
int pre_allocated_fd;
|
@@ -145,10 +139,4 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
|
|
145
139
|
// Ruturn true if the platform supports ifaddrs
|
146
140
|
bool grpc_tcp_server_have_ifaddrs(void);
|
147
141
|
|
148
|
-
// Initialize (but don't start) the timer and callback to retry accept4() on a
|
149
|
-
// listening socket after file descriptors have been exhausted. This must be
|
150
|
-
// called when creating a new listener.
|
151
|
-
void grpc_tcp_server_listener_initialize_retry_timer(
|
152
|
-
grpc_tcp_listener* listener);
|
153
|
-
|
154
142
|
#endif // GRPC_SRC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
|
@@ -18,8 +18,6 @@
|
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
|
-
#include <grpc/support/atm.h>
|
22
|
-
|
23
21
|
#include "src/core/lib/iomgr/port.h"
|
24
22
|
|
25
23
|
#ifdef GRPC_POSIX_SOCKET_TCP_SERVER_UTILS_COMMON
|
@@ -83,24 +81,6 @@ static int get_max_accept_queue_size(void) {
|
|
83
81
|
return s_max_accept_queue_size;
|
84
82
|
}
|
85
83
|
|
86
|
-
static void listener_retry_timer_cb(void* arg, grpc_error_handle err) {
|
87
|
-
// Do nothing if cancelled.
|
88
|
-
if (!err.ok()) return;
|
89
|
-
grpc_tcp_listener* listener = static_cast<grpc_tcp_listener*>(arg);
|
90
|
-
gpr_atm_no_barrier_store(&listener->retry_timer_armed, false);
|
91
|
-
if (!grpc_fd_is_shutdown(listener->emfd)) {
|
92
|
-
grpc_fd_set_readable(listener->emfd);
|
93
|
-
}
|
94
|
-
}
|
95
|
-
|
96
|
-
void grpc_tcp_server_listener_initialize_retry_timer(
|
97
|
-
grpc_tcp_listener* listener) {
|
98
|
-
gpr_atm_no_barrier_store(&listener->retry_timer_armed, false);
|
99
|
-
grpc_timer_init_unset(&listener->retry_timer);
|
100
|
-
GRPC_CLOSURE_INIT(&listener->retry_closure, listener_retry_timer_cb, listener,
|
101
|
-
grpc_schedule_on_exec_ctx);
|
102
|
-
}
|
103
|
-
|
104
84
|
static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
|
105
85
|
const grpc_resolved_address* addr,
|
106
86
|
unsigned port_index,
|
@@ -132,7 +112,6 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
|
|
132
112
|
sp->server = s;
|
133
113
|
sp->fd = fd;
|
134
114
|
sp->emfd = grpc_fd_create(fd, name.c_str(), true);
|
135
|
-
grpc_tcp_server_listener_initialize_retry_timer(sp);
|
136
115
|
|
137
116
|
// Check and set fd as prellocated
|
138
117
|
if (grpc_tcp_server_pre_allocated_fd(s) == fd) {
|
@@ -634,7 +634,7 @@ static grpc_error_handle event_engine_create(grpc_closure* shutdown_complete,
|
|
634
634
|
engine_ptr->poller(), std::move(accept_cb), std::move(on_shutdown),
|
635
635
|
std::make_unique<MemoryQuotaBasedMemoryAllocatorFactory>(
|
636
636
|
resource_quota->memory_quota()),
|
637
|
-
engine_ptr->shared_from_this(), engine_ptr->
|
637
|
+
engine_ptr->shared_from_this(), engine_ptr->thread_pool(), config);
|
638
638
|
s->active_ports = -1;
|
639
639
|
s->on_accept_cb = [](void* /* arg */, grpc_endpoint* /* ep */,
|
640
640
|
grpc_pollset* /* accepting_pollset */,
|
data/src/core/lib/json/json.h
CHANGED
@@ -19,175 +19,11 @@
|
|
19
19
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
22
|
-
#include <
|
23
|
-
#include <string>
|
24
|
-
#include <utility>
|
25
|
-
#include <vector>
|
26
|
-
|
27
|
-
#include "absl/types/variant.h"
|
22
|
+
#include <grpc/support/json.h>
|
28
23
|
|
29
24
|
namespace grpc_core {
|
30
25
|
|
31
|
-
|
32
|
-
// number, true, false, or null.
|
33
|
-
class Json {
|
34
|
-
public:
|
35
|
-
// TODO(roth): Currently, numbers are stored internally as strings,
|
36
|
-
// which makes the API a bit cumbersome to use. When we have time,
|
37
|
-
// consider whether there's a better alternative (e.g., maybe storing
|
38
|
-
// each numeric type as the native C++ type and automatically converting
|
39
|
-
// to string as needed).
|
40
|
-
enum class Type { kNull, kTrue, kFalse, kNumber, kString, kObject, kArray };
|
41
|
-
|
42
|
-
using Object = std::map<std::string, Json>;
|
43
|
-
using Array = std::vector<Json>;
|
44
|
-
|
45
|
-
Json() = default;
|
46
|
-
|
47
|
-
// Copyable.
|
48
|
-
Json(const Json& other) = default;
|
49
|
-
Json& operator=(const Json& other) = default;
|
50
|
-
|
51
|
-
// Moveable.
|
52
|
-
Json(Json&& other) noexcept : value_(std::move(other.value_)) {
|
53
|
-
other.value_ = absl::monostate();
|
54
|
-
}
|
55
|
-
Json& operator=(Json&& other) noexcept {
|
56
|
-
value_ = std::move(other.value_);
|
57
|
-
other.value_ = absl::monostate();
|
58
|
-
return *this;
|
59
|
-
}
|
60
|
-
|
61
|
-
// Construct from copying a string.
|
62
|
-
// If is_number is true, the type will be kNumber instead of kString.
|
63
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
64
|
-
Json(const std::string& string, bool is_number = false)
|
65
|
-
: value_(is_number ? Value(NumberValue{string}) : Value(string)) {}
|
66
|
-
Json& operator=(const std::string& string) {
|
67
|
-
value_ = string;
|
68
|
-
return *this;
|
69
|
-
}
|
70
|
-
|
71
|
-
// Same thing for C-style strings, both const and mutable.
|
72
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
73
|
-
Json(const char* string, bool is_number = false)
|
74
|
-
: Json(std::string(string), is_number) {}
|
75
|
-
Json& operator=(const char* string) {
|
76
|
-
*this = std::string(string);
|
77
|
-
return *this;
|
78
|
-
}
|
79
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
80
|
-
Json(char* string, bool is_number = false)
|
81
|
-
: Json(std::string(string), is_number) {}
|
82
|
-
Json& operator=(char* string) {
|
83
|
-
*this = std::string(string);
|
84
|
-
return *this;
|
85
|
-
}
|
86
|
-
|
87
|
-
// Construct by moving a string.
|
88
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
89
|
-
Json(std::string&& string) : value_(Value(std::move(string))) {}
|
90
|
-
Json& operator=(std::string&& string) {
|
91
|
-
value_ = Value(std::move(string));
|
92
|
-
return *this;
|
93
|
-
}
|
94
|
-
|
95
|
-
// Construct from bool.
|
96
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
97
|
-
Json(bool b) : value_(b) {}
|
98
|
-
Json& operator=(bool b) {
|
99
|
-
value_ = b;
|
100
|
-
return *this;
|
101
|
-
}
|
102
|
-
|
103
|
-
// Construct from any numeric type.
|
104
|
-
template <typename NumericType>
|
105
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
106
|
-
Json(NumericType number) : value_(NumberValue{std::to_string(number)}) {}
|
107
|
-
template <typename NumericType>
|
108
|
-
Json& operator=(NumericType number) {
|
109
|
-
value_ = NumberValue{std::to_string(number)};
|
110
|
-
return *this;
|
111
|
-
}
|
112
|
-
|
113
|
-
// Construct by copying object.
|
114
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
115
|
-
Json(const Object& object) : value_(object) {}
|
116
|
-
Json& operator=(const Object& object) {
|
117
|
-
value_ = object;
|
118
|
-
return *this;
|
119
|
-
}
|
120
|
-
|
121
|
-
// Construct by moving object.
|
122
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
123
|
-
Json(Object&& object) : value_(std::move(object)) {}
|
124
|
-
Json& operator=(Object&& object) {
|
125
|
-
value_ = std::move(object);
|
126
|
-
return *this;
|
127
|
-
}
|
128
|
-
|
129
|
-
// Construct by copying array.
|
130
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
131
|
-
Json(const Array& array) : value_(array) {}
|
132
|
-
Json& operator=(const Array& array) {
|
133
|
-
value_ = array;
|
134
|
-
return *this;
|
135
|
-
}
|
136
|
-
|
137
|
-
// Construct by moving array.
|
138
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
139
|
-
Json(Array&& array) : value_(std::move(array)) {}
|
140
|
-
Json& operator=(Array&& array) {
|
141
|
-
value_ = std::move(array);
|
142
|
-
return *this;
|
143
|
-
}
|
144
|
-
|
145
|
-
// Returns the JSON type.
|
146
|
-
Type type() const {
|
147
|
-
struct ValueFunctor {
|
148
|
-
Json::Type operator()(const absl::monostate&) { return Type::kNull; }
|
149
|
-
Json::Type operator()(bool value) {
|
150
|
-
return value ? Type::kTrue : Type::kFalse;
|
151
|
-
}
|
152
|
-
Json::Type operator()(const NumberValue&) { return Type::kNumber; }
|
153
|
-
Json::Type operator()(const std::string&) { return Type::kString; }
|
154
|
-
Json::Type operator()(const Object&) { return Type::kObject; }
|
155
|
-
Json::Type operator()(const Array&) { return Type::kArray; }
|
156
|
-
};
|
157
|
-
return absl::visit(ValueFunctor(), value_);
|
158
|
-
}
|
159
|
-
|
160
|
-
// Accessor methods.
|
161
|
-
const std::string& string() const {
|
162
|
-
const NumberValue* num = absl::get_if<NumberValue>(&value_);
|
163
|
-
if (num != nullptr) return num->value;
|
164
|
-
return absl::get<std::string>(value_);
|
165
|
-
}
|
166
|
-
const Object& object() const { return absl::get<Object>(value_); }
|
167
|
-
const Array& array() const { return absl::get<Array>(value_); }
|
168
|
-
|
169
|
-
bool operator==(const Json& other) const { return value_ == other.value_; }
|
170
|
-
bool operator!=(const Json& other) const { return !(*this == other); }
|
171
|
-
|
172
|
-
private:
|
173
|
-
struct NumberValue {
|
174
|
-
std::string value;
|
175
|
-
|
176
|
-
bool operator==(const NumberValue& other) const {
|
177
|
-
return value == other.value;
|
178
|
-
}
|
179
|
-
};
|
180
|
-
using Value = absl::variant<absl::monostate, // kNull
|
181
|
-
bool, // kTrue or kFalse
|
182
|
-
NumberValue, // kNumber
|
183
|
-
std::string, // kString
|
184
|
-
Object, // kObject
|
185
|
-
Array>; // kArray
|
186
|
-
|
187
|
-
explicit Json(Value value) : value_(std::move(value)) {}
|
188
|
-
|
189
|
-
Value value_;
|
190
|
-
};
|
26
|
+
using Json = experimental::Json;
|
191
27
|
|
192
28
|
} // namespace grpc_core
|
193
29
|
|