grpc 1.57.0.pre1 → 1.58.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +534 -284
- data/include/grpc/event_engine/event_engine.h +0 -1
- data/include/grpc/event_engine/memory_allocator.h +2 -2
- data/include/grpc/impl/channel_arg_names.h +371 -0
- data/include/grpc/impl/grpc_types.h +1 -353
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +7 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +10 -5
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +115 -109
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h +0 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +7 -2
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +11 -3
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +8 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +102 -11
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +9 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +6 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +41 -14
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +9 -5
- data/src/core/ext/filters/client_channel/subchannel.h +8 -2
- data/src/core/ext/filters/deadline/deadline_filter.cc +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +1 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +4 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +8 -12
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +357 -358
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -18
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +63 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +7 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +30 -57
- data/src/core/ext/transport/chttp2/transport/parsing.cc +16 -7
- data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +80 -0
- data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.h +55 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +98 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +73 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +81 -89
- data/src/core/ext/transport/inproc/inproc_transport.cc +1 -0
- data/src/core/ext/xds/xds_client_grpc.cc +1 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +1 -2
- data/src/core/ext/xds/xds_http_fault_filter.h +1 -2
- data/src/core/ext/xds/xds_http_filters.h +2 -4
- data/src/core/ext/xds/xds_http_rbac_filter.cc +3 -8
- data/src/core/ext/xds/xds_http_rbac_filter.h +1 -2
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +1 -2
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +1 -2
- data/src/core/ext/xds/xds_lb_policy_registry.cc +3 -6
- data/src/core/ext/xds/xds_routing.cc +2 -2
- data/src/core/ext/xds/xds_transport_grpc.cc +1 -0
- data/src/core/lib/avl/avl.h +10 -173
- data/src/core/lib/channel/call_tracer.cc +289 -0
- data/src/core/lib/channel/call_tracer.h +35 -0
- data/src/core/lib/channel/channel_args.cc +84 -79
- data/src/core/lib/channel/channel_args.h +29 -17
- data/src/core/lib/channel/connected_channel.cc +0 -1
- data/src/core/lib/channel/promise_based_filter.cc +4 -1
- data/src/core/lib/compression/compression_internal.cc +8 -4
- data/src/core/lib/debug/stats_data.cc +93 -21
- data/src/core/lib/debug/stats_data.h +41 -0
- data/src/core/lib/event_engine/ares_resolver.cc +712 -0
- data/src/core/lib/event_engine/ares_resolver.h +150 -0
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +229 -0
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +117 -0
- data/src/core/lib/event_engine/forkable.cc +15 -1
- data/src/core/lib/event_engine/forkable.h +15 -0
- data/src/core/lib/event_engine/grpc_polled_fd.h +73 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +25 -3
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +10 -1
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +197 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +47 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +12 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -0
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +58 -0
- data/src/core/lib/event_engine/thread_pool/thread_count.h +161 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +7 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +86 -111
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +15 -61
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +3 -4
- data/src/core/lib/experiments/config.cc +14 -0
- data/src/core/lib/experiments/experiments.cc +141 -304
- data/src/core/lib/experiments/experiments.h +16 -17
- data/src/core/lib/gprpp/ref_counted.h +3 -1
- data/src/core/lib/gprpp/ref_counted_string.cc +44 -0
- data/src/core/lib/gprpp/ref_counted_string.h +146 -0
- data/src/core/lib/gprpp/time.h +2 -2
- data/src/core/lib/gprpp/work_serializer.cc +36 -0
- data/src/core/lib/gprpp/work_serializer.h +5 -0
- data/src/core/lib/http/httpcli_security_connector.cc +1 -0
- data/src/core/lib/iomgr/buffer_list.cc +2 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +7 -22
- data/src/core/lib/iomgr/tcp_posix.cc +3 -3
- data/src/core/lib/promise/detail/basic_seq.h +1 -372
- data/src/core/lib/promise/detail/seq_state.h +2076 -0
- data/src/core/lib/promise/seq.h +19 -2
- data/src/core/lib/promise/sleep.h +5 -10
- data/src/core/lib/promise/try_seq.h +34 -2
- data/src/core/lib/resource_quota/api.cc +1 -0
- data/src/core/lib/resource_quota/arena.cc +2 -0
- data/src/core/lib/resource_quota/arena.h +42 -8
- data/src/core/lib/resource_quota/memory_quota.cc +0 -1
- data/src/core/lib/resource_quota/resource_quota.h +1 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/rbac_policy.h +1 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +8 -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 +17 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +4 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +42 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +8 -5
- data/src/core/lib/security/transport/security_handshaker.cc +1 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +2 -0
- data/src/core/lib/surface/call.cc +32 -8
- data/src/core/lib/surface/channel.cc +1 -0
- data/src/core/lib/surface/completion_queue.cc +10 -0
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/server.cc +67 -64
- data/src/core/lib/surface/server.h +1 -15
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/tsi/alts/crypt/aes_gcm.cc +27 -2
- data/src/core/tsi/ssl_transport_security.cc +11 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -53
- data/src/ruby/lib/grpc/generic/active_call.rb +9 -14
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/test/client.rb +16 -0
- data/src/ruby/spec/generic/rpc_server_spec.rb +3 -3
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -2
- data/third_party/abseil-cpp/absl/base/attributes.h +58 -5
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
- data/third_party/abseil-cpp/absl/base/casts.h +8 -8
- data/third_party/abseil-cpp/absl/base/config.h +89 -106
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +26 -1
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +50 -39
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +2 -1
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +17 -18
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +32 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +24 -4
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +31 -73
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -8
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +23 -32
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +2 -3
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/policy_checks.h +3 -3
- data/third_party/abseil-cpp/absl/base/prefetch.h +198 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +54 -29
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -1
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +167 -79
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +3 -21
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +46 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -0
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +85 -26
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -18
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +70 -29
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +437 -236
- data/third_party/abseil-cpp/absl/crc/crc32c.h +8 -1
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +14 -8
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -35
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +2 -10
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +1 -1
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +1 -1
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +4 -4
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +8 -10
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +17 -19
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +8 -8
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +59 -23
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +43 -19
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -0
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +1 -1
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +1 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +16 -15
- data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +1 -1
- data/third_party/abseil-cpp/absl/flags/marshalling.cc +43 -2
- data/third_party/abseil-cpp/absl/flags/marshalling.h +5 -0
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +9 -1
- data/third_party/abseil-cpp/absl/functional/bind_front.h +1 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +3 -3
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +37 -24
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +19 -9
- data/third_party/abseil-cpp/absl/hash/hash.h +7 -4
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +38 -15
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +6 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +48 -373
- data/third_party/abseil-cpp/absl/numeric/bits.h +4 -4
- data/third_party/abseil-cpp/absl/numeric/int128.cc +20 -8
- data/third_party/abseil-cpp/absl/numeric/int128.h +36 -39
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +0 -3
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +47 -30
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -3
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/platform.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +4 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +1 -1
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +4 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +12 -24
- data/third_party/abseil-cpp/absl/status/status.cc +11 -7
- data/third_party/abseil-cpp/absl/status/status.h +11 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +22 -8
- data/third_party/abseil-cpp/absl/strings/ascii.cc +54 -6
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -4
- data/third_party/abseil-cpp/absl/strings/charconv.h +2 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +1 -2
- data/third_party/abseil-cpp/absl/strings/cord.h +32 -5
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +23 -1
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +18 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +2 -5
- data/third_party/abseil-cpp/absl/strings/escaping.cc +10 -32
- data/third_party/abseil-cpp/absl/strings/escaping.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +2 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +0 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +15 -13
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +13 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +4 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +46 -20
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +1 -34
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +23 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +2 -77
- data/third_party/abseil-cpp/absl/strings/internal/memutil.h +4 -112
- data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +10 -31
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -8
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +5 -20
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +56 -6
- data/third_party/abseil-cpp/absl/strings/match.cc +87 -0
- data/third_party/abseil-cpp/absl/strings/match.h +19 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +154 -122
- data/third_party/abseil-cpp/absl/strings/numbers.h +1 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +7 -50
- data/third_party/abseil-cpp/absl/strings/str_cat.h +83 -15
- data/third_party/abseil-cpp/absl/strings/str_format.h +6 -3
- data/third_party/abseil-cpp/absl/strings/str_split.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +26 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +5 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +63 -43
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +111 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.h +63 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +11 -7
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +225 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +122 -114
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +12 -8
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +10 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +167 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +122 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.h +65 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +91 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +56 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +19 -113
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +42 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.h +90 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +151 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.h +70 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +407 -411
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +152 -118
- data/third_party/abseil-cpp/absl/time/clock.cc +6 -7
- data/third_party/abseil-cpp/absl/time/duration.cc +24 -26
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +3 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +8 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +6 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +4 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +4 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +322 -295
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +8 -17
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +51 -33
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +7 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +128 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +5 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +34 -34
- data/third_party/abseil-cpp/absl/time/time.cc +9 -2
- data/third_party/abseil-cpp/absl/time/time.h +115 -15
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -52
- data/third_party/abseil-cpp/absl/types/internal/span.h +2 -2
- data/third_party/abseil-cpp/absl/types/internal/variant.h +2 -2
- data/third_party/abseil-cpp/absl/types/optional.h +15 -13
- data/third_party/abseil-cpp/absl/types/span.h +1 -2
- data/third_party/boringssl-with-bazel/err_data.c +15 -14
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/errno.c +92 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +4 -48
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +11 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +16 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +3 -7
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_fuchsia.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_linux.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_sysreg.c +93 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_win.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +9 -14
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +37 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +38 -19
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +39 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +13 -21
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +6 -23
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getentropy.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +2 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +11 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +7 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +6 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +22 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +20 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/target.h +50 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +4 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -0
- metadata +39 -31
- data/src/core/lib/promise/detail/basic_join.h +0 -197
- data/src/core/lib/promise/detail/switch.h +0 -1455
- data/src/core/lib/promise/try_join.h +0 -82
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -403
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +0 -62
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm.c +0 -38
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +0 -31
- data/third_party/re2/util/benchmark.h +0 -156
- data/third_party/re2/util/flags.h +0 -26
- data/third_party/re2/util/malloc_counter.h +0 -19
- data/third_party/re2/util/pcre.cc +0 -1025
- data/third_party/re2/util/pcre.h +0 -681
- data/third_party/re2/util/test.h +0 -50
- data/third_party/upb/upb/mini_table.h +0 -36
- data/third_party/zlib/gzclose.c +0 -25
- data/third_party/zlib/gzlib.c +0 -639
- data/third_party/zlib/gzread.c +0 -650
- data/third_party/zlib/gzwrite.c +0 -677
@@ -85,7 +85,6 @@
|
|
85
85
|
#include "src/core/lib/promise/activity.h"
|
86
86
|
#include "src/core/lib/promise/arena_promise.h"
|
87
87
|
#include "src/core/lib/promise/context.h"
|
88
|
-
#include "src/core/lib/promise/detail/basic_seq.h"
|
89
88
|
#include "src/core/lib/promise/latch.h"
|
90
89
|
#include "src/core/lib/promise/map.h"
|
91
90
|
#include "src/core/lib/promise/party.h"
|
@@ -1930,6 +1929,9 @@ void FilterStackCall::ContextSet(grpc_context_index elem, void* value,
|
|
1930
1929
|
|
1931
1930
|
namespace {
|
1932
1931
|
bool ValidateMetadata(size_t count, grpc_metadata* metadata) {
|
1932
|
+
if (count > INT_MAX) {
|
1933
|
+
return false;
|
1934
|
+
}
|
1933
1935
|
for (size_t i = 0; i < count; i++) {
|
1934
1936
|
grpc_metadata* md = &metadata[i];
|
1935
1937
|
if (!GRPC_LOG_IF_ERROR("validate_metadata",
|
@@ -2227,6 +2229,10 @@ class PromiseBasedCall : public Call,
|
|
2227
2229
|
}
|
2228
2230
|
}
|
2229
2231
|
|
2232
|
+
void set_failed_before_recv_message() {
|
2233
|
+
failed_before_recv_message_.store(true, std::memory_order_relaxed);
|
2234
|
+
}
|
2235
|
+
|
2230
2236
|
private:
|
2231
2237
|
union CompletionInfo {
|
2232
2238
|
static constexpr uint32_t kOpFailed = 0x8000'0000u;
|
@@ -2360,8 +2366,10 @@ grpc_error_handle MakePromiseBasedCall(grpc_call_create_args* args,
|
|
2360
2366
|
grpc_call** out_call) {
|
2361
2367
|
Channel* channel = args->channel.get();
|
2362
2368
|
|
2363
|
-
auto
|
2364
|
-
|
2369
|
+
const auto initial_size = channel->CallSizeEstimate();
|
2370
|
+
global_stats().IncrementCallInitialSize(initial_size);
|
2371
|
+
auto alloc =
|
2372
|
+
Arena::CreateWithAlloc(initial_size, sizeof(T), channel->allocator());
|
2365
2373
|
PromiseBasedCall* call = new (alloc.second) T(alloc.first, args);
|
2366
2374
|
*out_call = call->c_ptr();
|
2367
2375
|
GPR_DEBUG_ASSERT(Call::FromC(*out_call) == call);
|
@@ -2600,7 +2608,7 @@ void PromiseBasedCall::StartRecvMessage(
|
|
2600
2608
|
"finishes: received end-of-stream with error",
|
2601
2609
|
DebugTag().c_str());
|
2602
2610
|
}
|
2603
|
-
|
2611
|
+
set_failed_before_recv_message();
|
2604
2612
|
FailCompletion(completion);
|
2605
2613
|
if (cancel_on_error) CancelWithError(absl::CancelledError());
|
2606
2614
|
*recv_message_ = nullptr;
|
@@ -3244,11 +3252,13 @@ void ServerPromiseBasedCall::Finish(ServerMetadataHandle result) {
|
|
3244
3252
|
channelz_node->RecordCallFailed();
|
3245
3253
|
}
|
3246
3254
|
}
|
3255
|
+
bool was_cancelled = result->get(GrpcCallWasCancelled()).value_or(true);
|
3247
3256
|
if (recv_close_op_cancel_state_.CompleteCallWithCancelledSetTo(
|
3248
|
-
|
3257
|
+
was_cancelled)) {
|
3249
3258
|
FinishOpOnCompletion(&recv_close_completion_,
|
3250
3259
|
PendingOp::kReceiveCloseOnServer);
|
3251
3260
|
}
|
3261
|
+
if (was_cancelled) set_failed_before_recv_message();
|
3252
3262
|
if (server_initial_metadata_ != nullptr) {
|
3253
3263
|
server_initial_metadata_->Close();
|
3254
3264
|
}
|
@@ -3283,9 +3293,16 @@ grpc_call_error ServerPromiseBasedCall::ValidateBatch(const grpc_op* ops,
|
|
3283
3293
|
return GRPC_CALL_ERROR_INVALID_FLAGS;
|
3284
3294
|
}
|
3285
3295
|
break;
|
3296
|
+
case GRPC_OP_SEND_STATUS_FROM_SERVER:
|
3297
|
+
if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
|
3298
|
+
if (!ValidateMetadata(
|
3299
|
+
op.data.send_status_from_server.trailing_metadata_count,
|
3300
|
+
op.data.send_status_from_server.trailing_metadata)) {
|
3301
|
+
return GRPC_CALL_ERROR_INVALID_METADATA;
|
3302
|
+
}
|
3303
|
+
break;
|
3286
3304
|
case GRPC_OP_RECV_MESSAGE:
|
3287
3305
|
case GRPC_OP_RECV_CLOSE_ON_SERVER:
|
3288
|
-
case GRPC_OP_SEND_STATUS_FROM_SERVER:
|
3289
3306
|
if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
|
3290
3307
|
break;
|
3291
3308
|
case GRPC_OP_RECV_INITIAL_METADATA:
|
@@ -3324,7 +3341,10 @@ void ServerPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
|
|
3324
3341
|
[this,
|
3325
3342
|
completion = AddOpToCompletion(
|
3326
3343
|
completion, PendingOp::kSendInitialMetadata)](bool r) mutable {
|
3327
|
-
if (!r)
|
3344
|
+
if (!r) {
|
3345
|
+
set_failed_before_recv_message();
|
3346
|
+
FailCompletion(completion);
|
3347
|
+
}
|
3328
3348
|
FinishOpOnCompletion(&completion,
|
3329
3349
|
PendingOp::kSendInitialMetadata);
|
3330
3350
|
});
|
@@ -3334,6 +3354,7 @@ void ServerPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
|
|
3334
3354
|
break;
|
3335
3355
|
case GRPC_OP_RECV_MESSAGE:
|
3336
3356
|
if (cancelled_.load(std::memory_order_relaxed)) {
|
3357
|
+
set_failed_before_recv_message();
|
3337
3358
|
FailCompletion(completion);
|
3338
3359
|
break;
|
3339
3360
|
}
|
@@ -3374,7 +3395,10 @@ void ServerPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
|
|
3374
3395
|
[this, completion = AddOpToCompletion(
|
3375
3396
|
completion, PendingOp::kSendStatusFromServer)](
|
3376
3397
|
bool ok) mutable {
|
3377
|
-
if (!ok)
|
3398
|
+
if (!ok) {
|
3399
|
+
set_failed_before_recv_message();
|
3400
|
+
FailCompletion(completion);
|
3401
|
+
}
|
3378
3402
|
FinishOpOnCompletion(&completion,
|
3379
3403
|
PendingOp::kSendStatusFromServer);
|
3380
3404
|
});
|
@@ -57,6 +57,10 @@
|
|
57
57
|
#include "src/core/lib/surface/api_trace.h"
|
58
58
|
#include "src/core/lib/surface/event_string.h"
|
59
59
|
|
60
|
+
#ifdef GPR_WINDOWS
|
61
|
+
#include "src/core/lib/experiments/experiments.h"
|
62
|
+
#endif
|
63
|
+
|
60
64
|
grpc_core::TraceFlag grpc_trace_operation_failures(false, "op_failure");
|
61
65
|
grpc_core::DebugOnlyTraceFlag grpc_trace_pending_tags(false, "pending_tags");
|
62
66
|
grpc_core::DebugOnlyTraceFlag grpc_trace_cq_refcount(false, "cq_refcount");
|
@@ -882,6 +886,12 @@ void grpc_cq_end_op(grpc_completion_queue* cq, void* tag,
|
|
882
886
|
void (*done)(void* done_arg, grpc_cq_completion* storage),
|
883
887
|
void* done_arg, grpc_cq_completion* storage,
|
884
888
|
bool internal) {
|
889
|
+
// TODO(hork): remove when the listener flake is identified
|
890
|
+
#ifdef GPR_WINDOWS
|
891
|
+
if (grpc_core::IsEventEngineListenerEnabled()) {
|
892
|
+
gpr_log(GPR_ERROR, "cq_end_op called for tag %d (0x%p)", tag, tag);
|
893
|
+
}
|
894
|
+
#endif
|
885
895
|
cq->vtable->end_op(cq, tag, error, done, done_arg, storage, internal);
|
886
896
|
}
|
887
897
|
|
@@ -28,7 +28,6 @@
|
|
28
28
|
#include <list>
|
29
29
|
#include <new>
|
30
30
|
#include <queue>
|
31
|
-
#include <tuple>
|
32
31
|
#include <type_traits>
|
33
32
|
#include <utility>
|
34
33
|
#include <vector>
|
@@ -40,6 +39,7 @@
|
|
40
39
|
|
41
40
|
#include <grpc/byte_buffer.h>
|
42
41
|
#include <grpc/grpc.h>
|
42
|
+
#include <grpc/impl/channel_arg_names.h>
|
43
43
|
#include <grpc/impl/connectivity_state.h>
|
44
44
|
#include <grpc/status.h>
|
45
45
|
#include <grpc/support/log.h>
|
@@ -61,13 +61,11 @@
|
|
61
61
|
#include "src/core/lib/iomgr/pollset_set.h"
|
62
62
|
#include "src/core/lib/promise/activity.h"
|
63
63
|
#include "src/core/lib/promise/context.h"
|
64
|
-
#include "src/core/lib/promise/detail/basic_join.h"
|
65
|
-
#include "src/core/lib/promise/detail/basic_seq.h"
|
66
64
|
#include "src/core/lib/promise/map.h"
|
67
65
|
#include "src/core/lib/promise/pipe.h"
|
68
66
|
#include "src/core/lib/promise/poll.h"
|
69
67
|
#include "src/core/lib/promise/promise.h"
|
70
|
-
#include "src/core/lib/promise/
|
68
|
+
#include "src/core/lib/promise/seq.h"
|
71
69
|
#include "src/core/lib/promise/try_seq.h"
|
72
70
|
#include "src/core/lib/slice/slice_buffer.h"
|
73
71
|
#include "src/core/lib/slice/slice_internal.h"
|
@@ -321,19 +319,18 @@ class Server::RealRequestMatcher : public RequestMatcherInterface {
|
|
321
319
|
while (true) {
|
322
320
|
NextPendingCall next_pending = pop_next_pending();
|
323
321
|
if (next_pending.rc == nullptr) break;
|
324
|
-
auto mr = MatchResult(server(), request_queue_index, next_pending.rc);
|
325
322
|
Match(
|
326
323
|
next_pending.pending,
|
327
|
-
[&
|
324
|
+
[&](CallData* calld) {
|
328
325
|
if (!calld->MaybeActivate()) {
|
329
326
|
// Zombied Call
|
330
327
|
calld->KillZombie();
|
331
328
|
} else {
|
332
|
-
calld->Publish(
|
329
|
+
calld->Publish(request_queue_index, next_pending.rc);
|
333
330
|
}
|
334
331
|
},
|
335
|
-
[&
|
336
|
-
w->Finish(
|
332
|
+
[&](const std::shared_ptr<ActivityWaiter>& w) {
|
333
|
+
w->Finish(server(), request_queue_index, next_pending.rc);
|
337
334
|
});
|
338
335
|
}
|
339
336
|
}
|
@@ -429,8 +426,14 @@ class Server::RealRequestMatcher : public RequestMatcherInterface {
|
|
429
426
|
struct ActivityWaiter {
|
430
427
|
explicit ActivityWaiter(Waker waker) : waker(std::move(waker)) {}
|
431
428
|
~ActivityWaiter() { delete result.load(std::memory_order_acquire); }
|
432
|
-
void Finish(absl::
|
433
|
-
result.store(new absl::StatusOr<MatchResult>(std::move(
|
429
|
+
void Finish(absl::Status status) {
|
430
|
+
result.store(new absl::StatusOr<MatchResult>(std::move(status)),
|
431
|
+
std::memory_order_release);
|
432
|
+
waker.Wakeup();
|
433
|
+
}
|
434
|
+
void Finish(Server* server, size_t cq_idx, RequestedCall* requested_call) {
|
435
|
+
result.store(new absl::StatusOr<MatchResult>(
|
436
|
+
MatchResult(server, cq_idx, requested_call)),
|
434
437
|
std::memory_order_release);
|
435
438
|
waker.Wakeup();
|
436
439
|
}
|
@@ -519,21 +522,14 @@ class Server::AllocatingRequestMatcherBatch
|
|
519
522
|
|
520
523
|
ArenaPromise<absl::StatusOr<MatchResult>> MatchRequest(
|
521
524
|
size_t /*start_request_queue_index*/) override {
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
RequestedCall* rc = new RequestedCall(
|
531
|
-
static_cast<void*>(call_info.tag), call_info.cq, call_info.call,
|
532
|
-
call_info.initial_metadata, call_info.details);
|
533
|
-
return Immediate(MatchResult(server(), cq_idx(), rc));
|
534
|
-
} else {
|
535
|
-
return Immediate(absl::InternalError("Server shutdown"));
|
536
|
-
}
|
525
|
+
BatchCallAllocation call_info = allocator_();
|
526
|
+
GPR_ASSERT(server()->ValidateServerRequest(
|
527
|
+
cq(), static_cast<void*>(call_info.tag), nullptr, nullptr) ==
|
528
|
+
GRPC_CALL_OK);
|
529
|
+
RequestedCall* rc = new RequestedCall(
|
530
|
+
static_cast<void*>(call_info.tag), call_info.cq, call_info.call,
|
531
|
+
call_info.initial_metadata, call_info.details);
|
532
|
+
return Immediate(MatchResult(server(), cq_idx(), rc));
|
537
533
|
}
|
538
534
|
|
539
535
|
private:
|
@@ -573,22 +569,14 @@ class Server::AllocatingRequestMatcherRegistered
|
|
573
569
|
|
574
570
|
ArenaPromise<absl::StatusOr<MatchResult>> MatchRequest(
|
575
571
|
size_t /*start_request_queue_index*/) override {
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
RequestedCall* rc =
|
585
|
-
new RequestedCall(call_info.tag, call_info.cq, call_info.call,
|
586
|
-
call_info.initial_metadata, registered_method_,
|
587
|
-
call_info.deadline, call_info.optional_payload);
|
588
|
-
return Immediate(MatchResult(server(), cq_idx(), rc));
|
589
|
-
} else {
|
590
|
-
return Immediate(absl::InternalError("Server shutdown"));
|
591
|
-
}
|
572
|
+
RegisteredCallAllocation call_info = allocator_();
|
573
|
+
GPR_ASSERT(server()->ValidateServerRequest(
|
574
|
+
cq(), call_info.tag, call_info.optional_payload,
|
575
|
+
registered_method_) == GRPC_CALL_OK);
|
576
|
+
RequestedCall* rc = new RequestedCall(
|
577
|
+
call_info.tag, call_info.cq, call_info.call, call_info.initial_metadata,
|
578
|
+
registered_method_, call_info.deadline, call_info.optional_payload);
|
579
|
+
return Immediate(MatchResult(server(), cq_idx(), rc));
|
592
580
|
}
|
593
581
|
|
594
582
|
private:
|
@@ -952,7 +940,6 @@ void DonePublishedShutdown(void* /*done_arg*/, grpc_cq_completion* storage) {
|
|
952
940
|
// connection is NOT closed until the server is done with all those calls.
|
953
941
|
// -- Once there are no more calls in progress, the channel is closed.
|
954
942
|
void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
|
955
|
-
Notification* await_requests = nullptr;
|
956
943
|
ChannelBroadcaster broadcaster;
|
957
944
|
{
|
958
945
|
// Wait for startup to be finished. Locks mu_global.
|
@@ -978,12 +965,7 @@ void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
|
|
978
965
|
MutexLock lock(&mu_call_);
|
979
966
|
KillPendingWorkLocked(GRPC_ERROR_CREATE("Server Shutdown"));
|
980
967
|
}
|
981
|
-
|
982
|
-
}
|
983
|
-
// We expect no new requests but there can still be requests in-flight.
|
984
|
-
// Wait for them to complete before proceeding.
|
985
|
-
if (await_requests != nullptr) {
|
986
|
-
await_requests->WaitForNotification();
|
968
|
+
ShutdownUnrefOnShutdownCall();
|
987
969
|
}
|
988
970
|
StopListening();
|
989
971
|
broadcaster.BroadcastShutdown(/*send_goaway=*/true, absl::OkStatus());
|
@@ -1286,17 +1268,24 @@ void Server::ChannelData::AcceptStream(void* arg, grpc_transport* /*transport*/,
|
|
1286
1268
|
}
|
1287
1269
|
}
|
1288
1270
|
|
1271
|
+
namespace {
|
1272
|
+
auto CancelledDueToServerShutdown() {
|
1273
|
+
return [] {
|
1274
|
+
return ServerMetadataFromStatus(absl::CancelledError("Server shutdown"));
|
1275
|
+
};
|
1276
|
+
}
|
1277
|
+
} // namespace
|
1278
|
+
|
1289
1279
|
ArenaPromise<ServerMetadataHandle> Server::ChannelData::MakeCallPromise(
|
1290
1280
|
grpc_channel_element* elem, CallArgs call_args, NextPromiseFactory) {
|
1291
1281
|
auto* chand = static_cast<Server::ChannelData*>(elem->channel_data);
|
1292
1282
|
auto* server = chand->server_.get();
|
1293
|
-
if (server->ShutdownCalled()) {
|
1294
|
-
return [] {
|
1295
|
-
return ServerMetadataFromStatus(absl::InternalError("Server shutdown"));
|
1296
|
-
};
|
1297
|
-
}
|
1298
1283
|
absl::optional<Slice> path =
|
1299
1284
|
call_args.client_initial_metadata->Take(HttpPathMetadata());
|
1285
|
+
if (server->ShutdownCalled()) return CancelledDueToServerShutdown();
|
1286
|
+
auto cleanup_ref =
|
1287
|
+
absl::MakeCleanup([server] { server->ShutdownUnrefOnRequest(); });
|
1288
|
+
if (!server->ShutdownRefOnRequest()) return CancelledDueToServerShutdown();
|
1300
1289
|
if (!path.has_value()) {
|
1301
1290
|
return [] {
|
1302
1291
|
return ServerMetadataFromStatus(
|
@@ -1335,22 +1324,36 @@ ArenaPromise<ServerMetadataHandle> Server::ChannelData::MakeCallPromise(
|
|
1335
1324
|
matcher = server->unregistered_request_matcher_.get();
|
1336
1325
|
}
|
1337
1326
|
return TrySeq(
|
1338
|
-
|
1339
|
-
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1343
|
-
|
1344
|
-
|
1345
|
-
|
1346
|
-
|
1327
|
+
std::move(maybe_read_first_message),
|
1328
|
+
[cleanup_ref = std::move(cleanup_ref), matcher,
|
1329
|
+
chand](NextResult<MessageHandle> payload) mutable {
|
1330
|
+
return Map(
|
1331
|
+
[cleanup_ref = std::move(cleanup_ref),
|
1332
|
+
mr = matcher->MatchRequest(chand->cq_idx())]() mutable {
|
1333
|
+
return mr();
|
1334
|
+
},
|
1335
|
+
[payload = std::move(payload)](
|
1336
|
+
absl::StatusOr<RequestMatcherInterface::MatchResult> mr) mutable
|
1337
|
+
-> absl::StatusOr<std::pair<RequestMatcherInterface::MatchResult,
|
1338
|
+
NextResult<MessageHandle>>> {
|
1339
|
+
if (!mr.ok()) return mr.status();
|
1340
|
+
return std::make_pair(std::move(*mr), std::move(payload));
|
1341
|
+
});
|
1342
|
+
},
|
1343
|
+
[host_ptr, path = std::move(path), deadline,
|
1344
|
+
call_args =
|
1345
|
+
std::move(call_args)](std::pair<RequestMatcherInterface::MatchResult,
|
1346
|
+
NextResult<MessageHandle>>
|
1347
|
+
r) mutable {
|
1348
|
+
auto& mr = r.first;
|
1349
|
+
auto& payload = r.second;
|
1347
1350
|
auto* rc = mr.TakeCall();
|
1348
1351
|
auto* cq_for_new_request = mr.cq();
|
1349
1352
|
switch (rc->type) {
|
1350
1353
|
case RequestedCall::Type::BATCH_CALL:
|
1351
1354
|
GPR_ASSERT(!payload.has_value());
|
1352
1355
|
rc->data.batch.details->host = CSliceRef(host_ptr->c_slice());
|
1353
|
-
rc->data.batch.details->method = CSliceRef(path
|
1356
|
+
rc->data.batch.details->method = CSliceRef(path->c_slice());
|
1354
1357
|
rc->data.batch.details->deadline =
|
1355
1358
|
deadline.as_timespec(GPR_CLOCK_MONOTONIC);
|
1356
1359
|
break;
|
@@ -36,7 +36,6 @@
|
|
36
36
|
|
37
37
|
#include <grpc/grpc.h>
|
38
38
|
#include <grpc/slice.h>
|
39
|
-
#include <grpc/support/log.h>
|
40
39
|
#include <grpc/support/time.h>
|
41
40
|
|
42
41
|
#include "src/core/lib/channel/channel_args.h"
|
@@ -46,7 +45,6 @@
|
|
46
45
|
#include "src/core/lib/debug/trace.h"
|
47
46
|
#include "src/core/lib/gprpp/cpp_impl_of.h"
|
48
47
|
#include "src/core/lib/gprpp/dual_ref_counted.h"
|
49
|
-
#include "src/core/lib/gprpp/notification.h"
|
50
48
|
#include "src/core/lib/gprpp/orphanable.h"
|
51
49
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
52
50
|
#include "src/core/lib/gprpp/sync.h"
|
@@ -411,24 +409,13 @@ class Server : public InternallyRefCounted<Server>,
|
|
411
409
|
if (shutdown_refs_.fetch_sub(2, std::memory_order_acq_rel) == 2) {
|
412
410
|
MutexLock lock(&mu_global_);
|
413
411
|
MaybeFinishShutdown();
|
414
|
-
// The last request in-flight during shutdown is now complete.
|
415
|
-
if (requests_complete_ != nullptr) {
|
416
|
-
GPR_ASSERT(!requests_complete_->HasBeenNotified());
|
417
|
-
requests_complete_->Notify();
|
418
|
-
}
|
419
412
|
}
|
420
413
|
}
|
421
|
-
|
422
|
-
// or null.
|
423
|
-
GRPC_MUST_USE_RESULT Notification* ShutdownUnrefOnShutdownCall()
|
424
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_global_) {
|
414
|
+
void ShutdownUnrefOnShutdownCall() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_global_) {
|
425
415
|
if (shutdown_refs_.fetch_sub(1, std::memory_order_acq_rel) == 1) {
|
426
416
|
// There is no request in-flight.
|
427
417
|
MaybeFinishShutdown();
|
428
|
-
return nullptr;
|
429
418
|
}
|
430
|
-
requests_complete_ = std::make_unique<Notification>();
|
431
|
-
return requests_complete_.get();
|
432
419
|
}
|
433
420
|
|
434
421
|
bool ShutdownCalled() const {
|
@@ -479,7 +466,6 @@ class Server : public InternallyRefCounted<Server>,
|
|
479
466
|
std::atomic<int> shutdown_refs_{1};
|
480
467
|
bool shutdown_published_ ABSL_GUARDED_BY(mu_global_) = false;
|
481
468
|
std::vector<ShutdownTag> shutdown_tags_ ABSL_GUARDED_BY(mu_global_);
|
482
|
-
std::unique_ptr<Notification> requests_complete_ ABSL_GUARDED_BY(mu_global_);
|
483
469
|
|
484
470
|
std::list<ChannelData*> channels_;
|
485
471
|
|
@@ -23,6 +23,6 @@
|
|
23
23
|
|
24
24
|
#include <grpc/grpc.h>
|
25
25
|
|
26
|
-
const char* grpc_version_string(void) { return "
|
26
|
+
const char* grpc_version_string(void) { return "35.0.0"; }
|
27
27
|
|
28
|
-
const char* grpc_g_stands_for(void) { return "
|
28
|
+
const char* grpc_g_stands_for(void) { return "goku"; }
|
@@ -35,7 +35,12 @@ constexpr size_t kKdfCounterLen = 6;
|
|
35
35
|
constexpr size_t kKdfCounterOffset = 2;
|
36
36
|
constexpr size_t kRekeyAeadKeyLen = kAes128GcmKeyLength;
|
37
37
|
|
38
|
-
|
38
|
+
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
|
39
|
+
const char kEvpMacAlgorithm[] = "HMAC";
|
40
|
+
char kEvpDigest[] = "SHA-256";
|
41
|
+
#endif
|
42
|
+
|
43
|
+
/* Struct for additional data required if rekeying is enabled. */
|
39
44
|
struct gsec_aes_gcm_aead_rekey_data {
|
40
45
|
uint8_t kdf_counter[kKdfCounterLen];
|
41
46
|
uint8_t nonce_mask[kAesGcmNonceLength];
|
@@ -196,7 +201,7 @@ static grpc_status_code aes_gcm_derive_aead_key(uint8_t* dst,
|
|
196
201
|
return GRPC_STATUS_INTERNAL;
|
197
202
|
}
|
198
203
|
HMAC_CTX_cleanup(&hmac);
|
199
|
-
#
|
204
|
+
#elif OPENSSL_VERSION_NUMBER < 0x30000000L
|
200
205
|
HMAC_CTX* hmac = HMAC_CTX_new();
|
201
206
|
if (hmac == nullptr) {
|
202
207
|
return GRPC_STATUS_INTERNAL;
|
@@ -208,6 +213,26 @@ static grpc_status_code aes_gcm_derive_aead_key(uint8_t* dst,
|
|
208
213
|
return GRPC_STATUS_INTERNAL;
|
209
214
|
}
|
210
215
|
HMAC_CTX_free(hmac);
|
216
|
+
#else
|
217
|
+
EVP_MAC* mac = EVP_MAC_fetch(nullptr, kEvpMacAlgorithm, nullptr);
|
218
|
+
EVP_MAC_CTX* ctx = EVP_MAC_CTX_new(mac);
|
219
|
+
if (ctx == nullptr) {
|
220
|
+
return GRPC_STATUS_INTERNAL;
|
221
|
+
}
|
222
|
+
OSSL_PARAM params[2];
|
223
|
+
params[0] = OSSL_PARAM_construct_utf8_string("digest", kEvpDigest, 0);
|
224
|
+
params[1] = OSSL_PARAM_construct_end();
|
225
|
+
|
226
|
+
if (!EVP_MAC_init(ctx, kdf_key, kKdfKeyLen, params) ||
|
227
|
+
!EVP_MAC_update(ctx, kdf_counter, kKdfCounterLen) ||
|
228
|
+
!EVP_MAC_update(ctx, &ctr, 1) ||
|
229
|
+
!EVP_MAC_final(ctx, buf, nullptr, EVP_MAX_MD_SIZE)) {
|
230
|
+
EVP_MAC_CTX_free(ctx);
|
231
|
+
EVP_MAC_free(mac);
|
232
|
+
return GRPC_STATUS_INTERNAL;
|
233
|
+
}
|
234
|
+
EVP_MAC_CTX_free(ctx);
|
235
|
+
EVP_MAC_free(mac);
|
211
236
|
#endif
|
212
237
|
memcpy(dst, buf, kRekeyAeadKeyLen);
|
213
238
|
return GRPC_STATUS_OK;
|
@@ -149,6 +149,9 @@ static int g_ssl_ex_verified_root_cert_index = -1;
|
|
149
149
|
#if !defined(OPENSSL_IS_BORINGSSL) && !defined(OPENSSL_NO_ENGINE)
|
150
150
|
static const char kSslEnginePrefix[] = "engine:";
|
151
151
|
#endif
|
152
|
+
#if OPENSSL_VERSION_NUMBER >= 0x30000000
|
153
|
+
static const int kSslEcCurveNames[] = {NID_X9_62_prime256v1};
|
154
|
+
#endif
|
152
155
|
|
153
156
|
#if OPENSSL_VERSION_NUMBER < 0x10100000
|
154
157
|
static gpr_mu* g_openssl_mutexes = nullptr;
|
@@ -789,6 +792,7 @@ static tsi_result populate_ssl_context(
|
|
789
792
|
return TSI_INVALID_ARGUMENT;
|
790
793
|
}
|
791
794
|
{
|
795
|
+
#if OPENSSL_VERSION_NUMBER < 0x30000000L
|
792
796
|
EC_KEY* ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
|
793
797
|
if (!SSL_CTX_set_tmp_ecdh(context, ecdh)) {
|
794
798
|
gpr_log(GPR_ERROR, "Could not set ephemeral ECDH key.");
|
@@ -797,6 +801,13 @@ static tsi_result populate_ssl_context(
|
|
797
801
|
}
|
798
802
|
SSL_CTX_set_options(context, SSL_OP_SINGLE_ECDH_USE);
|
799
803
|
EC_KEY_free(ecdh);
|
804
|
+
#else
|
805
|
+
if (!SSL_CTX_set1_groups(context, kSslEcCurveNames, 1)) {
|
806
|
+
gpr_log(GPR_ERROR, "Could not set ephemeral ECDH key.");
|
807
|
+
return TSI_INTERNAL_ERROR;
|
808
|
+
}
|
809
|
+
SSL_CTX_set_options(context, SSL_OP_SINGLE_ECDH_USE);
|
810
|
+
#endif
|
800
811
|
}
|
801
812
|
return TSI_OK;
|
802
813
|
}
|
@@ -97,8 +97,6 @@ static bg_watched_channel* bg_watched_channel_list_head = NULL;
|
|
97
97
|
|
98
98
|
static void grpc_rb_channel_try_register_connection_polling(
|
99
99
|
bg_watched_channel* bg);
|
100
|
-
static void* wait_until_channel_polling_thread_started_no_gil(void*);
|
101
|
-
static void wait_until_channel_polling_thread_started_unblocking_func(void*);
|
102
100
|
static void* channel_init_try_register_connection_polling_without_gil(
|
103
101
|
void* arg);
|
104
102
|
|
@@ -111,7 +109,6 @@ static grpc_completion_queue* g_channel_polling_cq;
|
|
111
109
|
static gpr_mu global_connection_polling_mu;
|
112
110
|
static gpr_cv global_connection_polling_cv;
|
113
111
|
static int g_abort_channel_polling = 0;
|
114
|
-
static int g_channel_polling_thread_started = 0;
|
115
112
|
static gpr_once g_once_init = GPR_ONCE_INIT;
|
116
113
|
static VALUE g_channel_polling_thread = Qnil;
|
117
114
|
|
@@ -224,12 +221,6 @@ static VALUE grpc_rb_channel_init(int argc, VALUE* argv, VALUE self) {
|
|
224
221
|
channel_init_try_register_stack stack;
|
225
222
|
|
226
223
|
grpc_ruby_fork_guard();
|
227
|
-
int stop_waiting_for_thread_start = 0;
|
228
|
-
rb_thread_call_without_gvl(
|
229
|
-
wait_until_channel_polling_thread_started_no_gil,
|
230
|
-
&stop_waiting_for_thread_start,
|
231
|
-
wait_until_channel_polling_thread_started_unblocking_func,
|
232
|
-
&stop_waiting_for_thread_start);
|
233
224
|
/* "3" == 3 mandatory args */
|
234
225
|
rb_scan_args(argc, argv, "3", &target, &channel_args, &credentials);
|
235
226
|
|
@@ -286,7 +277,6 @@ static void* get_state_without_gil(void* arg) {
|
|
286
277
|
get_state_stack* stack = (get_state_stack*)arg;
|
287
278
|
|
288
279
|
gpr_mu_lock(&global_connection_polling_mu);
|
289
|
-
GPR_ASSERT(g_abort_channel_polling || g_channel_polling_thread_started);
|
290
280
|
if (stack->bg->channel_destroyed) {
|
291
281
|
stack->out = GRPC_CHANNEL_SHUTDOWN;
|
292
282
|
} else {
|
@@ -423,15 +413,8 @@ static void grpc_rb_channel_maybe_recreate_channel_after_fork(
|
|
423
413
|
bg_watched_channel* bg = wrapper->bg_wrapped;
|
424
414
|
if (bg->channel_destroyed) {
|
425
415
|
// There must be one ref at this point, held by the ruby-level channel
|
426
|
-
// object.
|
416
|
+
// object, drop this one here.
|
427
417
|
GPR_ASSERT(bg->refcount == 1);
|
428
|
-
// Wait for channel polling thread to re-initialize
|
429
|
-
int stop_waiting_for_thread_start = 0;
|
430
|
-
rb_thread_call_without_gvl(
|
431
|
-
wait_until_channel_polling_thread_started_no_gil,
|
432
|
-
&stop_waiting_for_thread_start,
|
433
|
-
wait_until_channel_polling_thread_started_unblocking_func,
|
434
|
-
&stop_waiting_for_thread_start);
|
435
418
|
rb_thread_call_without_gvl(channel_safe_destroy_without_gil, bg, NULL,
|
436
419
|
NULL);
|
437
420
|
// re-create C-core channel
|
@@ -635,9 +618,6 @@ static void grpc_rb_channel_try_register_connection_polling(
|
|
635
618
|
bg_watched_channel* bg) {
|
636
619
|
grpc_connectivity_state conn_state;
|
637
620
|
watch_state_op* op = NULL;
|
638
|
-
|
639
|
-
GPR_ASSERT(g_channel_polling_thread_started || g_abort_channel_polling);
|
640
|
-
|
641
621
|
if (bg->refcount == 0) {
|
642
622
|
GPR_ASSERT(bg->channel_destroyed);
|
643
623
|
bg_watched_channel_list_free_and_remove(bg);
|
@@ -647,7 +627,6 @@ static void grpc_rb_channel_try_register_connection_polling(
|
|
647
627
|
if (bg->channel_destroyed || g_abort_channel_polling) {
|
648
628
|
return;
|
649
629
|
}
|
650
|
-
|
651
630
|
conn_state = grpc_channel_check_connectivity_state(bg->channel, 0);
|
652
631
|
if (conn_state == GRPC_CHANNEL_SHUTDOWN) {
|
653
632
|
return;
|
@@ -655,7 +634,6 @@ static void grpc_rb_channel_try_register_connection_polling(
|
|
655
634
|
GPR_ASSERT(bg_watched_channel_list_lookup(bg));
|
656
635
|
// prevent bg from being free'd by GC while background thread is watching it
|
657
636
|
bg->refcount++;
|
658
|
-
|
659
637
|
op = gpr_zalloc(sizeof(watch_state_op));
|
660
638
|
op->op_type = CONTINUOUS_WATCH;
|
661
639
|
op->op.continuous_watch_callback_args.bg = bg;
|
@@ -678,9 +656,6 @@ static void* run_poll_channels_loop_no_gil(void* arg) {
|
|
678
656
|
gpr_log(GPR_DEBUG, "GRPC_RUBY: run_poll_channels_loop_no_gil - begin");
|
679
657
|
|
680
658
|
gpr_mu_lock(&global_connection_polling_mu);
|
681
|
-
GPR_ASSERT(!g_abort_channel_polling);
|
682
|
-
GPR_ASSERT(!g_channel_polling_thread_started);
|
683
|
-
g_channel_polling_thread_started = 1;
|
684
659
|
gpr_cv_broadcast(&global_connection_polling_cv);
|
685
660
|
gpr_mu_unlock(&global_connection_polling_mu);
|
686
661
|
|
@@ -761,31 +736,6 @@ static VALUE run_poll_channels_loop(VALUE arg) {
|
|
761
736
|
return Qnil;
|
762
737
|
}
|
763
738
|
|
764
|
-
static void* wait_until_channel_polling_thread_started_no_gil(void* arg) {
|
765
|
-
int* stop_waiting = (int*)arg;
|
766
|
-
gpr_log(GPR_DEBUG, "GRPC_RUBY: wait for channel polling thread to start");
|
767
|
-
gpr_mu_lock(&global_connection_polling_mu);
|
768
|
-
while (!g_channel_polling_thread_started && !g_abort_channel_polling &&
|
769
|
-
!*stop_waiting) {
|
770
|
-
gpr_cv_wait(&global_connection_polling_cv, &global_connection_polling_mu,
|
771
|
-
gpr_inf_future(GPR_CLOCK_REALTIME));
|
772
|
-
}
|
773
|
-
gpr_mu_unlock(&global_connection_polling_mu);
|
774
|
-
|
775
|
-
return NULL;
|
776
|
-
}
|
777
|
-
|
778
|
-
static void wait_until_channel_polling_thread_started_unblocking_func(
|
779
|
-
void* arg) {
|
780
|
-
int* stop_waiting = (int*)arg;
|
781
|
-
gpr_mu_lock(&global_connection_polling_mu);
|
782
|
-
gpr_log(GPR_DEBUG,
|
783
|
-
"GRPC_RUBY: interrupt wait for channel polling thread to start");
|
784
|
-
*stop_waiting = 1;
|
785
|
-
gpr_cv_broadcast(&global_connection_polling_cv);
|
786
|
-
gpr_mu_unlock(&global_connection_polling_mu);
|
787
|
-
}
|
788
|
-
|
789
739
|
static void* set_abort_channel_polling_without_gil(void* arg) {
|
790
740
|
(void)arg;
|
791
741
|
gpr_mu_lock(&global_connection_polling_mu);
|
@@ -814,7 +764,6 @@ void grpc_rb_channel_polling_thread_start() {
|
|
814
764
|
gpr_once_init(&g_once_init, do_basic_init);
|
815
765
|
GPR_ASSERT(!RTEST(g_channel_polling_thread));
|
816
766
|
GPR_ASSERT(!g_abort_channel_polling);
|
817
|
-
GPR_ASSERT(!g_channel_polling_thread_started);
|
818
767
|
GPR_ASSERT(g_channel_polling_cq == NULL);
|
819
768
|
|
820
769
|
g_channel_polling_cq = grpc_completion_queue_create_for_next(NULL);
|
@@ -841,7 +790,6 @@ void grpc_rb_channel_polling_thread_stop() {
|
|
841
790
|
// we can start again later
|
842
791
|
g_channel_polling_thread = Qnil;
|
843
792
|
g_abort_channel_polling = false;
|
844
|
-
g_channel_polling_thread_started = false;
|
845
793
|
g_channel_polling_cq = NULL;
|
846
794
|
}
|
847
795
|
|