grpc 1.42.0 → 1.43.1
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 +85 -34
- data/include/grpc/event_engine/event_engine.h +37 -13
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
- data/include/grpc/event_engine/memory_allocator.h +27 -11
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/grpc_security.h +276 -145
- data/include/grpc/grpc_security_constants.h +1 -14
- data/include/grpc/impl/codegen/port_platform.h +7 -3
- data/src/core/ext/filters/client_channel/backend_metric.cc +6 -7
- data/src/core/ext/filters/client_channel/backend_metric.h +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +81 -40
- data/src/core/ext/filters/client_channel/client_channel.h +5 -4
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +4 -4
- data/src/core/ext/filters/client_channel/health/health_check_client.h +1 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +12 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +27 -80
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +82 -34
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +47 -91
- data/src/core/ext/filters/client_channel/lb_policy.h +75 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +8 -12
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +6 -12
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +222 -294
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -7
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +4 -4
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -30
- data/src/core/ext/filters/http/http_filters_plugin.cc +3 -5
- data/src/core/ext/filters/http/server/http_server_filter.cc +11 -28
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +70 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +265 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +32 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -20
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +8 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +11 -14
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +54 -79
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +9 -13
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +53 -62
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -2
- data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +83 -19
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +33 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +66 -92
- data/src/core/ext/transport/chttp2/transport/internal.h +8 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +16 -7
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +197 -165
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +18 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +26 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +107 -82
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +188 -160
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +35 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +253 -218
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +36 -25
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +56 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +162 -128
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +51 -36
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +114 -90
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +89 -71
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +117 -93
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +13 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +18 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +22 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +41 -27
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +59 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +58 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +73 -57
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +81 -64
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +25 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +19 -7
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +63 -45
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +66 -47
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +93 -75
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +41 -28
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +503 -440
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +13 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +35 -20
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +44 -31
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +22 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +210 -181
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +5 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +64 -48
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +33 -20
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +81 -65
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +75 -58
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +61 -46
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +26 -12
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +22 -10
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +27 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +20 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +30 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +38 -21
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +41 -26
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +17 -5
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +20 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +7 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +116 -93
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +102 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +306 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +56 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +135 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +122 -98
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +115 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +371 -0
- data/src/core/ext/upb-generated/google/api/http.upb.c +35 -22
- data/src/core/ext/upb-generated/google/api/http.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +247 -210
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +12 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +37 -23
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +37 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +2 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +17 -6
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +26 -14
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +105 -83
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +20 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +16 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +65 -47
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -36
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +26 -13
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +2 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +67 -7
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +27 -3
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +19 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +27 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +26 -2
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +320 -251
- data/src/core/ext/upb-generated/validate/validate.upb.h +20 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +54 -9
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +17 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +13 -2
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +24 -12
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +19 -7
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +18 -7
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +27 -15
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +18 -7
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +28 -15
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +16 -5
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +2 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +2 -49
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +2 -35
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +2 -41
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +2 -55
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +2 -53
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +2 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +2 -21
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +2 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +2 -21
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +2 -23
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +2 -111
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +2 -43
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +2 -59
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +2 -23
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +2 -7
- data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_api.cc +409 -304
- data/src/core/ext/xds/xds_api.h +3 -1
- data/src/core/ext/xds/xds_bootstrap.cc +6 -3
- data/src/core/ext/xds/xds_certificate_provider.h +1 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +3 -4
- data/src/core/ext/xds/xds_client.cc +395 -291
- data/src/core/ext/xds/xds_client.h +47 -38
- data/src/core/ext/xds/xds_routing.cc +247 -0
- data/src/core/ext/xds/xds_routing.h +98 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +975 -261
- data/src/core/lib/avl/avl.h +389 -88
- data/src/core/lib/backoff/backoff.cc +2 -2
- data/src/core/lib/channel/channel_args.cc +17 -17
- data/src/core/lib/channel/channel_args.h +11 -10
- data/src/core/lib/channel/channel_args_preconditioning.cc +47 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
- data/src/core/lib/channel/channel_stack_builder.cc +0 -2
- data/src/core/lib/channel/channel_trace.cc +6 -6
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/compression/compression_args.cc +7 -5
- data/src/core/lib/compression/compression_args.h +6 -4
- data/src/core/lib/config/core_configuration.cc +3 -1
- data/src/core/lib/config/core_configuration.h +11 -0
- data/src/core/lib/debug/trace.h +2 -2
- data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
- data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
- data/src/core/lib/event_engine/event_engine.cc +0 -13
- data/src/core/lib/event_engine/event_engine_factory.cc +49 -0
- data/src/core/lib/event_engine/event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/memory_allocator.cc +70 -0
- data/src/core/lib/gpr/tls.h +6 -0
- data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
- data/src/core/lib/gprpp/global_config_env.cc +7 -7
- data/src/core/lib/gprpp/global_config_env.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +2 -3
- data/src/core/lib/gprpp/orphanable.h +1 -1
- data/src/core/lib/gprpp/ref_counted.h +1 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
- data/src/core/lib/gprpp/status_helper.h +1 -1
- data/src/core/lib/gprpp/table.h +13 -1
- data/src/core/lib/http/httpcli.cc +30 -26
- data/src/core/lib/http/httpcli.h +14 -12
- data/src/core/lib/iomgr/buffer_list.cc +9 -9
- data/src/core/lib/iomgr/buffer_list.h +13 -13
- data/src/core/lib/iomgr/call_combiner.cc +2 -3
- data/src/core/lib/iomgr/endpoint.h +0 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -24
- data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
- data/src/core/lib/iomgr/event_engine/endpoint.cc +2 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +5 -25
- data/src/core/lib/iomgr/event_engine/resolver.cc +3 -2
- data/src/core/lib/iomgr/event_engine/tcp.cc +7 -5
- data/src/core/lib/iomgr/event_engine/timer.cc +4 -3
- data/src/core/lib/iomgr/exec_ctx.h +11 -11
- data/src/core/lib/iomgr/executor.cc +12 -15
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +2 -4
- data/src/core/lib/iomgr/tcp_client.h +1 -3
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -9
- data/src/core/lib/iomgr/tcp_client_custom.cc +4 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +7 -23
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +1 -10
- data/src/core/lib/iomgr/tcp_custom.cc +9 -36
- data/src/core/lib/iomgr/tcp_custom.h +0 -1
- data/src/core/lib/iomgr/tcp_posix.cc +28 -33
- data/src/core/lib/iomgr/tcp_posix.h +1 -3
- data/src/core/lib/iomgr/tcp_server.cc +4 -6
- data/src/core/lib/iomgr/tcp_server.h +6 -8
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -15
- data/src/core/lib/iomgr/tcp_server_posix.cc +18 -22
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
- data/src/core/lib/iomgr/tcp_server_windows.cc +5 -12
- data/src/core/lib/iomgr/tcp_windows.cc +2 -7
- data/src/core/lib/iomgr/tcp_windows.h +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +1 -1
- data/src/core/lib/iomgr/work_serializer.cc +115 -44
- data/src/core/lib/iomgr/work_serializer.h +16 -4
- data/src/core/lib/json/json_reader.cc +83 -35
- data/src/core/lib/json/json_util.cc +1 -1
- data/src/core/lib/promise/activity.cc +115 -0
- data/src/core/lib/promise/activity.h +499 -0
- data/src/core/lib/promise/context.h +86 -0
- data/src/core/lib/promise/detail/basic_seq.h +407 -0
- data/src/core/lib/promise/detail/promise_factory.h +189 -0
- data/src/core/lib/promise/detail/promise_like.h +85 -0
- data/src/core/lib/promise/detail/status.h +44 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
- data/src/core/lib/promise/loop.h +108 -0
- data/src/core/lib/promise/map.h +88 -0
- data/src/core/lib/promise/poll.h +60 -0
- data/src/core/lib/promise/race.h +84 -0
- data/src/core/lib/promise/seq.h +71 -0
- data/src/core/lib/resource_quota/api.cc +108 -0
- data/src/core/lib/resource_quota/api.h +41 -0
- data/src/core/lib/resource_quota/memory_quota.cc +454 -0
- data/src/core/lib/resource_quota/memory_quota.h +421 -0
- data/src/core/lib/resource_quota/resource_quota.cc +33 -0
- data/src/core/lib/resource_quota/resource_quota.h +58 -0
- data/src/core/lib/resource_quota/thread_quota.cc +43 -0
- data/src/core/lib/resource_quota/thread_quota.h +57 -0
- data/src/core/lib/resource_quota/trace.cc +19 -0
- data/src/core/lib/resource_quota/trace.h +24 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +13 -19
- data/src/core/lib/security/authorization/evaluate_args.h +2 -1
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +3 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +11 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -10
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +3 -4
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +4 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -22
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +11 -90
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +19 -82
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +3 -4
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +7 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +10 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +344 -195
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -41
- data/src/core/lib/security/transport/security_handshaker.cc +2 -2
- data/src/core/lib/slice/percent_encoding.cc +30 -86
- data/src/core/lib/slice/percent_encoding.h +5 -11
- data/src/core/lib/slice/slice.cc +7 -7
- data/src/core/lib/slice/slice.h +341 -0
- data/src/core/lib/slice/slice_buffer.cc +4 -0
- data/src/core/lib/slice/slice_intern.cc +1 -1
- data/src/core/lib/slice/slice_refcount.h +5 -1
- data/src/core/lib/slice/slice_refcount_base.h +19 -11
- data/src/core/lib/slice/static_slice.cc +331 -483
- data/src/core/lib/slice/static_slice.h +101 -132
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +85 -59
- data/src/core/lib/surface/channel.cc +4 -29
- data/src/core/lib/surface/channel.h +2 -12
- data/src/core/lib/surface/completion_queue.cc +2 -2
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +24 -17
- data/src/core/lib/surface/server.cc +22 -22
- data/src/core/lib/surface/server.h +8 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.cc +4 -0
- data/src/core/lib/transport/metadata.h +4 -4
- data/src/core/lib/transport/metadata_batch.cc +5 -0
- data/src/core/lib/transport/metadata_batch.h +174 -99
- data/src/core/lib/transport/parsed_metadata.cc +35 -0
- data/src/core/lib/transport/parsed_metadata.h +180 -61
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +529 -614
- data/src/core/lib/transport/static_metadata.h +0 -18
- data/src/core/lib/transport/transport.cc +4 -26
- data/src/core/lib/transport/transport.h +0 -1
- data/src/core/lib/transport/transport_op_string.cc +1 -1
- data/src/core/lib/uri/uri_parser.cc +19 -19
- data/src/core/lib/uri/uri_parser.h +2 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/local_transport_security.cc +15 -15
- data/src/core/tsi/ssl_transport_security.cc +30 -1
- data/src/core/tsi/ssl_transport_security.h +1 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -10
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +9 -15
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
- data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
- data/third_party/abseil-cpp/absl/base/config.h +67 -37
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
- data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
- data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
- data/third_party/abseil-cpp/absl/status/status.cc +9 -17
- data/third_party/abseil-cpp/absl/status/status.h +19 -15
- data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
- data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
- data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
- data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
- data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
- data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
- data/third_party/abseil-cpp/absl/time/time.h +67 -36
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
- data/third_party/abseil-cpp/absl/types/span.h +3 -3
- data/third_party/boringssl-with-bazel/err_data.c +681 -677
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +17 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +3 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +6 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
- data/third_party/upb/upb/decode.c +309 -178
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/decode_internal.h +1 -0
- data/third_party/upb/upb/def.c +330 -85
- data/third_party/upb/upb/def.h +45 -14
- data/third_party/upb/upb/def.hpp +17 -4
- data/third_party/upb/upb/encode.c +100 -40
- data/third_party/upb/upb/msg.c +22 -9
- data/third_party/upb/upb/msg_internal.h +90 -8
- data/third_party/upb/upb/reflection.c +98 -58
- data/third_party/upb/upb/reflection.h +6 -2
- data/third_party/upb/upb/text_encode.c +3 -3
- data/third_party/upb/upb/upb.c +8 -0
- metadata +116 -56
- data/src/core/lib/avl/avl.cc +0 -306
- data/src/core/lib/gprpp/match.h +0 -73
- data/src/core/lib/gprpp/overload.h +0 -59
- data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
- data/src/core/lib/iomgr/resource_quota.cc +0 -1106
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
@@ -24,54 +24,79 @@ namespace grpc_core {
|
|
24
24
|
|
25
25
|
DebugOnlyTraceFlag grpc_work_serializer_trace(false, "work_serializer");
|
26
26
|
|
27
|
-
struct CallbackWrapper {
|
28
|
-
CallbackWrapper(std::function<void()> cb, const grpc_core::DebugLocation& loc)
|
29
|
-
: callback(std::move(cb)), location(loc) {}
|
30
|
-
|
31
|
-
MultiProducerSingleConsumerQueue::Node mpscq_node;
|
32
|
-
const std::function<void()> callback;
|
33
|
-
const DebugLocation location;
|
34
|
-
};
|
35
|
-
|
36
27
|
class WorkSerializer::WorkSerializerImpl : public Orphanable {
|
37
28
|
public:
|
38
|
-
void Run(std::function<void()> callback,
|
39
|
-
|
40
|
-
|
29
|
+
void Run(std::function<void()> callback, const DebugLocation& location);
|
30
|
+
void Schedule(std::function<void()> callback, const DebugLocation& location);
|
31
|
+
void DrainQueue();
|
41
32
|
void Orphan() override;
|
42
33
|
|
43
34
|
private:
|
44
|
-
|
35
|
+
struct CallbackWrapper {
|
36
|
+
CallbackWrapper(std::function<void()> cb, const DebugLocation& loc)
|
37
|
+
: callback(std::move(cb)), location(loc) {}
|
38
|
+
|
39
|
+
MultiProducerSingleConsumerQueue::Node mpscq_node;
|
40
|
+
const std::function<void()> callback;
|
41
|
+
const DebugLocation location;
|
42
|
+
};
|
43
|
+
|
44
|
+
// Callers of DrainQueueOwned should make sure to grab the lock on the
|
45
|
+
// workserializer with
|
46
|
+
//
|
47
|
+
// prev_ref_pair =
|
48
|
+
// refs_.fetch_add(MakeRefPair(1, 1), std::memory_order_acq_rel);
|
49
|
+
//
|
50
|
+
// and only invoke DrainQueueOwned() if there was previously no owner. Note
|
51
|
+
// that the queue size is also incremented as part of the fetch_add to allow
|
52
|
+
// the callers to add a callback to the queue if another thread already holds
|
53
|
+
// the lock to the work serializer.
|
54
|
+
void DrainQueueOwned();
|
55
|
+
|
56
|
+
// First 16 bits indicate ownership of the WorkSerializer, next 48 bits are
|
57
|
+
// queue size (i.e., refs).
|
58
|
+
static uint64_t MakeRefPair(uint16_t owners, uint64_t size) {
|
59
|
+
GPR_ASSERT(size >> 48 == 0);
|
60
|
+
return (static_cast<uint64_t>(owners) << 48) + static_cast<int64_t>(size);
|
61
|
+
}
|
62
|
+
static uint32_t GetOwners(uint64_t ref_pair) {
|
63
|
+
return static_cast<uint32_t>(ref_pair >> 48);
|
64
|
+
}
|
65
|
+
static uint32_t GetSize(uint64_t ref_pair) {
|
66
|
+
return static_cast<uint32_t>(ref_pair & 0xffffffffffffu);
|
67
|
+
}
|
45
68
|
|
46
69
|
// An initial size of 1 keeps track of whether the work serializer has been
|
47
70
|
// orphaned.
|
48
|
-
std::atomic<
|
71
|
+
std::atomic<uint64_t> refs_{MakeRefPair(0, 1)};
|
49
72
|
MultiProducerSingleConsumerQueue queue_;
|
50
73
|
};
|
51
74
|
|
52
|
-
void WorkSerializer::WorkSerializerImpl::Run(
|
53
|
-
|
75
|
+
void WorkSerializer::WorkSerializerImpl::Run(std::function<void()> callback,
|
76
|
+
const DebugLocation& location) {
|
54
77
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_work_serializer_trace)) {
|
55
78
|
gpr_log(GPR_INFO, "WorkSerializer::Run() %p Scheduling callback [%s:%d]",
|
56
79
|
this, location.file(), location.line());
|
57
80
|
}
|
58
|
-
|
81
|
+
// Increment queue size for the new callback and owner count to attempt to
|
82
|
+
// take ownership of the WorkSerializer.
|
83
|
+
const uint64_t prev_ref_pair =
|
84
|
+
refs_.fetch_add(MakeRefPair(1, 1), std::memory_order_acq_rel);
|
59
85
|
// The work serializer should not have been orphaned.
|
60
|
-
GPR_DEBUG_ASSERT(
|
61
|
-
if (
|
62
|
-
//
|
63
|
-
// Execute this closure immediately.
|
86
|
+
GPR_DEBUG_ASSERT(GetSize(prev_ref_pair) > 0);
|
87
|
+
if (GetOwners(prev_ref_pair) == 0) {
|
88
|
+
// We took ownership of the WorkSerializer. Invoke callback and drain queue.
|
64
89
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_work_serializer_trace)) {
|
65
90
|
gpr_log(GPR_INFO, " Executing immediately");
|
66
91
|
}
|
67
92
|
callback();
|
68
|
-
|
69
|
-
DrainQueue();
|
93
|
+
DrainQueueOwned();
|
70
94
|
} else {
|
95
|
+
// Another thread is holding the WorkSerializer, so decrement the ownership
|
96
|
+
// count we just added and queue the callback.
|
97
|
+
refs_.fetch_sub(MakeRefPair(1, 0), std::memory_order_acq_rel);
|
71
98
|
CallbackWrapper* cb_wrapper =
|
72
99
|
new CallbackWrapper(std::move(callback), location);
|
73
|
-
// There already are closures executing on this work serializer. Simply add
|
74
|
-
// this closure to the queue.
|
75
100
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_work_serializer_trace)) {
|
76
101
|
gpr_log(GPR_INFO, " Scheduling on queue : item %p", cb_wrapper);
|
77
102
|
}
|
@@ -79,12 +104,27 @@ void WorkSerializer::WorkSerializerImpl::Run(
|
|
79
104
|
}
|
80
105
|
}
|
81
106
|
|
107
|
+
void WorkSerializer::WorkSerializerImpl::Schedule(
|
108
|
+
std::function<void()> callback, const DebugLocation& location) {
|
109
|
+
CallbackWrapper* cb_wrapper =
|
110
|
+
new CallbackWrapper(std::move(callback), location);
|
111
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_work_serializer_trace)) {
|
112
|
+
gpr_log(GPR_INFO,
|
113
|
+
"WorkSerializer::Schedule() %p Scheduling callback %p [%s:%d]",
|
114
|
+
this, cb_wrapper, location.file(), location.line());
|
115
|
+
}
|
116
|
+
refs_.fetch_add(MakeRefPair(0, 1), std::memory_order_acq_rel);
|
117
|
+
queue_.Push(&cb_wrapper->mpscq_node);
|
118
|
+
}
|
119
|
+
|
82
120
|
void WorkSerializer::WorkSerializerImpl::Orphan() {
|
83
121
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_work_serializer_trace)) {
|
84
122
|
gpr_log(GPR_INFO, "WorkSerializer::Orphan() %p", this);
|
85
123
|
}
|
86
|
-
|
87
|
-
|
124
|
+
uint64_t prev_ref_pair =
|
125
|
+
refs_.fetch_sub(MakeRefPair(0, 1), std::memory_order_acq_rel);
|
126
|
+
if (GetSize(prev_ref_pair) == 1) {
|
127
|
+
GPR_DEBUG_ASSERT(GetOwners(prev_ref_pair) == 0);
|
88
128
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_work_serializer_trace)) {
|
89
129
|
gpr_log(GPR_INFO, " Destroying");
|
90
130
|
}
|
@@ -93,30 +133,52 @@ void WorkSerializer::WorkSerializerImpl::Orphan() {
|
|
93
133
|
}
|
94
134
|
|
95
135
|
// The thread that calls this loans itself to the work serializer so as to
|
96
|
-
// execute all the scheduled
|
97
|
-
// WorkSerializer::Run() after executing a callback immediately, and hence size_
|
98
|
-
// is at least 1.
|
136
|
+
// execute all the scheduled callbacks.
|
99
137
|
void WorkSerializer::WorkSerializerImpl::DrainQueue() {
|
138
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_work_serializer_trace)) {
|
139
|
+
gpr_log(GPR_INFO, "WorkSerializer::DrainQueue() %p", this);
|
140
|
+
}
|
141
|
+
// Attempt to take ownership of the WorkSerializer. Also increment the queue
|
142
|
+
// size as required by `DrainQueueOwned()`.
|
143
|
+
const uint64_t prev_ref_pair =
|
144
|
+
refs_.fetch_add(MakeRefPair(1, 1), std::memory_order_acq_rel);
|
145
|
+
if (GetOwners(prev_ref_pair) == 0) {
|
146
|
+
// We took ownership of the WorkSerializer. Drain the queue.
|
147
|
+
DrainQueueOwned();
|
148
|
+
} else {
|
149
|
+
// Another thread is holding the WorkSerializer, so decrement the ownership
|
150
|
+
// count we just added and queue a no-op callback.
|
151
|
+
refs_.fetch_sub(MakeRefPair(1, 0), std::memory_order_acq_rel);
|
152
|
+
CallbackWrapper* cb_wrapper = new CallbackWrapper([]() {}, DEBUG_LOCATION);
|
153
|
+
queue_.Push(&cb_wrapper->mpscq_node);
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
void WorkSerializer::WorkSerializerImpl::DrainQueueOwned() {
|
158
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_work_serializer_trace)) {
|
159
|
+
gpr_log(GPR_INFO, "WorkSerializer::DrainQueueOwned() %p", this);
|
160
|
+
}
|
100
161
|
while (true) {
|
101
|
-
|
102
|
-
|
103
|
-
}
|
104
|
-
size_t prev_size = size_.fetch_sub(1);
|
105
|
-
GPR_DEBUG_ASSERT(prev_size >= 1);
|
106
|
-
// It is possible that while draining the queue, one of the callbacks ended
|
162
|
+
auto prev_ref_pair = refs_.fetch_sub(MakeRefPair(0, 1));
|
163
|
+
// It is possible that while draining the queue, the last callback ended
|
107
164
|
// up orphaning the work serializer. In that case, delete the object.
|
108
|
-
if (
|
165
|
+
if (GetSize(prev_ref_pair) == 1) {
|
109
166
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_work_serializer_trace)) {
|
110
167
|
gpr_log(GPR_INFO, " Queue Drained. Destroying");
|
111
168
|
}
|
112
169
|
delete this;
|
113
170
|
return;
|
114
171
|
}
|
115
|
-
if (
|
116
|
-
if
|
117
|
-
|
172
|
+
if (GetSize(prev_ref_pair) == 2) {
|
173
|
+
// Queue drained. Give up ownership but only if queue remains empty. Note
|
174
|
+
// that we are using relaxed memory order semantics for the load on
|
175
|
+
// failure since we don't care about that value.
|
176
|
+
uint64_t expected = MakeRefPair(1, 1);
|
177
|
+
if (refs_.compare_exchange_strong(expected, MakeRefPair(0, 1),
|
178
|
+
std::memory_order_acq_rel,
|
179
|
+
std::memory_order_relaxed)) {
|
180
|
+
return;
|
118
181
|
}
|
119
|
-
return;
|
120
182
|
}
|
121
183
|
// There is at least one callback on the queue. Pop the callback from the
|
122
184
|
// queue and execute it.
|
@@ -124,8 +186,8 @@ void WorkSerializer::WorkSerializerImpl::DrainQueue() {
|
|
124
186
|
bool empty_unused;
|
125
187
|
while ((cb_wrapper = reinterpret_cast<CallbackWrapper*>(
|
126
188
|
queue_.PopAndCheckEnd(&empty_unused))) == nullptr) {
|
127
|
-
// This can happen
|
128
|
-
// implementation or because of a race with Run()
|
189
|
+
// This can happen due to a race condition within the mpscq
|
190
|
+
// implementation or because of a race with Run()/Schedule().
|
129
191
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_work_serializer_trace)) {
|
130
192
|
gpr_log(GPR_INFO, " Queue returned nullptr, trying again");
|
131
193
|
}
|
@@ -140,7 +202,9 @@ void WorkSerializer::WorkSerializerImpl::DrainQueue() {
|
|
140
202
|
}
|
141
203
|
}
|
142
204
|
|
205
|
+
//
|
143
206
|
// WorkSerializer
|
207
|
+
//
|
144
208
|
|
145
209
|
WorkSerializer::WorkSerializer()
|
146
210
|
: impl_(MakeOrphanable<WorkSerializerImpl>()) {}
|
@@ -148,8 +212,15 @@ WorkSerializer::WorkSerializer()
|
|
148
212
|
WorkSerializer::~WorkSerializer() {}
|
149
213
|
|
150
214
|
void WorkSerializer::Run(std::function<void()> callback,
|
151
|
-
const
|
215
|
+
const DebugLocation& location) {
|
152
216
|
impl_->Run(std::move(callback), location);
|
153
217
|
}
|
154
218
|
|
219
|
+
void WorkSerializer::Schedule(std::function<void()> callback,
|
220
|
+
const DebugLocation& location) {
|
221
|
+
impl_->Schedule(std::move(callback), location);
|
222
|
+
}
|
223
|
+
|
224
|
+
void WorkSerializer::DrainQueue() { impl_->DrainQueue(); }
|
225
|
+
|
155
226
|
} // namespace grpc_core
|
@@ -45,13 +45,20 @@ namespace grpc_core {
|
|
45
45
|
// other callbacks from other threads might also be executed before Run()
|
46
46
|
// returns. Since an arbitrary set of callbacks might be executed when Run() is
|
47
47
|
// called, generally no locks should be held while calling Run().
|
48
|
+
// If a thread wants to preclude the possibility of the callback being invoked
|
49
|
+
// inline in Run() (for example, if a mutex lock is held and executing callbacks
|
50
|
+
// inline would cause a deadlock), it should use Schedule() instead and then
|
51
|
+
// invoke DrainQueue() when it is safe to invoke the callback.
|
48
52
|
class ABSL_LOCKABLE WorkSerializer {
|
49
53
|
public:
|
50
54
|
WorkSerializer();
|
51
55
|
|
52
56
|
~WorkSerializer();
|
53
57
|
|
54
|
-
// Runs a given callback.
|
58
|
+
// Runs a given callback on the work serializer. If there is no other thread
|
59
|
+
// currently executing the WorkSerializer, the callback is run immediately. In
|
60
|
+
// this case, the current thread is also borrowed for draining the queue for
|
61
|
+
// any callbacks that get added in the meantime.
|
55
62
|
//
|
56
63
|
// If you want to use clang thread annotation to make sure that callback is
|
57
64
|
// called by WorkSerializer only, you need to add the annotation to both the
|
@@ -65,10 +72,15 @@ class ABSL_LOCKABLE WorkSerializer {
|
|
65
72
|
// }
|
66
73
|
// void callback() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer) { ... }
|
67
74
|
//
|
68
|
-
// TODO(yashkt): Replace
|
75
|
+
// TODO(yashkt): Replace DebugLocation with absl::SourceLocation
|
69
76
|
// once we can start using it directly.
|
70
|
-
void Run(std::function<void()> callback,
|
71
|
-
|
77
|
+
void Run(std::function<void()> callback, const DebugLocation& location);
|
78
|
+
|
79
|
+
// Schedule \a callback to be run later when the queue of callbacks is
|
80
|
+
// drained.
|
81
|
+
void Schedule(std::function<void()> callback, const DebugLocation& location);
|
82
|
+
// Drains the queue of callbacks.
|
83
|
+
void DrainQueue();
|
72
84
|
|
73
85
|
private:
|
74
86
|
class WorkSerializerImpl;
|
@@ -95,8 +95,8 @@ class JsonReader {
|
|
95
95
|
|
96
96
|
size_t CurrentIndex() const { return input_ - original_input_ - 1; }
|
97
97
|
|
98
|
-
|
99
|
-
|
98
|
+
GRPC_MUST_USE_RESULT bool StringAddChar(uint32_t c);
|
99
|
+
GRPC_MUST_USE_RESULT bool StringAddUtf32(uint32_t c);
|
100
100
|
|
101
101
|
Json* CreateAndLinkValue();
|
102
102
|
bool StartContainer(Json::Type type);
|
@@ -119,6 +119,7 @@ class JsonReader {
|
|
119
119
|
uint16_t unicode_high_surrogate_ = 0;
|
120
120
|
std::vector<grpc_error_handle> errors_;
|
121
121
|
bool truncated_errors_ = false;
|
122
|
+
uint8_t utf8_bytes_remaining_ = 0;
|
122
123
|
|
123
124
|
Json root_value_;
|
124
125
|
std::vector<Json*> stack_;
|
@@ -127,34 +128,55 @@ class JsonReader {
|
|
127
128
|
std::string string_;
|
128
129
|
};
|
129
130
|
|
130
|
-
|
131
|
+
bool JsonReader::StringAddChar(uint32_t c) {
|
132
|
+
switch (utf8_bytes_remaining_) {
|
133
|
+
case 0:
|
134
|
+
if ((c & 0x80) == 0) {
|
135
|
+
utf8_bytes_remaining_ = 0;
|
136
|
+
} else if ((c & 0xe0) == 0xc0) {
|
137
|
+
utf8_bytes_remaining_ = 1;
|
138
|
+
} else if ((c & 0xf0) == 0xe0) {
|
139
|
+
utf8_bytes_remaining_ = 2;
|
140
|
+
} else if ((c & 0xf8) == 0xf0) {
|
141
|
+
utf8_bytes_remaining_ = 3;
|
142
|
+
} else {
|
143
|
+
return false;
|
144
|
+
}
|
145
|
+
break;
|
146
|
+
case 1:
|
147
|
+
case 2:
|
148
|
+
case 3:
|
149
|
+
if ((c & 0xc0) != 0x80) return false;
|
150
|
+
--utf8_bytes_remaining_;
|
151
|
+
break;
|
152
|
+
default:
|
153
|
+
abort();
|
154
|
+
}
|
131
155
|
string_.push_back(static_cast<uint8_t>(c));
|
156
|
+
return true;
|
132
157
|
}
|
133
158
|
|
134
|
-
|
159
|
+
bool JsonReader::StringAddUtf32(uint32_t c) {
|
135
160
|
if (c <= 0x7f) {
|
136
|
-
StringAddChar(c);
|
161
|
+
return StringAddChar(c);
|
137
162
|
} else if (c <= 0x7ff) {
|
138
163
|
uint32_t b1 = 0xc0 | ((c >> 6) & 0x1f);
|
139
164
|
uint32_t b2 = 0x80 | (c & 0x3f);
|
140
|
-
StringAddChar(b1);
|
141
|
-
StringAddChar(b2);
|
165
|
+
return StringAddChar(b1) && StringAddChar(b2);
|
142
166
|
} else if (c <= 0xffff) {
|
143
167
|
uint32_t b1 = 0xe0 | ((c >> 12) & 0x0f);
|
144
168
|
uint32_t b2 = 0x80 | ((c >> 6) & 0x3f);
|
145
169
|
uint32_t b3 = 0x80 | (c & 0x3f);
|
146
|
-
StringAddChar(b1);
|
147
|
-
StringAddChar(b2);
|
148
|
-
StringAddChar(b3);
|
170
|
+
return StringAddChar(b1) && StringAddChar(b2) && StringAddChar(b3);
|
149
171
|
} else if (c <= 0x1fffff) {
|
150
172
|
uint32_t b1 = 0xf0 | ((c >> 18) & 0x07);
|
151
173
|
uint32_t b2 = 0x80 | ((c >> 12) & 0x3f);
|
152
174
|
uint32_t b3 = 0x80 | ((c >> 6) & 0x3f);
|
153
175
|
uint32_t b4 = 0x80 | (c & 0x3f);
|
154
|
-
StringAddChar(b1)
|
155
|
-
|
156
|
-
|
157
|
-
|
176
|
+
return StringAddChar(b1) && StringAddChar(b2) && StringAddChar(b3) &&
|
177
|
+
StringAddChar(b4);
|
178
|
+
} else {
|
179
|
+
return false;
|
158
180
|
}
|
159
181
|
}
|
160
182
|
|
@@ -275,6 +297,18 @@ JsonReader::Status JsonReader::Run() {
|
|
275
297
|
switch (c) {
|
276
298
|
/* Let's process the error case first. */
|
277
299
|
case GRPC_JSON_READ_CHAR_EOF:
|
300
|
+
switch (state_) {
|
301
|
+
case State::GRPC_JSON_STATE_VALUE_NUMBER:
|
302
|
+
case State::GRPC_JSON_STATE_VALUE_NUMBER_WITH_DECIMAL:
|
303
|
+
case State::GRPC_JSON_STATE_VALUE_NUMBER_ZERO:
|
304
|
+
case State::GRPC_JSON_STATE_VALUE_NUMBER_EPM:
|
305
|
+
if (!SetNumber()) return Status::GRPC_JSON_PARSE_ERROR;
|
306
|
+
state_ = State::GRPC_JSON_STATE_VALUE_END;
|
307
|
+
break;
|
308
|
+
|
309
|
+
default:
|
310
|
+
break;
|
311
|
+
}
|
278
312
|
if (IsComplete()) {
|
279
313
|
return Status::GRPC_JSON_DONE;
|
280
314
|
}
|
@@ -299,7 +333,7 @@ JsonReader::Status JsonReader::Run() {
|
|
299
333
|
if (unicode_high_surrogate_ != 0) {
|
300
334
|
return Status::GRPC_JSON_PARSE_ERROR;
|
301
335
|
}
|
302
|
-
StringAddChar(c);
|
336
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
303
337
|
break;
|
304
338
|
|
305
339
|
case State::GRPC_JSON_STATE_VALUE_NUMBER:
|
@@ -325,7 +359,7 @@ JsonReader::Status JsonReader::Run() {
|
|
325
359
|
if (unicode_high_surrogate_ != 0) {
|
326
360
|
return Status::GRPC_JSON_PARSE_ERROR;
|
327
361
|
}
|
328
|
-
StringAddChar(c);
|
362
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
329
363
|
break;
|
330
364
|
|
331
365
|
case State::GRPC_JSON_STATE_VALUE_NUMBER:
|
@@ -410,7 +444,7 @@ JsonReader::Status JsonReader::Run() {
|
|
410
444
|
if (unicode_high_surrogate_ != 0) {
|
411
445
|
return Status::GRPC_JSON_PARSE_ERROR;
|
412
446
|
}
|
413
|
-
StringAddChar('\\');
|
447
|
+
if (!StringAddChar('\\')) return Status::GRPC_JSON_PARSE_ERROR;
|
414
448
|
if (escaped_string_was_key_) {
|
415
449
|
state_ = State::GRPC_JSON_STATE_OBJECT_KEY_STRING;
|
416
450
|
} else {
|
@@ -437,10 +471,15 @@ JsonReader::Status JsonReader::Run() {
|
|
437
471
|
}
|
438
472
|
if (c == '"') {
|
439
473
|
state_ = State::GRPC_JSON_STATE_OBJECT_KEY_END;
|
474
|
+
// Once the key is parsed, there should no un-matched utf8
|
475
|
+
// encoded bytes.
|
476
|
+
if (utf8_bytes_remaining_ != 0) {
|
477
|
+
return Status::GRPC_JSON_PARSE_ERROR;
|
478
|
+
}
|
440
479
|
SetKey();
|
441
480
|
} else {
|
442
481
|
if (c < 32) return Status::GRPC_JSON_PARSE_ERROR;
|
443
|
-
StringAddChar(c);
|
482
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
444
483
|
}
|
445
484
|
break;
|
446
485
|
|
@@ -450,10 +489,15 @@ JsonReader::Status JsonReader::Run() {
|
|
450
489
|
}
|
451
490
|
if (c == '"') {
|
452
491
|
state_ = State::GRPC_JSON_STATE_VALUE_END;
|
492
|
+
// Once the value is parsed, there should no un-matched utf8
|
493
|
+
// encoded bytes.
|
494
|
+
if (utf8_bytes_remaining_ != 0) {
|
495
|
+
return Status::GRPC_JSON_PARSE_ERROR;
|
496
|
+
}
|
453
497
|
SetString();
|
454
498
|
} else {
|
455
499
|
if (c < 32) return Status::GRPC_JSON_PARSE_ERROR;
|
456
|
-
StringAddChar(c);
|
500
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
457
501
|
}
|
458
502
|
break;
|
459
503
|
|
@@ -481,7 +525,7 @@ JsonReader::Status JsonReader::Run() {
|
|
481
525
|
break;
|
482
526
|
|
483
527
|
case '0':
|
484
|
-
StringAddChar(c);
|
528
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
485
529
|
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER_ZERO;
|
486
530
|
break;
|
487
531
|
|
@@ -495,7 +539,7 @@ JsonReader::Status JsonReader::Run() {
|
|
495
539
|
case '8':
|
496
540
|
case '9':
|
497
541
|
case '-':
|
498
|
-
StringAddChar(c);
|
542
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
499
543
|
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER;
|
500
544
|
break;
|
501
545
|
|
@@ -530,22 +574,22 @@ JsonReader::Status JsonReader::Run() {
|
|
530
574
|
switch (c) {
|
531
575
|
case '"':
|
532
576
|
case '/':
|
533
|
-
StringAddChar(c);
|
577
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
534
578
|
break;
|
535
579
|
case 'b':
|
536
|
-
StringAddChar('\b');
|
580
|
+
if (!StringAddChar('\b')) return Status::GRPC_JSON_PARSE_ERROR;
|
537
581
|
break;
|
538
582
|
case 'f':
|
539
|
-
StringAddChar('\f');
|
583
|
+
if (!StringAddChar('\f')) return Status::GRPC_JSON_PARSE_ERROR;
|
540
584
|
break;
|
541
585
|
case 'n':
|
542
|
-
StringAddChar('\n');
|
586
|
+
if (!StringAddChar('\n')) return Status::GRPC_JSON_PARSE_ERROR;
|
543
587
|
break;
|
544
588
|
case 'r':
|
545
|
-
StringAddChar('\r');
|
589
|
+
if (!StringAddChar('\r')) return Status::GRPC_JSON_PARSE_ERROR;
|
546
590
|
break;
|
547
591
|
case 't':
|
548
|
-
StringAddChar('\t');
|
592
|
+
if (!StringAddChar('\t')) return Status::GRPC_JSON_PARSE_ERROR;
|
549
593
|
break;
|
550
594
|
case 'u':
|
551
595
|
state_ = State::GRPC_JSON_STATE_STRING_ESCAPE_U1;
|
@@ -602,14 +646,18 @@ JsonReader::Status JsonReader::Run() {
|
|
602
646
|
utf32 += static_cast<uint32_t>(
|
603
647
|
(unicode_high_surrogate_ - 0xd800) * 0x400);
|
604
648
|
utf32 += static_cast<uint32_t>(unicode_char_ - 0xdc00);
|
605
|
-
StringAddUtf32(utf32)
|
649
|
+
if (!StringAddUtf32(utf32)) {
|
650
|
+
return Status::GRPC_JSON_PARSE_ERROR;
|
651
|
+
}
|
606
652
|
unicode_high_surrogate_ = 0;
|
607
653
|
} else {
|
608
654
|
/* anything else */
|
609
655
|
if (unicode_high_surrogate_ != 0) {
|
610
656
|
return Status::GRPC_JSON_PARSE_ERROR;
|
611
657
|
}
|
612
|
-
StringAddUtf32(unicode_char_)
|
658
|
+
if (!StringAddUtf32(unicode_char_)) {
|
659
|
+
return Status::GRPC_JSON_PARSE_ERROR;
|
660
|
+
}
|
613
661
|
}
|
614
662
|
if (escaped_string_was_key_) {
|
615
663
|
state_ = State::GRPC_JSON_STATE_OBJECT_KEY_STRING;
|
@@ -623,7 +671,7 @@ JsonReader::Status JsonReader::Run() {
|
|
623
671
|
break;
|
624
672
|
|
625
673
|
case State::GRPC_JSON_STATE_VALUE_NUMBER:
|
626
|
-
StringAddChar(c);
|
674
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
627
675
|
switch (c) {
|
628
676
|
case '0':
|
629
677
|
case '1':
|
@@ -649,7 +697,7 @@ JsonReader::Status JsonReader::Run() {
|
|
649
697
|
break;
|
650
698
|
|
651
699
|
case State::GRPC_JSON_STATE_VALUE_NUMBER_WITH_DECIMAL:
|
652
|
-
StringAddChar(c);
|
700
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
653
701
|
switch (c) {
|
654
702
|
case '0':
|
655
703
|
case '1':
|
@@ -673,12 +721,12 @@ JsonReader::Status JsonReader::Run() {
|
|
673
721
|
|
674
722
|
case State::GRPC_JSON_STATE_VALUE_NUMBER_ZERO:
|
675
723
|
if (c != '.') return Status::GRPC_JSON_PARSE_ERROR;
|
676
|
-
StringAddChar(c);
|
724
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
677
725
|
state_ = State::GRPC_JSON_STATE_VALUE_NUMBER_DOT;
|
678
726
|
break;
|
679
727
|
|
680
728
|
case State::GRPC_JSON_STATE_VALUE_NUMBER_DOT:
|
681
|
-
StringAddChar(c);
|
729
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
682
730
|
switch (c) {
|
683
731
|
case '0':
|
684
732
|
case '1':
|
@@ -698,7 +746,7 @@ JsonReader::Status JsonReader::Run() {
|
|
698
746
|
break;
|
699
747
|
|
700
748
|
case State::GRPC_JSON_STATE_VALUE_NUMBER_E:
|
701
|
-
StringAddChar(c);
|
749
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
702
750
|
switch (c) {
|
703
751
|
case '0':
|
704
752
|
case '1':
|
@@ -720,7 +768,7 @@ JsonReader::Status JsonReader::Run() {
|
|
720
768
|
break;
|
721
769
|
|
722
770
|
case State::GRPC_JSON_STATE_VALUE_NUMBER_EPM:
|
723
|
-
StringAddChar(c);
|
771
|
+
if (!StringAddChar(c)) return Status::GRPC_JSON_PARSE_ERROR;
|
724
772
|
switch (c) {
|
725
773
|
case '0':
|
726
774
|
case '1':
|
@@ -30,7 +30,7 @@ bool ParseDurationFromJson(const Json& field, grpc_millis* duration) {
|
|
30
30
|
if (field.type() != Json::Type::STRING) return false;
|
31
31
|
size_t len = field.string_value().size();
|
32
32
|
if (field.string_value()[len - 1] != 's') return false;
|
33
|
-
|
33
|
+
UniquePtr<char> buf(gpr_strdup(field.string_value().c_str()));
|
34
34
|
*(buf.get() + len - 1) = '\0'; // Remove trailing 's'.
|
35
35
|
char* decimal_point = strchr(buf.get(), '.');
|
36
36
|
int nanos = 0;
|