grpc 1.46.3-x86_64-linux → 1.47.0-x86_64-linux
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +49 -97
- data/include/grpc/event_engine/event_engine.h +42 -7
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +112 -0
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +100 -36
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
- data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
- data/src/core/ext/filters/client_channel/client_channel.h +26 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +7 -5
- data/src/core/ext/filters/client_channel/connector.h +8 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
- data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
- data/src/core/ext/filters/client_channel/subchannel.h +80 -20
- data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
- data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
- data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -2
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
- data/src/core/ext/xds/xds_client.cc +46 -22
- data/src/core/ext/xds/xds_cluster.cc +106 -16
- data/src/core/ext/xds/xds_cluster.h +3 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
- data/src/core/ext/xds/xds_listener.cc +19 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
- data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
- data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
- data/src/core/lib/avl/avl.h +3 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +8 -2
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +33 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_stack.cc +41 -3
- data/src/core/lib/channel/channel_stack.h +49 -3
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +15 -27
- data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +8 -13
- data/src/core/lib/channel/channelz.h +13 -4
- data/src/core/lib/channel/channelz_registry.cc +7 -14
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +21 -31
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +444 -189
- data/src/core/lib/channel/promise_based_filter.h +160 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression_internal.cc +45 -10
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +12 -2
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
- data/src/core/lib/event_engine/iomgr_engine.h +118 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +8 -4
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +6 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +29 -0
- data/src/core/lib/http/format_request.h +2 -0
- data/src/core/lib/http/httpcli.cc +88 -81
- data/src/core/lib/http/httpcli.h +39 -7
- data/src/core/lib/http/httpcli_security_connector.cc +3 -4
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +6 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/ev_posix.cc +1 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +0 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- data/src/core/lib/iomgr/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
- data/src/core/lib/iomgr/tcp_posix.cc +9 -27
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
- data/src/core/lib/iomgr/tcp_windows.cc +7 -4
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +2 -0
- data/src/core/lib/promise/sleep.h +10 -0
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver_factory.h +1 -2
- data/src/core/lib/resolver/server_address.cc +9 -3
- data/src/core/lib/resolver/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +47 -5
- data/src/core/lib/resource_quota/memory_quota.h +24 -5
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
- data/src/core/lib/security/credentials/credentials.h +17 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
- data/src/core/lib/security/transport/security_handshaker.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +4 -1
- data/src/core/lib/service_config/service_config_impl.cc +7 -0
- data/src/core/lib/service_config/service_config_impl.h +9 -2
- data/src/core/lib/service_config/service_config_parser.cc +8 -0
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +50 -23
- data/src/core/lib/slice/slice_buffer.h +106 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_split.cc +3 -0
- data/src/core/lib/slice/slice_split.h +0 -4
- data/src/core/lib/slice/slice_string_helpers.cc +4 -0
- data/src/core/lib/slice/slice_string_helpers.h +1 -4
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +41 -26
- data/src/core/lib/surface/call.h +16 -2
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +94 -57
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +14 -6
- data/src/core/lib/surface/completion_queue.h +5 -1
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -45
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +64 -110
- data/src/core/lib/surface/lame_client.h +40 -2
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +69 -56
- data/src/core/lib/surface/server.h +39 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -5
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/byte_stream.cc +4 -3
- data/src/core/lib/transport/byte_stream.h +5 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +4 -2
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -17
- data/src/core/lib/transport/transport.h +28 -2
- data/src/core/lib/transport/transport_impl.h +10 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -10
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +2 -2
- data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
- metadata +36 -29
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/promise.h +0 -51
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -21,31 +21,31 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include <
|
24
|
+
#include <stdlib.h>
|
25
25
|
|
26
26
|
#include <cstdint>
|
27
|
-
#include <
|
28
|
-
|
29
|
-
#include
|
30
|
-
|
31
|
-
#include "absl/
|
27
|
+
#include <string>
|
28
|
+
#include <type_traits>
|
29
|
+
#include <utility>
|
30
|
+
|
31
|
+
#include "absl/container/inlined_vector.h"
|
32
|
+
#include "absl/functional/function_ref.h"
|
33
|
+
#include "absl/meta/type_traits.h"
|
34
|
+
#include "absl/strings/numbers.h"
|
35
|
+
#include "absl/strings/string_view.h"
|
32
36
|
#include "absl/types/optional.h"
|
33
37
|
|
34
|
-
#include <grpc/
|
35
|
-
#include <grpc/slice.h>
|
38
|
+
#include <grpc/impl/codegen/compression_types.h>
|
36
39
|
#include <grpc/status.h>
|
37
|
-
#include <grpc/support/
|
40
|
+
#include <grpc/support/log.h>
|
38
41
|
|
39
42
|
#include "src/core/lib/compression/compression_internal.h"
|
40
43
|
#include "src/core/lib/gprpp/chunked_vector.h"
|
41
44
|
#include "src/core/lib/gprpp/table.h"
|
42
|
-
#include "src/core/lib/
|
45
|
+
#include "src/core/lib/gprpp/time.h"
|
46
|
+
#include "src/core/lib/resource_quota/arena.h"
|
43
47
|
#include "src/core/lib/slice/slice.h"
|
44
|
-
#include "src/core/lib/surface/validate_metadata.h"
|
45
48
|
#include "src/core/lib/transport/parsed_metadata.h"
|
46
|
-
#include "src/core/lib/transport/timeout_encoding.h"
|
47
|
-
|
48
|
-
struct grpc_call_final_info;
|
49
49
|
|
50
50
|
namespace grpc_core {
|
51
51
|
|
@@ -61,23 +61,9 @@ struct GrpcTimeoutMetadata {
|
|
61
61
|
using ValueType = Timestamp;
|
62
62
|
using MementoType = Duration;
|
63
63
|
static absl::string_view key() { return "grpc-timeout"; }
|
64
|
-
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error)
|
65
|
-
|
66
|
-
|
67
|
-
on_error("invalid value", value);
|
68
|
-
return Duration::Infinity();
|
69
|
-
}
|
70
|
-
return *timeout;
|
71
|
-
}
|
72
|
-
static ValueType MementoToValue(MementoType timeout) {
|
73
|
-
if (timeout == Duration::Infinity()) {
|
74
|
-
return Timestamp::InfFuture();
|
75
|
-
}
|
76
|
-
return ExecCtx::Get()->Now() + timeout;
|
77
|
-
}
|
78
|
-
static Slice Encode(ValueType x) {
|
79
|
-
return Timeout::FromDuration(x - ExecCtx::Get()->Now()).Encode();
|
80
|
-
}
|
64
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
|
65
|
+
static ValueType MementoToValue(MementoType timeout);
|
66
|
+
static Slice Encode(ValueType x);
|
81
67
|
static std::string DisplayValue(MementoType x) { return x.ToString(); }
|
82
68
|
};
|
83
69
|
|
@@ -93,28 +79,13 @@ struct TeMetadata {
|
|
93
79
|
};
|
94
80
|
using MementoType = ValueType;
|
95
81
|
static absl::string_view key() { return "te"; }
|
96
|
-
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error)
|
97
|
-
auto out = kInvalid;
|
98
|
-
if (value == "trailers") {
|
99
|
-
out = kTrailers;
|
100
|
-
} else {
|
101
|
-
on_error("invalid value", value);
|
102
|
-
}
|
103
|
-
return out;
|
104
|
-
}
|
82
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
|
105
83
|
static ValueType MementoToValue(MementoType te) { return te; }
|
106
84
|
static StaticSlice Encode(ValueType x) {
|
107
85
|
GPR_ASSERT(x == kTrailers);
|
108
86
|
return StaticSlice::FromStaticString("trailers");
|
109
87
|
}
|
110
|
-
static const char* DisplayValue(MementoType te)
|
111
|
-
switch (te) {
|
112
|
-
case ValueType::kTrailers:
|
113
|
-
return "trailers";
|
114
|
-
default:
|
115
|
-
return "<discarded-invalid-value>";
|
116
|
-
}
|
117
|
-
}
|
88
|
+
static const char* DisplayValue(MementoType te);
|
118
89
|
};
|
119
90
|
|
120
91
|
// content-type metadata trait.
|
@@ -130,47 +101,13 @@ struct ContentTypeMetadata {
|
|
130
101
|
};
|
131
102
|
using MementoType = ValueType;
|
132
103
|
static absl::string_view key() { return "content-type"; }
|
133
|
-
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error)
|
134
|
-
auto out = kInvalid;
|
135
|
-
auto value_string = value.as_string_view();
|
136
|
-
if (value_string == "application/grpc") {
|
137
|
-
out = kApplicationGrpc;
|
138
|
-
} else if (absl::StartsWith(value_string, "application/grpc;")) {
|
139
|
-
out = kApplicationGrpc;
|
140
|
-
} else if (absl::StartsWith(value_string, "application/grpc+")) {
|
141
|
-
out = kApplicationGrpc;
|
142
|
-
} else if (value_string.empty()) {
|
143
|
-
out = kEmpty;
|
144
|
-
} else {
|
145
|
-
on_error("invalid value", value);
|
146
|
-
}
|
147
|
-
return out;
|
148
|
-
}
|
104
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
|
149
105
|
static ValueType MementoToValue(MementoType content_type) {
|
150
106
|
return content_type;
|
151
107
|
}
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
return StaticSlice::FromStaticString("");
|
156
|
-
case kApplicationGrpc:
|
157
|
-
return StaticSlice::FromStaticString("application/grpc");
|
158
|
-
case kInvalid:
|
159
|
-
return StaticSlice::FromStaticString("application/grpc+unknown");
|
160
|
-
}
|
161
|
-
GPR_UNREACHABLE_CODE(
|
162
|
-
return StaticSlice::FromStaticString("unrepresentable value"));
|
163
|
-
}
|
164
|
-
static const char* DisplayValue(MementoType content_type) {
|
165
|
-
switch (content_type) {
|
166
|
-
case ValueType::kApplicationGrpc:
|
167
|
-
return "application/grpc";
|
168
|
-
case ValueType::kEmpty:
|
169
|
-
return "";
|
170
|
-
default:
|
171
|
-
return "<discarded-invalid-value>";
|
172
|
-
}
|
173
|
-
}
|
108
|
+
|
109
|
+
static StaticSlice Encode(ValueType x);
|
110
|
+
static const char* DisplayValue(MementoType content_type);
|
174
111
|
};
|
175
112
|
|
176
113
|
// scheme metadata trait.
|
@@ -187,38 +124,12 @@ struct HttpSchemeMetadata {
|
|
187
124
|
return Parse(value.as_string_view(), on_error);
|
188
125
|
}
|
189
126
|
static ValueType Parse(absl::string_view value,
|
190
|
-
MetadataParseErrorFn on_error)
|
191
|
-
if (value == "http") {
|
192
|
-
return kHttp;
|
193
|
-
} else if (value == "https") {
|
194
|
-
return kHttps;
|
195
|
-
}
|
196
|
-
on_error("invalid value", Slice::FromCopiedBuffer(value));
|
197
|
-
return kInvalid;
|
198
|
-
}
|
127
|
+
MetadataParseErrorFn on_error);
|
199
128
|
static ValueType MementoToValue(MementoType content_type) {
|
200
129
|
return content_type;
|
201
130
|
}
|
202
|
-
static StaticSlice Encode(ValueType x)
|
203
|
-
|
204
|
-
case kHttp:
|
205
|
-
return StaticSlice::FromStaticString("http");
|
206
|
-
case kHttps:
|
207
|
-
return StaticSlice::FromStaticString("https");
|
208
|
-
default:
|
209
|
-
abort();
|
210
|
-
}
|
211
|
-
}
|
212
|
-
static const char* DisplayValue(MementoType content_type) {
|
213
|
-
switch (content_type) {
|
214
|
-
case kHttp:
|
215
|
-
return "http";
|
216
|
-
case kHttps:
|
217
|
-
return "https";
|
218
|
-
default:
|
219
|
-
return "<discarded-invalid-value>";
|
220
|
-
}
|
221
|
-
}
|
131
|
+
static StaticSlice Encode(ValueType x);
|
132
|
+
static const char* DisplayValue(MementoType content_type);
|
222
133
|
};
|
223
134
|
|
224
135
|
// method metadata trait.
|
@@ -227,45 +138,17 @@ struct HttpMethodMetadata {
|
|
227
138
|
enum ValueType {
|
228
139
|
kPost,
|
229
140
|
kGet,
|
141
|
+
kPut,
|
230
142
|
kInvalid,
|
231
143
|
};
|
232
144
|
using MementoType = ValueType;
|
233
145
|
static absl::string_view key() { return ":method"; }
|
234
|
-
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error)
|
235
|
-
auto out = kInvalid;
|
236
|
-
auto value_string = value.as_string_view();
|
237
|
-
if (value_string == "POST") {
|
238
|
-
out = kPost;
|
239
|
-
} else if (value_string == "GET") {
|
240
|
-
out = kGet;
|
241
|
-
} else {
|
242
|
-
on_error("invalid value", value);
|
243
|
-
}
|
244
|
-
return out;
|
245
|
-
}
|
146
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
|
246
147
|
static ValueType MementoToValue(MementoType content_type) {
|
247
148
|
return content_type;
|
248
149
|
}
|
249
|
-
static StaticSlice Encode(ValueType x)
|
250
|
-
|
251
|
-
case kPost:
|
252
|
-
return StaticSlice::FromStaticString("POST");
|
253
|
-
case kGet:
|
254
|
-
return StaticSlice::FromStaticString("GET");
|
255
|
-
default:
|
256
|
-
abort();
|
257
|
-
}
|
258
|
-
}
|
259
|
-
static const char* DisplayValue(MementoType content_type) {
|
260
|
-
switch (content_type) {
|
261
|
-
case kPost:
|
262
|
-
return "POST";
|
263
|
-
case kGet:
|
264
|
-
return "GET";
|
265
|
-
default:
|
266
|
-
return "<discarded-invalid-value>";
|
267
|
-
}
|
268
|
-
}
|
150
|
+
static StaticSlice Encode(ValueType x);
|
151
|
+
static const char* DisplayValue(MementoType content_type);
|
269
152
|
};
|
270
153
|
|
271
154
|
// Base type for metadata pertaining to a single compression algorithm
|
@@ -273,14 +156,7 @@ struct HttpMethodMetadata {
|
|
273
156
|
struct CompressionAlgorithmBasedMetadata {
|
274
157
|
using ValueType = grpc_compression_algorithm;
|
275
158
|
using MementoType = ValueType;
|
276
|
-
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error)
|
277
|
-
auto algorithm = ParseCompressionAlgorithm(value.as_string_view());
|
278
|
-
if (!algorithm.has_value()) {
|
279
|
-
on_error("invalid value", value);
|
280
|
-
return GRPC_COMPRESS_NONE;
|
281
|
-
}
|
282
|
-
return *algorithm;
|
283
|
-
}
|
159
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
|
284
160
|
static ValueType MementoToValue(MementoType x) { return x; }
|
285
161
|
static Slice Encode(ValueType x) {
|
286
162
|
GPR_ASSERT(x != GRPC_COMPRESS_ALGORITHMS_COUNT);
|
@@ -318,7 +194,7 @@ struct GrpcAcceptEncodingMetadata {
|
|
318
194
|
}
|
319
195
|
static ValueType MementoToValue(MementoType x) { return x; }
|
320
196
|
static Slice Encode(ValueType x) { return x.ToSlice(); }
|
321
|
-
static
|
197
|
+
static absl::string_view DisplayValue(MementoType x) { return x.ToString(); }
|
322
198
|
};
|
323
199
|
|
324
200
|
struct SimpleSliceBasedMetadata {
|
@@ -352,10 +228,10 @@ struct HostMetadata : public SimpleSliceBasedMetadata {
|
|
352
228
|
static absl::string_view key() { return "host"; }
|
353
229
|
};
|
354
230
|
|
355
|
-
//
|
356
|
-
struct
|
231
|
+
// endpoint-load-metrics-bin metadata trait.
|
232
|
+
struct EndpointLoadMetricsBinMetadata : public SimpleSliceBasedMetadata {
|
357
233
|
static constexpr bool kRepeatable = false;
|
358
|
-
static absl::string_view key() { return "
|
234
|
+
static absl::string_view key() { return "endpoint-load-metrics-bin"; }
|
359
235
|
};
|
360
236
|
|
361
237
|
// grpc-server-stats-bin metadata trait.
|
@@ -388,9 +264,9 @@ struct HttpPathMetadata : public SimpleSliceBasedMetadata {
|
|
388
264
|
static absl::string_view key() { return ":path"; }
|
389
265
|
};
|
390
266
|
|
391
|
-
// We separate SimpleIntBasedMetadata into two pieces: one that does not
|
392
|
-
// on the invalid value, and one that does. This allows the compiler to
|
393
|
-
// see the functions that are shared, and helps reduce code bloat here.
|
267
|
+
// We separate SimpleIntBasedMetadata into two pieces: one that does not
|
268
|
+
// depend on the invalid value, and one that does. This allows the compiler to
|
269
|
+
// easily see the functions that are shared, and helps reduce code bloat here.
|
394
270
|
template <typename Int>
|
395
271
|
struct SimpleIntBasedMetadataBase {
|
396
272
|
using ValueType = Int;
|
@@ -436,14 +312,7 @@ struct GrpcRetryPushbackMsMetadata {
|
|
436
312
|
static ValueType MementoToValue(MementoType x) { return x; }
|
437
313
|
static Slice Encode(Duration x) { return Slice::FromInt64(x.millis()); }
|
438
314
|
static int64_t DisplayValue(Duration x) { return x.millis(); }
|
439
|
-
static Duration ParseMemento(Slice value, MetadataParseErrorFn on_error)
|
440
|
-
int64_t out;
|
441
|
-
if (!absl::SimpleAtoi(value.as_string_view(), &out)) {
|
442
|
-
on_error("not an integer", value);
|
443
|
-
return Duration::NegativeInfinity();
|
444
|
-
}
|
445
|
-
return Duration::Milliseconds(out);
|
446
|
-
}
|
315
|
+
static Duration ParseMemento(Slice value, MetadataParseErrorFn on_error);
|
447
316
|
};
|
448
317
|
|
449
318
|
// :status metadata trait.
|
@@ -456,6 +325,7 @@ struct HttpStatusMetadata : public SimpleIntBasedMetadata<uint32_t, 0> {
|
|
456
325
|
// "secret" metadata trait used to pass load balancing token between filters.
|
457
326
|
// This should not be exposed outside of gRPC core.
|
458
327
|
class GrpcLbClientStats;
|
328
|
+
|
459
329
|
struct GrpcLbClientStatsMetadata {
|
460
330
|
static constexpr bool kRepeatable = false;
|
461
331
|
static absl::string_view key() { return "grpclb_client_stats"; }
|
@@ -485,28 +355,9 @@ struct LbCostBinMetadata {
|
|
485
355
|
};
|
486
356
|
using MementoType = ValueType;
|
487
357
|
static ValueType MementoToValue(MementoType value) { return value; }
|
488
|
-
static Slice Encode(const ValueType& x)
|
489
|
-
|
490
|
-
|
491
|
-
memcpy(slice.data(), &x.cost, sizeof(double));
|
492
|
-
memcpy(slice.data() + sizeof(double), x.name.data(), x.name.length());
|
493
|
-
return Slice(std::move(slice));
|
494
|
-
}
|
495
|
-
static std::string DisplayValue(MementoType x) {
|
496
|
-
return absl::StrCat(x.name, ":", x.cost);
|
497
|
-
}
|
498
|
-
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
|
499
|
-
if (value.length() < sizeof(double)) {
|
500
|
-
on_error("too short", value);
|
501
|
-
return {0, ""};
|
502
|
-
}
|
503
|
-
MementoType out;
|
504
|
-
memcpy(&out.cost, value.data(), sizeof(double));
|
505
|
-
out.name = std::string(
|
506
|
-
reinterpret_cast<const char*>(value.data()) + sizeof(double),
|
507
|
-
value.length() - sizeof(double));
|
508
|
-
return out;
|
509
|
-
}
|
358
|
+
static Slice Encode(const ValueType& x);
|
359
|
+
static std::string DisplayValue(MementoType x);
|
360
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
|
510
361
|
};
|
511
362
|
|
512
363
|
// Annotation added by a transport to note whether a failed request was never
|
@@ -518,14 +369,7 @@ struct GrpcStreamNetworkState {
|
|
518
369
|
kNotSentOnWire,
|
519
370
|
kNotSeenByServer,
|
520
371
|
};
|
521
|
-
static std::string DisplayValue(ValueType x)
|
522
|
-
switch (x) {
|
523
|
-
case kNotSentOnWire:
|
524
|
-
return "not sent on wire";
|
525
|
-
case kNotSeenByServer:
|
526
|
-
return "not seen by server";
|
527
|
-
}
|
528
|
-
}
|
372
|
+
static std::string DisplayValue(ValueType x);
|
529
373
|
};
|
530
374
|
|
531
375
|
// Annotation added by a server transport to note the peer making a request.
|
@@ -533,7 +377,7 @@ struct PeerString {
|
|
533
377
|
static absl::string_view DebugKey() { return "PeerString"; }
|
534
378
|
static constexpr bool kRepeatable = false;
|
535
379
|
using ValueType = absl::string_view;
|
536
|
-
static std::string DisplayValue(ValueType x)
|
380
|
+
static std::string DisplayValue(ValueType x);
|
537
381
|
};
|
538
382
|
|
539
383
|
// Annotation added by various systems to describe the reason for a failure.
|
@@ -541,16 +385,31 @@ struct GrpcStatusContext {
|
|
541
385
|
static absl::string_view DebugKey() { return "GrpcStatusContext"; }
|
542
386
|
static constexpr bool kRepeatable = true;
|
543
387
|
using ValueType = std::string;
|
544
|
-
static const std::string& DisplayValue(const std::string& x)
|
388
|
+
static const std::string& DisplayValue(const std::string& x);
|
545
389
|
};
|
546
390
|
|
547
391
|
namespace metadata_detail {
|
548
392
|
|
549
|
-
//
|
550
|
-
//
|
551
|
-
//
|
552
|
-
|
553
|
-
|
393
|
+
// Build a key/value formatted debug string.
|
394
|
+
// Output looks like 'key1: value1, key2: value2'
|
395
|
+
// The string is expected to be readable, but not necessarily parsable.
|
396
|
+
class DebugStringBuilder {
|
397
|
+
public:
|
398
|
+
// Add one key/value pair to the output.
|
399
|
+
void Add(absl::string_view key, absl::string_view value);
|
400
|
+
|
401
|
+
// Finalize the output and return the string.
|
402
|
+
// Subsequent Add calls are UB.
|
403
|
+
std::string TakeOutput() { return std::move(out_); }
|
404
|
+
|
405
|
+
private:
|
406
|
+
std::string out_;
|
407
|
+
};
|
408
|
+
|
409
|
+
// IsEncodable: Given a trait, determine if that trait is encodable, or is
|
410
|
+
// just a value attached to a MetadataMap. We use the presence of the key()
|
411
|
+
// static method to determine if a trait is encodable or not - encodable
|
412
|
+
// traits have string names, and non-encodable traits do not.
|
554
413
|
template <typename Trait, typename Ignored = void>
|
555
414
|
struct IsEncodableTrait {
|
556
415
|
static const bool value = false;
|
@@ -600,8 +459,8 @@ struct NameLookup<void> {
|
|
600
459
|
};
|
601
460
|
|
602
461
|
// Helper to take a slice to a memento to a value.
|
603
|
-
// By splitting this part out we can scale code size as the number of
|
604
|
-
// value) types, rather than as the number of traits.
|
462
|
+
// By splitting this part out we can scale code size as the number of
|
463
|
+
// (memento, value) types, rather than as the number of traits.
|
605
464
|
template <typename ParseMementoFn, typename MementoToValueFn>
|
606
465
|
struct ParseValue {
|
607
466
|
template <ParseMementoFn parse_memento, MementoToValueFn memento_to_value>
|
@@ -650,8 +509,8 @@ class ParseHelper {
|
|
650
509
|
};
|
651
510
|
|
652
511
|
// This is an "Op" type for NameLookup.
|
653
|
-
// Used for MetadataMap::Append, its Found/NotFound methods turn a slice into
|
654
|
-
// value and add it to a container.
|
512
|
+
// Used for MetadataMap::Append, its Found/NotFound methods turn a slice into
|
513
|
+
// a value and add it to a container.
|
655
514
|
template <typename Container>
|
656
515
|
class AppendHelper {
|
657
516
|
public:
|
@@ -668,7 +527,7 @@ class AppendHelper {
|
|
668
527
|
}
|
669
528
|
|
670
529
|
GPR_ATTRIBUTE_NOINLINE void NotFound(absl::string_view key) {
|
671
|
-
container_->
|
530
|
+
container_->unknown_.Append(key, std::move(value_));
|
672
531
|
}
|
673
532
|
|
674
533
|
private:
|
@@ -691,7 +550,7 @@ class RemoveHelper {
|
|
691
550
|
}
|
692
551
|
|
693
552
|
GPR_ATTRIBUTE_NOINLINE void NotFound(absl::string_view key) {
|
694
|
-
container_->
|
553
|
+
container_->unknown_.Remove(key);
|
695
554
|
}
|
696
555
|
|
697
556
|
private:
|
@@ -699,8 +558,8 @@ class RemoveHelper {
|
|
699
558
|
};
|
700
559
|
|
701
560
|
// This is an "Op" type for NameLookup.
|
702
|
-
// Used for MetadataMap::GetStringValue, its Found/NotFound methods generated
|
703
|
-
// string value from the container.
|
561
|
+
// Used for MetadataMap::GetStringValue, its Found/NotFound methods generated
|
562
|
+
// a string value from the container.
|
704
563
|
template <typename Container>
|
705
564
|
class GetStringValueHelper {
|
706
565
|
public:
|
@@ -750,7 +609,7 @@ class GetStringValueHelper {
|
|
750
609
|
|
751
610
|
GPR_ATTRIBUTE_NOINLINE absl::optional<absl::string_view> NotFound(
|
752
611
|
absl::string_view key) {
|
753
|
-
return container_->
|
612
|
+
return container_->unknown_.GetStringValue(key, backing_);
|
754
613
|
}
|
755
614
|
|
756
615
|
private:
|
@@ -763,7 +622,17 @@ using LogFn = absl::FunctionRef<void(absl::string_view, absl::string_view)>;
|
|
763
622
|
|
764
623
|
template <typename T>
|
765
624
|
struct AdaptDisplayValueToLog {
|
766
|
-
static std::string ToString(const T& value) { return
|
625
|
+
static std::string ToString(const T& value) { return std::to_string(value); }
|
626
|
+
};
|
627
|
+
|
628
|
+
template <>
|
629
|
+
struct AdaptDisplayValueToLog<std::string> {
|
630
|
+
static std::string ToString(const std::string& value) { return value; }
|
631
|
+
};
|
632
|
+
|
633
|
+
template <>
|
634
|
+
struct AdaptDisplayValueToLog<const std::string&> {
|
635
|
+
static std::string ToString(const std::string& value) { return value; }
|
767
636
|
};
|
768
637
|
|
769
638
|
template <>
|
@@ -919,7 +788,7 @@ class CopySink {
|
|
919
788
|
}
|
920
789
|
|
921
790
|
void Encode(const Slice& key, const Slice& value) {
|
922
|
-
dst_->
|
791
|
+
dst_->unknown_.Append(key.as_string_view(), value.Ref());
|
923
792
|
}
|
924
793
|
|
925
794
|
private:
|
@@ -975,6 +844,31 @@ class TransportSizeEncoder {
|
|
975
844
|
uint32_t size_ = 0;
|
976
845
|
};
|
977
846
|
|
847
|
+
// Handle unknown (non-trait-based) fields in the metadata map.
|
848
|
+
class UnknownMap {
|
849
|
+
public:
|
850
|
+
explicit UnknownMap(Arena* arena) : unknown_(arena) {}
|
851
|
+
|
852
|
+
using BackingType = ChunkedVector<std::pair<Slice, Slice>, 10>;
|
853
|
+
|
854
|
+
void Append(absl::string_view key, Slice value);
|
855
|
+
void Remove(absl::string_view key);
|
856
|
+
absl::optional<absl::string_view> GetStringValue(absl::string_view key,
|
857
|
+
std::string* backing) const;
|
858
|
+
|
859
|
+
BackingType::ConstForwardIterator begin() const { return unknown_.cbegin(); }
|
860
|
+
BackingType::ConstForwardIterator end() const { return unknown_.cend(); }
|
861
|
+
|
862
|
+
bool empty() const { return unknown_.empty(); }
|
863
|
+
size_t size() const { return unknown_.size(); }
|
864
|
+
void Clear() { unknown_.Clear(); }
|
865
|
+
Arena* arena() const { return unknown_.arena(); }
|
866
|
+
|
867
|
+
private:
|
868
|
+
// Backing store for added metadata.
|
869
|
+
ChunkedVector<std::pair<Slice, Slice>, 10> unknown_;
|
870
|
+
};
|
871
|
+
|
978
872
|
} // namespace metadata_detail
|
979
873
|
|
980
874
|
// Helper function for encoders
|
@@ -1035,21 +929,23 @@ MetadataValueAsSlice(typename Which::ValueType value) {
|
|
1035
929
|
// // Parse a memento from a slice
|
1036
930
|
// // Takes ownership of value
|
1037
931
|
// // Calls fn in the case of an error that should be reported to the user
|
1038
|
-
// static MementoType ParseMemento(Slice value, MementoParseErrorFn fn) {
|
932
|
+
// static MementoType ParseMemento(Slice value, MementoParseErrorFn fn) {
|
933
|
+
// ...
|
1039
934
|
// }
|
1040
935
|
// // Convert a memento to a value
|
1041
936
|
// static ValueType MementoToValue(MementoType memento) { ... }
|
1042
937
|
// // Convert a value to its canonical text wire format (the format that
|
1043
938
|
// // ParseMemento will accept!)
|
1044
939
|
// static Slice Encode(const ValueType& value);
|
1045
|
-
// // Convert a value to something that can be passed to StrCat and
|
940
|
+
// // Convert a value to something that can be passed to StrCat and
|
941
|
+
// displayed
|
1046
942
|
// // for debugging
|
1047
943
|
// static SomeStrCatableType DisplayValue(MementoType value) { ... }
|
1048
944
|
// };
|
1049
945
|
//
|
1050
|
-
// Non-encodable traits are determined by missing the key() method, and have
|
1051
|
-
// following signature (and by convention omit the Metadata part of the
|
1052
|
-
// name):
|
946
|
+
// Non-encodable traits are determined by missing the key() method, and have
|
947
|
+
// the following signature (and by convention omit the Metadata part of the
|
948
|
+
// type name):
|
1053
949
|
// // Traits for the GrpcXyz field:
|
1054
950
|
// struct GrpcXyz {
|
1055
951
|
// // The string key that should be used for debug dumps - should not be a
|
@@ -1059,7 +955,8 @@ MetadataValueAsSlice(typename Which::ValueType value) {
|
|
1059
955
|
// static constexpr bool kRepeatable = ...;
|
1060
956
|
// // The type that's stored on MetadataBatch
|
1061
957
|
// using ValueType = ...;
|
1062
|
-
// // Convert a value to something that can be passed to StrCat and
|
958
|
+
// // Convert a value to something that can be passed to StrCat and
|
959
|
+
// displayed
|
1063
960
|
// // for debugging
|
1064
961
|
// static SomeStrCatableType DisplayValue(ValueType value) { ... }
|
1065
962
|
// };
|
@@ -1072,10 +969,10 @@ MetadataValueAsSlice(typename Which::ValueType value) {
|
|
1072
969
|
// in the compression table. This is what mementos are used for.
|
1073
970
|
//
|
1074
971
|
// A trait offers the capability to turn a slice into a memento via
|
1075
|
-
// ParseMemento. This is exposed to users of MetadataMap via the Parse()
|
1076
|
-
// that returns a ParsedMetadata object. That ParsedMetadata object
|
1077
|
-
// be used to set the same value on many different MetadataMaps
|
1078
|
-
// to reparse.
|
972
|
+
// ParseMemento. This is exposed to users of MetadataMap via the Parse()
|
973
|
+
// method, that returns a ParsedMetadata object. That ParsedMetadata object
|
974
|
+
// can in turn be used to set the same value on many different MetadataMaps
|
975
|
+
// without having to reparse.
|
1079
976
|
//
|
1080
977
|
// Implementation wise, ParsedMetadata is a type erased wrapper around
|
1081
978
|
// MementoType. When we set a value on MetadataMap, we first turn that memento
|
@@ -1128,12 +1025,11 @@ class MetadataMap {
|
|
1128
1025
|
}
|
1129
1026
|
|
1130
1027
|
std::string DebugString() const {
|
1131
|
-
|
1132
|
-
Log([&
|
1133
|
-
|
1134
|
-
absl::StrAppend(&out, absl::CEscape(key), ": ", absl::CEscape(value));
|
1028
|
+
metadata_detail::DebugStringBuilder builder;
|
1029
|
+
Log([&builder](absl::string_view key, absl::string_view value) {
|
1030
|
+
builder.Add(key, value);
|
1135
1031
|
});
|
1136
|
-
return
|
1032
|
+
return builder.TakeOutput();
|
1137
1033
|
}
|
1138
1034
|
|
1139
1035
|
// Get the pointer to the value of some known metadata.
|
@@ -1280,36 +1176,9 @@ class MetadataMap {
|
|
1280
1176
|
template <typename Which>
|
1281
1177
|
using Value = metadata_detail::Value<Which>;
|
1282
1178
|
|
1283
|
-
void AppendUnknown(absl::string_view key, Slice value) {
|
1284
|
-
unknown_.EmplaceBack(Slice::FromCopiedString(key), value.Ref());
|
1285
|
-
}
|
1286
|
-
|
1287
|
-
void RemoveUnknown(absl::string_view key) {
|
1288
|
-
unknown_.SetEnd(std::remove_if(unknown_.begin(), unknown_.end(),
|
1289
|
-
[key](const std::pair<Slice, Slice>& p) {
|
1290
|
-
return p.first.as_string_view() == key;
|
1291
|
-
}));
|
1292
|
-
}
|
1293
|
-
|
1294
|
-
absl::optional<absl::string_view> GetStringValueUnknown(
|
1295
|
-
absl::string_view key, std::string* backing) const {
|
1296
|
-
absl::optional<absl::string_view> out;
|
1297
|
-
for (const auto& p : unknown_) {
|
1298
|
-
if (p.first.as_string_view() == key) {
|
1299
|
-
if (!out.has_value()) {
|
1300
|
-
out = p.second.as_string_view();
|
1301
|
-
} else {
|
1302
|
-
out = *backing = absl::StrCat(*out, ",", p.second.as_string_view());
|
1303
|
-
}
|
1304
|
-
}
|
1305
|
-
}
|
1306
|
-
return out;
|
1307
|
-
}
|
1308
|
-
|
1309
1179
|
// Table of known metadata types.
|
1310
1180
|
Table<Value<Traits>...> table_;
|
1311
|
-
|
1312
|
-
ChunkedVector<std::pair<Slice, Slice>, 10> unknown_;
|
1181
|
+
metadata_detail::UnknownMap unknown_;
|
1313
1182
|
};
|
1314
1183
|
|
1315
1184
|
// Ok/not-ok check for metadata maps that contain GrpcStatusMetadata, so that
|
@@ -1327,8 +1196,8 @@ template <typename Derived, typename... Traits>
|
|
1327
1196
|
MetadataMap<Derived, Traits...>::MetadataMap(MetadataMap&& other) noexcept
|
1328
1197
|
: table_(std::move(other.table_)), unknown_(std::move(other.unknown_)) {}
|
1329
1198
|
|
1330
|
-
// We never create MetadataMap directly, instead we create Derived, but we
|
1331
|
-
// to be able to move it without redeclaring this.
|
1199
|
+
// We never create MetadataMap directly, instead we create Derived, but we
|
1200
|
+
// want to be able to move it without redeclaring this.
|
1332
1201
|
// NOLINTNEXTLINE(misc-unconventional-assign-operator)
|
1333
1202
|
template <typename Derived, typename... Traits>
|
1334
1203
|
Derived& MetadataMap<Derived, Traits...>::operator=(
|
@@ -1379,7 +1248,7 @@ using grpc_metadata_batch_base = grpc_core::MetadataMap<
|
|
1379
1248
|
grpc_core::GrpcTimeoutMetadata, grpc_core::GrpcPreviousRpcAttemptsMetadata,
|
1380
1249
|
grpc_core::GrpcRetryPushbackMsMetadata, grpc_core::UserAgentMetadata,
|
1381
1250
|
grpc_core::GrpcMessageMetadata, grpc_core::HostMetadata,
|
1382
|
-
grpc_core::
|
1251
|
+
grpc_core::EndpointLoadMetricsBinMetadata,
|
1383
1252
|
grpc_core::GrpcServerStatsBinMetadata, grpc_core::GrpcTraceBinMetadata,
|
1384
1253
|
grpc_core::GrpcTagsBinMetadata, grpc_core::GrpcLbClientStatsMetadata,
|
1385
1254
|
grpc_core::LbCostBinMetadata, grpc_core::LbTokenMetadata,
|