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
@@ -42,23 +42,37 @@ namespace grpc_core {
|
|
42
42
|
// for exporting debug/trace information.
|
43
43
|
template <typename T>
|
44
44
|
static constexpr inline absl::string_view TypeName() {
|
45
|
+
#if ABSL_USES_STD_STRING_VIEW
|
46
|
+
// absl::string_view doesn't have the constexpr find methods we need
|
47
|
+
// here.
|
45
48
|
#if defined(__clang__)
|
46
49
|
constexpr absl::string_view kPrefix{"[T = "};
|
47
50
|
constexpr absl::string_view kSuffix{"]"};
|
48
51
|
#elif defined(__GNUC__)
|
52
|
+
#if __GNUC__ < 9
|
53
|
+
#define GRPC_FUNCTION_SIGNATURE_TYPE_NAME_USE_FALLBACK
|
54
|
+
#endif
|
49
55
|
constexpr absl::string_view kPrefix{"[with T = "};
|
50
56
|
constexpr absl::string_view kSuffix{";"};
|
51
57
|
#elif defined(_MSC_VER)
|
52
58
|
constexpr absl::string_view kPrefix{"TypeName<"};
|
53
59
|
constexpr absl::string_view kSuffix{">(void)"};
|
54
60
|
#else
|
55
|
-
|
61
|
+
#define GRPC_FUNCTION_SIGNATURE_TYPE_NAME_USE_FALLBACK
|
56
62
|
#endif
|
63
|
+
#else // !ABSL_USE_STD_STRING_VIEW
|
64
|
+
#define GRPC_FUNCTION_SIGNATURE_TYPE_NAME_USE_FALLBACK
|
65
|
+
#endif
|
66
|
+
|
67
|
+
#ifdef GRPC_FUNCTION_SIGNATURE_TYPE_NAME_USE_FALLBACK
|
68
|
+
return "unknown";
|
69
|
+
#else
|
57
70
|
constexpr absl::string_view kFunction{GRPC_FUNCTION_SIGNATURE};
|
58
71
|
constexpr size_t kStart = kFunction.find(kPrefix) + kPrefix.size();
|
59
72
|
constexpr size_t kEnd = kFunction.rfind(kSuffix);
|
60
73
|
static_assert(kStart < kEnd);
|
61
74
|
return kFunction.substr(kStart, (kEnd - kStart));
|
75
|
+
#endif
|
62
76
|
}
|
63
77
|
|
64
78
|
} // namespace grpc_core
|
@@ -40,6 +40,7 @@
|
|
40
40
|
#include "src/core/lib/channel/channel_args.h"
|
41
41
|
#include "src/core/lib/channel/channel_args_preconditioning.h"
|
42
42
|
#include "src/core/lib/event_engine/resolved_address_internal.h"
|
43
|
+
#include "src/core/lib/event_engine/shim.h"
|
43
44
|
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
44
45
|
#include "src/core/lib/iomgr/endpoint.h"
|
45
46
|
#include "src/core/lib/iomgr/iomgr_internal.h"
|
@@ -175,7 +176,10 @@ HttpRequest::HttpRequest(
|
|
175
176
|
pollent_(pollent),
|
176
177
|
pollset_set_(grpc_pollset_set_create()),
|
177
178
|
test_only_generate_response_(std::move(test_only_generate_response)),
|
178
|
-
use_event_engine_dns_resolver_(
|
179
|
+
use_event_engine_dns_resolver_(
|
180
|
+
IsEventEngineDnsNonClientChannelEnabled() &&
|
181
|
+
!grpc_event_engine::experimental::
|
182
|
+
EventEngineExperimentDisabledForPython()),
|
179
183
|
resolver_(!use_event_engine_dns_resolver_ ? GetDNSResolver() : nullptr),
|
180
184
|
ee_resolver_(
|
181
185
|
use_event_engine_dns_resolver_
|
@@ -196,8 +200,10 @@ HttpRequest::HttpRequest(
|
|
196
200
|
GRPC_CLOSURE_INIT(&continue_done_write_after_schedule_on_exec_ctx_,
|
197
201
|
ContinueDoneWriteAfterScheduleOnExecCtx, this,
|
198
202
|
grpc_schedule_on_exec_ctx);
|
199
|
-
|
200
|
-
|
203
|
+
if (!grpc_event_engine::experimental::UsePollsetAlternative()) {
|
204
|
+
CHECK(pollent);
|
205
|
+
grpc_polling_entity_add_to_pollset_set(pollent, pollset_set_);
|
206
|
+
}
|
201
207
|
}
|
202
208
|
|
203
209
|
HttpRequest::~HttpRequest() {
|
@@ -329,8 +335,9 @@ void HttpRequest::StartWrite() {
|
|
329
335
|
CSliceRef(request_text_);
|
330
336
|
grpc_slice_buffer_add(&outgoing_, request_text_);
|
331
337
|
Ref().release(); // ref held by pending write
|
332
|
-
|
333
|
-
|
338
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args;
|
339
|
+
args.set_max_frame_size(INT_MAX);
|
340
|
+
grpc_endpoint_write(ep_.get(), &outgoing_, &done_write_, std::move(args));
|
334
341
|
}
|
335
342
|
|
336
343
|
void HttpRequest::OnHandshakeDone(absl::StatusOr<HandshakerArgs*> result) {
|
@@ -35,6 +35,7 @@
|
|
35
35
|
#include "absl/status/statusor.h"
|
36
36
|
#include "absl/strings/string_view.h"
|
37
37
|
#include "src/core/handshaker/handshaker.h"
|
38
|
+
#include "src/core/lib/event_engine/shim.h"
|
38
39
|
#include "src/core/lib/iomgr/closure.h"
|
39
40
|
#include "src/core/lib/iomgr/endpoint.h"
|
40
41
|
#include "src/core/lib/iomgr/error.h"
|
@@ -180,7 +181,9 @@ class HttpRequest : public InternallyRefCounted<HttpRequest> {
|
|
180
181
|
|
181
182
|
private:
|
182
183
|
void Finish(grpc_error_handle error) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
183
|
-
|
184
|
+
if (!grpc_event_engine::experimental::UsePollsetAlternative()) {
|
185
|
+
grpc_polling_entity_del_from_pollset_set(pollent_, pollset_set_);
|
186
|
+
}
|
184
187
|
ExecCtx::Run(DEBUG_LOCATION, on_done_, error);
|
185
188
|
}
|
186
189
|
|
data/src/core/util/latent_see.h
CHANGED
@@ -47,7 +47,7 @@ namespace latent_see {
|
|
47
47
|
struct Metadata {
|
48
48
|
const char* file;
|
49
49
|
int line;
|
50
|
-
|
50
|
+
absl::string_view name;
|
51
51
|
};
|
52
52
|
|
53
53
|
enum class EventType : uint8_t { kBegin, kEnd, kFlowStart, kFlowEnd, kMark };
|
@@ -259,6 +259,9 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto Promise(const Metadata* md_poll,
|
|
259
259
|
|
260
260
|
} // namespace latent_see
|
261
261
|
} // namespace grpc_core
|
262
|
+
#define GRPC_LATENT_SEE_SYMBOL2(name, line) name##_##line
|
263
|
+
#define GRPC_LATENT_SEE_SYMBOL1(name, line) GRPC_LATENT_SEE_SYMBOL2(name, line)
|
264
|
+
#define GRPC_LATENT_SEE_SYMBOL(name) GRPC_LATENT_SEE_SYMBOL1(name, __LINE__)
|
262
265
|
#define GRPC_LATENT_SEE_METADATA(name) \
|
263
266
|
[]() { \
|
264
267
|
static grpc_core::latent_see::Metadata metadata = {__FILE__, __LINE__, \
|
@@ -268,14 +271,14 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION auto Promise(const Metadata* md_poll,
|
|
268
271
|
// Parent scope: logs a begin and end event, and flushes the thread log on scope
|
269
272
|
// exit. Because the flush takes some time it's better to place one parent scope
|
270
273
|
// at the top of the stack, and use lighter weight scopes within it.
|
271
|
-
#define GRPC_LATENT_SEE_PARENT_SCOPE(name)
|
272
|
-
grpc_core::latent_see::ParentScope latent_see_scope
|
274
|
+
#define GRPC_LATENT_SEE_PARENT_SCOPE(name) \
|
275
|
+
grpc_core::latent_see::ParentScope GRPC_LATENT_SEE_SYMBOL(latent_see_scope)( \
|
273
276
|
GRPC_LATENT_SEE_METADATA(name))
|
274
277
|
// Inner scope: logs a begin and end event. Lighter weight than parent scope,
|
275
278
|
// but does not flush the thread state - so should only be enclosed by a parent
|
276
279
|
// scope.
|
277
|
-
#define GRPC_LATENT_SEE_INNER_SCOPE(name)
|
278
|
-
grpc_core::latent_see::InnerScope latent_see_scope
|
280
|
+
#define GRPC_LATENT_SEE_INNER_SCOPE(name) \
|
281
|
+
grpc_core::latent_see::InnerScope GRPC_LATENT_SEE_SYMBOL(latent_see_scope)( \
|
279
282
|
GRPC_LATENT_SEE_METADATA(name))
|
280
283
|
// Mark: logs a single event.
|
281
284
|
// This is not flushed automatically, and so should only be used within a parent
|
data/src/core/util/log.cc
CHANGED
@@ -104,6 +104,7 @@ void gpr_log_verbosity_init(void) {
|
|
104
104
|
"ERROR. However if you see this message in a debug environment or "
|
105
105
|
"test environment it is safe to ignore this message.";
|
106
106
|
absl::SetVLogLevel("*grpc*/*", -1);
|
107
|
+
absl::SetVLogLevel("src/core/util/log", -1);
|
107
108
|
absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
|
108
109
|
} else if (absl::EqualsIgnoreCase(verbosity, "DEBUG")) {
|
109
110
|
LOG_FIRST_N(WARNING, 1)
|
@@ -111,12 +112,15 @@ void gpr_log_verbosity_init(void) {
|
|
111
112
|
"ERROR. However if you see this message in a debug environment or "
|
112
113
|
"test environment it is safe to ignore this message.";
|
113
114
|
absl::SetVLogLevel("*grpc*/*", 2);
|
115
|
+
absl::SetVLogLevel("src/core/util/log", 2);
|
114
116
|
absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
|
115
117
|
} else if (absl::EqualsIgnoreCase(verbosity, "ERROR")) {
|
116
118
|
absl::SetVLogLevel("*grpc*/*", -1);
|
119
|
+
absl::SetVLogLevel("src/core/util/log", -1);
|
117
120
|
absl::SetMinLogLevel(absl::LogSeverityAtLeast::kError);
|
118
121
|
} else if (absl::EqualsIgnoreCase(verbosity, "NONE")) {
|
119
122
|
absl::SetVLogLevel("*grpc*/*", -1);
|
123
|
+
absl::SetVLogLevel("src/core/util/log", -1);
|
120
124
|
absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfinity);
|
121
125
|
} else if (verbosity.empty()) {
|
122
126
|
// Do not alter absl settings if GRPC_VERBOSITY flag is not set.
|
@@ -0,0 +1,268 @@
|
|
1
|
+
// Copyright 2025 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_SRC_CORE_UTIL_MEMORY_USAGE_H
|
16
|
+
#define GRPC_SRC_CORE_UTIL_MEMORY_USAGE_H
|
17
|
+
|
18
|
+
#include <cstddef>
|
19
|
+
#include <memory>
|
20
|
+
#include <optional>
|
21
|
+
#include <tuple>
|
22
|
+
#include <type_traits>
|
23
|
+
#include <utility>
|
24
|
+
#include <vector>
|
25
|
+
|
26
|
+
#include "absl/log/log.h"
|
27
|
+
#include "absl/status/status.h"
|
28
|
+
#include "absl/status/statusor.h"
|
29
|
+
#include "absl/strings/string_view.h"
|
30
|
+
#include "absl/time/time.h"
|
31
|
+
#include "src/core/util/time.h"
|
32
|
+
|
33
|
+
namespace grpc_core {
|
34
|
+
|
35
|
+
namespace memory_usage_detail {
|
36
|
+
|
37
|
+
template <typename SfinaeVoid, typename T, typename... Args>
|
38
|
+
struct IsBraceConstructible : public std::false_type {};
|
39
|
+
|
40
|
+
template <typename T, typename... Args>
|
41
|
+
struct IsBraceConstructible<std::void_t<decltype(T{std::declval<Args>()...})>,
|
42
|
+
T, Args...> : public std::true_type {};
|
43
|
+
|
44
|
+
template <typename T, typename... Args>
|
45
|
+
constexpr bool kIsBraceConstructible =
|
46
|
+
IsBraceConstructible<void, T, Args...>::value;
|
47
|
+
|
48
|
+
template <typename T>
|
49
|
+
constexpr bool kAnyTypeConvertibleTo = true;
|
50
|
+
template <typename T>
|
51
|
+
constexpr bool kAnyTypeConvertibleTo<std::optional<T>> = false;
|
52
|
+
|
53
|
+
struct AnyType {
|
54
|
+
template <typename T, std::enable_if_t<kAnyTypeConvertibleTo<T>, int> = 0>
|
55
|
+
// NOLINTNEXTLINE
|
56
|
+
constexpr operator T() {
|
57
|
+
LOG(FATAL) << "unreachable";
|
58
|
+
}
|
59
|
+
};
|
60
|
+
|
61
|
+
enum class Category {
|
62
|
+
kUncategorized,
|
63
|
+
kOptional,
|
64
|
+
kAbslStatusOr,
|
65
|
+
kSimple, // memory usage == sizeof(T)
|
66
|
+
kOwnedPointer, // memory usage is pointer + usage of pointed to value
|
67
|
+
kVector, // memory usage is container + elements
|
68
|
+
};
|
69
|
+
|
70
|
+
template <typename T, typename = void>
|
71
|
+
constexpr Category kMemoryUsageCategory = Category::kUncategorized;
|
72
|
+
|
73
|
+
template <typename T>
|
74
|
+
constexpr Category
|
75
|
+
kMemoryUsageCategory<T, std::enable_if_t<std::is_fundamental_v<T>>> =
|
76
|
+
Category::kSimple;
|
77
|
+
|
78
|
+
template <typename T>
|
79
|
+
constexpr Category
|
80
|
+
kMemoryUsageCategory<T, std::enable_if_t<std::is_enum_v<T>>> =
|
81
|
+
Category::kSimple;
|
82
|
+
|
83
|
+
template <typename T, typename D>
|
84
|
+
constexpr Category kMemoryUsageCategory<std::unique_ptr<T, D>> =
|
85
|
+
Category::kOwnedPointer;
|
86
|
+
|
87
|
+
template <typename T>
|
88
|
+
constexpr Category kMemoryUsageCategory<std::shared_ptr<T>> =
|
89
|
+
Category::kOwnedPointer;
|
90
|
+
|
91
|
+
template <typename T>
|
92
|
+
constexpr Category kMemoryUsageCategory<std::vector<T>> = Category::kVector;
|
93
|
+
|
94
|
+
template <typename C, typename Traits, typename Allocator>
|
95
|
+
constexpr Category
|
96
|
+
kMemoryUsageCategory<std::basic_string<C, Traits, Allocator>> =
|
97
|
+
Category::kVector;
|
98
|
+
|
99
|
+
template <typename T>
|
100
|
+
constexpr Category kMemoryUsageCategory<std::optional<T>> = Category::kOptional;
|
101
|
+
|
102
|
+
template <typename T, typename = void>
|
103
|
+
constexpr bool kHasMemoryUsageMethod = false;
|
104
|
+
|
105
|
+
template <typename T>
|
106
|
+
constexpr bool kHasMemoryUsageMethod<
|
107
|
+
T, std::void_t<decltype(std::declval<T>().MemoryUsage())>> = true;
|
108
|
+
|
109
|
+
} // namespace memory_usage_detail
|
110
|
+
|
111
|
+
// Given an object x, `MemoryUsage(x)` returns a size_t that approximates the
|
112
|
+
// memory used by x. It's not totally accurate, but "good enough" for systems
|
113
|
+
// that need to roughly bound memory usage of a collection of elements.
|
114
|
+
|
115
|
+
template <typename T>
|
116
|
+
size_t MemoryUsageOf(const T& x) {
|
117
|
+
using memory_usage_detail::AnyType;
|
118
|
+
using memory_usage_detail::Category;
|
119
|
+
using memory_usage_detail::kHasMemoryUsageMethod;
|
120
|
+
using memory_usage_detail::kIsBraceConstructible;
|
121
|
+
constexpr Category category = memory_usage_detail::kMemoryUsageCategory<T>;
|
122
|
+
if constexpr (kHasMemoryUsageMethod<T>) {
|
123
|
+
return x.MemoryUsage();
|
124
|
+
} else if constexpr (std::is_empty_v<T>) {
|
125
|
+
return sizeof(T);
|
126
|
+
} else if constexpr (std::is_same_v<T, absl::Status>) {
|
127
|
+
if (x.ok()) return sizeof(T);
|
128
|
+
return 2 * sizeof(T) + x.message().length(); // wrong, but not super wrong
|
129
|
+
} else if constexpr (std::is_same_v<T, absl::Time>) {
|
130
|
+
return sizeof(T);
|
131
|
+
} else if constexpr (std::is_same_v<T, absl::string_view>) {
|
132
|
+
// Assume that the string_view is not owning the string.
|
133
|
+
return sizeof(T);
|
134
|
+
} else if constexpr (std::is_same_v<T, Timestamp>) {
|
135
|
+
return sizeof(T);
|
136
|
+
} else if constexpr (std::is_same_v<T, Duration>) {
|
137
|
+
return sizeof(T);
|
138
|
+
} else if constexpr (category == Category::kSimple) {
|
139
|
+
return sizeof(T);
|
140
|
+
} else if constexpr (category == Category::kOwnedPointer) {
|
141
|
+
if (x == nullptr) return sizeof(T);
|
142
|
+
return sizeof(T) + MemoryUsageOf(*x);
|
143
|
+
} else if constexpr (category == Category::kVector) {
|
144
|
+
size_t total = sizeof(T) + sizeof(*x.begin()) * (x.capacity() - x.size());
|
145
|
+
for (const auto& e : x) {
|
146
|
+
total += MemoryUsageOf(e);
|
147
|
+
}
|
148
|
+
return total;
|
149
|
+
} else if constexpr (category == Category::kOptional) {
|
150
|
+
if (x.has_value()) return MemoryUsageOf(*x) + sizeof(T) - sizeof(*x);
|
151
|
+
return sizeof(T);
|
152
|
+
} else if constexpr (category == Category::kAbslStatusOr) {
|
153
|
+
if (x.ok()) return MemoryUsageOf(*x) + sizeof(absl::Status);
|
154
|
+
return MemoryUsageOf(x.status()) + sizeof(T);
|
155
|
+
} else if constexpr (category == Category::kUncategorized) {
|
156
|
+
// Structs!
|
157
|
+
// If you have more than 8 fields, you can add more cases here.
|
158
|
+
// Keep sorted longest to shortest.
|
159
|
+
if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType, AnyType,
|
160
|
+
AnyType, AnyType, AnyType, AnyType,
|
161
|
+
AnyType, AnyType>) {
|
162
|
+
const auto& [v1, v2, v3, v4, v5, v6, v7, v8, v9, v10] = x;
|
163
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) -
|
164
|
+
sizeof(v3) - sizeof(v4) - sizeof(v5) -
|
165
|
+
sizeof(v6) - sizeof(v7) - sizeof(v8) -
|
166
|
+
sizeof(v9) - sizeof(v10);
|
167
|
+
static_assert(padding >= 0);
|
168
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
169
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + MemoryUsageOf(v6) +
|
170
|
+
MemoryUsageOf(v7) + MemoryUsageOf(v8) + MemoryUsageOf(v9) +
|
171
|
+
MemoryUsageOf(v10) + padding;
|
172
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
173
|
+
AnyType, AnyType, AnyType,
|
174
|
+
AnyType, AnyType, AnyType>) {
|
175
|
+
const auto& [v1, v2, v3, v4, v5, v6, v7, v8, v9] = x;
|
176
|
+
constexpr auto padding =
|
177
|
+
sizeof(T) - sizeof(v1) - sizeof(v2) - sizeof(v3) - sizeof(v4) -
|
178
|
+
sizeof(v5) - sizeof(v6) - sizeof(v7) - sizeof(v8) - sizeof(v9);
|
179
|
+
static_assert(padding >= 0);
|
180
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
181
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + MemoryUsageOf(v6) +
|
182
|
+
MemoryUsageOf(v7) + MemoryUsageOf(v8) + MemoryUsageOf(v9) +
|
183
|
+
padding;
|
184
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
185
|
+
AnyType, AnyType, AnyType,
|
186
|
+
AnyType, AnyType>) {
|
187
|
+
const auto& [v1, v2, v3, v4, v5, v6, v7, v8] = x;
|
188
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) -
|
189
|
+
sizeof(v3) - sizeof(v4) - sizeof(v5) -
|
190
|
+
sizeof(v6) - sizeof(v7) - sizeof(v8);
|
191
|
+
static_assert(padding >= 0);
|
192
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
193
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + MemoryUsageOf(v6) +
|
194
|
+
MemoryUsageOf(v7) + MemoryUsageOf(v8) + padding;
|
195
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
196
|
+
AnyType, AnyType, AnyType,
|
197
|
+
AnyType>) {
|
198
|
+
const auto& [v1, v2, v3, v4, v5, v6, v7] = x;
|
199
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) -
|
200
|
+
sizeof(v3) - sizeof(v4) - sizeof(v5) -
|
201
|
+
sizeof(v6) - sizeof(v7);
|
202
|
+
static_assert(padding >= 0);
|
203
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
204
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + MemoryUsageOf(v6) +
|
205
|
+
MemoryUsageOf(v7) + padding;
|
206
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
207
|
+
AnyType, AnyType, AnyType>) {
|
208
|
+
const auto& [v1, v2, v3, v4, v5, v6] = x;
|
209
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) -
|
210
|
+
sizeof(v3) - sizeof(v4) - sizeof(v5) -
|
211
|
+
sizeof(v6);
|
212
|
+
static_assert(padding >= 0);
|
213
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
214
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + MemoryUsageOf(v6) +
|
215
|
+
padding;
|
216
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
217
|
+
AnyType, AnyType>) {
|
218
|
+
const auto& [v1, v2, v3, v4, v5] = x;
|
219
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) -
|
220
|
+
sizeof(v3) - sizeof(v4) - sizeof(v5);
|
221
|
+
static_assert(padding >= 0);
|
222
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
223
|
+
MemoryUsageOf(v4) + MemoryUsageOf(v5) + padding;
|
224
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType,
|
225
|
+
AnyType>) {
|
226
|
+
const auto& [v1, v2, v3, v4] = x;
|
227
|
+
constexpr auto padding =
|
228
|
+
sizeof(T) - sizeof(v1) - sizeof(v2) - sizeof(v3) - sizeof(v4);
|
229
|
+
static_assert(padding >= 0);
|
230
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
231
|
+
MemoryUsageOf(v4) + padding;
|
232
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType, AnyType>) {
|
233
|
+
const auto& [v1, v2, v3] = x;
|
234
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2) - sizeof(v3);
|
235
|
+
static_assert(padding >= 0);
|
236
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + MemoryUsageOf(v3) +
|
237
|
+
padding;
|
238
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType, AnyType>) {
|
239
|
+
const auto& [v1, v2] = x;
|
240
|
+
constexpr auto padding = sizeof(T) - sizeof(v1) - sizeof(v2);
|
241
|
+
static_assert(padding >= 0);
|
242
|
+
return MemoryUsageOf(v1) + MemoryUsageOf(v2) + padding;
|
243
|
+
} else if constexpr (kIsBraceConstructible<T, AnyType>) {
|
244
|
+
const auto& [v1] = x;
|
245
|
+
constexpr auto padding = sizeof(T) - sizeof(v1);
|
246
|
+
static_assert(padding >= 0);
|
247
|
+
return MemoryUsageOf(v1) + padding;
|
248
|
+
} else {
|
249
|
+
// Probably wrong, but we've not figured any better...
|
250
|
+
LOG(DFATAL) << "Unsupported type";
|
251
|
+
return sizeof(T);
|
252
|
+
}
|
253
|
+
} else {
|
254
|
+
// Probably wrong, but we've not figured any better...
|
255
|
+
LOG(DFATAL) << "Unsupported type";
|
256
|
+
return sizeof(T);
|
257
|
+
}
|
258
|
+
}
|
259
|
+
|
260
|
+
template <typename... Args>
|
261
|
+
size_t MemoryUsageOf(const std::tuple<Args...>& t) {
|
262
|
+
return std::apply(
|
263
|
+
[](const auto&... args) { return (MemoryUsageOf(args) + ... + 0); }, t);
|
264
|
+
}
|
265
|
+
|
266
|
+
} // namespace grpc_core
|
267
|
+
|
268
|
+
#endif // GRPC_SRC_CORE_UTIL_MEMORY_USAGE_H
|
data/src/core/util/per_cpu.cc
CHANGED
data/src/core/util/per_cpu.h
CHANGED
@@ -55,6 +55,12 @@ class PerCpuOptions {
|
|
55
55
|
size_t max_shards_ = std::numeric_limits<size_t>::max();
|
56
56
|
};
|
57
57
|
|
58
|
+
#ifdef GPR_CPU_CUSTOM
|
59
|
+
class PerCpuShardingHelper {
|
60
|
+
public:
|
61
|
+
size_t GetShardingBits() { return gpr_cpu_current_cpu(); }
|
62
|
+
};
|
63
|
+
#else
|
58
64
|
class PerCpuShardingHelper {
|
59
65
|
public:
|
60
66
|
size_t GetShardingBits() {
|
@@ -76,6 +82,7 @@ class PerCpuShardingHelper {
|
|
76
82
|
};
|
77
83
|
static thread_local State state_;
|
78
84
|
};
|
85
|
+
#endif // GPR_CPU_CUSTOM
|
79
86
|
|
80
87
|
template <typename T>
|
81
88
|
class PerCpu {
|
@@ -19,6 +19,25 @@
|
|
19
19
|
|
20
20
|
namespace grpc_core {
|
21
21
|
|
22
|
+
#if defined(GRPC_CPU_INTENSIVE_BITGEN)
|
23
|
+
class SharedBitGen {
|
24
|
+
public:
|
25
|
+
SharedBitGen() = default;
|
26
|
+
SharedBitGen(const SharedBitGen&) = delete;
|
27
|
+
SharedBitGen& operator=(const SharedBitGen&) = delete;
|
28
|
+
SharedBitGen(SharedBitGen&&) = default;
|
29
|
+
SharedBitGen& operator=(SharedBitGen&&) = default;
|
30
|
+
|
31
|
+
using result_type = absl::BitGen::result_type;
|
32
|
+
result_type operator()() { return bit_gen_(); }
|
33
|
+
|
34
|
+
static constexpr auto min() { return absl::BitGen::min(); }
|
35
|
+
static constexpr auto max() { return absl::BitGen::max(); }
|
36
|
+
|
37
|
+
private:
|
38
|
+
absl::BitGen bit_gen_;
|
39
|
+
};
|
40
|
+
#else
|
22
41
|
class SharedBitGen {
|
23
42
|
public:
|
24
43
|
SharedBitGen() = default;
|
@@ -38,6 +57,7 @@ class SharedBitGen {
|
|
38
57
|
// for the mutex acquisition.
|
39
58
|
static thread_local absl::BitGen bit_gen_;
|
40
59
|
};
|
60
|
+
#endif // defined(GRPC_CPU_INTENSIVE_BITGEN)
|
41
61
|
|
42
62
|
} // namespace grpc_core
|
43
63
|
|
@@ -105,13 +105,13 @@ class SingleSetRefCountedPtr {
|
|
105
105
|
|
106
106
|
T& operator*() const { return *Get(); }
|
107
107
|
|
108
|
+
T* Set(RefCountedPtr<T> p) { return p_.Set(p.release()); }
|
109
|
+
|
108
110
|
private:
|
109
111
|
struct UnrefDeleter {
|
110
112
|
void operator()(T* p) { p->Unref(); }
|
111
113
|
};
|
112
114
|
|
113
|
-
T* Set(RefCountedPtr<T> p) { return p_.Set(p.release()); }
|
114
|
-
|
115
115
|
SingleSetPtr<T, UnrefDeleter> p_;
|
116
116
|
};
|
117
117
|
|
data/src/core/util/upb_utils.h
CHANGED
@@ -17,10 +17,15 @@
|
|
17
17
|
#ifndef GRPC_SRC_CORE_UTIL_UPB_UTILS_H
|
18
18
|
#define GRPC_SRC_CORE_UTIL_UPB_UTILS_H
|
19
19
|
|
20
|
+
#include <grpc/support/time.h>
|
21
|
+
|
20
22
|
#include <string>
|
21
23
|
|
22
24
|
#include "absl/strings/string_view.h"
|
25
|
+
#include "google/protobuf/duration.upb.h"
|
26
|
+
#include "google/protobuf/timestamp.upb.h"
|
23
27
|
#include "upb/base/string_view.h"
|
28
|
+
#include "upb/mem/arena.h"
|
24
29
|
|
25
30
|
namespace grpc_core {
|
26
31
|
|
@@ -30,6 +35,17 @@ inline upb_StringView StdStringToUpbString(const T& str) {
|
|
30
35
|
return upb_StringView_FromDataAndSize(str.data(), str.size());
|
31
36
|
}
|
32
37
|
|
38
|
+
inline upb_StringView StdStringToUpbString(const char* str) {
|
39
|
+
return upb_StringView_FromDataAndSize(str, strlen(str));
|
40
|
+
}
|
41
|
+
|
42
|
+
template <typename T>
|
43
|
+
inline upb_StringView CopyStdStringToUpbString(const T& str, upb_Arena* arena) {
|
44
|
+
char* copy = static_cast<char*>(upb_Arena_Malloc(arena, str.size()));
|
45
|
+
memcpy(copy, str.data(), str.size());
|
46
|
+
return upb_StringView_FromDataAndSize(copy, str.size());
|
47
|
+
}
|
48
|
+
|
33
49
|
inline absl::string_view UpbStringToAbsl(const upb_StringView& str) {
|
34
50
|
return absl::string_view(str.data, str.size);
|
35
51
|
}
|
@@ -38,6 +54,32 @@ inline std::string UpbStringToStdString(const upb_StringView& str) {
|
|
38
54
|
return std::string(str.data, str.size);
|
39
55
|
}
|
40
56
|
|
57
|
+
inline void TimestampToUpb(gpr_timespec ts, google_protobuf_Timestamp* proto) {
|
58
|
+
auto t = gpr_convert_clock_type(ts, GPR_CLOCK_REALTIME);
|
59
|
+
google_protobuf_Timestamp_set_seconds(proto, t.tv_sec);
|
60
|
+
google_protobuf_Timestamp_set_nanos(proto, t.tv_nsec);
|
61
|
+
}
|
62
|
+
|
63
|
+
inline void UpbToTimestamp(const google_protobuf_Timestamp* proto,
|
64
|
+
gpr_timespec* ts) {
|
65
|
+
ts->clock_type = GPR_CLOCK_REALTIME;
|
66
|
+
ts->tv_sec = google_protobuf_Timestamp_seconds(proto);
|
67
|
+
ts->tv_nsec = google_protobuf_Timestamp_nanos(proto);
|
68
|
+
}
|
69
|
+
|
70
|
+
inline void DurationToUpb(gpr_timespec ts, google_protobuf_Duration* proto) {
|
71
|
+
auto t = gpr_convert_clock_type(ts, GPR_TIMESPAN);
|
72
|
+
google_protobuf_Duration_set_seconds(proto, t.tv_sec);
|
73
|
+
google_protobuf_Duration_set_nanos(proto, t.tv_nsec);
|
74
|
+
}
|
75
|
+
|
76
|
+
inline void UpbToTimestamp(const google_protobuf_Duration* proto,
|
77
|
+
gpr_timespec* ts) {
|
78
|
+
ts->clock_type = GPR_TIMESPAN;
|
79
|
+
ts->tv_sec = google_protobuf_Duration_seconds(proto);
|
80
|
+
ts->tv_nsec = google_protobuf_Duration_nanos(proto);
|
81
|
+
}
|
82
|
+
|
41
83
|
} // namespace grpc_core
|
42
84
|
|
43
85
|
#endif // GRPC_SRC_CORE_UTIL_UPB_UTILS_H
|
data/src/core/util/uri.cc
CHANGED
@@ -259,7 +259,7 @@ absl::StatusOr<URI> URI::Parse(absl::string_view uri_text) {
|
|
259
259
|
std::string host_port;
|
260
260
|
if (absl::ConsumePrefix(&remaining, "//")) {
|
261
261
|
offset = remaining.find_first_of("/?#");
|
262
|
-
absl::string_view encoded_authority =
|
262
|
+
absl::string_view encoded_authority = remaining.substr(0, offset);
|
263
263
|
// parse user_info and host_port
|
264
264
|
absl::string_view encoded_user_info;
|
265
265
|
absl::string_view encoded_host_port;
|
@@ -404,7 +404,8 @@ std::string URI::ToString() const {
|
|
404
404
|
std::vector<std::string> parts = {PercentEncode(scheme_, IsSchemeChar), ":"};
|
405
405
|
// If path starts with '//' we need to encode the authority to ensure that
|
406
406
|
// we can round-trip the URI through a parse/encode/parse loop.
|
407
|
-
if (!
|
407
|
+
if (!user_info_.empty() || !host_port_.empty() ||
|
408
|
+
absl::StartsWith(path_, "//")) {
|
408
409
|
parts.emplace_back("//");
|
409
410
|
if (!user_info_.empty()) {
|
410
411
|
parts.emplace_back(PercentEncode(user_info_, IsUserInfoChar));
|
data/src/core/util/useful.h
CHANGED
@@ -19,6 +19,7 @@
|
|
19
19
|
|
20
20
|
#include <cstddef>
|
21
21
|
#include <limits>
|
22
|
+
#include <type_traits>
|
22
23
|
#include <variant>
|
23
24
|
|
24
25
|
#include "absl/log/check.h"
|
@@ -114,8 +115,58 @@ inline T SaturatingAdd(T a, T b) {
|
|
114
115
|
return a + b;
|
115
116
|
}
|
116
117
|
|
117
|
-
|
118
|
-
|
118
|
+
template <
|
119
|
+
typename T,
|
120
|
+
std::enable_if_t<std::is_integral_v<T> && std::is_unsigned_v<T>, int> = 0>
|
121
|
+
inline T SaturatingMul(T a, T b) {
|
122
|
+
if (a == 0 || b == 0) return 0;
|
123
|
+
if (b > std::numeric_limits<T>::max() / a) {
|
124
|
+
return std::numeric_limits<T>::max();
|
125
|
+
}
|
126
|
+
return a * b;
|
127
|
+
}
|
128
|
+
|
129
|
+
template <
|
130
|
+
typename T,
|
131
|
+
std::enable_if_t<std::is_integral_v<T> && std::is_signed_v<T>, int> = 0>
|
132
|
+
inline T SaturatingMul(T a, T b) {
|
133
|
+
if (a == 0 || b == 0) return 0;
|
134
|
+
if (a == std::numeric_limits<T>::min()) {
|
135
|
+
// negation is ub
|
136
|
+
if (b == -1) return std::numeric_limits<T>::max();
|
137
|
+
if (b == 1) return std::numeric_limits<T>::min();
|
138
|
+
if (b > 1) return std::numeric_limits<T>::min();
|
139
|
+
return std::numeric_limits<T>::max();
|
140
|
+
}
|
141
|
+
if (b == std::numeric_limits<T>::min()) {
|
142
|
+
if (a == -1) return std::numeric_limits<T>::max();
|
143
|
+
if (a == 1) return std::numeric_limits<T>::min();
|
144
|
+
if (a > 1) return std::numeric_limits<T>::min();
|
145
|
+
return std::numeric_limits<T>::max();
|
146
|
+
}
|
147
|
+
if (a > 0 && b > 0) {
|
148
|
+
// both positive
|
149
|
+
if (a > std::numeric_limits<T>::max() / b) {
|
150
|
+
return std::numeric_limits<T>::max();
|
151
|
+
}
|
152
|
+
} else if (a < 0 && b < 0) {
|
153
|
+
// both negative
|
154
|
+
if (a < std::numeric_limits<T>::max() / b) {
|
155
|
+
return std::numeric_limits<T>::max();
|
156
|
+
}
|
157
|
+
} else {
|
158
|
+
// one positive, one negative
|
159
|
+
if (a > 0) {
|
160
|
+
if (b < std::numeric_limits<T>::min() / a) {
|
161
|
+
return std::numeric_limits<T>::min();
|
162
|
+
}
|
163
|
+
} else {
|
164
|
+
if (a < std::numeric_limits<T>::min() / b) {
|
165
|
+
return std::numeric_limits<T>::min();
|
166
|
+
}
|
167
|
+
}
|
168
|
+
}
|
169
|
+
return a * b;
|
119
170
|
}
|
120
171
|
|
121
172
|
inline uint32_t RoundUpToPowerOf2(uint32_t v) {
|