grpc 1.41.1 → 1.44.0.pre2
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 +185 -102
- data/include/grpc/event_engine/event_engine.h +118 -54
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
- data/include/grpc/event_engine/memory_allocator.h +226 -0
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/grpc_security.h +304 -145
- data/include/grpc/grpc_security_constants.h +2 -14
- data/include/grpc/impl/codegen/compression_types.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +6 -0
- data/include/grpc/impl/codegen/port_platform.h +14 -3
- data/src/core/ext/filters/client_channel/backend_metric.cc +21 -23
- data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
- data/src/core/ext/filters/client_channel/client_channel.cc +305 -335
- data/src/core/ext/filters/client_channel/client_channel.h +84 -36
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -15
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +5 -6
- data/src/core/ext/filters/client_channel/connector.h +18 -18
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +5 -5
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +25 -22
- data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +13 -15
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +5 -18
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +198 -116
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +66 -36
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +21 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +124 -74
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2514 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +68 -62
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +18 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -96
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +101 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +11 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +101 -209
- data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
- data/src/core/ext/filters/client_channel/lb_policy.h +105 -63
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +220 -88
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +31 -50
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +124 -240
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +38 -25
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +90 -77
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -11
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +7 -16
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +423 -396
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
- data/src/core/ext/filters/client_channel/retry_filter.cc +66 -131
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
- data/src/core/ext/filters/client_channel/subchannel.cc +99 -161
- data/src/core/ext/filters/client_channel/subchannel.h +31 -52
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +42 -53
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -9
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +70 -160
- data/src/core/ext/filters/http/client_authority_filter.cc +19 -36
- data/src/core/ext/filters/http/http_filters_plugin.cc +51 -71
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +46 -139
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
- data/src/core/ext/filters/http/server/http_server_filter.cc +84 -183
- data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
- data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +270 -0
- data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → filters/server_config_selector/server_config_selector_filter.h} +9 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -23
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +26 -28
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +11 -14
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +33 -53
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +146 -113
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +9 -13
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -278
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -2
- data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -23
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +384 -218
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +89 -143
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +201 -202
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -9
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +106 -26
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +29 -44
- data/src/core/ext/transport/chttp2/transport/internal.h +10 -38
- data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -179
- data/src/core/ext/transport/chttp2/transport/writing.cc +65 -127
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +114 -161
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +197 -165
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +18 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +26 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +107 -82
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +188 -160
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +35 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +277 -208
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +141 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +36 -25
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +56 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +171 -125
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +55 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +51 -36
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +114 -90
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +90 -71
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +17 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +121 -92
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +13 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +18 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +22 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +41 -27
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +59 -44
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +58 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +73 -57
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +81 -64
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +25 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +19 -7
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +63 -45
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +66 -47
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +99 -78
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +19 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +41 -28
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +508 -442
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +51 -19
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +13 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +35 -20
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +44 -31
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +22 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +210 -181
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +5 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +64 -48
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +33 -20
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +81 -65
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +75 -58
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +61 -46
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +26 -12
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +22 -10
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +27 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +20 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +30 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +38 -21
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +41 -26
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +17 -5
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +20 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +7 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +116 -93
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +102 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +306 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +56 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +135 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +122 -98
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +115 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +371 -0
- data/src/core/ext/upb-generated/google/api/http.upb.c +35 -22
- data/src/core/ext/upb-generated/google/api/http.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +247 -210
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +12 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +37 -23
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +37 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +2 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +17 -6
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +26 -14
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +105 -83
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +20 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +16 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +65 -47
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -36
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +68 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +156 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +67 -7
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +27 -5
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +19 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +27 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +26 -2
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +320 -251
- data/src/core/ext/upb-generated/validate/validate.upb.h +20 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +103 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +199 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +14 -3
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +25 -13
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +20 -8
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +19 -8
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +28 -16
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +19 -8
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +71 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +132 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +44 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +85 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +2 -49
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +2 -35
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +2 -41
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +307 -336
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +100 -138
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +2 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +61 -77
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +61 -79
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +80 -99
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +2 -21
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +2 -23
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +325 -427
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +2 -43
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +2 -59
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +2 -23
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +7 -15
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +21 -30
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +7 -10
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +7 -11
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +15 -19
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +27 -33
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +18 -24
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +35 -41
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +21 -25
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/upb_utils.h +65 -0
- data/src/core/ext/xds/xds_api.cc +159 -3468
- data/src/core/ext/xds/xds_api.h +57 -558
- data/src/core/ext/xds/xds_bootstrap.cc +189 -122
- data/src/core/ext/xds/xds_bootstrap.h +30 -15
- data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
- data/src/core/ext/xds/xds_certificate_provider.h +2 -2
- data/src/core/ext/xds/xds_channel_creds.cc +108 -0
- data/src/core/ext/xds/xds_channel_creds.h +50 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +112 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +751 -844
- data/src/core/ext/xds/xds_client.h +100 -143
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_cluster.cc +451 -0
- data/src/core/ext/xds/xds_cluster.h +111 -0
- data/src/core/ext/xds/xds_common_types.cc +388 -0
- data/src/core/ext/xds/xds_common_types.h +110 -0
- data/src/core/ext/xds/xds_endpoint.cc +364 -0
- data/src/core/ext/xds/xds_endpoint.h +135 -0
- data/src/core/ext/xds/xds_http_filters.cc +5 -0
- data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
- data/src/core/ext/xds/xds_listener.cc +1036 -0
- data/src/core/ext/xds/xds_listener.h +220 -0
- data/src/core/ext/{filters/workarounds/workaround_cronet_compression_filter.h → xds/xds_resource_type.cc} +14 -8
- data/src/core/ext/xds/xds_resource_type.h +98 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
- data/src/core/ext/xds/xds_route_config.cc +993 -0
- data/src/core/ext/xds/xds_route_config.h +215 -0
- data/src/core/ext/xds/xds_routing.cc +250 -0
- data/src/core/ext/xds/xds_routing.h +101 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +1061 -289
- data/src/core/lib/address_utils/parse_address.cc +22 -0
- data/src/core/lib/address_utils/parse_address.h +5 -0
- data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
- data/src/core/lib/avl/avl.h +389 -88
- data/src/core/lib/backoff/backoff.cc +6 -32
- data/src/core/lib/backoff/backoff.h +3 -3
- data/src/core/lib/channel/channel_args.cc +25 -8
- data/src/core/lib/channel/channel_args.h +11 -1
- data/src/core/lib/channel/channel_args_preconditioning.cc +47 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
- data/src/core/lib/channel/channel_stack.cc +8 -0
- data/src/core/lib/channel/channel_stack.h +1 -1
- data/src/core/lib/channel/channel_stack_builder.cc +8 -14
- data/src/core/lib/channel/channel_stack_builder.h +4 -7
- data/src/core/lib/channel/channel_trace.cc +7 -7
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +4 -3
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/channelz_registry.cc +1 -1
- data/src/core/lib/channel/channelz_registry.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +1 -3
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/compression/compression.cc +21 -113
- data/src/core/lib/compression/compression_internal.cc +142 -202
- data/src/core/lib/compression/compression_internal.h +64 -69
- data/src/core/lib/compression/message_compress.cc +11 -11
- data/src/core/lib/compression/message_compress.h +2 -2
- data/src/core/lib/config/core_configuration.cc +46 -2
- data/src/core/lib/config/core_configuration.h +50 -1
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats_data.cc +13 -13
- data/src/core/lib/debug/trace.h +2 -2
- data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
- data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
- data/src/core/lib/event_engine/event_engine.cc +0 -13
- data/src/core/lib/event_engine/event_engine_factory.cc +49 -0
- data/src/core/lib/event_engine/event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/memory_allocator.cc +70 -0
- data/src/core/lib/gpr/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/string.cc +2 -2
- data/src/core/lib/gpr/tls.h +7 -1
- data/src/core/lib/gpr/useful.h +83 -32
- data/src/core/lib/gprpp/bitset.h +45 -16
- data/src/core/lib/gprpp/chunked_vector.h +253 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -1
- data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
- data/src/core/lib/gprpp/global_config_env.cc +7 -7
- data/src/core/lib/gprpp/global_config_env.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +2 -3
- data/src/core/lib/gprpp/memory.h +6 -0
- data/src/core/lib/gprpp/orphanable.h +1 -1
- data/src/core/lib/gprpp/ref_counted.h +1 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
- data/src/core/lib/gprpp/status_helper.cc +35 -23
- data/src/core/lib/gprpp/status_helper.h +14 -16
- data/src/core/lib/gprpp/table.h +434 -0
- data/src/core/lib/http/httpcli.cc +215 -202
- data/src/core/lib/http/httpcli.h +17 -27
- data/src/core/lib/http/parser.cc +2 -2
- data/src/core/lib/iomgr/buffer_list.cc +9 -9
- data/src/core/lib/iomgr/buffer_list.h +13 -13
- data/src/core/lib/iomgr/call_combiner.cc +44 -16
- data/src/core/lib/iomgr/closure.h +29 -9
- data/src/core/lib/iomgr/combiner.cc +31 -24
- data/src/core/lib/iomgr/endpoint.h +0 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +14 -30
- data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
- data/src/core/lib/iomgr/error.cc +115 -52
- data/src/core/lib/iomgr/error.h +53 -9
- data/src/core/lib/iomgr/error_cfstream.cc +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
- data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
- data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
- data/src/core/lib/iomgr/event_engine/closure.h +10 -1
- data/src/core/lib/iomgr/event_engine/endpoint.cc +5 -6
- data/src/core/lib/iomgr/event_engine/iomgr.cc +9 -28
- data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +68 -46
- data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +16 -13
- data/src/core/lib/iomgr/event_engine/timer.cc +10 -4
- data/src/core/lib/iomgr/exec_ctx.cc +23 -18
- data/src/core/lib/iomgr/exec_ctx.h +11 -11
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
- data/src/core/lib/iomgr/executor.cc +26 -34
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +3 -2
- data/src/core/lib/iomgr/iomgr.cc +3 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
- data/src/core/lib/iomgr/iomgr_internal.h +3 -2
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
- data/src/core/lib/iomgr/load_file.cc +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +18 -0
- data/src/core/lib/iomgr/pollset_custom.cc +1 -1
- data/src/core/lib/iomgr/pollset_custom.h +1 -1
- data/src/core/lib/iomgr/port.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +5 -24
- data/src/core/lib/iomgr/resolve_address.h +47 -44
- data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
- data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +87 -73
- data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
- data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_mutator.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
- data/src/core/lib/iomgr/tcp_client.cc +2 -4
- data/src/core/lib/iomgr/tcp_client.h +1 -3
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -12
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -11
- data/src/core/lib/iomgr/tcp_client_posix.cc +16 -41
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +3 -13
- data/src/core/lib/iomgr/tcp_custom.cc +9 -36
- data/src/core/lib/iomgr/tcp_custom.h +0 -1
- data/src/core/lib/iomgr/tcp_posix.cc +32 -38
- data/src/core/lib/iomgr/tcp_posix.h +1 -3
- data/src/core/lib/iomgr/tcp_server.cc +4 -6
- data/src/core/lib/iomgr/tcp_server.h +6 -8
- data/src/core/lib/iomgr/tcp_server_custom.cc +7 -16
- data/src/core/lib/iomgr/tcp_server_posix.cc +20 -25
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +9 -17
- data/src/core/lib/iomgr/tcp_windows.cc +4 -9
- data/src/core/lib/iomgr/tcp_windows.h +1 -2
- data/src/core/lib/iomgr/timer_generic.cc +13 -13
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
- data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
- data/src/core/lib/iomgr/work_serializer.cc +115 -44
- data/src/core/lib/iomgr/work_serializer.h +16 -4
- data/src/core/lib/json/json_reader.cc +83 -35
- data/src/core/lib/json/json_util.cc +69 -1
- data/src/core/lib/json/json_util.h +57 -99
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/matchers/matchers.cc +1 -1
- data/src/core/lib/promise/activity.cc +115 -0
- data/src/core/lib/promise/activity.h +528 -0
- data/src/core/lib/promise/context.h +86 -0
- data/src/core/lib/promise/detail/basic_seq.h +407 -0
- data/src/core/lib/promise/detail/promise_factory.h +189 -0
- data/src/core/lib/promise/detail/promise_like.h +85 -0
- data/src/core/lib/promise/detail/status.h +49 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
- data/src/core/lib/promise/loop.h +108 -0
- data/src/core/lib/promise/map.h +88 -0
- data/src/core/lib/promise/poll.h +60 -0
- data/src/core/lib/promise/race.h +84 -0
- data/src/core/lib/promise/seq.h +71 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +12 -5
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +15 -17
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +5 -7
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +5 -5
- data/src/core/lib/resource_quota/api.cc +108 -0
- data/src/core/lib/resource_quota/api.h +40 -0
- data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
- data/src/core/lib/{gprpp → resource_quota}/arena.h +32 -11
- data/src/core/lib/resource_quota/memory_quota.cc +454 -0
- data/src/core/lib/resource_quota/memory_quota.h +421 -0
- data/src/core/lib/resource_quota/resource_quota.cc +33 -0
- data/src/core/lib/resource_quota/resource_quota.h +58 -0
- data/src/core/lib/{transport/authority_override.h → resource_quota/thread_quota.cc} +22 -16
- data/src/core/lib/resource_quota/thread_quota.h +57 -0
- data/src/core/lib/resource_quota/trace.cc +19 -0
- data/src/core/lib/resource_quota/trace.h +24 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +41 -30
- data/src/core/lib/security/authorization/evaluate_args.h +3 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
- data/src/core/lib/security/authorization/matchers.cc +227 -0
- data/src/core/lib/security/authorization/matchers.h +211 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
- data/src/core/lib/security/authorization/rbac_policy.h +170 -0
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +15 -1
- data/src/core/lib/security/context/security_context.cc +8 -4
- data/src/core/lib/security/context/security_context.h +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +6 -6
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
- data/src/core/lib/security/credentials/credentials.cc +4 -2
- data/src/core/lib/security/credentials/credentials.h +16 -21
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +8 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +57 -24
- data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -7
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -4
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
- data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -9
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
- data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +17 -29
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -24
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +53 -70
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -9
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +15 -88
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +26 -82
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
- data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +5 -6
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +7 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -1
- data/src/core/lib/security/security_connector/security_connector.cc +9 -8
- data/src/core/lib/security/security_connector/security_connector.h +6 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +25 -27
- data/src/core/lib/security/security_connector/ssl_utils.h +6 -15
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +347 -198
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -43
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
- data/src/core/lib/security/transport/security_handshaker.cc +75 -45
- data/src/core/lib/security/transport/server_auth_filter.cc +40 -37
- data/src/core/lib/security/transport/tsi_error.cc +3 -5
- data/src/core/{ext/filters/client_channel → lib/service_config}/service_config.cc +2 -2
- data/src/core/{ext/filters/client_channel → lib/service_config}/service_config.h +4 -4
- data/src/core/lib/service_config/service_config_call_data.h +72 -0
- data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.cc +3 -3
- data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.h +8 -6
- data/src/core/lib/slice/percent_encoding.cc +30 -86
- data/src/core/lib/slice/percent_encoding.h +5 -11
- data/src/core/lib/slice/slice.cc +10 -24
- data/src/core/lib/slice/slice.h +371 -0
- data/src/core/lib/{compression/stream_compression_gzip.h → slice/slice_api.cc} +18 -7
- data/src/core/lib/slice/slice_buffer.cc +9 -5
- data/src/core/lib/slice/slice_intern.cc +4 -107
- data/src/core/lib/slice/slice_internal.h +2 -246
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +116 -0
- data/src/core/lib/slice/slice_refcount_base.h +165 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/lib/surface/builtins.h +26 -0
- data/src/core/lib/surface/call.cc +249 -482
- data/src/core/lib/surface/call.h +4 -10
- data/src/core/lib/surface/channel.cc +53 -93
- data/src/core/lib/surface/channel.h +6 -25
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/completion_queue.cc +8 -7
- data/src/core/lib/surface/init.cc +0 -42
- data/src/core/lib/surface/init_secure.cc +17 -14
- data/src/core/lib/surface/lame_client.cc +41 -28
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +46 -55
- data/src/core/lib/surface/server.h +27 -21
- data/src/core/lib/surface/validate_metadata.cc +7 -4
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/byte_stream.cc +4 -0
- data/src/core/lib/transport/error_utils.cc +42 -17
- data/src/core/lib/transport/error_utils.h +15 -1
- data/src/core/lib/transport/metadata_batch.h +1167 -176
- data/src/core/lib/transport/{authority_override.cc → parsed_metadata.cc} +14 -17
- data/src/core/lib/transport/parsed_metadata.h +385 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/timeout_encoding.cc +200 -66
- data/src/core/lib/transport/timeout_encoding.h +40 -10
- data/src/core/lib/transport/transport.cc +8 -31
- data/src/core/lib/transport/transport.h +1 -2
- data/src/core/lib/transport/transport_op_string.cc +7 -20
- data/src/core/lib/uri/uri_parser.cc +233 -63
- data/src/core/lib/uri/uri_parser.h +38 -23
- data/src/core/plugin_registry/grpc_plugin_registry.cc +69 -45
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
- data/src/core/tsi/fake_transport_security.cc +15 -7
- data/src/core/tsi/local_transport_security.cc +43 -80
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
- data/src/core/tsi/ssl_transport_security.cc +93 -16
- data/src/core/tsi/ssl_transport_security.h +19 -6
- data/src/core/tsi/transport_security.cc +12 -0
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_interface.h +26 -0
- data/src/ruby/ext/grpc/extconf.rb +21 -11
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -10
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -15
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
- data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
- data/third_party/abseil-cpp/absl/base/config.h +67 -37
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +15 -10
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
- data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
- data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
- data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
- data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
- data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
- data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
- data/third_party/abseil-cpp/absl/random/random.h +189 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
- data/third_party/abseil-cpp/absl/status/status.cc +9 -17
- data/third_party/abseil-cpp/absl/status/status.h +19 -15
- data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
- data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
- data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
- data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
- data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
- data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
- data/third_party/abseil-cpp/absl/time/time.h +67 -36
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
- data/third_party/abseil-cpp/absl/types/span.h +3 -3
- data/third_party/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +681 -677
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1019 -274
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +31 -13
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +491 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- data/third_party/upb/upb/decode.c +309 -178
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/decode_internal.h +1 -0
- data/third_party/upb/upb/def.c +330 -85
- data/third_party/upb/upb/def.h +45 -14
- data/third_party/upb/upb/def.hpp +17 -4
- data/third_party/upb/upb/encode.c +100 -40
- data/third_party/upb/upb/msg.c +22 -9
- data/third_party/upb/upb/msg_internal.h +90 -8
- data/third_party/upb/upb/reflection.c +98 -58
- data/third_party/upb/upb/reflection.h +6 -2
- data/third_party/upb/upb/text_encode.c +3 -3
- data/third_party/upb/upb/upb.c +8 -0
- data/third_party/xxhash/xxhash.h +607 -352
- metadata +259 -115
- data/include/grpc/event_engine/slice_allocator.h +0 -71
- data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
- data/src/core/lib/avl/avl.cc +0 -306
- data/src/core/lib/compression/algorithm_metadata.h +0 -62
- data/src/core/lib/compression/compression_args.cc +0 -136
- data/src/core/lib/compression/compression_args.h +0 -56
- data/src/core/lib/compression/stream_compression.cc +0 -81
- data/src/core/lib/compression/stream_compression.h +0 -117
- data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
- data/src/core/lib/compression/stream_compression_identity.cc +0 -91
- data/src/core/lib/compression/stream_compression_identity.h +0 -29
- data/src/core/lib/gprpp/match.h +0 -73
- data/src/core/lib/gprpp/overload.h +0 -59
- data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
- data/src/core/lib/iomgr/resource_quota.cc +0 -1104
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- data/src/core/lib/iomgr/udp_server.cc +0 -747
- data/src/core/lib/iomgr/udp_server.h +0 -103
- data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
- data/src/core/lib/transport/metadata.cc +0 -693
- data/src/core/lib/transport/metadata.h +0 -448
- data/src/core/lib/transport/metadata_batch.cc +0 -430
- data/src/core/lib/transport/static_metadata.cc +0 -1249
- data/src/core/lib/transport/static_metadata.h +0 -604
- data/src/core/lib/transport/status_metadata.cc +0 -62
- data/src/core/lib/transport/status_metadata.h +0 -48
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
@@ -23,199 +23,1190 @@
|
|
23
23
|
|
24
24
|
#include <stdbool.h>
|
25
25
|
|
26
|
+
#include <limits>
|
27
|
+
|
28
|
+
#include "absl/strings/match.h"
|
29
|
+
#include "absl/strings/str_join.h"
|
26
30
|
#include "absl/types/optional.h"
|
27
31
|
|
28
32
|
#include <grpc/grpc.h>
|
29
33
|
#include <grpc/slice.h>
|
34
|
+
#include <grpc/status.h>
|
30
35
|
#include <grpc/support/time.h>
|
31
36
|
|
37
|
+
#include "src/core/lib/compression/compression_internal.h"
|
38
|
+
#include "src/core/lib/gprpp/chunked_vector.h"
|
39
|
+
#include "src/core/lib/gprpp/table.h"
|
32
40
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
33
|
-
#include "src/core/lib/
|
34
|
-
#include "src/core/lib/
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
41
|
+
#include "src/core/lib/slice/slice.h"
|
42
|
+
#include "src/core/lib/surface/validate_metadata.h"
|
43
|
+
#include "src/core/lib/transport/parsed_metadata.h"
|
44
|
+
#include "src/core/lib/transport/timeout_encoding.h"
|
45
|
+
|
46
|
+
namespace grpc_core {
|
47
|
+
|
48
|
+
// grpc-timeout metadata trait.
|
49
|
+
// ValueType is defined as grpc_millis - an absolute timestamp (i.e. a
|
50
|
+
// deadline!), that is converted to a duration by transports before being
|
51
|
+
// sent.
|
52
|
+
// TODO(ctiller): Move this elsewhere. During the transition we need to be able
|
53
|
+
// to name this in MetadataMap, but ultimately once the transition is done we
|
54
|
+
// should not need to.
|
55
|
+
struct GrpcTimeoutMetadata {
|
56
|
+
static constexpr bool kRepeatable = false;
|
57
|
+
using ValueType = grpc_millis;
|
58
|
+
using MementoType = grpc_millis;
|
59
|
+
static absl::string_view key() { return "grpc-timeout"; }
|
60
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
|
61
|
+
auto timeout = ParseTimeout(value);
|
62
|
+
if (!timeout.has_value()) {
|
63
|
+
on_error("invalid value", value);
|
64
|
+
return GRPC_MILLIS_INF_FUTURE;
|
65
|
+
}
|
66
|
+
return *timeout;
|
67
|
+
}
|
68
|
+
static ValueType MementoToValue(MementoType timeout) {
|
69
|
+
if (timeout == GRPC_MILLIS_INF_FUTURE) {
|
70
|
+
return GRPC_MILLIS_INF_FUTURE;
|
71
|
+
}
|
72
|
+
return ExecCtx::Get()->Now() + timeout;
|
73
|
+
}
|
74
|
+
static Slice Encode(ValueType x) {
|
75
|
+
return Timeout::FromDuration(x - ExecCtx::Get()->Now()).Encode();
|
76
|
+
}
|
77
|
+
static MementoType DisplayValue(MementoType x) { return x; }
|
78
|
+
};
|
79
|
+
|
80
|
+
// TE metadata trait.
|
81
|
+
struct TeMetadata {
|
82
|
+
static constexpr bool kRepeatable = false;
|
83
|
+
// HTTP2 says that TE can either be empty or "trailers".
|
84
|
+
// Empty means this trait is not included, "trailers" means kTrailers, and
|
85
|
+
// kInvalid is used to remember an invalid value.
|
86
|
+
enum ValueType : uint8_t {
|
87
|
+
kTrailers,
|
88
|
+
kInvalid,
|
89
|
+
};
|
90
|
+
using MementoType = ValueType;
|
91
|
+
static absl::string_view key() { return "te"; }
|
92
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
|
93
|
+
auto out = kInvalid;
|
94
|
+
if (value == "trailers") {
|
95
|
+
out = kTrailers;
|
96
|
+
} else {
|
97
|
+
on_error("invalid value", value);
|
98
|
+
}
|
99
|
+
return out;
|
100
|
+
}
|
101
|
+
static ValueType MementoToValue(MementoType te) { return te; }
|
102
|
+
static StaticSlice Encode(ValueType x) {
|
103
|
+
GPR_ASSERT(x == kTrailers);
|
104
|
+
return StaticSlice::FromStaticString("trailers");
|
105
|
+
}
|
106
|
+
static const char* DisplayValue(MementoType te) {
|
107
|
+
switch (te) {
|
108
|
+
case ValueType::kTrailers:
|
109
|
+
return "trailers";
|
110
|
+
default:
|
111
|
+
return "<discarded-invalid-value>";
|
112
|
+
}
|
113
|
+
}
|
114
|
+
};
|
115
|
+
|
116
|
+
// content-type metadata trait.
|
117
|
+
struct ContentTypeMetadata {
|
118
|
+
static constexpr bool kRepeatable = false;
|
119
|
+
// gRPC says that content-type can be application/grpc[;something]
|
120
|
+
// Core has only ever verified the prefix.
|
121
|
+
// IF we want to start verifying more, we can expand this type.
|
122
|
+
enum ValueType {
|
123
|
+
kApplicationGrpc,
|
124
|
+
kEmpty,
|
125
|
+
kInvalid,
|
126
|
+
};
|
127
|
+
using MementoType = ValueType;
|
128
|
+
static absl::string_view key() { return "content-type"; }
|
129
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
|
130
|
+
auto out = kInvalid;
|
131
|
+
auto value_string = value.as_string_view();
|
132
|
+
if (value_string == "application/grpc") {
|
133
|
+
out = kApplicationGrpc;
|
134
|
+
} else if (absl::StartsWith(value_string, "application/grpc;")) {
|
135
|
+
out = kApplicationGrpc;
|
136
|
+
} else if (absl::StartsWith(value_string, "application/grpc+")) {
|
137
|
+
out = kApplicationGrpc;
|
138
|
+
} else if (value_string.empty()) {
|
139
|
+
out = kEmpty;
|
140
|
+
} else {
|
141
|
+
on_error("invalid value", value);
|
142
|
+
}
|
143
|
+
return out;
|
144
|
+
}
|
145
|
+
static ValueType MementoToValue(MementoType content_type) {
|
146
|
+
return content_type;
|
147
|
+
}
|
148
|
+
static StaticSlice Encode(ValueType x) {
|
149
|
+
switch (x) {
|
150
|
+
case kEmpty:
|
151
|
+
return StaticSlice::FromStaticString("");
|
152
|
+
case kApplicationGrpc:
|
153
|
+
return StaticSlice::FromStaticString("application/grpc");
|
154
|
+
case kInvalid:
|
155
|
+
abort();
|
156
|
+
}
|
157
|
+
GPR_UNREACHABLE_CODE(
|
158
|
+
return StaticSlice::FromStaticString("unrepresentable value"));
|
159
|
+
}
|
160
|
+
static const char* DisplayValue(MementoType content_type) {
|
161
|
+
switch (content_type) {
|
162
|
+
case ValueType::kApplicationGrpc:
|
163
|
+
return "application/grpc";
|
164
|
+
case ValueType::kEmpty:
|
165
|
+
return "";
|
166
|
+
default:
|
167
|
+
return "<discarded-invalid-value>";
|
168
|
+
}
|
169
|
+
}
|
170
|
+
};
|
171
|
+
|
172
|
+
// scheme metadata trait.
|
173
|
+
struct HttpSchemeMetadata {
|
174
|
+
static constexpr bool kRepeatable = false;
|
175
|
+
enum ValueType {
|
176
|
+
kHttp,
|
177
|
+
kHttps,
|
178
|
+
kInvalid,
|
179
|
+
};
|
180
|
+
using MementoType = ValueType;
|
181
|
+
static absl::string_view key() { return ":scheme"; }
|
182
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
|
183
|
+
return Parse(value.as_string_view(), on_error);
|
184
|
+
}
|
185
|
+
static ValueType Parse(absl::string_view value,
|
186
|
+
MetadataParseErrorFn on_error) {
|
187
|
+
if (value == "http") {
|
188
|
+
return kHttp;
|
189
|
+
} else if (value == "https") {
|
190
|
+
return kHttps;
|
191
|
+
}
|
192
|
+
on_error("invalid value", Slice::FromCopiedBuffer(value));
|
193
|
+
return kInvalid;
|
194
|
+
}
|
195
|
+
static ValueType MementoToValue(MementoType content_type) {
|
196
|
+
return content_type;
|
197
|
+
}
|
198
|
+
static StaticSlice Encode(ValueType x) {
|
199
|
+
switch (x) {
|
200
|
+
case kHttp:
|
201
|
+
return StaticSlice::FromStaticString("http");
|
202
|
+
case kHttps:
|
203
|
+
return StaticSlice::FromStaticString("https");
|
204
|
+
default:
|
205
|
+
abort();
|
206
|
+
}
|
207
|
+
}
|
208
|
+
static const char* DisplayValue(MementoType content_type) {
|
209
|
+
switch (content_type) {
|
210
|
+
case kHttp:
|
211
|
+
return "http";
|
212
|
+
case kHttps:
|
213
|
+
return "https";
|
214
|
+
default:
|
215
|
+
return "<discarded-invalid-value>";
|
216
|
+
}
|
217
|
+
}
|
218
|
+
};
|
219
|
+
|
220
|
+
// method metadata trait.
|
221
|
+
struct HttpMethodMetadata {
|
222
|
+
static constexpr bool kRepeatable = false;
|
223
|
+
enum ValueType {
|
224
|
+
kPost,
|
225
|
+
kPut,
|
226
|
+
kGet,
|
227
|
+
kInvalid,
|
228
|
+
};
|
229
|
+
using MementoType = ValueType;
|
230
|
+
static absl::string_view key() { return ":method"; }
|
231
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
|
232
|
+
auto out = kInvalid;
|
233
|
+
auto value_string = value.as_string_view();
|
234
|
+
if (value_string == "POST") {
|
235
|
+
out = kPost;
|
236
|
+
} else if (value_string == "PUT") {
|
237
|
+
out = kPut;
|
238
|
+
} else if (value_string == "GET") {
|
239
|
+
out = kGet;
|
240
|
+
} else {
|
241
|
+
on_error("invalid value", value);
|
242
|
+
}
|
243
|
+
return out;
|
244
|
+
}
|
245
|
+
static ValueType MementoToValue(MementoType content_type) {
|
246
|
+
return content_type;
|
247
|
+
}
|
248
|
+
static StaticSlice Encode(ValueType x) {
|
249
|
+
switch (x) {
|
250
|
+
case kPost:
|
251
|
+
return StaticSlice::FromStaticString("POST");
|
252
|
+
case kPut:
|
253
|
+
return StaticSlice::FromStaticString("PUT");
|
254
|
+
case kGet:
|
255
|
+
return StaticSlice::FromStaticString("GET");
|
256
|
+
default:
|
257
|
+
abort();
|
258
|
+
}
|
259
|
+
}
|
260
|
+
static const char* DisplayValue(MementoType content_type) {
|
261
|
+
switch (content_type) {
|
262
|
+
case kPost:
|
263
|
+
return "POST";
|
264
|
+
case kPut:
|
265
|
+
return "PUT";
|
266
|
+
case kGet:
|
267
|
+
return "GET";
|
268
|
+
default:
|
269
|
+
return "<discarded-invalid-value>";
|
270
|
+
}
|
271
|
+
}
|
272
|
+
};
|
273
|
+
|
274
|
+
// Base type for metadata pertaining to a single compression algorithm
|
275
|
+
// (e.g., "grpc-encoding").
|
276
|
+
struct CompressionAlgorithmBasedMetadata {
|
277
|
+
using ValueType = grpc_compression_algorithm;
|
278
|
+
using MementoType = ValueType;
|
279
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
|
280
|
+
auto algorithm = ParseCompressionAlgorithm(value.as_string_view());
|
281
|
+
if (!algorithm.has_value()) {
|
282
|
+
on_error("invalid value", value);
|
283
|
+
return GRPC_COMPRESS_NONE;
|
284
|
+
}
|
285
|
+
return *algorithm;
|
286
|
+
}
|
287
|
+
static ValueType MementoToValue(MementoType x) { return x; }
|
288
|
+
static Slice Encode(ValueType x) {
|
289
|
+
GPR_ASSERT(x != GRPC_COMPRESS_ALGORITHMS_COUNT);
|
290
|
+
return Slice::FromStaticString(CompressionAlgorithmAsString(x));
|
291
|
+
}
|
292
|
+
static const char* DisplayValue(MementoType x) {
|
293
|
+
if (const char* p = CompressionAlgorithmAsString(x)) {
|
294
|
+
return p;
|
295
|
+
} else {
|
296
|
+
return "<discarded-invalid-value>";
|
297
|
+
}
|
298
|
+
}
|
299
|
+
};
|
300
|
+
|
301
|
+
// grpc-encoding metadata trait.
|
302
|
+
struct GrpcEncodingMetadata : public CompressionAlgorithmBasedMetadata {
|
303
|
+
static constexpr bool kRepeatable = false;
|
304
|
+
static absl::string_view key() { return "grpc-encoding"; }
|
305
|
+
};
|
306
|
+
|
307
|
+
// grpc-internal-encoding-request metadata trait.
|
308
|
+
struct GrpcInternalEncodingRequest : public CompressionAlgorithmBasedMetadata {
|
309
|
+
static constexpr bool kRepeatable = false;
|
310
|
+
static absl::string_view key() { return "grpc-internal-encoding-request"; }
|
311
|
+
};
|
312
|
+
|
313
|
+
// grpc-accept-encoding metadata trait.
|
314
|
+
struct GrpcAcceptEncodingMetadata {
|
315
|
+
static constexpr bool kRepeatable = false;
|
316
|
+
static absl::string_view key() { return "grpc-accept-encoding"; }
|
317
|
+
using ValueType = CompressionAlgorithmSet;
|
318
|
+
using MementoType = ValueType;
|
319
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn) {
|
320
|
+
return CompressionAlgorithmSet::FromString(value.as_string_view());
|
321
|
+
}
|
322
|
+
static ValueType MementoToValue(MementoType x) { return x; }
|
323
|
+
static Slice Encode(ValueType x) { return x.ToSlice(); }
|
324
|
+
static std::string DisplayValue(MementoType x) { return x.ToString(); }
|
325
|
+
};
|
326
|
+
|
327
|
+
struct SimpleSliceBasedMetadata {
|
328
|
+
using ValueType = Slice;
|
329
|
+
using MementoType = Slice;
|
330
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn) {
|
331
|
+
return value.TakeOwned();
|
332
|
+
}
|
333
|
+
static ValueType MementoToValue(MementoType value) { return value; }
|
334
|
+
static Slice Encode(const ValueType& x) { return x.Ref(); }
|
335
|
+
static absl::string_view DisplayValue(const MementoType& value) {
|
336
|
+
return value.as_string_view();
|
337
|
+
}
|
338
|
+
};
|
339
|
+
|
340
|
+
// user-agent metadata trait.
|
341
|
+
struct UserAgentMetadata : public SimpleSliceBasedMetadata {
|
342
|
+
static constexpr bool kRepeatable = false;
|
343
|
+
static absl::string_view key() { return "user-agent"; }
|
344
|
+
};
|
345
|
+
|
346
|
+
// grpc-message metadata trait.
|
347
|
+
struct GrpcMessageMetadata : public SimpleSliceBasedMetadata {
|
348
|
+
static constexpr bool kRepeatable = false;
|
349
|
+
static absl::string_view key() { return "grpc-message"; }
|
350
|
+
};
|
351
|
+
|
352
|
+
// host metadata trait.
|
353
|
+
struct HostMetadata : public SimpleSliceBasedMetadata {
|
354
|
+
static constexpr bool kRepeatable = false;
|
355
|
+
static absl::string_view key() { return "host"; }
|
356
|
+
};
|
357
|
+
|
358
|
+
// x-endpoint-load-metrics-bin metadata trait.
|
359
|
+
struct XEndpointLoadMetricsBinMetadata : public SimpleSliceBasedMetadata {
|
360
|
+
static constexpr bool kRepeatable = false;
|
361
|
+
static absl::string_view key() { return "x-endpoint-load-metrics-bin"; }
|
362
|
+
};
|
363
|
+
|
364
|
+
// grpc-server-stats-bin metadata trait.
|
365
|
+
struct GrpcServerStatsBinMetadata : public SimpleSliceBasedMetadata {
|
366
|
+
static constexpr bool kRepeatable = false;
|
367
|
+
static absl::string_view key() { return "grpc-server-stats-bin"; }
|
368
|
+
};
|
369
|
+
|
370
|
+
// grpc-trace-bin metadata trait.
|
371
|
+
struct GrpcTraceBinMetadata : public SimpleSliceBasedMetadata {
|
372
|
+
static constexpr bool kRepeatable = false;
|
373
|
+
static absl::string_view key() { return "grpc-trace-bin"; }
|
374
|
+
};
|
375
|
+
|
376
|
+
// grpc-tags-bin metadata trait.
|
377
|
+
struct GrpcTagsBinMetadata : public SimpleSliceBasedMetadata {
|
378
|
+
static constexpr bool kRepeatable = false;
|
379
|
+
static absl::string_view key() { return "grpc-tags-bin"; }
|
380
|
+
};
|
381
|
+
|
382
|
+
// :authority metadata trait.
|
383
|
+
struct HttpAuthorityMetadata : public SimpleSliceBasedMetadata {
|
384
|
+
static constexpr bool kRepeatable = false;
|
385
|
+
static absl::string_view key() { return ":authority"; }
|
386
|
+
};
|
387
|
+
|
388
|
+
// :path metadata trait.
|
389
|
+
struct HttpPathMetadata : public SimpleSliceBasedMetadata {
|
390
|
+
static constexpr bool kRepeatable = false;
|
391
|
+
static absl::string_view key() { return ":path"; }
|
392
|
+
};
|
393
|
+
|
394
|
+
// We separate SimpleIntBasedMetadata into two pieces: one that does not depend
|
395
|
+
// on the invalid value, and one that does. This allows the compiler to easily
|
396
|
+
// see the functions that are shared, and helps reduce code bloat here.
|
397
|
+
template <typename Int>
|
398
|
+
struct SimpleIntBasedMetadataBase {
|
399
|
+
using ValueType = Int;
|
400
|
+
using MementoType = Int;
|
401
|
+
static ValueType MementoToValue(MementoType value) { return value; }
|
402
|
+
static Slice Encode(ValueType x) { return Slice::FromInt64(x); }
|
403
|
+
static Int DisplayValue(MementoType x) { return x; }
|
404
|
+
};
|
405
|
+
|
406
|
+
template <typename Int, Int kInvalidValue>
|
407
|
+
struct SimpleIntBasedMetadata : public SimpleIntBasedMetadataBase<Int> {
|
408
|
+
static constexpr Int invalid_value() { return kInvalidValue; }
|
409
|
+
static Int ParseMemento(Slice value, MetadataParseErrorFn on_error) {
|
410
|
+
Int out;
|
411
|
+
if (!absl::SimpleAtoi(value.as_string_view(), &out)) {
|
412
|
+
on_error("not an integer", value);
|
413
|
+
out = kInvalidValue;
|
414
|
+
}
|
415
|
+
return out;
|
416
|
+
}
|
417
|
+
};
|
418
|
+
|
419
|
+
// grpc-status metadata trait.
|
420
|
+
struct GrpcStatusMetadata
|
421
|
+
: public SimpleIntBasedMetadata<grpc_status_code, GRPC_STATUS_UNKNOWN> {
|
422
|
+
static constexpr bool kRepeatable = false;
|
423
|
+
static absl::string_view key() { return "grpc-status"; }
|
424
|
+
};
|
425
|
+
|
426
|
+
// grpc-previous-rpc-attempts metadata trait.
|
427
|
+
struct GrpcPreviousRpcAttemptsMetadata
|
428
|
+
: public SimpleIntBasedMetadata<uint32_t, 0> {
|
429
|
+
static constexpr bool kRepeatable = false;
|
430
|
+
static absl::string_view key() { return "grpc-previous-rpc-attempts"; }
|
431
|
+
};
|
432
|
+
|
433
|
+
// grpc-retry-pushback-ms metadata trait.
|
434
|
+
struct GrpcRetryPushbackMsMetadata
|
435
|
+
: public SimpleIntBasedMetadata<grpc_millis, GRPC_MILLIS_INF_PAST> {
|
436
|
+
static constexpr bool kRepeatable = false;
|
437
|
+
static absl::string_view key() { return "grpc-retry-pushback-ms"; }
|
438
|
+
};
|
439
|
+
|
440
|
+
// :status metadata trait.
|
441
|
+
// TODO(ctiller): consider moving to uint16_t
|
442
|
+
struct HttpStatusMetadata : public SimpleIntBasedMetadata<uint32_t, 0> {
|
443
|
+
static constexpr bool kRepeatable = false;
|
444
|
+
static absl::string_view key() { return ":status"; }
|
445
|
+
};
|
446
|
+
|
447
|
+
// "secret" metadata trait used to pass load balancing token between filters.
|
448
|
+
// This should not be exposed outside of gRPC core.
|
449
|
+
class GrpcLbClientStats;
|
450
|
+
struct GrpcLbClientStatsMetadata {
|
451
|
+
static constexpr bool kRepeatable = false;
|
452
|
+
static absl::string_view key() { return "grpclb_client_stats"; }
|
453
|
+
using ValueType = GrpcLbClientStats*;
|
454
|
+
using MementoType = ValueType;
|
455
|
+
static ValueType MementoToValue(MementoType value) { return value; }
|
456
|
+
static Slice Encode(ValueType) { abort(); }
|
457
|
+
static const char* DisplayValue(MementoType) { return "<internal-lb-stats>"; }
|
458
|
+
static MementoType ParseMemento(Slice, MetadataParseErrorFn) {
|
459
|
+
return nullptr;
|
460
|
+
}
|
461
|
+
};
|
462
|
+
|
463
|
+
// lb-token metadata
|
464
|
+
struct LbTokenMetadata : public SimpleSliceBasedMetadata {
|
465
|
+
static constexpr bool kRepeatable = false;
|
466
|
+
static absl::string_view key() { return "lb-token"; }
|
467
|
+
};
|
468
|
+
|
469
|
+
// lb-cost-bin metadata
|
470
|
+
struct LbCostBinMetadata {
|
471
|
+
static constexpr bool kRepeatable = true;
|
472
|
+
static absl::string_view key() { return "lb-cost-bin"; }
|
473
|
+
struct ValueType {
|
474
|
+
double cost;
|
475
|
+
std::string name;
|
476
|
+
};
|
477
|
+
using MementoType = ValueType;
|
478
|
+
static ValueType MementoToValue(MementoType value) { return value; }
|
479
|
+
static Slice Encode(const ValueType& x) {
|
480
|
+
auto slice =
|
481
|
+
MutableSlice::CreateUninitialized(sizeof(double) + x.name.length());
|
482
|
+
memcpy(slice.data(), &x.cost, sizeof(double));
|
483
|
+
memcpy(slice.data() + sizeof(double), x.name.data(), x.name.length());
|
484
|
+
return Slice(std::move(slice));
|
485
|
+
}
|
486
|
+
static std::string DisplayValue(MementoType x) {
|
487
|
+
return absl::StrCat(x.name, ":", x.cost);
|
488
|
+
}
|
489
|
+
static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
|
490
|
+
if (value.length() < sizeof(double)) {
|
491
|
+
on_error("too short", value);
|
492
|
+
return {0, ""};
|
493
|
+
}
|
494
|
+
MementoType out;
|
495
|
+
memcpy(&out.cost, value.data(), sizeof(double));
|
496
|
+
out.name = std::string(
|
497
|
+
reinterpret_cast<const char*>(value.data()) + sizeof(double),
|
498
|
+
value.length() - sizeof(double));
|
499
|
+
return out;
|
500
|
+
}
|
501
|
+
};
|
502
|
+
|
503
|
+
namespace metadata_detail {
|
504
|
+
|
505
|
+
// Helper type - maps a string name to a trait.
|
506
|
+
template <typename... Traits>
|
507
|
+
struct NameLookup;
|
508
|
+
|
509
|
+
template <typename Trait, typename... Traits>
|
510
|
+
struct NameLookup<Trait, Traits...> {
|
511
|
+
// Call op->Found(Trait()) if op->name == Trait::key() for some Trait in
|
512
|
+
// Traits. If not found, call op->NotFound().
|
513
|
+
template <typename Op>
|
514
|
+
static auto Lookup(absl::string_view key, Op* op)
|
515
|
+
-> decltype(op->Found(Trait())) {
|
516
|
+
if (key == Trait::key()) {
|
517
|
+
return op->Found(Trait());
|
518
|
+
}
|
519
|
+
return NameLookup<Traits...>::Lookup(key, op);
|
520
|
+
}
|
521
|
+
};
|
522
|
+
|
523
|
+
template <>
|
524
|
+
struct NameLookup<> {
|
525
|
+
template <typename Op>
|
526
|
+
static auto Lookup(absl::string_view key, Op* op)
|
527
|
+
-> decltype(op->NotFound(key)) {
|
528
|
+
return op->NotFound(key);
|
529
|
+
}
|
530
|
+
};
|
531
|
+
|
532
|
+
// Helper to take a slice to a memento to a value.
|
533
|
+
// By splitting this part out we can scale code size as the number of (memento,
|
534
|
+
// value) types, rather than as the number of traits.
|
535
|
+
template <typename ParseMementoFn, typename MementoToValueFn>
|
536
|
+
struct ParseValue {
|
537
|
+
template <ParseMementoFn parse_memento, MementoToValueFn memento_to_value>
|
538
|
+
static GPR_ATTRIBUTE_NOINLINE auto Parse(Slice* value,
|
539
|
+
MetadataParseErrorFn on_error)
|
540
|
+
-> decltype(memento_to_value(parse_memento(std::move(*value),
|
541
|
+
on_error))) {
|
542
|
+
return memento_to_value(parse_memento(std::move(*value), on_error));
|
543
|
+
}
|
544
|
+
};
|
545
|
+
|
546
|
+
// This is an "Op" type for NameLookup.
|
547
|
+
// Used for MetadataMap::Parse, its Found/NotFound methods turn a slice into a
|
548
|
+
// ParsedMetadata object.
|
549
|
+
template <typename Container>
|
550
|
+
class ParseHelper {
|
551
|
+
public:
|
552
|
+
ParseHelper(Slice value, MetadataParseErrorFn on_error, size_t transport_size)
|
553
|
+
: value_(std::move(value)),
|
554
|
+
on_error_(on_error),
|
555
|
+
transport_size_(transport_size) {}
|
556
|
+
|
557
|
+
template <typename Trait>
|
558
|
+
GPR_ATTRIBUTE_NOINLINE ParsedMetadata<Container> Found(Trait trait) {
|
559
|
+
return ParsedMetadata<Container>(
|
560
|
+
trait,
|
561
|
+
ParseValueToMemento<typename Trait::MementoType, Trait::ParseMemento>(),
|
562
|
+
transport_size_);
|
563
|
+
}
|
564
|
+
|
565
|
+
GPR_ATTRIBUTE_NOINLINE ParsedMetadata<Container> NotFound(
|
566
|
+
absl::string_view key) {
|
567
|
+
return ParsedMetadata<Container>(Slice::FromCopiedString(key),
|
568
|
+
std::move(value_));
|
569
|
+
}
|
570
|
+
|
571
|
+
private:
|
572
|
+
template <typename T, T (*parse_memento)(Slice, MetadataParseErrorFn)>
|
573
|
+
GPR_ATTRIBUTE_NOINLINE T ParseValueToMemento() {
|
574
|
+
return parse_memento(std::move(value_), on_error_);
|
575
|
+
}
|
576
|
+
|
577
|
+
Slice value_;
|
578
|
+
MetadataParseErrorFn on_error_;
|
579
|
+
const size_t transport_size_;
|
580
|
+
};
|
581
|
+
|
582
|
+
// This is an "Op" type for NameLookup.
|
583
|
+
// Used for MetadataMap::Append, its Found/NotFound methods turn a slice into a
|
584
|
+
// value and add it to a container.
|
585
|
+
template <typename Container>
|
586
|
+
class AppendHelper {
|
587
|
+
public:
|
588
|
+
AppendHelper(Container* container, Slice value, MetadataParseErrorFn on_error)
|
589
|
+
: container_(container), value_(std::move(value)), on_error_(on_error) {}
|
590
|
+
|
591
|
+
template <typename Trait>
|
592
|
+
GPR_ATTRIBUTE_NOINLINE void Found(Trait trait) {
|
593
|
+
container_->Set(
|
594
|
+
trait, ParseValue<decltype(Trait::ParseMemento),
|
595
|
+
decltype(Trait::MementoToValue)>::
|
596
|
+
template Parse<Trait::ParseMemento, Trait::MementoToValue>(
|
597
|
+
&value_, on_error_));
|
598
|
+
}
|
60
599
|
|
600
|
+
GPR_ATTRIBUTE_NOINLINE void NotFound(absl::string_view key) {
|
601
|
+
container_->AppendUnknown(key, std::move(value_));
|
602
|
+
}
|
603
|
+
|
604
|
+
private:
|
605
|
+
Container* const container_;
|
606
|
+
Slice value_;
|
607
|
+
MetadataParseErrorFn on_error_;
|
608
|
+
};
|
609
|
+
|
610
|
+
// This is an "Op" type for NameLookup.
|
611
|
+
// Used for MetadataMap::Remove, its Found/NotFound methods remove a key from
|
612
|
+
// the container.
|
613
|
+
template <typename Container>
|
614
|
+
class RemoveHelper {
|
615
|
+
public:
|
616
|
+
explicit RemoveHelper(Container* container) : container_(container) {}
|
617
|
+
|
618
|
+
template <typename Trait>
|
619
|
+
GPR_ATTRIBUTE_NOINLINE void Found(Trait trait) {
|
620
|
+
container_->Remove(trait);
|
621
|
+
}
|
622
|
+
|
623
|
+
GPR_ATTRIBUTE_NOINLINE void NotFound(absl::string_view key) {
|
624
|
+
container_->RemoveUnknown(key);
|
625
|
+
}
|
626
|
+
|
627
|
+
private:
|
628
|
+
Container* const container_;
|
629
|
+
};
|
630
|
+
|
631
|
+
// This is an "Op" type for NameLookup.
|
632
|
+
// Used for MetadataMap::GetStringValue, its Found/NotFound methods generated a
|
633
|
+
// string value from the container.
|
634
|
+
template <typename Container>
|
635
|
+
class GetStringValueHelper {
|
636
|
+
public:
|
637
|
+
explicit GetStringValueHelper(const Container* container,
|
638
|
+
std::string* backing)
|
639
|
+
: container_(container), backing_(backing) {}
|
640
|
+
|
641
|
+
template <typename Trait>
|
642
|
+
GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
|
643
|
+
Trait::kRepeatable == false &&
|
644
|
+
std::is_same<Slice, typename Trait::ValueType>::value,
|
645
|
+
absl::optional<absl::string_view>>
|
646
|
+
Found(Trait) {
|
647
|
+
const auto* value = container_->get_pointer(Trait());
|
648
|
+
if (value == nullptr) return absl::nullopt;
|
649
|
+
return value->as_string_view();
|
650
|
+
}
|
651
|
+
|
652
|
+
template <typename Trait>
|
653
|
+
GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
|
654
|
+
Trait::kRepeatable == true &&
|
655
|
+
!std::is_same<Slice, typename Trait::ValueType>::value,
|
656
|
+
absl::optional<absl::string_view>>
|
657
|
+
Found(Trait) {
|
658
|
+
const auto* value = container_->get_pointer(Trait());
|
659
|
+
if (value == nullptr) return absl::nullopt;
|
660
|
+
backing_->clear();
|
661
|
+
for (const auto& v : *value) {
|
662
|
+
if (!backing_->empty()) backing_->push_back(',');
|
663
|
+
auto new_segment = Trait::Encode(v);
|
664
|
+
backing_->append(new_segment.begin(), new_segment.end());
|
665
|
+
}
|
666
|
+
return *backing_;
|
667
|
+
}
|
668
|
+
|
669
|
+
template <typename Trait>
|
670
|
+
GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
|
671
|
+
Trait::kRepeatable == false &&
|
672
|
+
!std::is_same<Slice, typename Trait::ValueType>::value,
|
673
|
+
absl::optional<absl::string_view>>
|
674
|
+
Found(Trait) {
|
675
|
+
const auto* value = container_->get_pointer(Trait());
|
676
|
+
if (value == nullptr) return absl::nullopt;
|
677
|
+
*backing_ = std::string(Trait::Encode(*value).as_string_view());
|
678
|
+
return *backing_;
|
679
|
+
}
|
680
|
+
|
681
|
+
GPR_ATTRIBUTE_NOINLINE absl::optional<absl::string_view> NotFound(
|
682
|
+
absl::string_view key) {
|
683
|
+
return container_->GetStringValueUnknown(key, backing_);
|
684
|
+
}
|
685
|
+
|
686
|
+
private:
|
687
|
+
const Container* const container_;
|
688
|
+
std::string* backing_;
|
689
|
+
};
|
690
|
+
|
691
|
+
// Generate a strong type for metadata values per trait.
|
692
|
+
template <typename Which, typename Ignored = void>
|
693
|
+
struct Value;
|
694
|
+
|
695
|
+
template <typename Which>
|
696
|
+
struct Value<Which, absl::enable_if_t<Which::kRepeatable == false, void>> {
|
697
|
+
Value() = default;
|
698
|
+
explicit Value(const typename Which::ValueType& value) : value(value) {}
|
699
|
+
explicit Value(typename Which::ValueType&& value)
|
700
|
+
: value(std::forward<typename Which::ValueType>(value)) {}
|
701
|
+
Value(const Value&) = delete;
|
702
|
+
Value& operator=(const Value&) = delete;
|
703
|
+
Value(Value&&) noexcept = default;
|
704
|
+
Value& operator=(Value&& other) noexcept {
|
705
|
+
value = std::move(other.value);
|
706
|
+
return *this;
|
707
|
+
}
|
708
|
+
template <typename Encoder>
|
709
|
+
void EncodeTo(Encoder* encoder) const {
|
710
|
+
encoder->Encode(Which(), value);
|
711
|
+
}
|
712
|
+
using StorageType = typename Which::ValueType;
|
713
|
+
GPR_NO_UNIQUE_ADDRESS StorageType value;
|
714
|
+
};
|
715
|
+
|
716
|
+
template <typename Which>
|
717
|
+
struct Value<Which, absl::enable_if_t<Which::kRepeatable == true, void>> {
|
718
|
+
Value() = default;
|
719
|
+
explicit Value(const typename Which::ValueType& value) {
|
720
|
+
this->value.push_back(value);
|
721
|
+
}
|
722
|
+
explicit Value(typename Which::ValueType&& value) {
|
723
|
+
this->value.emplace_back(std::forward<typename Which::ValueType>(value));
|
724
|
+
}
|
725
|
+
Value(const Value&) = delete;
|
726
|
+
Value& operator=(const Value&) = delete;
|
727
|
+
Value(Value&& other) noexcept : value(std::move(other.value)) {}
|
728
|
+
Value& operator=(Value&& other) noexcept {
|
729
|
+
value = std::move(other.value);
|
730
|
+
return *this;
|
731
|
+
}
|
732
|
+
template <typename Encoder>
|
733
|
+
void EncodeTo(Encoder* encoder) const {
|
734
|
+
for (const auto& v : value) {
|
735
|
+
encoder->Encode(Which(), v);
|
736
|
+
}
|
737
|
+
}
|
738
|
+
using StorageType = absl::InlinedVector<typename Which::ValueType, 1>;
|
739
|
+
StorageType value;
|
740
|
+
};
|
741
|
+
|
742
|
+
// Encoder to copy some metadata
|
743
|
+
template <typename Output>
|
744
|
+
class CopySink {
|
745
|
+
public:
|
746
|
+
explicit CopySink(Output* dst) : dst_(dst) {}
|
747
|
+
|
748
|
+
template <class T, class V>
|
749
|
+
void Encode(T trait, V value) {
|
750
|
+
dst_->Set(trait, value);
|
751
|
+
}
|
752
|
+
|
753
|
+
template <class T>
|
754
|
+
void Encode(T trait, const Slice& value) {
|
755
|
+
dst_->Set(trait, std::move(value.AsOwned()));
|
756
|
+
}
|
757
|
+
|
758
|
+
void Encode(const Slice& key, const Slice& value) {
|
759
|
+
dst_->AppendUnknown(key.as_string_view(), value.Ref());
|
760
|
+
}
|
761
|
+
|
762
|
+
private:
|
763
|
+
Output* dst_;
|
764
|
+
};
|
765
|
+
|
766
|
+
} // namespace metadata_detail
|
767
|
+
|
768
|
+
// Helper function for encoders
|
769
|
+
// Given a metadata trait, convert the value to a slice.
|
770
|
+
template <typename Which>
|
771
|
+
absl::enable_if_t<std::is_same<typename Which::ValueType, Slice>::value,
|
772
|
+
const Slice&>
|
773
|
+
MetadataValueAsSlice(const Slice& slice) {
|
774
|
+
return slice;
|
775
|
+
}
|
776
|
+
|
777
|
+
template <typename Which>
|
778
|
+
absl::enable_if_t<!std::is_same<typename Which::ValueType, Slice>::value, Slice>
|
779
|
+
MetadataValueAsSlice(typename Which::ValueType value) {
|
780
|
+
return Slice(Which::Encode(value));
|
781
|
+
}
|
782
|
+
|
783
|
+
// MetadataMap encodes the mapping of metadata keys to metadata values.
|
784
|
+
//
|
785
|
+
// MetadataMap takes a derived class and list of traits. Each of these trait
|
786
|
+
// objects defines one metadata field that is used by core, and so should have
|
787
|
+
// more specialized handling than just using the generic APIs.
|
788
|
+
//
|
789
|
+
// MetadataMap is the backing type for some derived type via the curiously
|
790
|
+
// recursive template pattern. This is because many types consumed by
|
791
|
+
// MetadataMap require the container type to operate on, and many of those
|
792
|
+
// types are instantiated one per trait. A naive implementation without the
|
793
|
+
// Derived type would, for traits A,B,C, then instantiate for some
|
794
|
+
// T<Container, Trait>:
|
795
|
+
// - T<MetadataMap<A,B,C>, A>,
|
796
|
+
// - T<MetadataMap<A,B,C>, B>,
|
797
|
+
// - T<MetadataMap<A,B,C>, C>.
|
798
|
+
// Since these types ultimately need to be recorded in the .dynstr segment
|
799
|
+
// for dynamic linkers (if gRPC is linked as a static library) this would
|
800
|
+
// create O(N^2) bytes of symbols even in stripped libraries. To avoid this
|
801
|
+
// we use the derived type (e.g. grpc_metadata_batch right now) to capture
|
802
|
+
// the container type, and we would write T<grpc_metadata_batch, A>, etc...
|
803
|
+
// Note that now the container type uses a number of bytes that is independent
|
804
|
+
// of the number of traits, and so we return to a linear symbol table growth
|
805
|
+
// function.
|
806
|
+
//
|
807
|
+
// Each trait object has the following signature:
|
808
|
+
// // Traits for the grpc-xyz metadata field:
|
809
|
+
// struct GrpcXyzMetadata {
|
810
|
+
// // The type that's stored on MetadataBatch
|
811
|
+
// using ValueType = ...;
|
812
|
+
// // Can this metadata field be repeated?
|
813
|
+
// static constexpr bool kRepeatable = ...;
|
814
|
+
// // The type that's stored in compression/decompression tables
|
815
|
+
// using MementoType = ...;
|
816
|
+
// // The string key for this metadata type (for transports that require it)
|
817
|
+
// static absl::string_view key() { return "grpc-xyz"; }
|
818
|
+
// // Parse a memento from a slice
|
819
|
+
// // Takes ownership of value
|
820
|
+
// // Calls fn in the case of an error that should be reported to the user
|
821
|
+
// static MementoType ParseMemento(Slice value, MementoParseErrorFn fn) { ...
|
822
|
+
// }
|
823
|
+
// // Convert a memento to a value
|
824
|
+
// static ValueType MementoToValue(MementoType memento) { ... }
|
825
|
+
// // Convert a value to its canonical text wire format (the format that
|
826
|
+
// // ParseMemento will accept!)
|
827
|
+
// static Slice Encode(const ValueType& value);
|
828
|
+
// // Convert a value to something that can be passed to StrCat and displayed
|
829
|
+
// // for debugging
|
830
|
+
// static SomeStrCatableType DisplayValue(MementoType value) { ... }
|
831
|
+
// };
|
832
|
+
//
|
833
|
+
// About parsing and mementos:
|
834
|
+
//
|
835
|
+
// Many gRPC transports exchange metadata as key/value strings, but also allow
|
836
|
+
// for a more efficient representation as a single integer. We can use this
|
837
|
+
// integer representation to avoid reparsing too, by storing the parsed value
|
838
|
+
// in the compression table. This is what mementos are used for.
|
839
|
+
//
|
840
|
+
// A trait offers the capability to turn a slice into a memento via
|
841
|
+
// ParseMemento. This is exposed to users of MetadataMap via the Parse() method,
|
842
|
+
// that returns a ParsedMetadata object. That ParsedMetadata object can in turn
|
843
|
+
// be used to set the same value on many different MetadataMaps without having
|
844
|
+
// to reparse.
|
845
|
+
//
|
846
|
+
// Implementation wise, ParsedMetadata is a type erased wrapper around
|
847
|
+
// MementoType. When we set a value on MetadataMap, we first turn that memento
|
848
|
+
// into a value. For most types, this is going to be a no-op, but for example
|
849
|
+
// for grpc-timeout we make the memento the timeout expressed on the wire, but
|
850
|
+
// we make the value the timestamp of when the timeout will expire (i.e. the
|
851
|
+
// deadline).
|
852
|
+
template <class Derived, typename... Traits>
|
853
|
+
class MetadataMap {
|
854
|
+
public:
|
855
|
+
explicit MetadataMap(Arena* arena);
|
856
|
+
~MetadataMap();
|
857
|
+
|
858
|
+
MetadataMap(const MetadataMap&) = delete;
|
859
|
+
MetadataMap& operator=(const MetadataMap&) = delete;
|
860
|
+
MetadataMap(MetadataMap&&) noexcept;
|
861
|
+
// We never create MetadataMap directly, instead we create Derived, but we
|
862
|
+
// want to be able to move it without redeclaring this.
|
863
|
+
// NOLINTNEXTLINE(misc-unconventional-assign-operator)
|
864
|
+
Derived& operator=(MetadataMap&&) noexcept;
|
865
|
+
|
866
|
+
// Encode this metadata map into some encoder.
|
867
|
+
// For each field that is set in the MetadataMap, call
|
868
|
+
// encoder->Encode.
|
869
|
+
//
|
870
|
+
// For fields for which we have traits, this will be a method with
|
871
|
+
// the signature:
|
872
|
+
// void Encode(TraitsType, typename TraitsType::ValueType value);
|
873
|
+
// For fields for which we do not have traits, this will be a method
|
874
|
+
// with the signature:
|
875
|
+
// void Encode(grpc_mdelem md);
|
876
|
+
// TODO(ctiller): It's expected that the latter Encode method will
|
877
|
+
// become Encode(Slice, Slice) by the end of the current metadata API
|
878
|
+
// transitions.
|
61
879
|
template <typename Encoder>
|
62
880
|
void Encode(Encoder* encoder) const {
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
}
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
void
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
//
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
881
|
+
table_.ForEach(EncodeWrapper<Encoder>{encoder});
|
882
|
+
for (const auto& unk : unknown_) {
|
883
|
+
encoder->Encode(unk.first, unk.second);
|
884
|
+
}
|
885
|
+
}
|
886
|
+
|
887
|
+
// Similar to Encode, but targeted at logging: for each metadatum,
|
888
|
+
// call f(key, value) as absl::string_views.
|
889
|
+
void Log(absl::FunctionRef<void(absl::string_view, absl::string_view)> log_fn)
|
890
|
+
const;
|
891
|
+
|
892
|
+
// Get the pointer to the value of some known metadata.
|
893
|
+
// Returns nullptr if the metadata is not present.
|
894
|
+
// Causes a compilation error if Which is not an element of Traits.
|
895
|
+
template <typename Which>
|
896
|
+
const typename metadata_detail::Value<Which>::StorageType* get_pointer(
|
897
|
+
Which) const {
|
898
|
+
if (auto* p = table_.template get<Value<Which>>()) return &p->value;
|
899
|
+
return nullptr;
|
900
|
+
}
|
901
|
+
|
902
|
+
// Get the pointer to the value of some known metadata.
|
903
|
+
// Returns nullptr if the metadata is not present.
|
904
|
+
// Causes a compilation error if Which is not an element of Traits.
|
905
|
+
template <typename Which>
|
906
|
+
typename metadata_detail::Value<Which>::StorageType* get_pointer(Which) {
|
907
|
+
if (auto* p = table_.template get<Value<Which>>()) return &p->value;
|
908
|
+
return nullptr;
|
909
|
+
}
|
910
|
+
|
911
|
+
// Get the pointer to the value of some known metadata.
|
912
|
+
// Adds the default value for the metadata is not present.
|
913
|
+
// Causes a compilation error if Which is not an element of Traits.
|
914
|
+
template <typename Which>
|
915
|
+
typename metadata_detail::Value<Which>::StorageType* GetOrCreatePointer(
|
916
|
+
Which) {
|
917
|
+
return &table_.template get_or_create<Value<Which>>()->value;
|
918
|
+
}
|
919
|
+
|
920
|
+
// Get the value of some known metadata.
|
921
|
+
// Returns nullopt if the metadata is not present.
|
922
|
+
// Causes a compilation error if Which is not an element of Traits.
|
923
|
+
template <typename Which>
|
924
|
+
absl::optional<typename Which::ValueType> get(Which) const {
|
925
|
+
if (auto* p = table_.template get<Value<Which>>()) return p->value;
|
926
|
+
return absl::nullopt;
|
927
|
+
}
|
928
|
+
|
929
|
+
// Set the value of some known metadata.
|
930
|
+
// Returns a pointer to the new value.
|
931
|
+
template <typename Which, typename... Args>
|
932
|
+
absl::enable_if_t<Which::kRepeatable == false, void> Set(Which,
|
933
|
+
Args&&... args) {
|
934
|
+
table_.template set<Value<Which>>(std::forward<Args>(args)...);
|
935
|
+
}
|
936
|
+
template <typename Which, typename... Args>
|
937
|
+
absl::enable_if_t<Which::kRepeatable == true, void> Set(Which,
|
938
|
+
Args&&... args) {
|
939
|
+
GetOrCreatePointer(Which())->emplace_back(std::forward<Args>(args)...);
|
940
|
+
}
|
941
|
+
|
942
|
+
// Remove a specific piece of known metadata.
|
943
|
+
template <typename Which>
|
944
|
+
void Remove(Which) {
|
945
|
+
table_.template clear<Value<Which>>();
|
946
|
+
}
|
947
|
+
|
948
|
+
// Remove some metadata by name
|
949
|
+
void Remove(absl::string_view key) {
|
950
|
+
metadata_detail::RemoveHelper<Derived> helper(static_cast<Derived*>(this));
|
951
|
+
metadata_detail::NameLookup<Traits...>::Lookup(key, &helper);
|
952
|
+
}
|
953
|
+
|
954
|
+
void Remove(const char* key) { Remove(absl::string_view(key)); }
|
955
|
+
|
956
|
+
// Retrieve some metadata by name
|
957
|
+
absl::optional<absl::string_view> GetStringValue(absl::string_view name,
|
958
|
+
std::string* buffer) const {
|
959
|
+
metadata_detail::GetStringValueHelper<Derived> helper(
|
960
|
+
static_cast<const Derived*>(this), buffer);
|
961
|
+
return metadata_detail::NameLookup<Traits...>::Lookup(name, &helper);
|
962
|
+
}
|
963
|
+
|
964
|
+
// Extract a piece of known metadata.
|
965
|
+
// Returns nullopt if the metadata was not present, or the value if it was.
|
966
|
+
// The same as:
|
967
|
+
// auto value = m.get(T());
|
968
|
+
// m.Remove(T());
|
969
|
+
template <typename Which>
|
970
|
+
absl::enable_if_t<Which::kRepeatable == false,
|
971
|
+
absl::optional<typename Which::ValueType>>
|
972
|
+
Take(Which which) {
|
973
|
+
if (auto* p = get_pointer(which)) {
|
974
|
+
absl::optional<typename Which::ValueType> value(std::move(*p));
|
975
|
+
Remove(which);
|
976
|
+
return value;
|
977
|
+
}
|
978
|
+
return {};
|
979
|
+
}
|
980
|
+
|
981
|
+
// Extract repeated known metadata.
|
982
|
+
// Returns an empty vector if the metadata was not present.
|
983
|
+
template <typename Which>
|
984
|
+
absl::enable_if_t<Which::kRepeatable == true,
|
985
|
+
typename metadata_detail::Value<Which>::StorageType>
|
986
|
+
Take(Which which) {
|
987
|
+
if (auto* p = get_pointer(which)) {
|
988
|
+
typename Value<Which>::StorageType value = std::move(*p);
|
989
|
+
Remove(which);
|
990
|
+
return value;
|
991
|
+
}
|
992
|
+
return {};
|
993
|
+
}
|
994
|
+
|
995
|
+
// Parse metadata from a key/value pair, and return an object representing
|
996
|
+
// that result.
|
997
|
+
// TODO(ctiller): key should probably be an absl::string_view.
|
998
|
+
// Once we don't care about interning anymore, make that change!
|
999
|
+
static ParsedMetadata<Derived> Parse(absl::string_view key, Slice value,
|
1000
|
+
uint32_t transport_size,
|
1001
|
+
MetadataParseErrorFn on_error) {
|
1002
|
+
metadata_detail::ParseHelper<Derived> helper(value.TakeOwned(), on_error,
|
1003
|
+
transport_size);
|
1004
|
+
return metadata_detail::NameLookup<Traits...>::Lookup(key, &helper);
|
1005
|
+
}
|
1006
|
+
|
1007
|
+
// Set a value from a parsed metadata object.
|
1008
|
+
void Set(const ParsedMetadata<Derived>& m) {
|
1009
|
+
m.SetOnContainer(static_cast<Derived*>(this));
|
1010
|
+
}
|
1011
|
+
|
1012
|
+
// Append a key/value pair - takes ownership of value
|
1013
|
+
void Append(absl::string_view key, Slice value,
|
1014
|
+
MetadataParseErrorFn on_error) {
|
1015
|
+
metadata_detail::AppendHelper<Derived> helper(static_cast<Derived*>(this),
|
1016
|
+
value.TakeOwned(), on_error);
|
1017
|
+
metadata_detail::NameLookup<Traits...>::Lookup(key, &helper);
|
1018
|
+
}
|
1019
|
+
|
1020
|
+
void Clear();
|
1021
|
+
size_t TransportSize() const;
|
1022
|
+
Derived Copy() const;
|
1023
|
+
bool empty() const { return table_.empty() && unknown_.empty(); }
|
1024
|
+
size_t count() const { return table_.count() + unknown_.size(); }
|
1025
|
+
|
1026
|
+
private:
|
1027
|
+
friend class metadata_detail::AppendHelper<Derived>;
|
1028
|
+
friend class metadata_detail::GetStringValueHelper<Derived>;
|
1029
|
+
friend class metadata_detail::RemoveHelper<Derived>;
|
1030
|
+
friend class metadata_detail::CopySink<Derived>;
|
1031
|
+
friend class ParsedMetadata<Derived>;
|
1032
|
+
|
1033
|
+
template <typename Which>
|
1034
|
+
using Value = metadata_detail::Value<Which>;
|
1035
|
+
|
1036
|
+
// Callable for the ForEach in Encode() -- for each value, call the
|
1037
|
+
// appropriate encoder method.
|
1038
|
+
template <typename Encoder>
|
1039
|
+
struct EncodeWrapper {
|
1040
|
+
Encoder* encoder;
|
1041
|
+
template <typename Which>
|
1042
|
+
void operator()(const Value<Which>& which) {
|
1043
|
+
which.EncodeTo(encoder);
|
1044
|
+
}
|
1045
|
+
};
|
1046
|
+
|
1047
|
+
// Encoder to compute TransportSize
|
1048
|
+
class TransportSizeEncoder {
|
1049
|
+
public:
|
1050
|
+
void Encode(const Slice& key, const Slice& value) {
|
1051
|
+
size_ += key.length() + value.length() + 32;
|
1052
|
+
}
|
1053
|
+
|
1054
|
+
template <typename Which>
|
1055
|
+
void Encode(Which, const typename Which::ValueType& value) {
|
1056
|
+
Add(Which(), value);
|
1057
|
+
}
|
1058
|
+
|
1059
|
+
void Encode(ContentTypeMetadata,
|
1060
|
+
const typename ContentTypeMetadata::ValueType& value) {
|
1061
|
+
if (value == ContentTypeMetadata::kInvalid) return;
|
1062
|
+
Add(ContentTypeMetadata(), value);
|
1063
|
+
}
|
1064
|
+
|
1065
|
+
size_t size() const { return size_; }
|
1066
|
+
|
1067
|
+
private:
|
1068
|
+
template <typename Which>
|
1069
|
+
void Add(Which, const typename Which::ValueType& value) {
|
1070
|
+
size_ += Which::key().length() + Which::Encode(value).length() + 32;
|
1071
|
+
}
|
1072
|
+
|
1073
|
+
uint32_t size_ = 0;
|
1074
|
+
};
|
1075
|
+
|
1076
|
+
// Encoder to log some metadata
|
1077
|
+
class LogEncoder {
|
1078
|
+
public:
|
1079
|
+
explicit LogEncoder(
|
1080
|
+
absl::FunctionRef<void(absl::string_view, absl::string_view)> log_fn)
|
1081
|
+
: log_fn_(log_fn) {}
|
1082
|
+
|
1083
|
+
template <typename Which>
|
1084
|
+
void Encode(Which, const typename Which::ValueType& value) {
|
1085
|
+
log_fn_(Which::key(), absl::StrCat(Which::DisplayValue(value)));
|
1086
|
+
}
|
1087
|
+
|
1088
|
+
void Encode(const Slice& key, const Slice& value) {
|
1089
|
+
log_fn_(key.as_string_view(), value.as_string_view());
|
1090
|
+
}
|
1091
|
+
|
1092
|
+
private:
|
1093
|
+
absl::FunctionRef<void(absl::string_view, absl::string_view)> log_fn_;
|
1094
|
+
};
|
1095
|
+
|
1096
|
+
void AppendUnknown(absl::string_view key, Slice value) {
|
1097
|
+
unknown_.EmplaceBack(Slice::FromCopiedString(key), value.Ref());
|
1098
|
+
}
|
1099
|
+
|
1100
|
+
void RemoveUnknown(absl::string_view key) {
|
1101
|
+
unknown_.SetEnd(std::remove_if(unknown_.begin(), unknown_.end(),
|
1102
|
+
[key](const std::pair<Slice, Slice>& p) {
|
1103
|
+
return p.first.as_string_view() == key;
|
1104
|
+
}));
|
1105
|
+
}
|
1106
|
+
|
1107
|
+
absl::optional<absl::string_view> GetStringValueUnknown(
|
1108
|
+
absl::string_view key, std::string* backing) const {
|
1109
|
+
absl::optional<absl::string_view> out;
|
1110
|
+
for (const auto& p : unknown_) {
|
1111
|
+
if (p.first.as_string_view() == key) {
|
1112
|
+
if (!out.has_value()) {
|
1113
|
+
out = p.second.as_string_view();
|
1114
|
+
} else {
|
1115
|
+
out = *backing = absl::StrCat(*out, ",", p.second.as_string_view());
|
1116
|
+
}
|
1117
|
+
}
|
1118
|
+
}
|
1119
|
+
return out;
|
1120
|
+
}
|
1121
|
+
|
1122
|
+
// Table of known metadata types.
|
1123
|
+
Table<Value<Traits>...> table_;
|
1124
|
+
// Backing store for added metadata.
|
1125
|
+
ChunkedVector<std::pair<Slice, Slice>, 10> unknown_;
|
1126
|
+
};
|
1127
|
+
|
1128
|
+
// Ok/not-ok check for metadata maps that contain GrpcStatusMetadata, so that
|
1129
|
+
// they can be used as result types for TrySeq.
|
1130
|
+
template <typename Derived, typename... Args>
|
1131
|
+
inline bool IsStatusOk(const MetadataMap<Derived, Args...>& m) {
|
1132
|
+
return m.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN) ==
|
1133
|
+
GRPC_STATUS_OK;
|
1134
|
+
}
|
1135
|
+
|
1136
|
+
template <typename Derived, typename... Traits>
|
1137
|
+
MetadataMap<Derived, Traits...>::MetadataMap(Arena* arena) : unknown_(arena) {}
|
1138
|
+
|
1139
|
+
template <typename Derived, typename... Traits>
|
1140
|
+
MetadataMap<Derived, Traits...>::MetadataMap(MetadataMap&& other) noexcept
|
1141
|
+
: table_(std::move(other.table_)), unknown_(std::move(other.unknown_)) {}
|
1142
|
+
|
1143
|
+
// We never create MetadataMap directly, instead we create Derived, but we want
|
1144
|
+
// to be able to move it without redeclaring this.
|
1145
|
+
// NOLINTNEXTLINE(misc-unconventional-assign-operator)
|
1146
|
+
template <typename Derived, typename... Traits>
|
1147
|
+
Derived& MetadataMap<Derived, Traits...>::operator=(
|
1148
|
+
MetadataMap&& other) noexcept {
|
1149
|
+
table_ = std::move(other.table_);
|
1150
|
+
unknown_ = std::move(other.unknown_);
|
1151
|
+
return static_cast<Derived&>(*this);
|
1152
|
+
}
|
1153
|
+
|
1154
|
+
template <typename Derived, typename... Traits>
|
1155
|
+
MetadataMap<Derived, Traits...>::~MetadataMap() = default;
|
1156
|
+
|
1157
|
+
template <typename Derived, typename... Traits>
|
1158
|
+
void MetadataMap<Derived, Traits...>::Clear() {
|
1159
|
+
table_.ClearAll();
|
1160
|
+
unknown_.Clear();
|
143
1161
|
}
|
144
1162
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
return grpc_metadata_batch_add_head(batch, storage, idx);
|
1163
|
+
template <typename Derived, typename... Traits>
|
1164
|
+
size_t MetadataMap<Derived, Traits...>::TransportSize() const {
|
1165
|
+
TransportSizeEncoder enc;
|
1166
|
+
Encode(&enc);
|
1167
|
+
return enc.size();
|
151
1168
|
}
|
152
1169
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
grpc_error_handle grpc_metadata_batch_add_tail(
|
160
|
-
grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
|
161
|
-
grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
|
162
|
-
|
163
|
-
inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_tail(
|
164
|
-
grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
|
165
|
-
grpc_metadata_batch_callouts_index idx) {
|
166
|
-
return grpc_metadata_batch_link_tail(batch, storage, idx);
|
1170
|
+
template <typename Derived, typename... Traits>
|
1171
|
+
Derived MetadataMap<Derived, Traits...>::Copy() const {
|
1172
|
+
Derived out(unknown_.arena());
|
1173
|
+
metadata_detail::CopySink<Derived> sink(&out);
|
1174
|
+
Encode(&sink);
|
1175
|
+
return out;
|
167
1176
|
}
|
168
1177
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
1178
|
+
template <typename Derived, typename... Traits>
|
1179
|
+
void MetadataMap<Derived, Traits...>::Log(
|
1180
|
+
absl::FunctionRef<void(absl::string_view, absl::string_view)> log_fn)
|
1181
|
+
const {
|
1182
|
+
LogEncoder enc(log_fn);
|
1183
|
+
Encode(&enc);
|
175
1184
|
}
|
176
1185
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
} while (0)
|
203
|
-
#endif
|
204
|
-
|
205
|
-
/// Copies \a src to \a dst. \a storage must point to an array of
|
206
|
-
/// \a grpc_linked_mdelem structs of at least the same size as \a src.
|
207
|
-
///
|
208
|
-
/// For each mdelem in \a src, if the mdelem is of storage types
|
209
|
-
/// GRPC_MDELEM_STORAGE_INTERNED or GRPC_MDELEM_STORAGE_ALLOCATED,
|
210
|
-
/// refs the original mdelem for the copy. Otherwise, makes a new
|
211
|
-
/// mdelem that will hold its own refs to the key and value slices.
|
212
|
-
///
|
213
|
-
/// Currently used only in the retry code.
|
214
|
-
void grpc_metadata_batch_copy(grpc_metadata_batch* src,
|
215
|
-
grpc_metadata_batch* dst,
|
216
|
-
grpc_linked_mdelem* storage);
|
217
|
-
|
218
|
-
void grpc_metadata_batch_move(grpc_metadata_batch* src,
|
219
|
-
grpc_metadata_batch* dst);
|
1186
|
+
} // namespace grpc_core
|
1187
|
+
|
1188
|
+
struct grpc_metadata_batch;
|
1189
|
+
|
1190
|
+
using grpc_metadata_batch_base = grpc_core::MetadataMap<
|
1191
|
+
grpc_metadata_batch,
|
1192
|
+
// Colon prefixed headers first
|
1193
|
+
grpc_core::HttpPathMetadata, grpc_core::HttpAuthorityMetadata,
|
1194
|
+
grpc_core::HttpMethodMetadata, grpc_core::HttpStatusMetadata,
|
1195
|
+
grpc_core::HttpSchemeMetadata,
|
1196
|
+
// Non-colon prefixed headers begin here
|
1197
|
+
grpc_core::ContentTypeMetadata, grpc_core::TeMetadata,
|
1198
|
+
grpc_core::GrpcEncodingMetadata, grpc_core::GrpcInternalEncodingRequest,
|
1199
|
+
grpc_core::GrpcAcceptEncodingMetadata, grpc_core::GrpcStatusMetadata,
|
1200
|
+
grpc_core::GrpcTimeoutMetadata, grpc_core::GrpcPreviousRpcAttemptsMetadata,
|
1201
|
+
grpc_core::GrpcRetryPushbackMsMetadata, grpc_core::UserAgentMetadata,
|
1202
|
+
grpc_core::GrpcMessageMetadata, grpc_core::HostMetadata,
|
1203
|
+
grpc_core::XEndpointLoadMetricsBinMetadata,
|
1204
|
+
grpc_core::GrpcServerStatsBinMetadata, grpc_core::GrpcTraceBinMetadata,
|
1205
|
+
grpc_core::GrpcTagsBinMetadata, grpc_core::GrpcLbClientStatsMetadata,
|
1206
|
+
grpc_core::LbCostBinMetadata, grpc_core::LbTokenMetadata>;
|
1207
|
+
|
1208
|
+
struct grpc_metadata_batch : public grpc_metadata_batch_base {
|
1209
|
+
using grpc_metadata_batch_base::grpc_metadata_batch_base;
|
1210
|
+
};
|
220
1211
|
|
221
1212
|
#endif /* GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H */
|