grpc 1.45.0 → 1.46.3
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 +36 -29
- data/include/grpc/impl/codegen/grpc_types.h +7 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +3 -3
- data/src/core/ext/filters/client_channel/client_channel.cc +163 -96
- data/src/core/ext/filters/client_channel/client_channel.h +2 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +124 -581
- data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -160
- data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
- data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +182 -142
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +87 -58
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -48
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +229 -284
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +92 -257
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +51 -221
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +102 -55
- data/src/core/ext/filters/client_channel/retry_filter.cc +18 -3
- data/src/core/ext/filters/client_channel/subchannel.cc +5 -5
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +127 -367
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +78 -458
- data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
- data/src/core/ext/filters/http/client_authority_filter.cc +17 -22
- data/src/core/ext/filters/http/client_authority_filter.h +6 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -6
- data/src/core/ext/filters/http/server/http_server_filter.cc +2 -116
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +2 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +2 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +73 -201
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -28
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +24 -13
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +143 -63
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +37 -35
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +177 -77
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +115 -111
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +547 -207
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +26 -13
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +23 -9
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +18 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +13 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +9 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +217 -78
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +10 -2
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +20 -2
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +289 -110
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +133 -125
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +656 -267
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +96 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +185 -173
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +860 -309
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +10 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +165 -40
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +433 -174
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +33 -31
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +154 -52
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +14 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +89 -89
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +460 -166
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +379 -69
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +14 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +10 -91
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +26 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +369 -131
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +94 -65
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +447 -161
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +27 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +104 -85
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +378 -113
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +3 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +30 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +43 -16
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +58 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +14 -4
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +100 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +31 -30
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +171 -71
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +196 -95
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +7 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +53 -46
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +284 -129
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +337 -146
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +13 -11
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +49 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +14 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +20 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +205 -86
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +175 -74
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +56 -52
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +370 -146
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +27 -23
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +173 -74
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +362 -341
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2056 -845
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +49 -16
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +56 -50
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +293 -111
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +10 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +26 -10
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +27 -12
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +83 -36
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +7 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +46 -17
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +38 -12
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +10 -6
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +71 -28
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +149 -65
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +8 -7
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +30 -12
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +42 -15
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +173 -144
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +898 -323
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +51 -45
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +261 -116
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +70 -25
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +80 -55
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +410 -124
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +23 -9
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +44 -44
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +261 -122
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +47 -21
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +32 -32
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +175 -66
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +17 -6
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +38 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +12 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +43 -18
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +20 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +24 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +14 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +40 -16
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +70 -25
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +37 -18
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +81 -30
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +76 -30
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +28 -10
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +3 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +13 -4
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +9 -0
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +17 -4
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +410 -162
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +440 -158
- data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
- data/src/core/ext/upb-generated/google/api/http.upb.h +116 -43
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +19 -7
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +163 -162
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1157 -435
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +10 -4
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +108 -40
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +10 -4
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +19 -7
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +65 -22
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +49 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +364 -149
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +20 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +150 -58
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +51 -18
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +97 -10
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +23 -2
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +27 -6
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +20 -2
- data/src/core/ext/upb-generated/validate/validate.upb.c +261 -250
- data/src/core/ext/upb-generated/validate/validate.upb.h +1836 -663
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +97 -10
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +23 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +70 -10
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +20 -2
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +3 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +38 -12
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +27 -10
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +10 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +21 -8
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +71 -30
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +16 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +12 -12
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +69 -26
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +255 -103
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +19 -8
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +70 -25
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +10 -2
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +195 -185
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +163 -155
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +26 -20
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +738 -730
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +271 -251
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +207 -193
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
- data/src/core/ext/xds/certificate_provider_store.cc +8 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/xds_api.cc +20 -0
- data/src/core/ext/xds/xds_bootstrap.cc +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +2 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
- data/src/core/ext/xds/xds_certificate_provider.h +8 -0
- data/src/core/ext/xds/xds_client.cc +87 -95
- data/src/core/ext/xds/xds_client.h +13 -5
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
- data/src/core/ext/xds/xds_common_types.cc +9 -9
- data/src/core/ext/xds/xds_common_types.h +3 -3
- data/src/core/ext/xds/xds_endpoint.cc +12 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +1 -1
- data/src/core/ext/xds/xds_listener.cc +1 -1
- data/src/core/ext/xds/xds_route_config.cc +162 -25
- data/src/core/ext/xds/xds_route_config.h +13 -10
- data/src/core/ext/xds/xds_server_config_fetcher.cc +17 -22
- data/src/core/lib/avl/avl.h +68 -5
- data/src/core/lib/channel/call_tracer.h +4 -1
- data/src/core/lib/channel/channel_args.cc +138 -59
- data/src/core/lib/channel/channel_args.h +210 -9
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -9
- data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
- data/src/core/lib/channel/channel_stack.h +2 -5
- data/src/core/lib/channel/channel_stack_builder.cc +0 -65
- data/src/core/lib/channel/channel_stack_builder.h +27 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
- data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +495 -162
- data/src/core/lib/channel/promise_based_filter.h +55 -41
- data/src/core/lib/compression/compression_internal.cc +1 -7
- data/src/core/lib/debug/stats_data.cc +2 -6
- data/src/core/lib/debug/stats_data.h +18 -21
- data/src/core/lib/gpr/tls.h +1 -0
- data/src/core/lib/gprpp/bitset.h +12 -0
- data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
- data/src/core/lib/gprpp/match.h +73 -0
- data/src/core/lib/gprpp/overload.h +59 -0
- data/src/core/lib/gprpp/ref_counted.h +2 -0
- data/src/core/lib/gprpp/single_set_ptr.h +87 -0
- data/src/core/lib/gprpp/status_helper.cc +18 -2
- data/src/core/lib/gprpp/time.cc +12 -0
- data/src/core/lib/gprpp/time.h +1 -1
- data/src/core/lib/http/format_request.cc +1 -2
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/http/parser.cc +80 -9
- data/src/core/lib/http/parser.h +14 -1
- data/src/core/lib/iomgr/ev_posix.cc +6 -7
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/port.h +0 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
- data/src/core/lib/iomgr/tcp_posix.cc +93 -35
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
- data/src/core/lib/json/json_util.h +3 -3
- data/src/core/lib/promise/call_push_pull.h +144 -0
- data/src/core/lib/promise/detail/status.h +2 -1
- data/src/core/lib/promise/intra_activity_waiter.h +49 -0
- data/src/core/lib/promise/latch.h +104 -0
- data/src/core/lib/resource_quota/api.cc +5 -30
- data/src/core/lib/resource_quota/api.h +1 -1
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -12
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
- data/src/core/lib/security/context/security_context.h +8 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
- data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
- data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
- data/src/core/lib/security/credentials/call_creds_util.h +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +15 -10
- data/src/core/lib/security/credentials/composite/composite_credentials.h +9 -8
- data/src/core/lib/security/credentials/credentials.h +16 -33
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -12
- data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -4
- data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +22 -29
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
- data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -9
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -6
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +6 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
- data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.h +9 -0
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
- data/src/core/lib/security/transport/auth_filters.h +7 -7
- data/src/core/lib/security/transport/client_auth_filter.cc +28 -20
- data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
- data/src/core/lib/security/transport/secure_endpoint.h +1 -1
- data/src/core/lib/security/transport/security_handshaker.cc +6 -4
- data/src/core/lib/surface/call.cc +1023 -903
- data/src/core/lib/surface/call.h +0 -14
- data/src/core/lib/surface/channel.cc +4 -3
- data/src/core/lib/surface/channel_init.cc +2 -3
- data/src/core/lib/surface/channel_init.h +2 -6
- data/src/core/lib/surface/init.cc +1 -1
- data/src/core/lib/surface/server.cc +3 -14
- data/src/core/lib/surface/server.h +1 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.cc +2 -0
- data/src/core/lib/transport/metadata_batch.h +12 -8
- data/src/core/lib/transport/transport.h +20 -5
- data/src/core/lib/transport/transport_impl.h +4 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
- data/src/core/tsi/ssl_transport_security.cc +75 -38
- data/src/core/tsi/ssl_transport_security.h +8 -2
- data/src/core/tsi/transport_security_interface.h +2 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -0
- data/src/ruby/pb/test/client.rb +769 -0
- data/src/ruby/pb/test/server.rb +252 -0
- data/src/ruby/pb/test/xds_client.rb +415 -0
- data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
- data/third_party/upb/upb/decode.c +32 -16
- data/third_party/upb/upb/def.c +118 -55
- data/third_party/upb/upb/def.h +12 -3
- data/third_party/upb/upb/encode.c +14 -8
- data/third_party/upb/upb/json_encode.c +776 -0
- data/third_party/upb/upb/json_encode.h +62 -0
- data/third_party/upb/upb/msg.c +5 -7
- data/third_party/upb/upb/msg.h +1 -2
- data/third_party/upb/upb/msg_internal.h +49 -36
- data/third_party/upb/upb/port_def.inc +8 -0
- data/third_party/upb/upb/port_undef.inc +1 -0
- data/third_party/upb/upb/table.c +10 -6
- data/third_party/upb/upb/table_internal.h +2 -0
- data/third_party/upb/upb/upb.h +41 -11
- data/third_party/zlib/crc32.c +966 -292
- data/third_party/zlib/crc32.h +9441 -436
- data/third_party/zlib/deflate.c +78 -30
- data/third_party/zlib/deflate.h +12 -15
- data/third_party/zlib/gzguts.h +3 -2
- data/third_party/zlib/gzlib.c +5 -3
- data/third_party/zlib/gzread.c +5 -7
- data/third_party/zlib/gzwrite.c +25 -13
- data/third_party/zlib/infback.c +2 -1
- data/third_party/zlib/inffast.c +14 -14
- data/third_party/zlib/inflate.c +39 -8
- data/third_party/zlib/inflate.h +3 -2
- data/third_party/zlib/inftrees.c +3 -3
- data/third_party/zlib/trees.c +27 -48
- data/third_party/zlib/zlib.h +123 -100
- data/third_party/zlib/zutil.c +2 -2
- data/third_party/zlib/zutil.h +12 -9
- metadata +66 -45
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
- data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
- data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
- data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
- data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
data/src/core/lib/avl/avl.h
CHANGED
@@ -22,6 +22,8 @@
|
|
22
22
|
#include <algorithm>
|
23
23
|
#include <memory>
|
24
24
|
|
25
|
+
#include "absl/container/inlined_vector.h"
|
26
|
+
|
25
27
|
namespace grpc_core {
|
26
28
|
|
27
29
|
template <class K, class V = void>
|
@@ -32,8 +34,12 @@ class AVL {
|
|
32
34
|
AVL Add(K key, V value) const {
|
33
35
|
return AVL(AddKey(root_, std::move(key), std::move(value)));
|
34
36
|
}
|
35
|
-
|
36
|
-
|
37
|
+
template <typename SomethingLikeK>
|
38
|
+
AVL Remove(const SomethingLikeK& key) const {
|
39
|
+
return AVL(RemoveKey(root_, key));
|
40
|
+
}
|
41
|
+
template <typename SomethingLikeK>
|
42
|
+
const V* Lookup(const SomethingLikeK& key) const {
|
37
43
|
NodePtr n = Get(root_, key);
|
38
44
|
return n ? &n->kv.second : nullptr;
|
39
45
|
}
|
@@ -50,7 +56,36 @@ class AVL {
|
|
50
56
|
ForEachImpl(root_.get(), std::forward<F>(f));
|
51
57
|
}
|
52
58
|
|
53
|
-
bool SameIdentity(AVL avl) const { return root_ == avl.root_; }
|
59
|
+
bool SameIdentity(const AVL& avl) const { return root_ == avl.root_; }
|
60
|
+
|
61
|
+
bool operator==(const AVL& other) const {
|
62
|
+
Iterator a(root_);
|
63
|
+
Iterator b(other.root_);
|
64
|
+
for (;;) {
|
65
|
+
Node* p = a.current();
|
66
|
+
Node* q = b.current();
|
67
|
+
if (p == nullptr) return q == nullptr;
|
68
|
+
if (q == nullptr) return false;
|
69
|
+
if (p->kv != q->kv) return false;
|
70
|
+
a.MoveNext();
|
71
|
+
b.MoveNext();
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
bool operator<(const AVL& other) const {
|
76
|
+
Iterator a(root_);
|
77
|
+
Iterator b(other.root_);
|
78
|
+
for (;;) {
|
79
|
+
Node* p = a.current();
|
80
|
+
Node* q = b.current();
|
81
|
+
if (p == nullptr) return q != nullptr;
|
82
|
+
if (q == nullptr) return false;
|
83
|
+
if (p->kv < q->kv) return true;
|
84
|
+
if (p->kv != q->kv) return false;
|
85
|
+
a.MoveNext();
|
86
|
+
b.MoveNext();
|
87
|
+
}
|
88
|
+
}
|
54
89
|
|
55
90
|
private:
|
56
91
|
struct Node;
|
@@ -68,6 +103,32 @@ class AVL {
|
|
68
103
|
};
|
69
104
|
NodePtr root_;
|
70
105
|
|
106
|
+
class Iterator {
|
107
|
+
public:
|
108
|
+
explicit Iterator(const NodePtr& root) {
|
109
|
+
auto* n = root.get();
|
110
|
+
while (n != nullptr) {
|
111
|
+
stack_.push_back(n);
|
112
|
+
n = n->left.get();
|
113
|
+
}
|
114
|
+
}
|
115
|
+
Node* current() const { return stack_.empty() ? nullptr : stack_.back(); }
|
116
|
+
void MoveNext() {
|
117
|
+
auto* n = stack_.back();
|
118
|
+
stack_.pop_back();
|
119
|
+
if (n->right != nullptr) {
|
120
|
+
n = n->right.get();
|
121
|
+
while (n != nullptr) {
|
122
|
+
stack_.push_back(n);
|
123
|
+
n = n->left.get();
|
124
|
+
}
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
128
|
+
private:
|
129
|
+
absl::InlinedVector<Node*, 8> stack_;
|
130
|
+
};
|
131
|
+
|
71
132
|
explicit AVL(NodePtr root) : root_(std::move(root)) {}
|
72
133
|
|
73
134
|
template <class F>
|
@@ -86,7 +147,8 @@ class AVL {
|
|
86
147
|
1 + std::max(Height(left), Height(right)));
|
87
148
|
}
|
88
149
|
|
89
|
-
|
150
|
+
template <typename SomethingLikeK>
|
151
|
+
static NodePtr Get(const NodePtr& node, const SomethingLikeK& key) {
|
90
152
|
if (node == nullptr) {
|
91
153
|
return nullptr;
|
92
154
|
}
|
@@ -198,7 +260,8 @@ class AVL {
|
|
198
260
|
return node;
|
199
261
|
}
|
200
262
|
|
201
|
-
|
263
|
+
template <typename SomethingLikeK>
|
264
|
+
static NodePtr RemoveKey(const NodePtr& node, const SomethingLikeK& key) {
|
202
265
|
if (node == nullptr) {
|
203
266
|
return nullptr;
|
204
267
|
}
|
@@ -59,9 +59,12 @@ class CallTracer {
|
|
59
59
|
virtual void RecordReceivedInitialMetadata(
|
60
60
|
grpc_metadata_batch* recv_initial_metadata, uint32_t flags) = 0;
|
61
61
|
virtual void RecordReceivedMessage(const ByteStream& recv_message) = 0;
|
62
|
+
// If the call was cancelled before the recv_trailing_metadata op
|
63
|
+
// was started, recv_trailing_metadata and transport_stream_stats
|
64
|
+
// will be null.
|
62
65
|
virtual void RecordReceivedTrailingMetadata(
|
63
66
|
absl::Status status, grpc_metadata_batch* recv_trailing_metadata,
|
64
|
-
const grpc_transport_stream_stats
|
67
|
+
const grpc_transport_stream_stats* transport_stream_stats) = 0;
|
65
68
|
virtual void RecordCancel(grpc_error_handle cancel_error) = 0;
|
66
69
|
// Should be the last API call to the object. Once invoked, the tracer
|
67
70
|
// library is free to destroy the object.
|
@@ -37,6 +37,130 @@
|
|
37
37
|
|
38
38
|
#include "src/core/lib/gpr/string.h"
|
39
39
|
#include "src/core/lib/gpr/useful.h"
|
40
|
+
#include "src/core/lib/gprpp/match.h"
|
41
|
+
|
42
|
+
namespace {
|
43
|
+
|
44
|
+
int PointerCompare(void* a_ptr, const grpc_arg_pointer_vtable* a_vtable,
|
45
|
+
void* b_ptr, const grpc_arg_pointer_vtable* b_vtable) {
|
46
|
+
int c = grpc_core::QsortCompare(a_ptr, b_ptr);
|
47
|
+
if (c == 0) return 0;
|
48
|
+
c = grpc_core::QsortCompare(a_vtable, b_vtable);
|
49
|
+
if (c != 0) return c;
|
50
|
+
return a_vtable->cmp(a_ptr, b_ptr);
|
51
|
+
}
|
52
|
+
|
53
|
+
} // namespace
|
54
|
+
|
55
|
+
namespace grpc_core {
|
56
|
+
|
57
|
+
bool ChannelArgs::Pointer::operator==(const Pointer& rhs) const {
|
58
|
+
return PointerCompare(p_, vtable_, rhs.p_, rhs.vtable_) == 0;
|
59
|
+
}
|
60
|
+
|
61
|
+
bool ChannelArgs::Pointer::operator<(const Pointer& rhs) const {
|
62
|
+
return PointerCompare(p_, vtable_, rhs.p_, rhs.vtable_) < 0;
|
63
|
+
}
|
64
|
+
|
65
|
+
ChannelArgs::ChannelArgs() = default;
|
66
|
+
|
67
|
+
ChannelArgs ChannelArgs::Set(grpc_arg arg) const {
|
68
|
+
switch (arg.type) {
|
69
|
+
case GRPC_ARG_INTEGER:
|
70
|
+
return Set(arg.key, arg.value.integer);
|
71
|
+
case GRPC_ARG_STRING:
|
72
|
+
if (arg.value.string != nullptr) return Set(arg.key, arg.value.string);
|
73
|
+
return Set(arg.key, "");
|
74
|
+
case GRPC_ARG_POINTER:
|
75
|
+
return Set(arg.key,
|
76
|
+
Pointer(arg.value.pointer.vtable->copy(arg.value.pointer.p),
|
77
|
+
arg.value.pointer.vtable));
|
78
|
+
}
|
79
|
+
GPR_UNREACHABLE_CODE(return ChannelArgs());
|
80
|
+
}
|
81
|
+
|
82
|
+
ChannelArgs ChannelArgs::FromC(const grpc_channel_args* args) {
|
83
|
+
ChannelArgs result;
|
84
|
+
if (args != nullptr) {
|
85
|
+
for (size_t i = 0; i < args->num_args; i++) {
|
86
|
+
result = result.Set(args->args[i]);
|
87
|
+
}
|
88
|
+
}
|
89
|
+
return result;
|
90
|
+
}
|
91
|
+
|
92
|
+
const grpc_channel_args* ChannelArgs::ToC() const {
|
93
|
+
std::vector<grpc_arg> c_args;
|
94
|
+
args_.ForEach([&c_args](const std::string& key, const Value& value) {
|
95
|
+
char* name = const_cast<char*>(key.c_str());
|
96
|
+
c_args.push_back(Match(
|
97
|
+
value,
|
98
|
+
[name](int i) { return grpc_channel_arg_integer_create(name, i); },
|
99
|
+
[name](const std::string& s) {
|
100
|
+
return grpc_channel_arg_string_create(name,
|
101
|
+
const_cast<char*>(s.c_str()));
|
102
|
+
},
|
103
|
+
[name](const Pointer& p) {
|
104
|
+
return grpc_channel_arg_pointer_create(name, p.c_pointer(),
|
105
|
+
p.c_vtable());
|
106
|
+
}));
|
107
|
+
});
|
108
|
+
return grpc_channel_args_copy_and_add(nullptr, c_args.data(), c_args.size());
|
109
|
+
}
|
110
|
+
|
111
|
+
ChannelArgs ChannelArgs::Set(absl::string_view key, Value value) const {
|
112
|
+
return ChannelArgs(args_.Add(std::string(key), std::move(value)));
|
113
|
+
}
|
114
|
+
|
115
|
+
ChannelArgs ChannelArgs::Set(absl::string_view key,
|
116
|
+
absl::string_view value) const {
|
117
|
+
return Set(key, std::string(value));
|
118
|
+
}
|
119
|
+
|
120
|
+
ChannelArgs ChannelArgs::Set(absl::string_view key, const char* value) const {
|
121
|
+
return Set(key, std::string(value));
|
122
|
+
}
|
123
|
+
|
124
|
+
ChannelArgs ChannelArgs::Set(absl::string_view key, std::string value) const {
|
125
|
+
return Set(key, Value(std::move(value)));
|
126
|
+
}
|
127
|
+
|
128
|
+
ChannelArgs ChannelArgs::Remove(absl::string_view key) const {
|
129
|
+
return ChannelArgs(args_.Remove(key));
|
130
|
+
}
|
131
|
+
|
132
|
+
absl::optional<int> ChannelArgs::GetInt(absl::string_view name) const {
|
133
|
+
auto* v = Get(name);
|
134
|
+
if (v == nullptr) return absl::nullopt;
|
135
|
+
if (!absl::holds_alternative<int>(*v)) return absl::nullopt;
|
136
|
+
return absl::get<int>(*v);
|
137
|
+
}
|
138
|
+
|
139
|
+
absl::optional<Duration> ChannelArgs::GetDurationFromIntMillis(
|
140
|
+
absl::string_view name) const {
|
141
|
+
auto ms = GetInt(name);
|
142
|
+
if (!ms.has_value()) return absl::nullopt;
|
143
|
+
if (*ms == INT_MAX) return Duration::Infinity();
|
144
|
+
if (*ms == INT_MIN) return Duration::NegativeInfinity();
|
145
|
+
return Duration::Milliseconds(*ms);
|
146
|
+
}
|
147
|
+
|
148
|
+
absl::optional<absl::string_view> ChannelArgs::GetString(
|
149
|
+
absl::string_view name) const {
|
150
|
+
auto* v = Get(name);
|
151
|
+
if (v == nullptr) return absl::nullopt;
|
152
|
+
if (!absl::holds_alternative<std::string>(*v)) return absl::nullopt;
|
153
|
+
return absl::get<std::string>(*v);
|
154
|
+
}
|
155
|
+
|
156
|
+
void* ChannelArgs::GetVoidPointer(absl::string_view name) const {
|
157
|
+
auto* v = Get(name);
|
158
|
+
if (v == nullptr) return nullptr;
|
159
|
+
if (!absl::holds_alternative<Pointer>(*v)) return nullptr;
|
160
|
+
return absl::get<Pointer>(*v).c_pointer();
|
161
|
+
}
|
162
|
+
|
163
|
+
} // namespace grpc_core
|
40
164
|
|
41
165
|
static grpc_arg copy_arg(const grpc_arg* src) {
|
42
166
|
grpc_arg dst;
|
@@ -156,16 +280,8 @@ static int cmp_arg(const grpc_arg* a, const grpc_arg* b) {
|
|
156
280
|
case GRPC_ARG_INTEGER:
|
157
281
|
return grpc_core::QsortCompare(a->value.integer, b->value.integer);
|
158
282
|
case GRPC_ARG_POINTER:
|
159
|
-
|
160
|
-
|
161
|
-
c = grpc_core::QsortCompare(a->value.pointer.vtable,
|
162
|
-
b->value.pointer.vtable);
|
163
|
-
if (c == 0) {
|
164
|
-
c = a->value.pointer.vtable->cmp(a->value.pointer.p,
|
165
|
-
b->value.pointer.p);
|
166
|
-
}
|
167
|
-
}
|
168
|
-
return c;
|
283
|
+
return PointerCompare(a->value.pointer.p, a->value.pointer.vtable,
|
284
|
+
b->value.pointer.p, b->value.pointer.vtable);
|
169
285
|
}
|
170
286
|
GPR_UNREACHABLE_CODE(return 0);
|
171
287
|
}
|
@@ -369,25 +485,11 @@ std::string grpc_channel_args_string(const grpc_channel_args* args) {
|
|
369
485
|
}
|
370
486
|
|
371
487
|
namespace grpc_core {
|
372
|
-
|
373
|
-
if (src == nullptr) return
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
dst->args =
|
378
|
-
static_cast<grpc_arg*>(gpr_malloc(sizeof(grpc_arg) * src->num_args));
|
379
|
-
dst->num_args = 0;
|
380
|
-
for (size_t i = 0; i < src->num_args; ++i) {
|
381
|
-
if (absl::StartsWith(src->args[i].key, "grpc.internal.")) continue;
|
382
|
-
dst->args[dst->num_args++] = copy_arg(&src->args[i]);
|
383
|
-
}
|
384
|
-
return dst;
|
385
|
-
}
|
386
|
-
|
387
|
-
const grpc_channel_args* UniquifyChannelArgKeys(const grpc_channel_args* src) {
|
388
|
-
if (src == nullptr) return nullptr;
|
389
|
-
std::map<absl::string_view, const grpc_arg*> values;
|
390
|
-
std::map<absl::string_view, std::vector<std::string>> concatenated_values;
|
488
|
+
ChannelArgs ChannelArgsBuiltinPrecondition(const grpc_channel_args* src) {
|
489
|
+
if (src == nullptr) return ChannelArgs();
|
490
|
+
ChannelArgs output;
|
491
|
+
std::map<absl::string_view, std::vector<absl::string_view>>
|
492
|
+
concatenated_values;
|
391
493
|
for (size_t i = 0; i < src->num_args; i++) {
|
392
494
|
absl::string_view key = src->args[i].key;
|
393
495
|
// User-agent strings were traditionally multi-valued and concatenated.
|
@@ -401,46 +503,23 @@ const grpc_channel_args* UniquifyChannelArgKeys(const grpc_channel_args* src) {
|
|
401
503
|
concatenated_values[key].push_back(src->args[i].value.string);
|
402
504
|
}
|
403
505
|
continue;
|
506
|
+
} else if (absl::StartsWith(key, "grpc.internal.")) {
|
507
|
+
continue;
|
404
508
|
}
|
405
|
-
|
406
|
-
|
407
|
-
values[key] = &src->args[i];
|
509
|
+
if (!output.Contains(key)) {
|
510
|
+
output = output.Set(src->args[i]);
|
408
511
|
} else {
|
409
512
|
// Traditional grpc_channel_args_find behavior was to pick the first
|
410
513
|
// value.
|
411
514
|
// For compatibility with existing users, we will do the same here.
|
412
515
|
}
|
413
516
|
}
|
414
|
-
if (values.size() + concatenated_values.size() == src->num_args) {
|
415
|
-
return grpc_channel_args_copy(src);
|
416
|
-
}
|
417
517
|
// Concatenate the concatenated values.
|
418
|
-
std::map<absl::string_view, std::string> concatenated_values_str;
|
419
518
|
for (const auto& concatenated_value : concatenated_values) {
|
420
|
-
|
421
|
-
|
422
|
-
}
|
423
|
-
// Create the result
|
424
|
-
std::vector<grpc_arg> argv;
|
425
|
-
argv.reserve(values.size());
|
426
|
-
for (const auto& a : values) {
|
427
|
-
argv.push_back(*a.second);
|
428
|
-
}
|
429
|
-
for (const auto& a : concatenated_values_str) {
|
430
|
-
argv.push_back(
|
431
|
-
grpc_channel_arg_string_create(const_cast<char*>(a.first.data()),
|
432
|
-
const_cast<char*>(a.second.c_str())));
|
519
|
+
output = output.Set(concatenated_value.first,
|
520
|
+
absl::StrJoin(concatenated_value.second, " "));
|
433
521
|
}
|
434
|
-
|
435
|
-
// Log that we're mutating things
|
436
|
-
gpr_log(GPR_INFO,
|
437
|
-
"Uniquification pass on channel args is mutating them: {%s} is being "
|
438
|
-
"changed to {%s}",
|
439
|
-
grpc_channel_args_string(src).c_str(),
|
440
|
-
grpc_channel_args_string(&args).c_str());
|
441
|
-
// Return the result (note we need to copy because we're borrowing the args
|
442
|
-
// from src still!)
|
443
|
-
return grpc_channel_args_copy(&args);
|
522
|
+
return output;
|
444
523
|
}
|
445
524
|
} // namespace grpc_core
|
446
525
|
|
@@ -23,12 +23,218 @@
|
|
23
23
|
|
24
24
|
#include <string>
|
25
25
|
|
26
|
+
#include "absl/strings/string_view.h"
|
27
|
+
#include "absl/types/optional.h"
|
28
|
+
#include "absl/types/variant.h"
|
29
|
+
#include "absl/utility/utility.h"
|
30
|
+
|
26
31
|
#include <grpc/impl/codegen/grpc_types.h>
|
27
32
|
|
33
|
+
#include "src/core/lib/avl/avl.h"
|
34
|
+
#include "src/core/lib/gpr/useful.h"
|
35
|
+
#include "src/core/lib/gprpp/dual_ref_counted.h"
|
36
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
37
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
38
|
+
#include "src/core/lib/gprpp/time.h"
|
28
39
|
#include "src/core/lib/surface/channel_stack_type.h"
|
29
40
|
|
30
41
|
// Channel args are intentionally immutable, to avoid the need for locking.
|
31
42
|
|
43
|
+
namespace grpc_core {
|
44
|
+
|
45
|
+
// Define a traits object for vtable lookup - allows us to integrate with
|
46
|
+
// existing code easily (just define the trait!) and allows some magic in
|
47
|
+
// ChannelArgs to automatically derive a vtable from a T*.
|
48
|
+
// To participate as a pointer, instances should expose the function:
|
49
|
+
// // Gets the vtable for this type
|
50
|
+
// static const grpc_channel_arg_vtable* VTable();
|
51
|
+
// // Performs any mutations required for channel args to own a pointer
|
52
|
+
// // Only needed if ChannelArgs::Set is to be called with a raw pointer.
|
53
|
+
// static void* TakeUnownedPointer(T* p);
|
54
|
+
template <typename T, typename Ignored = void /* for SFINAE */>
|
55
|
+
struct ChannelArgTypeTraits;
|
56
|
+
|
57
|
+
// Specialization for ref-counted pointers.
|
58
|
+
// Types should expose:
|
59
|
+
// static int ChannelArgsCompare(const T* a, const T* b);
|
60
|
+
template <typename T>
|
61
|
+
struct ChannelArgTypeTraits<
|
62
|
+
T,
|
63
|
+
absl::enable_if_t<
|
64
|
+
std::is_base_of<RefCounted<T>, T>::value ||
|
65
|
+
std::is_base_of<RefCounted<T, NonPolymorphicRefCount>, T>::value ||
|
66
|
+
std::is_base_of<DualRefCounted<T>, T>::value,
|
67
|
+
void>> {
|
68
|
+
static const grpc_arg_pointer_vtable* VTable() {
|
69
|
+
static const grpc_arg_pointer_vtable tbl = {
|
70
|
+
// copy
|
71
|
+
[](void* p) -> void* { return static_cast<T*>(p)->Ref().release(); },
|
72
|
+
// destroy
|
73
|
+
[](void* p) { static_cast<T*>(p)->Unref(); },
|
74
|
+
// compare
|
75
|
+
[](void* p1, void* p2) {
|
76
|
+
return T::ChannelArgsCompare(static_cast<const T*>(p1),
|
77
|
+
static_cast<const T*>(p2));
|
78
|
+
},
|
79
|
+
};
|
80
|
+
return &tbl;
|
81
|
+
};
|
82
|
+
};
|
83
|
+
|
84
|
+
template <typename T>
|
85
|
+
struct ChannelArgTypeTraits<T,
|
86
|
+
absl::void_t<typename T::RawPointerChannelArgTag>> {
|
87
|
+
static void* TakeUnownedPointer(T* p) { return p; }
|
88
|
+
static const grpc_arg_pointer_vtable* VTable() {
|
89
|
+
static const grpc_arg_pointer_vtable tbl = {
|
90
|
+
// copy
|
91
|
+
[](void* p) -> void* { return p; },
|
92
|
+
// destroy
|
93
|
+
[](void*) {},
|
94
|
+
// compare
|
95
|
+
[](void* p1, void* p2) { return QsortCompare(p1, p2); },
|
96
|
+
};
|
97
|
+
return &tbl;
|
98
|
+
};
|
99
|
+
};
|
100
|
+
|
101
|
+
class ChannelArgs {
|
102
|
+
public:
|
103
|
+
class Pointer {
|
104
|
+
public:
|
105
|
+
Pointer(void* p, const grpc_arg_pointer_vtable* vtable)
|
106
|
+
: p_(p), vtable_(vtable == nullptr ? EmptyVTable() : vtable) {}
|
107
|
+
~Pointer() { vtable_->destroy(p_); }
|
108
|
+
|
109
|
+
Pointer(const Pointer& other)
|
110
|
+
: p_(other.vtable_->copy(other.p_)), vtable_(other.vtable_) {}
|
111
|
+
Pointer& operator=(Pointer other) {
|
112
|
+
std::swap(p_, other.p_);
|
113
|
+
std::swap(vtable_, other.vtable_);
|
114
|
+
return *this;
|
115
|
+
}
|
116
|
+
Pointer(Pointer&& other) noexcept : p_(other.p_), vtable_(other.vtable_) {
|
117
|
+
other.p_ = nullptr;
|
118
|
+
other.vtable_ = EmptyVTable();
|
119
|
+
}
|
120
|
+
Pointer& operator=(Pointer&& other) noexcept {
|
121
|
+
std::swap(p_, other.p_);
|
122
|
+
std::swap(vtable_, other.vtable_);
|
123
|
+
return *this;
|
124
|
+
}
|
125
|
+
|
126
|
+
bool operator==(const Pointer& rhs) const;
|
127
|
+
bool operator<(const Pointer& rhs) const;
|
128
|
+
bool operator!=(const Pointer& rhs) const { return !(*this == rhs); }
|
129
|
+
|
130
|
+
void* c_pointer() const { return p_; }
|
131
|
+
|
132
|
+
const grpc_arg_pointer_vtable* c_vtable() const { return vtable_; }
|
133
|
+
|
134
|
+
private:
|
135
|
+
static const grpc_arg_pointer_vtable* EmptyVTable() {
|
136
|
+
static const grpc_arg_pointer_vtable vtable = {
|
137
|
+
// copy
|
138
|
+
[](void* p) { return p; },
|
139
|
+
// destroy
|
140
|
+
[](void*) {},
|
141
|
+
// cmp
|
142
|
+
[](void* p1, void* p2) -> int { return QsortCompare(p1, p2); },
|
143
|
+
};
|
144
|
+
return &vtable;
|
145
|
+
}
|
146
|
+
|
147
|
+
void* p_;
|
148
|
+
const grpc_arg_pointer_vtable* vtable_;
|
149
|
+
};
|
150
|
+
using Value = absl::variant<int, std::string, Pointer>;
|
151
|
+
|
152
|
+
ChannelArgs();
|
153
|
+
|
154
|
+
static ChannelArgs FromC(const grpc_channel_args* args);
|
155
|
+
// Construct a new grpc_channel_args struct which the caller will own.
|
156
|
+
// It should be destroyed with grpc_channel_args_destroy.
|
157
|
+
const grpc_channel_args* ToC() const;
|
158
|
+
|
159
|
+
const Value* Get(absl::string_view name) const { return args_.Lookup(name); }
|
160
|
+
GRPC_MUST_USE_RESULT ChannelArgs Set(absl::string_view name,
|
161
|
+
Value value) const;
|
162
|
+
GRPC_MUST_USE_RESULT ChannelArgs Set(absl::string_view name,
|
163
|
+
absl::string_view value) const;
|
164
|
+
GRPC_MUST_USE_RESULT ChannelArgs Set(absl::string_view name,
|
165
|
+
std::string value) const;
|
166
|
+
GRPC_MUST_USE_RESULT ChannelArgs Set(absl::string_view name,
|
167
|
+
const char* value) const;
|
168
|
+
GRPC_MUST_USE_RESULT ChannelArgs Set(grpc_arg arg) const;
|
169
|
+
template <typename T>
|
170
|
+
GRPC_MUST_USE_RESULT absl::enable_if_t<
|
171
|
+
std::is_same<const grpc_arg_pointer_vtable*,
|
172
|
+
decltype(ChannelArgTypeTraits<T>::VTable())>::value,
|
173
|
+
ChannelArgs>
|
174
|
+
Set(absl::string_view name, T* value) const {
|
175
|
+
return Set(name, Pointer(ChannelArgTypeTraits<T>::TakeUnownedPointer(value),
|
176
|
+
ChannelArgTypeTraits<T>::VTable()));
|
177
|
+
}
|
178
|
+
template <typename T>
|
179
|
+
GRPC_MUST_USE_RESULT auto Set(absl::string_view name,
|
180
|
+
const RefCountedPtr<T>& value) const
|
181
|
+
-> absl::enable_if_t<
|
182
|
+
std::is_same<
|
183
|
+
const grpc_arg_pointer_vtable*,
|
184
|
+
decltype(ChannelArgTypeTraits<absl::remove_cvref_t<
|
185
|
+
decltype(*value->Ref())>>::VTable())>::value,
|
186
|
+
ChannelArgs> {
|
187
|
+
auto store_value = value->Ref();
|
188
|
+
return Set(
|
189
|
+
name,
|
190
|
+
Pointer(store_value.release(),
|
191
|
+
ChannelArgTypeTraits<
|
192
|
+
absl::remove_cvref_t<decltype(*store_value)>>::VTable()));
|
193
|
+
}
|
194
|
+
GRPC_MUST_USE_RESULT ChannelArgs Remove(absl::string_view name) const;
|
195
|
+
bool Contains(absl::string_view name) const { return Get(name) != nullptr; }
|
196
|
+
|
197
|
+
absl::optional<int> GetInt(absl::string_view name) const;
|
198
|
+
absl::optional<absl::string_view> GetString(absl::string_view name) const;
|
199
|
+
void* GetVoidPointer(absl::string_view name) const;
|
200
|
+
template <typename T>
|
201
|
+
T* GetPointer(absl::string_view name) const {
|
202
|
+
return static_cast<T*>(GetVoidPointer(name));
|
203
|
+
}
|
204
|
+
absl::optional<Duration> GetDurationFromIntMillis(
|
205
|
+
absl::string_view name) const;
|
206
|
+
|
207
|
+
// Object based get/set.
|
208
|
+
// Deal with the common case that we set a pointer to an object under
|
209
|
+
// the same name in every usage.
|
210
|
+
// Expects ChannelArgTypeTraits to exist for T, and T to expose:
|
211
|
+
// static string_view ChannelArgName();
|
212
|
+
template <typename T>
|
213
|
+
GRPC_MUST_USE_RESULT ChannelArgs SetObject(T* p) const {
|
214
|
+
return Set(T::ChannelArgName(), p);
|
215
|
+
}
|
216
|
+
template <typename T>
|
217
|
+
GRPC_MUST_USE_RESULT ChannelArgs SetObject(RefCountedPtr<T> p) const {
|
218
|
+
return Set(T::ChannelArgName(), std::move(p));
|
219
|
+
}
|
220
|
+
template <typename T>
|
221
|
+
T* GetObject() {
|
222
|
+
return GetPointer<T>(T::ChannelArgName());
|
223
|
+
}
|
224
|
+
|
225
|
+
bool operator<(const ChannelArgs& other) const { return args_ < other.args_; }
|
226
|
+
bool operator==(const ChannelArgs& other) const {
|
227
|
+
return args_ == other.args_;
|
228
|
+
}
|
229
|
+
|
230
|
+
private:
|
231
|
+
explicit ChannelArgs(AVL<std::string, Value> args) : args_(std::move(args)) {}
|
232
|
+
|
233
|
+
AVL<std::string, Value> args_;
|
234
|
+
};
|
235
|
+
|
236
|
+
} // namespace grpc_core
|
237
|
+
|
32
238
|
/** Copy the arguments in \a src into a new instance */
|
33
239
|
grpc_channel_args* grpc_channel_args_copy(const grpc_channel_args* src);
|
34
240
|
|
@@ -120,15 +326,10 @@ grpc_arg grpc_channel_arg_pointer_create(char* name, void* value,
|
|
120
326
|
std::string grpc_channel_args_string(const grpc_channel_args* args);
|
121
327
|
|
122
328
|
namespace grpc_core {
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
*
|
127
|
-
* Does not take ownership of \a src.
|
128
|
-
* Should be called by any public API that receives channel args. */
|
129
|
-
const grpc_channel_args* RemoveGrpcInternalArgs(const grpc_channel_args* src);
|
130
|
-
/** Ensure no duplicate channel args, in preparation for moving to a map<> */
|
131
|
-
const grpc_channel_args* UniquifyChannelArgKeys(const grpc_channel_args* src);
|
329
|
+
// Ensure no duplicate channel args (with some backwards compatibility hacks).
|
330
|
+
// Eliminate any grpc.internal.* args.
|
331
|
+
// Return a C++ object.
|
332
|
+
ChannelArgs ChannelArgsBuiltinPrecondition(const grpc_channel_args* src);
|
132
333
|
} // namespace grpc_core
|
133
334
|
|
134
335
|
// Takes ownership of the old_args
|
@@ -25,10 +25,6 @@ void ChannelArgsPreconditioning::Builder::RegisterStage(Stage stage) {
|
|
25
25
|
}
|
26
26
|
|
27
27
|
ChannelArgsPreconditioning ChannelArgsPreconditioning::Builder::Build() {
|
28
|
-
// TODO(ctiller): should probably make this registered too.
|
29
|
-
stages_.emplace_back(RemoveGrpcInternalArgs);
|
30
|
-
stages_.emplace_back(UniquifyChannelArgKeys);
|
31
|
-
|
32
28
|
ChannelArgsPreconditioning preconditioning;
|
33
29
|
preconditioning.stages_ = std::move(stages_);
|
34
30
|
return preconditioning;
|
@@ -36,13 +32,11 @@ ChannelArgsPreconditioning ChannelArgsPreconditioning::Builder::Build() {
|
|
36
32
|
|
37
33
|
const grpc_channel_args* ChannelArgsPreconditioning::PreconditionChannelArgs(
|
38
34
|
const grpc_channel_args* args) const {
|
39
|
-
|
35
|
+
ChannelArgs channel_args = ChannelArgsBuiltinPrecondition(args);
|
40
36
|
for (auto& stage : stages_) {
|
41
|
-
|
42
|
-
grpc_channel_args_destroy(owned_args);
|
43
|
-
owned_args = args;
|
37
|
+
channel_args = stage(std::move(channel_args));
|
44
38
|
}
|
45
|
-
return
|
39
|
+
return channel_args.ToC();
|
46
40
|
}
|
47
41
|
|
48
42
|
} // namespace grpc_core
|
@@ -33,8 +33,7 @@ class ChannelArgsPreconditioning {
|
|
33
33
|
// Take channel args and mutate them.
|
34
34
|
// Does not take ownership of the channel args passed in.
|
35
35
|
// Returns a new channel args object that is owned by the caller.
|
36
|
-
using Stage =
|
37
|
-
std::function<const grpc_channel_args*(const grpc_channel_args*)>;
|
36
|
+
using Stage = std::function<ChannelArgs(ChannelArgs)>;
|
38
37
|
|
39
38
|
class Builder {
|
40
39
|
public:
|
@@ -69,8 +69,6 @@ typedef struct grpc_call_element grpc_call_element;
|
|
69
69
|
typedef struct grpc_channel_stack grpc_channel_stack;
|
70
70
|
typedef struct grpc_call_stack grpc_call_stack;
|
71
71
|
|
72
|
-
#define GRPC_ARG_TRANSPORT "grpc.internal.transport"
|
73
|
-
|
74
72
|
struct grpc_channel_element_args {
|
75
73
|
grpc_channel_stack* channel_stack;
|
76
74
|
const grpc_channel_args* channel_args;
|
@@ -122,9 +120,8 @@ struct grpc_channel_filter {
|
|
122
120
|
- allocation of memory for call data
|
123
121
|
There is an on-going migration to move all filters to providing this, and
|
124
122
|
then to drop start_transport_stream_op_batch. */
|
125
|
-
grpc_core::ArenaPromise<grpc_core::
|
126
|
-
grpc_channel_element* elem,
|
127
|
-
grpc_core::ClientInitialMetadata initial_metadata,
|
123
|
+
grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle> (*make_call_promise)(
|
124
|
+
grpc_channel_element* elem, grpc_core::CallArgs call_args,
|
128
125
|
grpc_core::NextPromiseFactory next_promise_factory);
|
129
126
|
/* Called to handle channel level operations - e.g. new calls, or transport
|
130
127
|
closure.
|