grpc 1.73.0 → 1.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +19 -29
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.h +5 -5
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +50 -1
- data/src/core/lib/promise/party.h +66 -1
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/filter_stack_call.cc +18 -9
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +83 -12
- data/src/core/server/server.h +21 -2
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/latent_see.h +8 -5
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +72 -568
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- metadata +72 -20
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -0,0 +1,593 @@
|
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2024 gRPC authors.
|
4
|
+
//
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
// you may not use this file except in compliance with the License.
|
7
|
+
// You may obtain a copy of the License at
|
8
|
+
//
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
//
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
// See the License for the specific language governing permissions and
|
15
|
+
// limitations under the License.
|
16
|
+
//
|
17
|
+
//
|
18
|
+
|
19
|
+
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_CLIENT_TRANSPORT_H
|
20
|
+
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_CLIENT_TRANSPORT_H
|
21
|
+
|
22
|
+
#include <cstdint>
|
23
|
+
#include <utility>
|
24
|
+
|
25
|
+
#include "src/core/call/call_spine.h"
|
26
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
27
|
+
#include "src/core/ext/transport/chttp2/transport/header_assembler.h"
|
28
|
+
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
29
|
+
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
|
30
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
31
|
+
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
32
|
+
#include "src/core/ext/transport/chttp2/transport/http2_transport.h"
|
33
|
+
#include "src/core/ext/transport/chttp2/transport/keepalive.h"
|
34
|
+
#include "src/core/ext/transport/chttp2/transport/message_assembler.h"
|
35
|
+
#include "src/core/ext/transport/chttp2/transport/ping_promise.h"
|
36
|
+
#include "src/core/lib/promise/inter_activity_mutex.h"
|
37
|
+
#include "src/core/lib/promise/mpsc.h"
|
38
|
+
#include "src/core/lib/promise/party.h"
|
39
|
+
#include "src/core/lib/transport/connectivity_state.h"
|
40
|
+
#include "src/core/lib/transport/promise_endpoint.h"
|
41
|
+
#include "src/core/lib/transport/transport.h"
|
42
|
+
#include "src/core/util/orphanable.h"
|
43
|
+
#include "src/core/util/ref_counted_ptr.h"
|
44
|
+
#include "src/core/util/sync.h"
|
45
|
+
|
46
|
+
namespace grpc_core {
|
47
|
+
namespace http2 {
|
48
|
+
|
49
|
+
// All Promise Based HTTP2 Transport TODOs have the tag
|
50
|
+
// [PH2][Pn] where n = 0 to 5.
|
51
|
+
// This helps to maintain the uniformity for quick lookup and fixing.
|
52
|
+
//
|
53
|
+
// [PH2][P0] MUST be fixed before the current PR is submitted.
|
54
|
+
// [PH2][P1] MUST be fixed before the current sub-project is considered
|
55
|
+
// complete.
|
56
|
+
// [PH2][P2] MUST be fixed before the current Milestone is considered
|
57
|
+
// complete.
|
58
|
+
// [PH2][P3] MUST be fixed before Milestone 3 is considered complete.
|
59
|
+
// [PH2][P4] Can be fixed after roll out begins. Evaluate these during
|
60
|
+
// Milestone 4. Either do the TODOs or delete them.
|
61
|
+
// [PH2][P5] This MUST be a separate standalone project.
|
62
|
+
// [PH2][EXT] This is a TODO related to a project unrelated to PH2 but happening
|
63
|
+
// in parallel.
|
64
|
+
|
65
|
+
// Http2 Client Transport Spawns Overview
|
66
|
+
|
67
|
+
// | Promise Spawn | Max Duration | Promise Resolution | Max Spawns |
|
68
|
+
// | | for Spawn | | |
|
69
|
+
// |---------------------|--------------|-----------------------|------------|
|
70
|
+
// | Endpoint Read Loop | Infinite | On transport close | One |
|
71
|
+
// | Endpoint Write Loop | Infinite | On transport close | One |
|
72
|
+
// | Close Transport | CloseTimeout | On transport close | One |
|
73
|
+
|
74
|
+
// Max Party Slots (Always): 2
|
75
|
+
// Max Promise Slots (Worst Case): 3
|
76
|
+
|
77
|
+
// Experimental : This is just the initial skeleton of class
|
78
|
+
// and it is functions. The code will be written iteratively.
|
79
|
+
// Do not use or edit any of these functions unless you are
|
80
|
+
// familiar with the PH2 project (Moving chttp2 to promises.)
|
81
|
+
// TODO(tjagtap) : [PH2][P3] : Update the experimental status of the code before
|
82
|
+
// http2 rollout begins.
|
83
|
+
class Http2ClientTransport final : public ClientTransport {
|
84
|
+
// TODO(tjagtap) : [PH2][P3] Move the definitions to the header for better
|
85
|
+
// inlining. For now definitions are in the cc file to
|
86
|
+
// reduce cognitive load in the header.
|
87
|
+
public:
|
88
|
+
Http2ClientTransport(
|
89
|
+
PromiseEndpoint endpoint, GRPC_UNUSED const ChannelArgs& channel_args,
|
90
|
+
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
91
|
+
event_engine,
|
92
|
+
grpc_closure* on_receive_settings);
|
93
|
+
|
94
|
+
Http2ClientTransport(const Http2ClientTransport&) = delete;
|
95
|
+
Http2ClientTransport& operator=(const Http2ClientTransport&) = delete;
|
96
|
+
Http2ClientTransport(Http2ClientTransport&&) = delete;
|
97
|
+
Http2ClientTransport& operator=(Http2ClientTransport&&) = delete;
|
98
|
+
~Http2ClientTransport() override;
|
99
|
+
|
100
|
+
FilterStackTransport* filter_stack_transport() override { return nullptr; }
|
101
|
+
ClientTransport* client_transport() override { return this; }
|
102
|
+
ServerTransport* server_transport() override { return nullptr; }
|
103
|
+
absl::string_view GetTransportName() const override { return "http2"; }
|
104
|
+
|
105
|
+
// TODO(tjagtap) : [PH2][EXT] : These can be removed when event engine rollout
|
106
|
+
// is complete.
|
107
|
+
void SetPollset(grpc_stream*, grpc_pollset*) override {}
|
108
|
+
void SetPollsetSet(grpc_stream*, grpc_pollset_set*) override {}
|
109
|
+
|
110
|
+
// Called at the start of a stream.
|
111
|
+
void StartCall(CallHandler call_handler) override;
|
112
|
+
|
113
|
+
void PerformOp(grpc_transport_op*) override;
|
114
|
+
void StartConnectivityWatch(
|
115
|
+
grpc_connectivity_state state,
|
116
|
+
OrphanablePtr<ConnectivityStateWatcherInterface> watcher);
|
117
|
+
void StopConnectivityWatch(ConnectivityStateWatcherInterface* watcher);
|
118
|
+
|
119
|
+
void Orphan() override;
|
120
|
+
void AbortWithError();
|
121
|
+
|
122
|
+
RefCountedPtr<channelz::SocketNode> GetSocketNode() const override {
|
123
|
+
return nullptr;
|
124
|
+
}
|
125
|
+
|
126
|
+
auto TestOnlyEnqueueOutgoingFrame(Http2Frame frame) {
|
127
|
+
// TODO(tjagtap) : [PH2][P3] : See if making a sender in the constructor
|
128
|
+
// and using that always would be more efficient.
|
129
|
+
return AssertResultType<absl::Status>(Map(
|
130
|
+
outgoing_frames_.MakeSender().Send(std::move(frame), 1),
|
131
|
+
[](StatusFlag status) {
|
132
|
+
GRPC_HTTP2_CLIENT_DLOG
|
133
|
+
<< "Http2ClientTransport::TestOnlyEnqueueOutgoingFrame status="
|
134
|
+
<< status;
|
135
|
+
return (status.ok()) ? absl::OkStatus()
|
136
|
+
: absl::InternalError("Failed to enqueue frame");
|
137
|
+
}));
|
138
|
+
}
|
139
|
+
|
140
|
+
auto TestOnlySendPing(absl::AnyInvocable<void()> on_initiate) {
|
141
|
+
return ping_manager_.RequestPing(std::move(on_initiate));
|
142
|
+
}
|
143
|
+
|
144
|
+
template <typename Factory>
|
145
|
+
auto TestOnlySpawnPromise(absl::string_view name, Factory factory) {
|
146
|
+
return general_party_->Spawn(name, std::move(factory), [](auto) {});
|
147
|
+
}
|
148
|
+
|
149
|
+
private:
|
150
|
+
// Promise factory for processing each type of frame
|
151
|
+
Http2Status ProcessHttp2DataFrame(Http2DataFrame frame);
|
152
|
+
Http2Status ProcessHttp2HeaderFrame(Http2HeaderFrame frame);
|
153
|
+
Http2Status ProcessHttp2RstStreamFrame(Http2RstStreamFrame frame);
|
154
|
+
Http2Status ProcessHttp2SettingsFrame(Http2SettingsFrame frame);
|
155
|
+
auto ProcessHttp2PingFrame(Http2PingFrame frame);
|
156
|
+
Http2Status ProcessHttp2GoawayFrame(Http2GoawayFrame frame);
|
157
|
+
Http2Status ProcessHttp2WindowUpdateFrame(Http2WindowUpdateFrame frame);
|
158
|
+
Http2Status ProcessHttp2ContinuationFrame(Http2ContinuationFrame frame);
|
159
|
+
Http2Status ProcessHttp2SecurityFrame(Http2SecurityFrame frame);
|
160
|
+
Http2Status ProcessMetadata(uint32_t stream_id, HeaderAssembler& assembler,
|
161
|
+
CallHandler& call,
|
162
|
+
bool& did_push_initial_metadata,
|
163
|
+
bool& did_push_trailing_metadata);
|
164
|
+
|
165
|
+
// Reading from the endpoint.
|
166
|
+
|
167
|
+
// Returns a promise to keep reading in a Loop till a fail/close is
|
168
|
+
// received.
|
169
|
+
auto ReadLoop();
|
170
|
+
|
171
|
+
// Returns a promise that will read and process one HTTP2 frame.
|
172
|
+
auto ReadAndProcessOneFrame();
|
173
|
+
|
174
|
+
// Returns a promise that will process one HTTP2 frame.
|
175
|
+
auto ProcessOneFrame(Http2Frame frame);
|
176
|
+
|
177
|
+
// Returns a promise that will do the cleanup after the ReadLoop ends.
|
178
|
+
auto OnReadLoopEnded();
|
179
|
+
|
180
|
+
// Writing to the endpoint.
|
181
|
+
|
182
|
+
// Read from the MPSC queue and write it.
|
183
|
+
auto WriteFromQueue();
|
184
|
+
|
185
|
+
// Returns a promise to keep writing in a Loop till a fail/close is
|
186
|
+
// received.
|
187
|
+
auto WriteLoop();
|
188
|
+
|
189
|
+
// Returns a promise that will do the cleanup after the WriteLoop ends.
|
190
|
+
auto OnWriteLoopEnded();
|
191
|
+
|
192
|
+
// Returns a promise to fetch data from the callhandler and pass it further
|
193
|
+
// down towards the endpoint.
|
194
|
+
auto CallOutboundLoop(CallHandler call_handler, uint32_t stream_id,
|
195
|
+
InterActivityMutex<uint32_t>::Lock lock,
|
196
|
+
ClientMetadataHandle metadata);
|
197
|
+
|
198
|
+
// Returns a promise to enqueue a frame to MPSC
|
199
|
+
auto EnqueueOutgoingFrame(Http2Frame frame) {
|
200
|
+
// TODO(tjagtap) : [PH2][P3] : See if making a sender in the constructor
|
201
|
+
// and using that always would be more efficient.
|
202
|
+
return AssertResultType<absl::Status>(Map(
|
203
|
+
outgoing_frames_.MakeSender().Send(std::move(frame), 1),
|
204
|
+
[self = RefAsSubclass<Http2ClientTransport>()](StatusFlag status) {
|
205
|
+
GRPC_HTTP2_CLIENT_DLOG
|
206
|
+
<< "Http2ClientTransport::EnqueueOutgoingFrame status=" << status;
|
207
|
+
return (status.ok())
|
208
|
+
? absl::OkStatus()
|
209
|
+
: self->HandleError(Http2Status::AbslConnectionError(
|
210
|
+
absl::StatusCode::kInternal,
|
211
|
+
"Failed to enqueue frame"));
|
212
|
+
}));
|
213
|
+
}
|
214
|
+
|
215
|
+
// Force triggers a transport write cycle
|
216
|
+
auto TriggerWriteCycle() { return EnqueueOutgoingFrame(Http2EmptyFrame{}); }
|
217
|
+
|
218
|
+
RefCountedPtr<Party> general_party_;
|
219
|
+
|
220
|
+
PromiseEndpoint endpoint_;
|
221
|
+
Http2SettingsManager settings_;
|
222
|
+
|
223
|
+
Http2FrameHeader current_frame_header_;
|
224
|
+
|
225
|
+
// Managing the streams
|
226
|
+
struct Stream : public RefCounted<Stream> {
|
227
|
+
explicit Stream(CallHandler call, const uint32_t stream_id1)
|
228
|
+
: call(std::move(call)),
|
229
|
+
stream_state(HttpStreamState::kIdle),
|
230
|
+
stream_id(stream_id1),
|
231
|
+
header_assembler(stream_id1),
|
232
|
+
did_push_initial_metadata(false),
|
233
|
+
did_push_trailing_metadata(false) {}
|
234
|
+
|
235
|
+
// Modify the stream state
|
236
|
+
// The possible stream transitions are as follows:
|
237
|
+
// kIdle -> kOpen
|
238
|
+
// kOpen -> kClosed/kHalfClosedLocal/kHalfClosedRemote
|
239
|
+
// kHalfClosedLocal/kHalfClosedRemote -> kClosed
|
240
|
+
// kClosed -> kClosed
|
241
|
+
void SentInitialMetadata() {
|
242
|
+
DCHECK(stream_state == HttpStreamState::kIdle);
|
243
|
+
stream_state = HttpStreamState::kOpen;
|
244
|
+
}
|
245
|
+
|
246
|
+
void MarkHalfClosedLocal() {
|
247
|
+
switch (stream_state) {
|
248
|
+
case HttpStreamState::kIdle:
|
249
|
+
DCHECK(false) << "MarkHalfClosedLocal called for an idle stream";
|
250
|
+
break;
|
251
|
+
case HttpStreamState::kOpen:
|
252
|
+
stream_state = HttpStreamState::kHalfClosedLocal;
|
253
|
+
break;
|
254
|
+
case HttpStreamState::kHalfClosedRemote:
|
255
|
+
stream_state = HttpStreamState::kClosed;
|
256
|
+
break;
|
257
|
+
case HttpStreamState::kHalfClosedLocal:
|
258
|
+
break;
|
259
|
+
case HttpStreamState::kClosed:
|
260
|
+
break;
|
261
|
+
}
|
262
|
+
}
|
263
|
+
|
264
|
+
void MarkHalfClosedRemote() {
|
265
|
+
switch (stream_state) {
|
266
|
+
case HttpStreamState::kIdle:
|
267
|
+
DCHECK(false) << "MarkHalfClosedRemote called for an idle stream";
|
268
|
+
break;
|
269
|
+
case HttpStreamState::kOpen:
|
270
|
+
stream_state = HttpStreamState::kHalfClosedRemote;
|
271
|
+
break;
|
272
|
+
case HttpStreamState::kHalfClosedLocal:
|
273
|
+
stream_state = HttpStreamState::kClosed;
|
274
|
+
break;
|
275
|
+
case HttpStreamState::kHalfClosedRemote:
|
276
|
+
break;
|
277
|
+
case HttpStreamState::kClosed:
|
278
|
+
break;
|
279
|
+
}
|
280
|
+
}
|
281
|
+
|
282
|
+
inline bool IsClosed() const {
|
283
|
+
return stream_state == HttpStreamState::kClosed;
|
284
|
+
}
|
285
|
+
|
286
|
+
CallHandler call;
|
287
|
+
// TODO(akshitpatel) : [PH2][P3] : Investigate if this needs to be atomic.
|
288
|
+
HttpStreamState stream_state;
|
289
|
+
const uint32_t stream_id;
|
290
|
+
TransportSendQeueue send_queue;
|
291
|
+
GrpcMessageAssembler assembler;
|
292
|
+
HeaderAssembler header_assembler;
|
293
|
+
// TODO(akshitpatel) : [PH2][P2] : StreamQ should maintain a flag that
|
294
|
+
// tracks if the half close has been sent for this stream. This flag is used
|
295
|
+
// to notify the mixer that this stream is closed for
|
296
|
+
// writes(HalfClosedLocal). When the mixer dequeues the last message for
|
297
|
+
// the streamQ, it will mark the stream as closed for writes and send a
|
298
|
+
// frame with end_stream or set the end_stream flag in the last data
|
299
|
+
// frame being sent out. This is done as the stream state should not
|
300
|
+
// transition to HalfClosedLocal till the end_stream frame is sent.
|
301
|
+
bool did_push_initial_metadata;
|
302
|
+
bool did_push_trailing_metadata;
|
303
|
+
};
|
304
|
+
|
305
|
+
uint32_t NextStreamId(
|
306
|
+
InterActivityMutex<uint32_t>::Lock& next_stream_id_lock) {
|
307
|
+
const uint32_t stream_id = *next_stream_id_lock;
|
308
|
+
if (stream_id > RFC9113::kMaxStreamId31Bit) {
|
309
|
+
// TODO(tjagtap) : [PH2][P3] : Handle case if transport runs out of stream
|
310
|
+
// ids
|
311
|
+
// RFC9113 : Stream identifiers cannot be reused. Long-lived connections
|
312
|
+
// can result in an endpoint exhausting the available range of stream
|
313
|
+
// identifiers. A client that is unable to establish a new stream
|
314
|
+
// identifier can establish a new connection for new streams. A server
|
315
|
+
// that is unable to establish a new stream identifier can send a GOAWAY
|
316
|
+
// frame so that the client is forced to open a new connection for new
|
317
|
+
// streams.
|
318
|
+
}
|
319
|
+
// RFC9113 : Streams initiated by a client MUST use odd-numbered stream
|
320
|
+
// identifiers.
|
321
|
+
(*next_stream_id_lock) += 2;
|
322
|
+
return stream_id;
|
323
|
+
}
|
324
|
+
|
325
|
+
MpscReceiver<Http2Frame> outgoing_frames_;
|
326
|
+
|
327
|
+
Mutex transport_mutex_;
|
328
|
+
// TODO(tjagtap) : [PH2][P2] : Add to map in StartCall and clean this
|
329
|
+
// mapping up in the on_done of the CallInitiator or CallHandler
|
330
|
+
absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list_
|
331
|
+
ABSL_GUARDED_BY(transport_mutex_);
|
332
|
+
|
333
|
+
// Mutex to preserve the order of headers being sent out for new streams.
|
334
|
+
// This also tracks the stream_id for creating new streams.
|
335
|
+
InterActivityMutex<uint32_t> stream_id_mutex_;
|
336
|
+
HPackCompressor encoder_;
|
337
|
+
HPackParser parser_;
|
338
|
+
bool is_transport_closed_ ABSL_GUARDED_BY(transport_mutex_) = false;
|
339
|
+
|
340
|
+
ConnectivityStateTracker state_tracker_ ABSL_GUARDED_BY(transport_mutex_){
|
341
|
+
"http2_client", GRPC_CHANNEL_READY};
|
342
|
+
|
343
|
+
bool MakeStream(CallHandler call_handler, uint32_t stream_id);
|
344
|
+
|
345
|
+
struct CloseStreamArgs {
|
346
|
+
bool close_reads;
|
347
|
+
bool close_writes;
|
348
|
+
bool send_rst_stream;
|
349
|
+
bool push_trailing_metadata;
|
350
|
+
};
|
351
|
+
|
352
|
+
// This function MUST be idempotent.
|
353
|
+
void CloseStream(uint32_t stream_id, absl::Status status,
|
354
|
+
CloseStreamArgs args, DebugLocation whence = {});
|
355
|
+
|
356
|
+
RefCountedPtr<Http2ClientTransport::Stream> LookupStream(uint32_t stream_id);
|
357
|
+
|
358
|
+
auto EndpointReadSlice(const size_t num_bytes) {
|
359
|
+
return Map(endpoint_.ReadSlice(num_bytes),
|
360
|
+
[self = RefAsSubclass<Http2ClientTransport>()](
|
361
|
+
absl::StatusOr<Slice> status) {
|
362
|
+
// We are ignoring the case where the read fails and call
|
363
|
+
// GotData() regardless. Reasoning:
|
364
|
+
// 1. It is expected that if the read fails, the transport will
|
365
|
+
// close and the keepalive loop will be stopped.
|
366
|
+
// 2. It does not seem worth to have an extra condition for the
|
367
|
+
// success cases which would be way more common.
|
368
|
+
self->keepalive_manager_.GotData();
|
369
|
+
return status;
|
370
|
+
});
|
371
|
+
}
|
372
|
+
|
373
|
+
auto EndpointRead(const size_t num_bytes) {
|
374
|
+
return Map(endpoint_.Read(num_bytes),
|
375
|
+
[self = RefAsSubclass<Http2ClientTransport>()](
|
376
|
+
absl::StatusOr<SliceBuffer> status) {
|
377
|
+
// We are ignoring the case where the read fails and call
|
378
|
+
// GotData() regardless. Reasoning:
|
379
|
+
// 1. It is expected that if the read fails, the transport will
|
380
|
+
// close and the keepalive loop will be stopped.
|
381
|
+
// 2. It does not seem worth to have an extra condition for the
|
382
|
+
// success cases which would be way more common.
|
383
|
+
self->keepalive_manager_.GotData();
|
384
|
+
return status;
|
385
|
+
});
|
386
|
+
}
|
387
|
+
|
388
|
+
// This function MUST run on the transport party.
|
389
|
+
void CloseTransport();
|
390
|
+
|
391
|
+
void MaybeSpawnCloseTransport(Http2Status http2_status,
|
392
|
+
DebugLocation whence = {});
|
393
|
+
|
394
|
+
// Handles the error status and returns the corresponding absl status. Absl
|
395
|
+
// Status is returned so that the error can be gracefully handled
|
396
|
+
// by promise primitives.
|
397
|
+
// If the error is a stream error, it closes the stream and returns an ok
|
398
|
+
// status. Ok status is returned because the calling transport promise loops
|
399
|
+
// should not be cancelled in case of stream errors.
|
400
|
+
// If the error is a connection error, it closes the transport and returns the
|
401
|
+
// corresponding (failed) absl status.
|
402
|
+
absl::Status HandleError(Http2Status status, DebugLocation whence = {}) {
|
403
|
+
auto error_type = status.GetType();
|
404
|
+
DCHECK(error_type != Http2Status::Http2ErrorType::kOk);
|
405
|
+
|
406
|
+
if (error_type == Http2Status::Http2ErrorType::kStreamError) {
|
407
|
+
LOG(ERROR) << "Stream Error: " << status.DebugString();
|
408
|
+
CloseStream(current_frame_header_.stream_id, status.GetAbslStreamError(),
|
409
|
+
CloseStreamArgs{
|
410
|
+
/*close_reads=*/true,
|
411
|
+
/*close_writes=*/true,
|
412
|
+
/*send_rst_stream=*/true,
|
413
|
+
/*push_trailing_metadata=*/true,
|
414
|
+
},
|
415
|
+
whence);
|
416
|
+
return absl::OkStatus();
|
417
|
+
} else if (error_type == Http2Status::Http2ErrorType::kConnectionError) {
|
418
|
+
LOG(ERROR) << "Connection Error: " << status.DebugString();
|
419
|
+
absl::Status absl_status = status.GetAbslConnectionError();
|
420
|
+
MaybeSpawnCloseTransport(std::move(status), whence);
|
421
|
+
return absl_status;
|
422
|
+
}
|
423
|
+
GPR_UNREACHABLE_CODE(return absl::InternalError("Invalid error type"));
|
424
|
+
}
|
425
|
+
|
426
|
+
bool bytes_sent_in_last_write_;
|
427
|
+
bool incoming_header_in_progress_;
|
428
|
+
bool incoming_header_end_stream_;
|
429
|
+
bool is_first_write_;
|
430
|
+
uint32_t incoming_header_stream_id_;
|
431
|
+
grpc_closure* on_receive_settings_;
|
432
|
+
|
433
|
+
// Ping related members
|
434
|
+
// TODO(akshitpatel) : [PH2][P2] : Consider removing the timeout related
|
435
|
+
// members.
|
436
|
+
// Duration between two consecutive keepalive pings
|
437
|
+
const Duration keepalive_time_;
|
438
|
+
// Duration to wait for a keepalive ping ack before triggering timeout. This
|
439
|
+
// only takes effect if the assigned value is less than the ping timeout.
|
440
|
+
const Duration keepalive_timeout_;
|
441
|
+
// Duration to wait for ping ack before triggering timeout
|
442
|
+
const Duration ping_timeout_;
|
443
|
+
PingManager ping_manager_;
|
444
|
+
std::vector<uint64_t> pending_ping_acks_;
|
445
|
+
KeepaliveManager keepalive_manager_;
|
446
|
+
|
447
|
+
// Flags
|
448
|
+
bool keepalive_permit_without_calls_;
|
449
|
+
|
450
|
+
auto SendPing(absl::AnyInvocable<void()> on_initiate) {
|
451
|
+
return ping_manager_.RequestPing(std::move(on_initiate));
|
452
|
+
}
|
453
|
+
auto WaitForPingAck() { return ping_manager_.WaitForPingAck(); }
|
454
|
+
|
455
|
+
// Ping Helper functions
|
456
|
+
// Returns a promise that resolves once a ping frame is written to the
|
457
|
+
// endpoint.
|
458
|
+
auto CreateAndWritePing(bool ack, uint64_t opaque_data) {
|
459
|
+
Http2Frame frame = Http2PingFrame{ack, opaque_data};
|
460
|
+
SliceBuffer output_buf;
|
461
|
+
Serialize(absl::Span<Http2Frame>(&frame, 1), output_buf);
|
462
|
+
return endpoint_.Write(std::move(output_buf), {});
|
463
|
+
}
|
464
|
+
|
465
|
+
Duration NextAllowedPingInterval() {
|
466
|
+
MutexLock lock(&transport_mutex_);
|
467
|
+
return (!keepalive_permit_without_calls_ && stream_list_.empty())
|
468
|
+
? Duration::Hours(2)
|
469
|
+
: Duration::Seconds(1);
|
470
|
+
}
|
471
|
+
|
472
|
+
auto MaybeSendPing() {
|
473
|
+
return ping_manager_.MaybeSendPing(NextAllowedPingInterval(),
|
474
|
+
ping_timeout_);
|
475
|
+
}
|
476
|
+
|
477
|
+
auto MaybeSendPingAcks() {
|
478
|
+
return AssertResultType<absl::Status>(If(
|
479
|
+
pending_ping_acks_.empty(), [] { return absl::OkStatus(); },
|
480
|
+
[this] {
|
481
|
+
std::vector<Http2Frame> frames;
|
482
|
+
frames.reserve(pending_ping_acks_.size());
|
483
|
+
for (auto& opaque_data : pending_ping_acks_) {
|
484
|
+
frames.emplace_back(Http2PingFrame{true, opaque_data});
|
485
|
+
}
|
486
|
+
pending_ping_acks_.clear();
|
487
|
+
SliceBuffer output_buf;
|
488
|
+
Serialize(absl::Span<Http2Frame>(frames), output_buf);
|
489
|
+
return endpoint_.Write(std::move(output_buf), {});
|
490
|
+
}));
|
491
|
+
}
|
492
|
+
|
493
|
+
class PingSystemInterfaceImpl : public PingInterface {
|
494
|
+
public:
|
495
|
+
static std::unique_ptr<PingInterface> Make(
|
496
|
+
Http2ClientTransport* transport) {
|
497
|
+
return std::make_unique<PingSystemInterfaceImpl>(
|
498
|
+
PingSystemInterfaceImpl(transport));
|
499
|
+
}
|
500
|
+
|
501
|
+
// Returns a promise that resolves once a ping frame is written to the
|
502
|
+
// endpoint.
|
503
|
+
Promise<absl::Status> SendPing(SendPingArgs args) override {
|
504
|
+
return transport_->CreateAndWritePing(args.ack, args.opaque_data);
|
505
|
+
}
|
506
|
+
|
507
|
+
Promise<absl::Status> TriggerWrite() override {
|
508
|
+
return transport_->TriggerWriteCycle();
|
509
|
+
}
|
510
|
+
|
511
|
+
Promise<absl::Status> PingTimeout() override {
|
512
|
+
// TODO(akshitpatel) : [PH2][P2] : Trigger goaway here.
|
513
|
+
// Returns a promise that resolves once goaway is sent.
|
514
|
+
LOG(INFO) << "Ping timeout at time: " << Timestamp::Now();
|
515
|
+
|
516
|
+
// TODO(akshitpatel) : [PH2][P2] : The error code here has been chosen
|
517
|
+
// based on CHTTP2's usage of GRPC_STATUS_UNAVAILABLE (which corresponds
|
518
|
+
// to kRefusedStream). However looking at RFC9113, definition of
|
519
|
+
// kRefusedStream doesn't seem to fit this case. We should revisit this
|
520
|
+
// and update the error code.
|
521
|
+
return Immediate(
|
522
|
+
transport_->HandleError(Http2Status::Http2ConnectionError(
|
523
|
+
Http2ErrorCode::kRefusedStream, "Ping timeout")));
|
524
|
+
}
|
525
|
+
|
526
|
+
private:
|
527
|
+
// TODO(akshitpatel) : [PH2][P2] : Eventually there should be a separate ref
|
528
|
+
// counted struct/class passed to all the transport promises/members. This
|
529
|
+
// will help removing back references from the transport members to
|
530
|
+
// transport and greatly simpilfy the cleanup path.
|
531
|
+
Http2ClientTransport* transport_;
|
532
|
+
explicit PingSystemInterfaceImpl(Http2ClientTransport* transport)
|
533
|
+
: transport_(transport) {}
|
534
|
+
};
|
535
|
+
|
536
|
+
class KeepAliveInterfaceImpl : public KeepAliveInterface {
|
537
|
+
public:
|
538
|
+
static std::unique_ptr<KeepAliveInterface> Make(
|
539
|
+
Http2ClientTransport* transport) {
|
540
|
+
return std::make_unique<KeepAliveInterfaceImpl>(
|
541
|
+
KeepAliveInterfaceImpl(transport));
|
542
|
+
}
|
543
|
+
|
544
|
+
private:
|
545
|
+
explicit KeepAliveInterfaceImpl(Http2ClientTransport* transport)
|
546
|
+
: transport_(transport) {}
|
547
|
+
Promise<absl::Status> SendPingAndWaitForAck() override {
|
548
|
+
return TrySeq(transport_->TriggerWriteCycle(), [transport = transport_] {
|
549
|
+
return transport->WaitForPingAck();
|
550
|
+
});
|
551
|
+
}
|
552
|
+
Promise<absl::Status> OnKeepAliveTimeout() override {
|
553
|
+
// TODO(akshitpatel) : [PH2][P2] : Trigger goaway here.
|
554
|
+
LOG(INFO) << "Keepalive timeout triggered";
|
555
|
+
|
556
|
+
// TODO(akshitpatel) : [PH2][P2] : The error code here has been chosen
|
557
|
+
// based on CHTTP2's usage of GRPC_STATUS_UNAVAILABLE (which corresponds
|
558
|
+
// to kRefusedStream). However looking at RFC9113, definition of
|
559
|
+
// kRefusedStream doesn't seem to fit this case. We should revisit this
|
560
|
+
// and update the error code.
|
561
|
+
return Immediate(
|
562
|
+
transport_->HandleError(Http2Status::Http2ConnectionError(
|
563
|
+
Http2ErrorCode::kRefusedStream, "Keepalive timeout")));
|
564
|
+
}
|
565
|
+
|
566
|
+
bool NeedToSendKeepAlivePing() override {
|
567
|
+
bool need_to_send_ping = false;
|
568
|
+
{
|
569
|
+
MutexLock lock(&transport_->transport_mutex_);
|
570
|
+
need_to_send_ping = (transport_->keepalive_permit_without_calls_ ||
|
571
|
+
!transport_->stream_list_.empty());
|
572
|
+
}
|
573
|
+
return need_to_send_ping;
|
574
|
+
}
|
575
|
+
|
576
|
+
// TODO(akshitpatel) : [PH2][P2] : Eventually there should be a separate ref
|
577
|
+
// counted struct/class passed to all the transport promises/members. This
|
578
|
+
// will help removing back references from the transport members to
|
579
|
+
// transport and greatly simpilfy the cleanup path.
|
580
|
+
Http2ClientTransport* transport_;
|
581
|
+
};
|
582
|
+
};
|
583
|
+
|
584
|
+
// Since the corresponding class in CHTTP2 is about 3.9KB, our goal is to
|
585
|
+
// remain within that range. When this check fails, please update it to size
|
586
|
+
// (current size + 32) to make sure that it does not fail each time we add a
|
587
|
+
// small variable to the class.
|
588
|
+
GRPC_CHECK_CLASS_SIZE(Http2ClientTransport, 600);
|
589
|
+
|
590
|
+
} // namespace http2
|
591
|
+
} // namespace grpc_core
|
592
|
+
|
593
|
+
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_CLIENT_TRANSPORT_H
|
@@ -25,9 +25,9 @@
|
|
25
25
|
|
26
26
|
#include "absl/functional/function_ref.h"
|
27
27
|
#include "absl/strings/string_view.h"
|
28
|
+
#include "src/core/channelz/property_list.h"
|
28
29
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
29
30
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
30
|
-
#include "src/core/util/json/json.h"
|
31
31
|
#include "src/core/util/useful.h"
|
32
32
|
|
33
33
|
namespace grpc_core {
|
@@ -133,20 +133,18 @@ class Http2Settings {
|
|
133
133
|
|
134
134
|
bool operator!=(const Http2Settings& rhs) const { return !operator==(rhs); }
|
135
135
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
object["allowSecurityFrame"] = Json::FromBool(allow_security_frame());
|
149
|
-
return object;
|
136
|
+
channelz::PropertyList ChannelzProperties() const {
|
137
|
+
return channelz::PropertyList()
|
138
|
+
.Set(header_table_size_name(), header_table_size())
|
139
|
+
.Set(max_concurrent_streams_name(), max_concurrent_streams())
|
140
|
+
.Set(initial_window_size_name(), initial_window_size())
|
141
|
+
.Set(max_frame_size_name(), max_frame_size())
|
142
|
+
.Set(max_header_list_size_name(), max_header_list_size())
|
143
|
+
.Set(preferred_receive_crypto_message_size_name(),
|
144
|
+
preferred_receive_crypto_message_size())
|
145
|
+
.Set(enable_push_name(), enable_push())
|
146
|
+
.Set(allow_true_binary_metadata_name(), allow_true_binary_metadata())
|
147
|
+
.Set(allow_security_frame_name(), allow_security_frame());
|
150
148
|
}
|
151
149
|
|
152
150
|
private:
|
@@ -169,13 +167,12 @@ class Http2SettingsManager {
|
|
169
167
|
Http2Settings& mutable_peer() { return peer_; }
|
170
168
|
const Http2Settings& peer() const { return peer_; }
|
171
169
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
return object;
|
170
|
+
channelz::PropertyGrid ChannelzProperties() const {
|
171
|
+
return channelz::PropertyGrid()
|
172
|
+
.SetColumn("local", local_.ChannelzProperties())
|
173
|
+
.SetColumn("sent", sent_.ChannelzProperties())
|
174
|
+
.SetColumn("peer", peer_.ChannelzProperties())
|
175
|
+
.SetColumn("acked", acked_.ChannelzProperties());
|
179
176
|
}
|
180
177
|
|
181
178
|
std::optional<Http2SettingsFrame> MaybeSendUpdate();
|