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
@@ -0,0 +1,309 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
// TODO(ctiller): Add a unit test suite for these filters once it's practical to
|
16
|
+
// mock transport operations.
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include "src/core/ext/filters/channel_idle/channel_idle_filter.h"
|
21
|
+
|
22
|
+
#include <limits.h>
|
23
|
+
#include <stdlib.h>
|
24
|
+
|
25
|
+
#include <atomic>
|
26
|
+
#include <limits>
|
27
|
+
|
28
|
+
#include "src/core/lib/channel/channel_args.h"
|
29
|
+
#include "src/core/lib/channel/channel_stack_builder.h"
|
30
|
+
#include "src/core/lib/channel/promise_based_filter.h"
|
31
|
+
#include "src/core/lib/config/core_configuration.h"
|
32
|
+
#include "src/core/lib/gprpp/capture.h"
|
33
|
+
#include "src/core/lib/iomgr/timer.h"
|
34
|
+
#include "src/core/lib/promise/exec_ctx_wakeup_scheduler.h"
|
35
|
+
#include "src/core/lib/promise/loop.h"
|
36
|
+
#include "src/core/lib/promise/sleep.h"
|
37
|
+
#include "src/core/lib/promise/try_seq.h"
|
38
|
+
#include "src/core/lib/transport/http2_errors.h"
|
39
|
+
|
40
|
+
namespace grpc_core {
|
41
|
+
|
42
|
+
namespace {
|
43
|
+
// TODO(ctiller): The idle filter was disabled in client channel by default
|
44
|
+
// due to b/143502997. Now the bug is fixed enable the filter by default.
|
45
|
+
const auto kDefaultIdleTimeout = Duration::Infinity();
|
46
|
+
|
47
|
+
// If these settings change, make sure that we are not sending a GOAWAY for
|
48
|
+
// inproc transport, since a GOAWAY to inproc ends up destroying the transport.
|
49
|
+
const auto kDefaultMaxConnectionAge = Duration::Infinity();
|
50
|
+
const auto kDefaultMaxConnectionAgeGrace = Duration::Infinity();
|
51
|
+
const auto kDefaultMaxConnectionIdle = Duration::Infinity();
|
52
|
+
const auto kMaxConnectionAgeJitter = 0.1;
|
53
|
+
|
54
|
+
TraceFlag grpc_trace_client_idle_filter(false, "client_idle_filter");
|
55
|
+
} // namespace
|
56
|
+
|
57
|
+
#define GRPC_IDLE_FILTER_LOG(format, ...) \
|
58
|
+
do { \
|
59
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_client_idle_filter)) { \
|
60
|
+
gpr_log(GPR_INFO, "(client idle filter) " format, ##__VA_ARGS__); \
|
61
|
+
} \
|
62
|
+
} while (0)
|
63
|
+
|
64
|
+
namespace {
|
65
|
+
|
66
|
+
Duration GetClientIdleTimeout(const ChannelArgs& args) {
|
67
|
+
return args.GetDurationFromIntMillis(GRPC_ARG_CLIENT_IDLE_TIMEOUT_MS)
|
68
|
+
.value_or(kDefaultIdleTimeout);
|
69
|
+
}
|
70
|
+
|
71
|
+
} // namespace
|
72
|
+
|
73
|
+
struct MaxAgeFilter::Config {
|
74
|
+
Duration max_connection_age;
|
75
|
+
Duration max_connection_idle;
|
76
|
+
Duration max_connection_age_grace;
|
77
|
+
|
78
|
+
bool enable() const {
|
79
|
+
return max_connection_age != Duration::Infinity() ||
|
80
|
+
max_connection_idle != Duration::Infinity();
|
81
|
+
}
|
82
|
+
|
83
|
+
/* A random jitter of +/-10% will be added to MAX_CONNECTION_AGE to spread out
|
84
|
+
connection storms. Note that the MAX_CONNECTION_AGE option without jitter
|
85
|
+
would not create connection storms by itself, but if there happened to be a
|
86
|
+
connection storm it could cause it to repeat at a fixed period. */
|
87
|
+
static Config FromChannelArgs(ChannelArgs args) {
|
88
|
+
const Duration args_max_age =
|
89
|
+
args.GetDurationFromIntMillis(GRPC_ARG_MAX_CONNECTION_AGE_MS)
|
90
|
+
.value_or(kDefaultMaxConnectionAge);
|
91
|
+
const Duration args_max_idle =
|
92
|
+
args.GetDurationFromIntMillis(GRPC_ARG_MAX_CONNECTION_IDLE_MS)
|
93
|
+
.value_or(kDefaultMaxConnectionIdle);
|
94
|
+
const Duration args_max_age_grace =
|
95
|
+
args.GetDurationFromIntMillis(GRPC_ARG_MAX_CONNECTION_AGE_GRACE_MS)
|
96
|
+
.value_or(kDefaultMaxConnectionAgeGrace);
|
97
|
+
/* generate a random number between 1 - kMaxConnectionAgeJitter and
|
98
|
+
1 + kMaxConnectionAgeJitter */
|
99
|
+
const double multiplier =
|
100
|
+
rand() * kMaxConnectionAgeJitter * 2.0 / RAND_MAX + 1.0 -
|
101
|
+
kMaxConnectionAgeJitter;
|
102
|
+
/* GRPC_MILLIS_INF_FUTURE - 0.5 converts the value to float, so that result
|
103
|
+
will not be cast to int implicitly before the comparison. */
|
104
|
+
return Config{args_max_age * multiplier, args_max_idle, args_max_age_grace};
|
105
|
+
}
|
106
|
+
};
|
107
|
+
|
108
|
+
absl::StatusOr<ClientIdleFilter> ClientIdleFilter::Create(
|
109
|
+
ChannelArgs args, ChannelFilter::Args filter_args) {
|
110
|
+
ClientIdleFilter filter(filter_args.channel_stack(),
|
111
|
+
GetClientIdleTimeout(args));
|
112
|
+
return absl::StatusOr<ClientIdleFilter>(std::move(filter));
|
113
|
+
}
|
114
|
+
|
115
|
+
absl::StatusOr<MaxAgeFilter> MaxAgeFilter::Create(
|
116
|
+
ChannelArgs args, ChannelFilter::Args filter_args) {
|
117
|
+
MaxAgeFilter filter(filter_args.channel_stack(),
|
118
|
+
Config::FromChannelArgs(args));
|
119
|
+
return absl::StatusOr<MaxAgeFilter>(std::move(filter));
|
120
|
+
}
|
121
|
+
|
122
|
+
void MaxAgeFilter::Shutdown() {
|
123
|
+
max_age_activity_.Reset();
|
124
|
+
ChannelIdleFilter::Shutdown();
|
125
|
+
}
|
126
|
+
|
127
|
+
void MaxAgeFilter::Start() {
|
128
|
+
// Trigger idle timer immediately
|
129
|
+
IncreaseCallCount();
|
130
|
+
DecreaseCallCount();
|
131
|
+
|
132
|
+
struct StartupClosure {
|
133
|
+
RefCountedPtr<grpc_channel_stack> channel_stack;
|
134
|
+
MaxAgeFilter* filter;
|
135
|
+
grpc_closure closure;
|
136
|
+
};
|
137
|
+
auto run_startup = [](void* p, grpc_error_handle) {
|
138
|
+
auto* startup = static_cast<StartupClosure*>(p);
|
139
|
+
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
140
|
+
op->start_connectivity_watch.reset(
|
141
|
+
new ConnectivityWatcher(startup->filter));
|
142
|
+
op->start_connectivity_watch_state = GRPC_CHANNEL_IDLE;
|
143
|
+
grpc_channel_next_op(
|
144
|
+
grpc_channel_stack_element(startup->channel_stack.get(), 0), op);
|
145
|
+
delete startup;
|
146
|
+
};
|
147
|
+
auto* startup =
|
148
|
+
new StartupClosure{this->channel_stack()->Ref(), this, grpc_closure{}};
|
149
|
+
GRPC_CLOSURE_INIT(&startup->closure, run_startup, startup, nullptr);
|
150
|
+
ExecCtx::Run(DEBUG_LOCATION, &startup->closure, GRPC_ERROR_NONE);
|
151
|
+
|
152
|
+
auto channel_stack = this->channel_stack()->Ref();
|
153
|
+
|
154
|
+
// Start the max age timer
|
155
|
+
if (max_connection_age_ != Duration::Infinity()) {
|
156
|
+
max_age_activity_.Set(MakeActivity(
|
157
|
+
TrySeq(
|
158
|
+
// First sleep until the max connection age
|
159
|
+
Sleep(ExecCtx::Get()->Now() + max_connection_age_),
|
160
|
+
// Then send a goaway.
|
161
|
+
[this] {
|
162
|
+
GRPC_CHANNEL_STACK_REF(this->channel_stack(),
|
163
|
+
"max_age send_goaway");
|
164
|
+
// Jump out of the activity to send the goaway.
|
165
|
+
auto fn = [](void* arg, grpc_error_handle) {
|
166
|
+
auto* channel_stack = static_cast<grpc_channel_stack*>(arg);
|
167
|
+
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
168
|
+
op->goaway_error = grpc_error_set_int(
|
169
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("max_age"),
|
170
|
+
GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_NO_ERROR);
|
171
|
+
grpc_channel_element* elem =
|
172
|
+
grpc_channel_stack_element(channel_stack, 0);
|
173
|
+
elem->filter->start_transport_op(elem, op);
|
174
|
+
GRPC_CHANNEL_STACK_UNREF(channel_stack, "max_age send_goaway");
|
175
|
+
};
|
176
|
+
ExecCtx::Run(
|
177
|
+
DEBUG_LOCATION,
|
178
|
+
GRPC_CLOSURE_CREATE(fn, this->channel_stack(), nullptr),
|
179
|
+
GRPC_ERROR_NONE);
|
180
|
+
return Immediate(absl::OkStatus());
|
181
|
+
},
|
182
|
+
// Sleep for the grace period
|
183
|
+
[this] {
|
184
|
+
return Sleep(ExecCtx::Get()->Now() + max_connection_age_grace_);
|
185
|
+
}),
|
186
|
+
ExecCtxWakeupScheduler(), [channel_stack, this](absl::Status status) {
|
187
|
+
// OnDone -- close the connection if the promise completed
|
188
|
+
// successfully.
|
189
|
+
// (if it did not, it was cancelled)
|
190
|
+
if (status.ok()) CloseChannel();
|
191
|
+
}));
|
192
|
+
}
|
193
|
+
}
|
194
|
+
|
195
|
+
// Construct a promise for one call.
|
196
|
+
ArenaPromise<ServerMetadataHandle> ChannelIdleFilter::MakeCallPromise(
|
197
|
+
CallArgs call_args, NextPromiseFactory next_promise_factory) {
|
198
|
+
using Decrementer = std::unique_ptr<ChannelIdleFilter, CallCountDecreaser>;
|
199
|
+
IncreaseCallCount();
|
200
|
+
return ArenaPromise<ServerMetadataHandle>(
|
201
|
+
Capture([](Decrementer*, ArenaPromise<ServerMetadataHandle>* next)
|
202
|
+
-> Poll<ServerMetadataHandle> { return (*next)(); },
|
203
|
+
Decrementer(this), next_promise_factory(std::move(call_args))));
|
204
|
+
}
|
205
|
+
|
206
|
+
bool ChannelIdleFilter::StartTransportOp(grpc_transport_op* op) {
|
207
|
+
// Catch the disconnect_with_error transport op.
|
208
|
+
if (op->disconnect_with_error != GRPC_ERROR_NONE) Shutdown();
|
209
|
+
// Pass the op to the next filter.
|
210
|
+
return false;
|
211
|
+
}
|
212
|
+
|
213
|
+
void ChannelIdleFilter::Shutdown() {
|
214
|
+
// IncreaseCallCount() introduces a phony call and prevent the timer from
|
215
|
+
// being reset by other threads.
|
216
|
+
IncreaseCallCount();
|
217
|
+
activity_.Reset();
|
218
|
+
}
|
219
|
+
|
220
|
+
void ChannelIdleFilter::IncreaseCallCount() {
|
221
|
+
idle_filter_state_->IncreaseCallCount();
|
222
|
+
}
|
223
|
+
|
224
|
+
void ChannelIdleFilter::DecreaseCallCount() {
|
225
|
+
if (idle_filter_state_->DecreaseCallCount()) {
|
226
|
+
// If there are no more calls in progress, start the idle timer.
|
227
|
+
StartIdleTimer();
|
228
|
+
}
|
229
|
+
}
|
230
|
+
|
231
|
+
void ChannelIdleFilter::StartIdleTimer() {
|
232
|
+
GRPC_IDLE_FILTER_LOG("timer has started");
|
233
|
+
auto idle_filter_state = idle_filter_state_;
|
234
|
+
// Hold a ref to the channel stack for the timer callback.
|
235
|
+
auto channel_stack = channel_stack_->Ref();
|
236
|
+
auto timeout = client_idle_timeout_;
|
237
|
+
auto promise = Loop([timeout, idle_filter_state]() {
|
238
|
+
return TrySeq(Sleep(ExecCtx::Get()->Now() + timeout),
|
239
|
+
[idle_filter_state]() -> Poll<LoopCtl<absl::Status>> {
|
240
|
+
if (idle_filter_state->CheckTimer()) {
|
241
|
+
return Continue{};
|
242
|
+
} else {
|
243
|
+
return absl::OkStatus();
|
244
|
+
}
|
245
|
+
});
|
246
|
+
});
|
247
|
+
activity_.Set(MakeActivity(std::move(promise), ExecCtxWakeupScheduler{},
|
248
|
+
[channel_stack, this](absl::Status status) {
|
249
|
+
if (status.ok()) CloseChannel();
|
250
|
+
}));
|
251
|
+
}
|
252
|
+
|
253
|
+
void ChannelIdleFilter::CloseChannel() {
|
254
|
+
auto* op = grpc_make_transport_op(nullptr);
|
255
|
+
op->disconnect_with_error = grpc_error_set_int(
|
256
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("enter idle"),
|
257
|
+
GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, GRPC_CHANNEL_IDLE);
|
258
|
+
// Pass the transport op down to the channel stack.
|
259
|
+
auto* elem = grpc_channel_stack_element(channel_stack_, 0);
|
260
|
+
elem->filter->start_transport_op(elem, op);
|
261
|
+
}
|
262
|
+
|
263
|
+
namespace {
|
264
|
+
|
265
|
+
const grpc_channel_filter grpc_client_idle_filter =
|
266
|
+
MakePromiseBasedFilter<ClientIdleFilter, FilterEndpoint::kClient>(
|
267
|
+
"client_idle");
|
268
|
+
const grpc_channel_filter grpc_max_age_filter =
|
269
|
+
MakePromiseBasedFilter<MaxAgeFilter, FilterEndpoint::kServer>("max_age");
|
270
|
+
|
271
|
+
} // namespace
|
272
|
+
|
273
|
+
void RegisterChannelIdleFilters(CoreConfiguration::Builder* builder) {
|
274
|
+
builder->channel_init()->RegisterStage(
|
275
|
+
GRPC_CLIENT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
276
|
+
[](ChannelStackBuilder* builder) {
|
277
|
+
const grpc_channel_args* channel_args = builder->channel_args();
|
278
|
+
if (!grpc_channel_args_want_minimal_stack(channel_args) &&
|
279
|
+
GetClientIdleTimeout(ChannelArgs::FromC(channel_args)) !=
|
280
|
+
Duration::Infinity()) {
|
281
|
+
builder->PrependFilter(&grpc_client_idle_filter, nullptr);
|
282
|
+
}
|
283
|
+
return true;
|
284
|
+
});
|
285
|
+
builder->channel_init()->RegisterStage(
|
286
|
+
GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
287
|
+
[](ChannelStackBuilder* builder) {
|
288
|
+
const grpc_channel_args* channel_args = builder->channel_args();
|
289
|
+
if (!grpc_channel_args_want_minimal_stack(channel_args) &&
|
290
|
+
MaxAgeFilter::Config::FromChannelArgs(
|
291
|
+
ChannelArgs::FromC(channel_args))
|
292
|
+
.enable()) {
|
293
|
+
builder->PrependFilter(
|
294
|
+
&grpc_max_age_filter,
|
295
|
+
[](grpc_channel_stack*, grpc_channel_element* elem) {
|
296
|
+
static_cast<MaxAgeFilter*>(elem->channel_data)->Start();
|
297
|
+
});
|
298
|
+
}
|
299
|
+
return true;
|
300
|
+
});
|
301
|
+
}
|
302
|
+
|
303
|
+
MaxAgeFilter::MaxAgeFilter(grpc_channel_stack* channel_stack,
|
304
|
+
const Config& max_age_config)
|
305
|
+
: ChannelIdleFilter(channel_stack, max_age_config.max_connection_idle),
|
306
|
+
max_connection_age_(max_age_config.max_connection_age),
|
307
|
+
max_connection_age_grace_(max_age_config.max_connection_age_grace) {}
|
308
|
+
|
309
|
+
} // namespace grpc_core
|
@@ -0,0 +1,122 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CHANNEL_IDLE_CHANNEL_IDLE_FILTER_H
|
16
|
+
#define GRPC_CORE_EXT_FILTERS_CHANNEL_IDLE_CHANNEL_IDLE_FILTER_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include "src/core/ext/filters/channel_idle/idle_filter_state.h"
|
21
|
+
#include "src/core/lib/channel/promise_based_filter.h"
|
22
|
+
#include "src/core/lib/gprpp/single_set_ptr.h"
|
23
|
+
|
24
|
+
namespace grpc_core {
|
25
|
+
|
26
|
+
class ChannelIdleFilter : public ChannelFilter {
|
27
|
+
public:
|
28
|
+
~ChannelIdleFilter() override = default;
|
29
|
+
|
30
|
+
ChannelIdleFilter(const ChannelIdleFilter&) = delete;
|
31
|
+
ChannelIdleFilter& operator=(const ChannelIdleFilter&) = delete;
|
32
|
+
ChannelIdleFilter(ChannelIdleFilter&&) = default;
|
33
|
+
ChannelIdleFilter& operator=(ChannelIdleFilter&&) = default;
|
34
|
+
|
35
|
+
// Construct a promise for one call.
|
36
|
+
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
37
|
+
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
|
38
|
+
|
39
|
+
bool StartTransportOp(grpc_transport_op* op) override;
|
40
|
+
|
41
|
+
protected:
|
42
|
+
using SingleSetActivityPtr =
|
43
|
+
SingleSetPtr<Activity, typename ActivityPtr::deleter_type>;
|
44
|
+
|
45
|
+
ChannelIdleFilter(grpc_channel_stack* channel_stack,
|
46
|
+
Duration client_idle_timeout)
|
47
|
+
: channel_stack_(channel_stack),
|
48
|
+
client_idle_timeout_(client_idle_timeout) {}
|
49
|
+
|
50
|
+
grpc_channel_stack* channel_stack() { return channel_stack_; };
|
51
|
+
|
52
|
+
virtual void Shutdown();
|
53
|
+
void CloseChannel();
|
54
|
+
|
55
|
+
void IncreaseCallCount();
|
56
|
+
void DecreaseCallCount();
|
57
|
+
|
58
|
+
private:
|
59
|
+
void StartIdleTimer();
|
60
|
+
|
61
|
+
struct CallCountDecreaser {
|
62
|
+
void operator()(ChannelIdleFilter* filter) const {
|
63
|
+
filter->DecreaseCallCount();
|
64
|
+
}
|
65
|
+
};
|
66
|
+
|
67
|
+
// The channel stack to which we take refs for pending callbacks.
|
68
|
+
grpc_channel_stack* channel_stack_;
|
69
|
+
Duration client_idle_timeout_;
|
70
|
+
std::shared_ptr<IdleFilterState> idle_filter_state_{
|
71
|
+
std::make_shared<IdleFilterState>(false)};
|
72
|
+
|
73
|
+
SingleSetActivityPtr activity_;
|
74
|
+
};
|
75
|
+
|
76
|
+
class ClientIdleFilter final : public ChannelIdleFilter {
|
77
|
+
public:
|
78
|
+
static absl::StatusOr<ClientIdleFilter> Create(
|
79
|
+
ChannelArgs args, ChannelFilter::Args filter_args);
|
80
|
+
|
81
|
+
private:
|
82
|
+
using ChannelIdleFilter::ChannelIdleFilter;
|
83
|
+
};
|
84
|
+
|
85
|
+
class MaxAgeFilter final : public ChannelIdleFilter {
|
86
|
+
public:
|
87
|
+
struct Config;
|
88
|
+
|
89
|
+
static absl::StatusOr<MaxAgeFilter> Create(ChannelArgs args,
|
90
|
+
ChannelFilter::Args filter_args);
|
91
|
+
|
92
|
+
void Start();
|
93
|
+
|
94
|
+
private:
|
95
|
+
class ConnectivityWatcher : public AsyncConnectivityStateWatcherInterface {
|
96
|
+
public:
|
97
|
+
explicit ConnectivityWatcher(MaxAgeFilter* filter)
|
98
|
+
: channel_stack_(filter->channel_stack()->Ref()), filter_(filter) {}
|
99
|
+
~ConnectivityWatcher() override = default;
|
100
|
+
|
101
|
+
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
102
|
+
const absl::Status&) override {
|
103
|
+
if (new_state == GRPC_CHANNEL_SHUTDOWN) filter_->Shutdown();
|
104
|
+
}
|
105
|
+
|
106
|
+
private:
|
107
|
+
RefCountedPtr<grpc_channel_stack> channel_stack_;
|
108
|
+
MaxAgeFilter* filter_;
|
109
|
+
};
|
110
|
+
|
111
|
+
MaxAgeFilter(grpc_channel_stack* channel_stack, const Config& max_age_config);
|
112
|
+
|
113
|
+
void Shutdown() override;
|
114
|
+
|
115
|
+
SingleSetActivityPtr max_age_activity_;
|
116
|
+
Duration max_connection_age_;
|
117
|
+
Duration max_connection_age_grace_;
|
118
|
+
};
|
119
|
+
|
120
|
+
} // namespace grpc_core
|
121
|
+
|
122
|
+
#endif // GRPC_CORE_EXT_FILTERS_CHANNEL_IDLE_CHANNEL_IDLE_FILTER_H
|
@@ -12,8 +12,8 @@
|
|
12
12
|
// See the License for the specific language governing permissions and
|
13
13
|
// limitations under the License.
|
14
14
|
|
15
|
-
#ifndef
|
16
|
-
#define
|
15
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CHANNEL_IDLE_IDLE_FILTER_STATE_H
|
16
|
+
#define GRPC_CORE_EXT_FILTERS_CHANNEL_IDLE_IDLE_FILTER_STATE_H
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
@@ -63,4 +63,4 @@ class IdleFilterState {
|
|
63
63
|
|
64
64
|
} // namespace grpc_core
|
65
65
|
|
66
|
-
#endif //
|
66
|
+
#endif // GRPC_CORE_EXT_FILTERS_CHANNEL_IDLE_IDLE_FILTER_STATE_H
|