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
@@ -16,6 +16,8 @@
|
|
16
16
|
|
17
17
|
#include "src/core/lib/channel/promise_based_filter.h"
|
18
18
|
|
19
|
+
#include <cstdlib>
|
20
|
+
|
19
21
|
#include "src/core/lib/channel/channel_stack.h"
|
20
22
|
|
21
23
|
namespace grpc_core {
|
@@ -24,6 +26,25 @@ namespace promise_filter_detail {
|
|
24
26
|
///////////////////////////////////////////////////////////////////////////////
|
25
27
|
// BaseCallData
|
26
28
|
|
29
|
+
BaseCallData::BaseCallData(grpc_call_element* elem,
|
30
|
+
const grpc_call_element_args* args, uint8_t flags)
|
31
|
+
: call_stack_(args->call_stack),
|
32
|
+
elem_(elem),
|
33
|
+
arena_(args->arena),
|
34
|
+
call_combiner_(args->call_combiner),
|
35
|
+
deadline_(args->deadline),
|
36
|
+
context_(args->context) {
|
37
|
+
if (flags & kFilterExaminesServerInitialMetadata) {
|
38
|
+
server_initial_metadata_latch_ = arena_->New<Latch<ServerMetadata*>>();
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
BaseCallData::~BaseCallData() {
|
43
|
+
if (server_initial_metadata_latch_ != nullptr) {
|
44
|
+
server_initial_metadata_latch_->~Latch();
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
27
48
|
// We don't form ActivityPtr's to this type, and consequently don't need
|
28
49
|
// Orphan().
|
29
50
|
void BaseCallData::Orphan() { abort(); }
|
@@ -52,23 +73,323 @@ void BaseCallData::Drop() { GRPC_CALL_STACK_UNREF(call_stack_, "waker"); }
|
|
52
73
|
///////////////////////////////////////////////////////////////////////////////
|
53
74
|
// ClientCallData
|
54
75
|
|
76
|
+
struct ClientCallData::RecvInitialMetadata final {
|
77
|
+
enum State {
|
78
|
+
// Initial state; no op seen
|
79
|
+
kInitial,
|
80
|
+
// No op seen, but we have a latch that would like to modify it when we do
|
81
|
+
kGotLatch,
|
82
|
+
// Responded to trailing metadata prior to getting a recv_initial_metadata
|
83
|
+
kRespondedToTrailingMetadataPriorToHook,
|
84
|
+
// Hooked, no latch yet
|
85
|
+
kHookedWaitingForLatch,
|
86
|
+
// Hooked, latch seen
|
87
|
+
kHookedAndGotLatch,
|
88
|
+
// Got the callback, haven't set latch yet
|
89
|
+
kCompleteWaitingForLatch,
|
90
|
+
// Got the callback and got the latch
|
91
|
+
kCompleteAndGotLatch,
|
92
|
+
// Got the callback and set the latch
|
93
|
+
kCompleteAndSetLatch,
|
94
|
+
// Called the original callback
|
95
|
+
kResponded,
|
96
|
+
};
|
97
|
+
|
98
|
+
State state = kInitial;
|
99
|
+
grpc_closure* original_on_ready = nullptr;
|
100
|
+
grpc_closure on_ready;
|
101
|
+
grpc_metadata_batch* metadata = nullptr;
|
102
|
+
Latch<ServerMetadata*>* server_initial_metadata_publisher = nullptr;
|
103
|
+
};
|
104
|
+
|
105
|
+
class ClientCallData::PollContext {
|
106
|
+
public:
|
107
|
+
explicit PollContext(ClientCallData* self) : self_(self) {
|
108
|
+
GPR_ASSERT(self_->poll_ctx_ == nullptr);
|
109
|
+
self_->poll_ctx_ = this;
|
110
|
+
scoped_activity_.Init(self_);
|
111
|
+
have_scoped_activity_ = true;
|
112
|
+
}
|
113
|
+
|
114
|
+
PollContext(const PollContext&) = delete;
|
115
|
+
PollContext& operator=(const PollContext&) = delete;
|
116
|
+
|
117
|
+
void Run() {
|
118
|
+
GPR_ASSERT(have_scoped_activity_);
|
119
|
+
repoll_ = false;
|
120
|
+
if (self_->server_initial_metadata_latch() != nullptr) {
|
121
|
+
switch (self_->recv_initial_metadata_->state) {
|
122
|
+
case RecvInitialMetadata::kInitial:
|
123
|
+
case RecvInitialMetadata::kGotLatch:
|
124
|
+
case RecvInitialMetadata::kHookedWaitingForLatch:
|
125
|
+
case RecvInitialMetadata::kHookedAndGotLatch:
|
126
|
+
case RecvInitialMetadata::kCompleteWaitingForLatch:
|
127
|
+
case RecvInitialMetadata::kResponded:
|
128
|
+
case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
|
129
|
+
break;
|
130
|
+
case RecvInitialMetadata::kCompleteAndGotLatch:
|
131
|
+
self_->recv_initial_metadata_->state =
|
132
|
+
RecvInitialMetadata::kCompleteAndSetLatch;
|
133
|
+
self_->recv_initial_metadata_->server_initial_metadata_publisher->Set(
|
134
|
+
self_->recv_initial_metadata_->metadata);
|
135
|
+
ABSL_FALLTHROUGH_INTENDED;
|
136
|
+
case RecvInitialMetadata::kCompleteAndSetLatch: {
|
137
|
+
Poll<ServerMetadata**> p =
|
138
|
+
self_->server_initial_metadata_latch()->Wait()();
|
139
|
+
if (ServerMetadata*** ppp = absl::get_if<ServerMetadata**>(&p)) {
|
140
|
+
ServerMetadata* md = **ppp;
|
141
|
+
if (self_->recv_initial_metadata_->metadata != md) {
|
142
|
+
*self_->recv_initial_metadata_->metadata = std::move(*md);
|
143
|
+
}
|
144
|
+
self_->recv_initial_metadata_->state =
|
145
|
+
RecvInitialMetadata::kResponded;
|
146
|
+
call_closures_.Add(
|
147
|
+
absl::exchange(self_->recv_initial_metadata_->original_on_ready,
|
148
|
+
nullptr),
|
149
|
+
GRPC_ERROR_NONE,
|
150
|
+
"wake_inside_combiner:recv_initial_metadata_ready");
|
151
|
+
}
|
152
|
+
} break;
|
153
|
+
}
|
154
|
+
}
|
155
|
+
if (self_->recv_trailing_state_ == RecvTrailingState::kCancelled ||
|
156
|
+
self_->recv_trailing_state_ == RecvTrailingState::kResponded) {
|
157
|
+
return;
|
158
|
+
}
|
159
|
+
switch (self_->send_initial_state_) {
|
160
|
+
case SendInitialState::kQueued:
|
161
|
+
case SendInitialState::kForwarded: {
|
162
|
+
// Poll the promise once since we're waiting for it.
|
163
|
+
Poll<ServerMetadataHandle> poll = self_->promise_();
|
164
|
+
if (auto* r = absl::get_if<ServerMetadataHandle>(&poll)) {
|
165
|
+
auto* md = UnwrapMetadata(std::move(*r));
|
166
|
+
bool destroy_md = true;
|
167
|
+
if (self_->recv_trailing_state_ == RecvTrailingState::kComplete) {
|
168
|
+
if (self_->recv_trailing_metadata_ != md) {
|
169
|
+
*self_->recv_trailing_metadata_ = std::move(*md);
|
170
|
+
} else {
|
171
|
+
destroy_md = false;
|
172
|
+
}
|
173
|
+
self_->recv_trailing_state_ = RecvTrailingState::kResponded;
|
174
|
+
call_closures_.Add(
|
175
|
+
absl::exchange(self_->original_recv_trailing_metadata_ready_,
|
176
|
+
nullptr),
|
177
|
+
GRPC_ERROR_NONE, "wake_inside_combiner:recv_trailing_ready:1");
|
178
|
+
if (self_->recv_initial_metadata_ != nullptr) {
|
179
|
+
switch (self_->recv_initial_metadata_->state) {
|
180
|
+
case RecvInitialMetadata::kInitial:
|
181
|
+
case RecvInitialMetadata::kGotLatch:
|
182
|
+
self_->recv_initial_metadata_->state = RecvInitialMetadata::
|
183
|
+
kRespondedToTrailingMetadataPriorToHook;
|
184
|
+
break;
|
185
|
+
case RecvInitialMetadata::
|
186
|
+
kRespondedToTrailingMetadataPriorToHook:
|
187
|
+
abort(); // not reachable
|
188
|
+
break;
|
189
|
+
case RecvInitialMetadata::kHookedWaitingForLatch:
|
190
|
+
case RecvInitialMetadata::kHookedAndGotLatch:
|
191
|
+
case RecvInitialMetadata::kResponded:
|
192
|
+
case RecvInitialMetadata::kCompleteAndGotLatch:
|
193
|
+
case RecvInitialMetadata::kCompleteAndSetLatch:
|
194
|
+
break;
|
195
|
+
case RecvInitialMetadata::kCompleteWaitingForLatch:
|
196
|
+
self_->recv_initial_metadata_->state =
|
197
|
+
RecvInitialMetadata::kResponded;
|
198
|
+
call_closures_.Add(
|
199
|
+
absl::exchange(
|
200
|
+
self_->recv_initial_metadata_->original_on_ready,
|
201
|
+
nullptr),
|
202
|
+
GRPC_ERROR_CANCELLED,
|
203
|
+
"wake_inside_combiner:recv_initial_metadata_ready");
|
204
|
+
}
|
205
|
+
}
|
206
|
+
} else {
|
207
|
+
GPR_ASSERT(*md->get_pointer(GrpcStatusMetadata()) !=
|
208
|
+
GRPC_STATUS_OK);
|
209
|
+
grpc_error_handle error = grpc_error_set_int(
|
210
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
211
|
+
"early return from promise based filter"),
|
212
|
+
GRPC_ERROR_INT_GRPC_STATUS,
|
213
|
+
*md->get_pointer(GrpcStatusMetadata()));
|
214
|
+
if (auto* message = md->get_pointer(GrpcMessageMetadata())) {
|
215
|
+
error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
|
216
|
+
message->as_string_view());
|
217
|
+
}
|
218
|
+
GRPC_ERROR_UNREF(self_->cancelled_error_);
|
219
|
+
self_->cancelled_error_ = GRPC_ERROR_REF(error);
|
220
|
+
if (self_->recv_initial_metadata_ != nullptr) {
|
221
|
+
switch (self_->recv_initial_metadata_->state) {
|
222
|
+
case RecvInitialMetadata::kInitial:
|
223
|
+
case RecvInitialMetadata::kGotLatch:
|
224
|
+
self_->recv_initial_metadata_->state = RecvInitialMetadata::
|
225
|
+
kRespondedToTrailingMetadataPriorToHook;
|
226
|
+
break;
|
227
|
+
case RecvInitialMetadata::kHookedWaitingForLatch:
|
228
|
+
case RecvInitialMetadata::kHookedAndGotLatch:
|
229
|
+
case RecvInitialMetadata::kResponded:
|
230
|
+
break;
|
231
|
+
case RecvInitialMetadata::
|
232
|
+
kRespondedToTrailingMetadataPriorToHook:
|
233
|
+
abort(); // not reachable
|
234
|
+
break;
|
235
|
+
case RecvInitialMetadata::kCompleteWaitingForLatch:
|
236
|
+
case RecvInitialMetadata::kCompleteAndGotLatch:
|
237
|
+
case RecvInitialMetadata::kCompleteAndSetLatch:
|
238
|
+
self_->recv_initial_metadata_->state =
|
239
|
+
RecvInitialMetadata::kResponded;
|
240
|
+
call_closures_.Add(
|
241
|
+
absl::exchange(
|
242
|
+
self_->recv_initial_metadata_->original_on_ready,
|
243
|
+
nullptr),
|
244
|
+
GRPC_ERROR_REF(error),
|
245
|
+
"wake_inside_combiner:recv_initial_metadata_ready");
|
246
|
+
}
|
247
|
+
}
|
248
|
+
if (self_->send_initial_state_ == SendInitialState::kQueued) {
|
249
|
+
self_->send_initial_state_ = SendInitialState::kCancelled;
|
250
|
+
cancel_send_initial_metadata_error_ = error;
|
251
|
+
} else {
|
252
|
+
GPR_ASSERT(
|
253
|
+
self_->recv_trailing_state_ == RecvTrailingState::kInitial ||
|
254
|
+
self_->recv_trailing_state_ == RecvTrailingState::kForwarded);
|
255
|
+
self_->call_combiner()->Cancel(GRPC_ERROR_REF(error));
|
256
|
+
forward_batch_ =
|
257
|
+
grpc_make_transport_stream_op(GRPC_CLOSURE_CREATE(
|
258
|
+
[](void* p, grpc_error_handle) {
|
259
|
+
GRPC_CALL_COMBINER_STOP(static_cast<CallCombiner*>(p),
|
260
|
+
"finish_cancel");
|
261
|
+
},
|
262
|
+
self_->call_combiner(), nullptr));
|
263
|
+
forward_batch_->cancel_stream = true;
|
264
|
+
forward_batch_->payload->cancel_stream.cancel_error = error;
|
265
|
+
}
|
266
|
+
self_->recv_trailing_state_ = RecvTrailingState::kCancelled;
|
267
|
+
}
|
268
|
+
if (destroy_md) {
|
269
|
+
md->~grpc_metadata_batch();
|
270
|
+
}
|
271
|
+
scoped_activity_.Destroy();
|
272
|
+
have_scoped_activity_ = false;
|
273
|
+
self_->promise_ = ArenaPromise<ServerMetadataHandle>();
|
274
|
+
}
|
275
|
+
} break;
|
276
|
+
case SendInitialState::kInitial:
|
277
|
+
case SendInitialState::kCancelled:
|
278
|
+
// If we get a response without sending anything, we just propagate
|
279
|
+
// that up. (note: that situation isn't possible once we finish the
|
280
|
+
// promise transition).
|
281
|
+
if (self_->recv_trailing_state_ == RecvTrailingState::kComplete) {
|
282
|
+
self_->recv_trailing_state_ = RecvTrailingState::kResponded;
|
283
|
+
call_closures_.Add(
|
284
|
+
absl::exchange(self_->original_recv_trailing_metadata_ready_,
|
285
|
+
nullptr),
|
286
|
+
GRPC_ERROR_NONE, "wake_inside_combiner:recv_trailing_ready:2");
|
287
|
+
}
|
288
|
+
break;
|
289
|
+
}
|
290
|
+
}
|
291
|
+
|
292
|
+
~PollContext() {
|
293
|
+
self_->poll_ctx_ = nullptr;
|
294
|
+
if (have_scoped_activity_) scoped_activity_.Destroy();
|
295
|
+
GRPC_CALL_STACK_REF(self_->call_stack(), "finish_poll");
|
296
|
+
bool in_combiner = true;
|
297
|
+
if (call_closures_.size() != 0) {
|
298
|
+
if (forward_batch_ != nullptr) {
|
299
|
+
call_closures_.RunClosuresWithoutYielding(self_->call_combiner());
|
300
|
+
} else {
|
301
|
+
in_combiner = false;
|
302
|
+
call_closures_.RunClosures(self_->call_combiner());
|
303
|
+
}
|
304
|
+
}
|
305
|
+
if (forward_batch_ != nullptr) {
|
306
|
+
GPR_ASSERT(in_combiner);
|
307
|
+
in_combiner = false;
|
308
|
+
forward_send_initial_metadata_ = false;
|
309
|
+
grpc_call_next_op(self_->elem(), forward_batch_);
|
310
|
+
}
|
311
|
+
if (cancel_send_initial_metadata_error_ != GRPC_ERROR_NONE) {
|
312
|
+
GPR_ASSERT(in_combiner);
|
313
|
+
forward_send_initial_metadata_ = false;
|
314
|
+
in_combiner = false;
|
315
|
+
grpc_transport_stream_op_batch_finish_with_failure(
|
316
|
+
absl::exchange(self_->send_initial_metadata_batch_, nullptr),
|
317
|
+
cancel_send_initial_metadata_error_, self_->call_combiner());
|
318
|
+
}
|
319
|
+
if (absl::exchange(forward_send_initial_metadata_, false)) {
|
320
|
+
GPR_ASSERT(in_combiner);
|
321
|
+
in_combiner = false;
|
322
|
+
grpc_call_next_op(
|
323
|
+
self_->elem(),
|
324
|
+
absl::exchange(self_->send_initial_metadata_batch_, nullptr));
|
325
|
+
}
|
326
|
+
if (repoll_) {
|
327
|
+
if (in_combiner) {
|
328
|
+
self_->WakeInsideCombiner();
|
329
|
+
} else {
|
330
|
+
struct NextPoll : public grpc_closure {
|
331
|
+
grpc_call_stack* call_stack;
|
332
|
+
ClientCallData* call_data;
|
333
|
+
};
|
334
|
+
auto run = [](void* p, grpc_error_handle) {
|
335
|
+
auto* next_poll = static_cast<NextPoll*>(p);
|
336
|
+
next_poll->call_data->WakeInsideCombiner();
|
337
|
+
GRPC_CALL_STACK_UNREF(next_poll->call_stack, "re-poll");
|
338
|
+
delete next_poll;
|
339
|
+
};
|
340
|
+
auto* p = absl::make_unique<NextPoll>().release();
|
341
|
+
p->call_stack = self_->call_stack();
|
342
|
+
p->call_data = self_;
|
343
|
+
GRPC_CALL_STACK_REF(self_->call_stack(), "re-poll");
|
344
|
+
GRPC_CLOSURE_INIT(p, run, p, nullptr);
|
345
|
+
GRPC_CALL_COMBINER_START(self_->call_combiner(), p, GRPC_ERROR_NONE,
|
346
|
+
"re-poll");
|
347
|
+
}
|
348
|
+
} else if (in_combiner) {
|
349
|
+
GRPC_CALL_COMBINER_STOP(self_->call_combiner(), "poll paused");
|
350
|
+
}
|
351
|
+
GRPC_CALL_STACK_UNREF(self_->call_stack(), "finish_poll");
|
352
|
+
}
|
353
|
+
|
354
|
+
void Repoll() { repoll_ = true; }
|
355
|
+
|
356
|
+
void ForwardSendInitialMetadata() { forward_send_initial_metadata_ = true; }
|
357
|
+
|
358
|
+
private:
|
359
|
+
ManualConstructor<ScopedActivity> scoped_activity_;
|
360
|
+
ClientCallData* self_;
|
361
|
+
CallCombinerClosureList call_closures_;
|
362
|
+
grpc_error_handle cancel_send_initial_metadata_error_ = GRPC_ERROR_NONE;
|
363
|
+
grpc_transport_stream_op_batch* forward_batch_ = nullptr;
|
364
|
+
bool repoll_ = false;
|
365
|
+
bool forward_send_initial_metadata_ = false;
|
366
|
+
bool have_scoped_activity_;
|
367
|
+
};
|
368
|
+
|
55
369
|
ClientCallData::ClientCallData(grpc_call_element* elem,
|
56
|
-
const grpc_call_element_args* args
|
57
|
-
|
370
|
+
const grpc_call_element_args* args,
|
371
|
+
uint8_t flags)
|
372
|
+
: BaseCallData(elem, args, flags) {
|
58
373
|
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
|
59
374
|
RecvTrailingMetadataReadyCallback, this,
|
60
375
|
grpc_schedule_on_exec_ctx);
|
376
|
+
if (server_initial_metadata_latch() != nullptr) {
|
377
|
+
recv_initial_metadata_ = arena()->New<RecvInitialMetadata>();
|
378
|
+
}
|
61
379
|
}
|
62
380
|
|
63
381
|
ClientCallData::~ClientCallData() {
|
64
|
-
GPR_ASSERT(
|
382
|
+
GPR_ASSERT(poll_ctx_ == nullptr);
|
65
383
|
GRPC_ERROR_UNREF(cancelled_error_);
|
384
|
+
if (recv_initial_metadata_ != nullptr) {
|
385
|
+
recv_initial_metadata_->~RecvInitialMetadata();
|
386
|
+
}
|
66
387
|
}
|
67
388
|
|
68
389
|
// Activity implementation.
|
69
390
|
void ClientCallData::ForceImmediateRepoll() {
|
70
|
-
GPR_ASSERT(
|
71
|
-
|
391
|
+
GPR_ASSERT(poll_ctx_ != nullptr);
|
392
|
+
poll_ctx_->Repoll();
|
72
393
|
}
|
73
394
|
|
74
395
|
// Handle one grpc_transport_stream_op_batch
|
@@ -88,6 +409,42 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* batch) {
|
|
88
409
|
return;
|
89
410
|
}
|
90
411
|
|
412
|
+
if (recv_initial_metadata_ != nullptr && batch->recv_initial_metadata) {
|
413
|
+
bool hook = true;
|
414
|
+
switch (recv_initial_metadata_->state) {
|
415
|
+
case RecvInitialMetadata::kInitial:
|
416
|
+
recv_initial_metadata_->state =
|
417
|
+
RecvInitialMetadata::kHookedWaitingForLatch;
|
418
|
+
break;
|
419
|
+
case RecvInitialMetadata::kGotLatch:
|
420
|
+
recv_initial_metadata_->state = RecvInitialMetadata::kHookedAndGotLatch;
|
421
|
+
break;
|
422
|
+
case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
|
423
|
+
hook = false;
|
424
|
+
break;
|
425
|
+
case RecvInitialMetadata::kHookedWaitingForLatch:
|
426
|
+
case RecvInitialMetadata::kHookedAndGotLatch:
|
427
|
+
case RecvInitialMetadata::kCompleteWaitingForLatch:
|
428
|
+
case RecvInitialMetadata::kCompleteAndGotLatch:
|
429
|
+
case RecvInitialMetadata::kCompleteAndSetLatch:
|
430
|
+
case RecvInitialMetadata::kResponded:
|
431
|
+
abort(); // unreachable
|
432
|
+
}
|
433
|
+
if (hook) {
|
434
|
+
auto cb = [](void* ptr, grpc_error_handle error) {
|
435
|
+
ClientCallData* self = static_cast<ClientCallData*>(ptr);
|
436
|
+
self->RecvInitialMetadataReady(error);
|
437
|
+
};
|
438
|
+
recv_initial_metadata_->metadata =
|
439
|
+
batch->payload->recv_initial_metadata.recv_initial_metadata;
|
440
|
+
recv_initial_metadata_->original_on_ready =
|
441
|
+
batch->payload->recv_initial_metadata.recv_initial_metadata_ready;
|
442
|
+
GRPC_CLOSURE_INIT(&recv_initial_metadata_->on_ready, cb, this, nullptr);
|
443
|
+
batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
|
444
|
+
&recv_initial_metadata_->on_ready;
|
445
|
+
}
|
446
|
+
}
|
447
|
+
|
91
448
|
// send_initial_metadata: seeing this triggers the start of the promise part
|
92
449
|
// of this filter.
|
93
450
|
if (batch->send_initial_metadata) {
|
@@ -136,7 +493,7 @@ void ClientCallData::Cancel(grpc_error_handle error) {
|
|
136
493
|
GRPC_ERROR_UNREF(cancelled_error_);
|
137
494
|
cancelled_error_ = GRPC_ERROR_REF(error);
|
138
495
|
// Stop running the promise.
|
139
|
-
promise_ = ArenaPromise<
|
496
|
+
promise_ = ArenaPromise<ServerMetadataHandle>();
|
140
497
|
// If we have an op queued, fail that op.
|
141
498
|
// Record what we've done.
|
142
499
|
if (send_initial_state_ == SendInitialState::kQueued) {
|
@@ -164,6 +521,26 @@ void ClientCallData::Cancel(grpc_error_handle error) {
|
|
164
521
|
} else {
|
165
522
|
send_initial_state_ = SendInitialState::kCancelled;
|
166
523
|
}
|
524
|
+
if (recv_initial_metadata_ != nullptr) {
|
525
|
+
switch (recv_initial_metadata_->state) {
|
526
|
+
case RecvInitialMetadata::kCompleteWaitingForLatch:
|
527
|
+
case RecvInitialMetadata::kCompleteAndGotLatch:
|
528
|
+
case RecvInitialMetadata::kCompleteAndSetLatch:
|
529
|
+
recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
|
530
|
+
GRPC_CALL_COMBINER_START(
|
531
|
+
call_combiner(),
|
532
|
+
absl::exchange(recv_initial_metadata_->original_on_ready, nullptr),
|
533
|
+
GRPC_ERROR_REF(error), "propagate cancellation");
|
534
|
+
break;
|
535
|
+
case RecvInitialMetadata::kInitial:
|
536
|
+
case RecvInitialMetadata::kGotLatch:
|
537
|
+
case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
|
538
|
+
case RecvInitialMetadata::kHookedWaitingForLatch:
|
539
|
+
case RecvInitialMetadata::kHookedAndGotLatch:
|
540
|
+
case RecvInitialMetadata::kResponded:
|
541
|
+
break;
|
542
|
+
}
|
543
|
+
}
|
167
544
|
}
|
168
545
|
|
169
546
|
// Begin running the promise - which will ultimately take some initial
|
@@ -173,16 +550,50 @@ void ClientCallData::StartPromise() {
|
|
173
550
|
ChannelFilter* filter = static_cast<ChannelFilter*>(elem()->channel_data);
|
174
551
|
|
175
552
|
// Construct the promise.
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
553
|
+
PollContext ctx(this);
|
554
|
+
promise_ = filter->MakeCallPromise(
|
555
|
+
CallArgs{WrapMetadata(send_initial_metadata_batch_->payload
|
556
|
+
->send_initial_metadata.send_initial_metadata),
|
557
|
+
server_initial_metadata_latch()},
|
558
|
+
[this](CallArgs call_args) {
|
559
|
+
return MakeNextPromise(std::move(call_args));
|
560
|
+
});
|
561
|
+
ctx.Run();
|
562
|
+
}
|
563
|
+
|
564
|
+
void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
|
565
|
+
ScopedContext context(this);
|
566
|
+
switch (recv_initial_metadata_->state) {
|
567
|
+
case RecvInitialMetadata::kHookedWaitingForLatch:
|
568
|
+
recv_initial_metadata_->state =
|
569
|
+
RecvInitialMetadata::kCompleteWaitingForLatch;
|
570
|
+
break;
|
571
|
+
case RecvInitialMetadata::kHookedAndGotLatch:
|
572
|
+
recv_initial_metadata_->state = RecvInitialMetadata::kCompleteAndGotLatch;
|
573
|
+
break;
|
574
|
+
case RecvInitialMetadata::kInitial:
|
575
|
+
case RecvInitialMetadata::kGotLatch:
|
576
|
+
case RecvInitialMetadata::kCompleteWaitingForLatch:
|
577
|
+
case RecvInitialMetadata::kCompleteAndGotLatch:
|
578
|
+
case RecvInitialMetadata::kCompleteAndSetLatch:
|
579
|
+
case RecvInitialMetadata::kResponded:
|
580
|
+
case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
|
581
|
+
abort(); // unreachable
|
582
|
+
}
|
583
|
+
if (error != GRPC_ERROR_NONE) {
|
584
|
+
recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
|
585
|
+
GRPC_CALL_COMBINER_START(
|
586
|
+
call_combiner(),
|
587
|
+
absl::exchange(recv_initial_metadata_->original_on_ready, nullptr),
|
588
|
+
GRPC_ERROR_REF(error), "propagate cancellation");
|
589
|
+
} else if (send_initial_state_ == SendInitialState::kCancelled ||
|
590
|
+
recv_trailing_state_ == RecvTrailingState::kResponded) {
|
591
|
+
recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
|
592
|
+
GRPC_CALL_COMBINER_START(
|
593
|
+
call_combiner(),
|
594
|
+
absl::exchange(recv_initial_metadata_->original_on_ready, nullptr),
|
595
|
+
GRPC_ERROR_REF(cancelled_error_), "propagate cancellation");
|
184
596
|
}
|
185
|
-
// Poll once.
|
186
597
|
WakeInsideCombiner();
|
187
598
|
}
|
188
599
|
|
@@ -203,12 +614,46 @@ void ClientCallData::HookRecvTrailingMetadata(
|
|
203
614
|
// Effectively:
|
204
615
|
// - put the modified initial metadata into the batch to be sent down.
|
205
616
|
// - return a wrapper around PollTrailingMetadata as the promise.
|
206
|
-
ArenaPromise<
|
207
|
-
|
617
|
+
ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
|
618
|
+
CallArgs call_args) {
|
619
|
+
GPR_ASSERT(poll_ctx_ != nullptr);
|
208
620
|
GPR_ASSERT(send_initial_state_ == SendInitialState::kQueued);
|
209
621
|
send_initial_metadata_batch_->payload->send_initial_metadata
|
210
|
-
.send_initial_metadata =
|
211
|
-
|
622
|
+
.send_initial_metadata =
|
623
|
+
UnwrapMetadata(std::move(call_args.client_initial_metadata));
|
624
|
+
if (recv_initial_metadata_ != nullptr) {
|
625
|
+
// Call args should contain a latch for receiving initial metadata.
|
626
|
+
// It might be the one we passed in - in which case we know this filter
|
627
|
+
// only wants to examine the metadata, or it might be a new instance, in
|
628
|
+
// which case we know the filter wants to mutate.
|
629
|
+
GPR_ASSERT(call_args.server_initial_metadata != nullptr);
|
630
|
+
recv_initial_metadata_->server_initial_metadata_publisher =
|
631
|
+
call_args.server_initial_metadata;
|
632
|
+
switch (recv_initial_metadata_->state) {
|
633
|
+
case RecvInitialMetadata::kInitial:
|
634
|
+
recv_initial_metadata_->state = RecvInitialMetadata::kGotLatch;
|
635
|
+
break;
|
636
|
+
case RecvInitialMetadata::kHookedWaitingForLatch:
|
637
|
+
recv_initial_metadata_->state = RecvInitialMetadata::kHookedAndGotLatch;
|
638
|
+
poll_ctx_->Repoll();
|
639
|
+
break;
|
640
|
+
case RecvInitialMetadata::kCompleteWaitingForLatch:
|
641
|
+
recv_initial_metadata_->state =
|
642
|
+
RecvInitialMetadata::kCompleteAndGotLatch;
|
643
|
+
poll_ctx_->Repoll();
|
644
|
+
break;
|
645
|
+
case RecvInitialMetadata::kGotLatch:
|
646
|
+
case RecvInitialMetadata::kHookedAndGotLatch:
|
647
|
+
case RecvInitialMetadata::kCompleteAndGotLatch:
|
648
|
+
case RecvInitialMetadata::kCompleteAndSetLatch:
|
649
|
+
case RecvInitialMetadata::kResponded:
|
650
|
+
case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
|
651
|
+
abort(); // unreachable
|
652
|
+
}
|
653
|
+
} else {
|
654
|
+
GPR_ASSERT(call_args.server_initial_metadata == nullptr);
|
655
|
+
}
|
656
|
+
return ArenaPromise<ServerMetadataHandle>(
|
212
657
|
[this]() { return PollTrailingMetadata(); });
|
213
658
|
}
|
214
659
|
|
@@ -216,7 +661,8 @@ ArenaPromise<TrailingMetadata> ClientCallData::MakeNextPromise(
|
|
216
661
|
// First poll: send the send_initial_metadata op down the stack.
|
217
662
|
// All polls: await receiving the trailing metadata, then return it to the
|
218
663
|
// application.
|
219
|
-
Poll<
|
664
|
+
Poll<ServerMetadataHandle> ClientCallData::PollTrailingMetadata() {
|
665
|
+
GPR_ASSERT(poll_ctx_ != nullptr);
|
220
666
|
if (send_initial_state_ == SendInitialState::kQueued) {
|
221
667
|
// First poll: pass the send_initial_metadata op down the stack.
|
222
668
|
GPR_ASSERT(send_initial_metadata_batch_ != nullptr);
|
@@ -226,7 +672,7 @@ Poll<TrailingMetadata> ClientCallData::PollTrailingMetadata() {
|
|
226
672
|
HookRecvTrailingMetadata(send_initial_metadata_batch_);
|
227
673
|
recv_trailing_state_ = RecvTrailingState::kForwarded;
|
228
674
|
}
|
229
|
-
|
675
|
+
poll_ctx_->ForwardSendInitialMetadata();
|
230
676
|
}
|
231
677
|
switch (recv_trailing_state_) {
|
232
678
|
case RecvTrailingState::kInitial:
|
@@ -261,6 +707,15 @@ void ClientCallData::RecvTrailingMetadataReadyCallback(
|
|
261
707
|
}
|
262
708
|
|
263
709
|
void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
|
710
|
+
// If we were cancelled prior to receiving this callback, we should simply
|
711
|
+
// forward the callback up with the same error.
|
712
|
+
if (recv_trailing_state_ == RecvTrailingState::kCancelled) {
|
713
|
+
if (grpc_closure* call_closure =
|
714
|
+
absl::exchange(original_recv_trailing_metadata_ready_, nullptr)) {
|
715
|
+
Closure::Run(DEBUG_LOCATION, call_closure, GRPC_ERROR_REF(error));
|
716
|
+
}
|
717
|
+
return;
|
718
|
+
}
|
264
719
|
// If there was an error, we'll put that into the trailing metadata and
|
265
720
|
// proceed as if there was not.
|
266
721
|
if (error != GRPC_ERROR_NONE) {
|
@@ -274,7 +729,7 @@ void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
|
|
274
729
|
WakeInsideCombiner();
|
275
730
|
}
|
276
731
|
|
277
|
-
// Given an error, fill in
|
732
|
+
// Given an error, fill in ServerMetadataHandle to represent that error.
|
278
733
|
void ClientCallData::SetStatusFromError(grpc_metadata_batch* metadata,
|
279
734
|
grpc_error_handle error) {
|
280
735
|
grpc_status_code status_code = GRPC_STATUS_UNKNOWN;
|
@@ -288,131 +743,7 @@ void ClientCallData::SetStatusFromError(grpc_metadata_batch* metadata,
|
|
288
743
|
}
|
289
744
|
|
290
745
|
// Wakeup and poll the promise if appropriate.
|
291
|
-
void ClientCallData::WakeInsideCombiner() {
|
292
|
-
GPR_ASSERT(!is_polling_);
|
293
|
-
grpc_closure* call_closure = nullptr;
|
294
|
-
is_polling_ = true;
|
295
|
-
grpc_error_handle cancel_send_initial_metadata_error = GRPC_ERROR_NONE;
|
296
|
-
grpc_transport_stream_op_batch* forward_batch = nullptr;
|
297
|
-
switch (send_initial_state_) {
|
298
|
-
case SendInitialState::kQueued:
|
299
|
-
case SendInitialState::kForwarded: {
|
300
|
-
// Poll the promise once since we're waiting for it.
|
301
|
-
Poll<TrailingMetadata> poll;
|
302
|
-
{
|
303
|
-
ScopedActivity activity(this);
|
304
|
-
poll = promise_();
|
305
|
-
}
|
306
|
-
if (auto* r = absl::get_if<TrailingMetadata>(&poll)) {
|
307
|
-
promise_ = ArenaPromise<TrailingMetadata>();
|
308
|
-
auto* md = UnwrapMetadata(std::move(*r));
|
309
|
-
bool destroy_md = true;
|
310
|
-
if (recv_trailing_state_ == RecvTrailingState::kComplete) {
|
311
|
-
if (recv_trailing_metadata_ != md) {
|
312
|
-
*recv_trailing_metadata_ = std::move(*md);
|
313
|
-
} else {
|
314
|
-
destroy_md = false;
|
315
|
-
}
|
316
|
-
recv_trailing_state_ = RecvTrailingState::kResponded;
|
317
|
-
call_closure =
|
318
|
-
absl::exchange(original_recv_trailing_metadata_ready_, nullptr);
|
319
|
-
} else {
|
320
|
-
GPR_ASSERT(*md->get_pointer(GrpcStatusMetadata()) != GRPC_STATUS_OK);
|
321
|
-
grpc_error_handle error =
|
322
|
-
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
323
|
-
"early return from promise based filter"),
|
324
|
-
GRPC_ERROR_INT_GRPC_STATUS,
|
325
|
-
*md->get_pointer(GrpcStatusMetadata()));
|
326
|
-
if (auto* message = md->get_pointer(GrpcMessageMetadata())) {
|
327
|
-
error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
|
328
|
-
message->as_string_view());
|
329
|
-
}
|
330
|
-
GRPC_ERROR_UNREF(cancelled_error_);
|
331
|
-
cancelled_error_ = GRPC_ERROR_REF(error);
|
332
|
-
if (send_initial_state_ == SendInitialState::kQueued) {
|
333
|
-
send_initial_state_ = SendInitialState::kCancelled;
|
334
|
-
cancel_send_initial_metadata_error = error;
|
335
|
-
} else {
|
336
|
-
GPR_ASSERT(recv_trailing_state_ == RecvTrailingState::kInitial ||
|
337
|
-
recv_trailing_state_ == RecvTrailingState::kForwarded);
|
338
|
-
call_combiner()->Cancel(GRPC_ERROR_REF(error));
|
339
|
-
forward_batch = grpc_make_transport_stream_op(GRPC_CLOSURE_CREATE(
|
340
|
-
[](void*, grpc_error_handle) {}, nullptr, nullptr));
|
341
|
-
forward_batch->cancel_stream = true;
|
342
|
-
forward_batch->payload->cancel_stream.cancel_error = error;
|
343
|
-
}
|
344
|
-
recv_trailing_state_ = RecvTrailingState::kCancelled;
|
345
|
-
}
|
346
|
-
if (destroy_md) {
|
347
|
-
md->~grpc_metadata_batch();
|
348
|
-
}
|
349
|
-
}
|
350
|
-
} break;
|
351
|
-
case SendInitialState::kInitial:
|
352
|
-
case SendInitialState::kCancelled:
|
353
|
-
// If we get a response without sending anything, we just propagate
|
354
|
-
// that up. (note: that situation isn't possible once we finish the
|
355
|
-
// promise transition).
|
356
|
-
if (recv_trailing_state_ == RecvTrailingState::kComplete) {
|
357
|
-
recv_trailing_state_ = RecvTrailingState::kResponded;
|
358
|
-
call_closure =
|
359
|
-
absl::exchange(original_recv_trailing_metadata_ready_, nullptr);
|
360
|
-
}
|
361
|
-
break;
|
362
|
-
}
|
363
|
-
GRPC_CALL_STACK_REF(call_stack(), "finish_poll");
|
364
|
-
is_polling_ = false;
|
365
|
-
bool in_combiner = true;
|
366
|
-
bool repoll = absl::exchange(repoll_, false);
|
367
|
-
if (forward_batch != nullptr) {
|
368
|
-
GPR_ASSERT(in_combiner);
|
369
|
-
in_combiner = false;
|
370
|
-
forward_send_initial_metadata_ = false;
|
371
|
-
grpc_call_next_op(elem(), forward_batch);
|
372
|
-
}
|
373
|
-
if (cancel_send_initial_metadata_error != GRPC_ERROR_NONE) {
|
374
|
-
GPR_ASSERT(in_combiner);
|
375
|
-
forward_send_initial_metadata_ = false;
|
376
|
-
in_combiner = false;
|
377
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
378
|
-
absl::exchange(send_initial_metadata_batch_, nullptr),
|
379
|
-
cancel_send_initial_metadata_error, call_combiner());
|
380
|
-
}
|
381
|
-
if (absl::exchange(forward_send_initial_metadata_, false)) {
|
382
|
-
GPR_ASSERT(in_combiner);
|
383
|
-
in_combiner = false;
|
384
|
-
grpc_call_next_op(elem(),
|
385
|
-
absl::exchange(send_initial_metadata_batch_, nullptr));
|
386
|
-
}
|
387
|
-
if (call_closure != nullptr) {
|
388
|
-
GPR_ASSERT(in_combiner);
|
389
|
-
in_combiner = false;
|
390
|
-
Closure::Run(DEBUG_LOCATION, call_closure, GRPC_ERROR_NONE);
|
391
|
-
}
|
392
|
-
if (repoll) {
|
393
|
-
if (in_combiner) {
|
394
|
-
WakeInsideCombiner();
|
395
|
-
} else {
|
396
|
-
struct NextPoll : public grpc_closure {
|
397
|
-
grpc_call_stack* call_stack;
|
398
|
-
ClientCallData* call_data;
|
399
|
-
};
|
400
|
-
auto run = [](void* p, grpc_error_handle) {
|
401
|
-
auto* next_poll = static_cast<NextPoll*>(p);
|
402
|
-
next_poll->call_data->WakeInsideCombiner();
|
403
|
-
GRPC_CALL_STACK_UNREF(next_poll->call_stack, "re-poll");
|
404
|
-
delete next_poll;
|
405
|
-
};
|
406
|
-
auto* p = new NextPoll;
|
407
|
-
GRPC_CALL_STACK_REF(call_stack(), "re-poll");
|
408
|
-
GRPC_CLOSURE_INIT(p, run, p, nullptr);
|
409
|
-
GRPC_CALL_COMBINER_START(call_combiner(), p, GRPC_ERROR_NONE, "re-poll");
|
410
|
-
}
|
411
|
-
} else if (in_combiner) {
|
412
|
-
GRPC_CALL_COMBINER_STOP(call_combiner(), "poll paused");
|
413
|
-
}
|
414
|
-
GRPC_CALL_STACK_UNREF(call_stack(), "finish_poll");
|
415
|
-
}
|
746
|
+
void ClientCallData::WakeInsideCombiner() { PollContext(this).Run(); }
|
416
747
|
|
417
748
|
void ClientCallData::OnWakeup() {
|
418
749
|
ScopedContext context(this);
|
@@ -423,8 +754,9 @@ void ClientCallData::OnWakeup() {
|
|
423
754
|
// ServerCallData
|
424
755
|
|
425
756
|
ServerCallData::ServerCallData(grpc_call_element* elem,
|
426
|
-
const grpc_call_element_args* args
|
427
|
-
|
757
|
+
const grpc_call_element_args* args,
|
758
|
+
uint8_t flags)
|
759
|
+
: BaseCallData(elem, args, flags) {
|
428
760
|
GRPC_CLOSURE_INIT(&recv_initial_metadata_ready_,
|
429
761
|
RecvInitialMetadataReadyCallback, this,
|
430
762
|
grpc_schedule_on_exec_ctx);
|
@@ -505,7 +837,7 @@ void ServerCallData::Cancel(grpc_error_handle error) {
|
|
505
837
|
GRPC_ERROR_UNREF(cancelled_error_);
|
506
838
|
cancelled_error_ = GRPC_ERROR_REF(error);
|
507
839
|
// Stop running the promise.
|
508
|
-
promise_ = ArenaPromise<
|
840
|
+
promise_ = ArenaPromise<ServerMetadataHandle>();
|
509
841
|
if (send_trailing_state_ == SendTrailingState::kQueued) {
|
510
842
|
send_trailing_state_ = SendTrailingState::kCancelled;
|
511
843
|
struct FailBatch : public grpc_closure {
|
@@ -534,20 +866,20 @@ void ServerCallData::Cancel(grpc_error_handle error) {
|
|
534
866
|
// Effectively:
|
535
867
|
// - put the modified initial metadata into the batch being sent up.
|
536
868
|
// - return a wrapper around PollTrailingMetadata as the promise.
|
537
|
-
ArenaPromise<
|
538
|
-
|
869
|
+
ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
|
870
|
+
CallArgs call_args) {
|
539
871
|
GPR_ASSERT(recv_initial_state_ == RecvInitialState::kComplete);
|
540
|
-
GPR_ASSERT(UnwrapMetadata(std::move(
|
872
|
+
GPR_ASSERT(UnwrapMetadata(std::move(call_args.client_initial_metadata)) ==
|
541
873
|
recv_initial_metadata_);
|
542
874
|
forward_recv_initial_metadata_callback_ = true;
|
543
|
-
return ArenaPromise<
|
875
|
+
return ArenaPromise<ServerMetadataHandle>(
|
544
876
|
[this]() { return PollTrailingMetadata(); });
|
545
877
|
}
|
546
878
|
|
547
879
|
// Wrapper to make it look like we're calling the next filter as a promise.
|
548
880
|
// All polls: await sending the trailing metadata, then foward it down the
|
549
881
|
// stack.
|
550
|
-
Poll<
|
882
|
+
Poll<ServerMetadataHandle> ServerCallData::PollTrailingMetadata() {
|
551
883
|
switch (send_trailing_state_) {
|
552
884
|
case SendTrailingState::kInitial:
|
553
885
|
return Pending{};
|
@@ -586,11 +918,12 @@ void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
|
|
586
918
|
ScopedContext context(this);
|
587
919
|
// Construct the promise.
|
588
920
|
ChannelFilter* filter = static_cast<ChannelFilter*>(elem()->channel_data);
|
589
|
-
promise_ =
|
590
|
-
WrapMetadata(recv_initial_metadata_),
|
591
|
-
|
592
|
-
|
593
|
-
|
921
|
+
promise_ =
|
922
|
+
filter->MakeCallPromise(CallArgs{WrapMetadata(recv_initial_metadata_),
|
923
|
+
server_initial_metadata_latch()},
|
924
|
+
[this](CallArgs call_args) {
|
925
|
+
return MakeNextPromise(std::move(call_args));
|
926
|
+
});
|
594
927
|
// Poll once.
|
595
928
|
bool own_error = false;
|
596
929
|
WakeInsideCombiner([&error, &own_error](grpc_error_handle new_error) {
|
@@ -610,12 +943,12 @@ void ServerCallData::WakeInsideCombiner(
|
|
610
943
|
bool forward_send_trailing_metadata = false;
|
611
944
|
is_polling_ = true;
|
612
945
|
if (recv_initial_state_ == RecvInitialState::kComplete) {
|
613
|
-
Poll<
|
946
|
+
Poll<ServerMetadataHandle> poll;
|
614
947
|
{
|
615
948
|
ScopedActivity activity(this);
|
616
949
|
poll = promise_();
|
617
950
|
}
|
618
|
-
if (auto* r = absl::get_if<
|
951
|
+
if (auto* r = absl::get_if<ServerMetadataHandle>(&poll)) {
|
619
952
|
auto* md = UnwrapMetadata(std::move(*r));
|
620
953
|
bool destroy_md = true;
|
621
954
|
switch (send_trailing_state_) {
|