grpc 1.35.0.pre1 → 1.37.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 +121 -89
- data/include/grpc/grpc.h +15 -1
- data/include/grpc/grpc_security.h +16 -11
- data/include/grpc/impl/codegen/port_platform.h +2 -0
- data/src/core/ext/filters/client_channel/client_channel.cc +359 -331
- data/src/core/ext/filters/client_channel/client_channel.h +0 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
- data/src/core/ext/filters/client_channel/config_selector.h +9 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -4
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.cc +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +3 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +289 -170
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -25
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +232 -110
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
- data/src/core/ext/filters/client_channel/resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver.h +1 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -45
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +34 -50
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +16 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -15
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +307 -155
- data/src/core/ext/filters/client_channel/server_address.cc +9 -0
- data/src/core/ext/filters/client_channel/server_address.h +31 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +69 -146
- data/src/core/ext/filters/client_channel/subchannel.h +63 -95
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +500 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
- data/src/core/ext/filters/max_age/max_age_filter.cc +35 -32
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +3 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +490 -178
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +39 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +11 -16
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +42 -59
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +75 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +28 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +41 -7
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -21
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +13 -9
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +37 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +11 -9
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +44 -27
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +150 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +19 -21
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +64 -51
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +16 -13
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +50 -18
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +4 -7
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +0 -17
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +30 -23
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +85 -73
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -3
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -3
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -2
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +21 -4
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +29 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
- data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
- data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/resource.upb.c +9 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +753 -724
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +9 -9
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
- data/src/core/ext/xds/xds_api.cc +2149 -666
- data/src/core/ext/xds/xds_api.h +321 -119
- data/src/core/ext/xds/xds_bootstrap.cc +80 -45
- data/src/core/ext/xds/xds_bootstrap.h +17 -5
- data/src/core/ext/xds/xds_certificate_provider.cc +180 -74
- data/src/core/ext/xds/xds_certificate_provider.h +83 -44
- data/src/core/ext/xds/xds_client.cc +181 -34
- data/src/core/ext/xds/xds_client.h +29 -0
- data/src/core/ext/xds/xds_client_stats.cc +2 -1
- data/src/core/ext/xds/xds_client_stats.h +2 -2
- data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
- data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
- data/src/core/ext/xds/xds_http_filters.cc +114 -0
- data/src/core/ext/xds/xds_http_filters.h +130 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +425 -24
- data/src/core/lib/channel/channel_stack.cc +12 -0
- data/src/core/lib/channel/channel_stack.h +7 -0
- data/src/core/lib/channel/channelz.cc +92 -4
- data/src/core/lib/channel/channelz.h +30 -1
- data/src/core/lib/channel/channelz_registry.cc +14 -0
- data/src/core/lib/channel/handshaker.cc +2 -44
- data/src/core/lib/channel/handshaker.h +1 -18
- data/src/core/lib/channel/status_util.cc +12 -2
- data/src/core/lib/channel/status_util.h +5 -0
- data/src/core/lib/gpr/log.cc +6 -1
- data/src/core/lib/gpr/sync_abseil.cc +3 -6
- data/src/core/lib/gpr/sync_windows.cc +2 -2
- data/src/core/lib/gprpp/atomic.h +3 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/mpscq.cc +2 -2
- data/src/core/lib/gprpp/ref_counted.h +1 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
- data/src/core/lib/gprpp/sync.h +129 -40
- data/src/core/lib/gprpp/thd.h +1 -1
- data/src/core/lib/gprpp/time_util.cc +77 -0
- data/src/core/lib/gprpp/time_util.h +42 -0
- data/src/core/lib/http/httpcli_security_connector.cc +2 -2
- data/src/core/lib/iomgr/buffer_list.h +1 -1
- data/src/core/lib/iomgr/cfstream_handle.cc +2 -2
- data/src/core/lib/iomgr/error.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +11 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -3
- data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -4
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/exec_ctx.cc +6 -2
- data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
- data/src/core/lib/iomgr/resource_quota.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils.cc +121 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +25 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +5 -8
- data/src/core/lib/iomgr/tcp_uv.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +2 -2
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/matchers/matchers.cc +339 -0
- data/src/core/lib/matchers/matchers.h +160 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials.h +2 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +2 -2
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -6
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +0 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +0 -3
- data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +2 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +128 -59
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +9 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +32 -14
- data/src/core/lib/security/transport/security_handshaker.cc +33 -5
- data/src/core/lib/security/transport/server_auth_filter.cc +7 -0
- data/src/core/lib/slice/slice_intern.cc +5 -6
- data/src/core/lib/surface/channel.h +3 -3
- data/src/core/lib/surface/completion_queue.cc +1 -1
- data/src/core/lib/surface/init.cc +13 -15
- data/src/core/lib/surface/lame_client.cc +38 -19
- data/src/core/lib/surface/lame_client.h +4 -3
- data/src/core/lib/surface/server.cc +43 -36
- data/src/core/lib/surface/server.h +76 -14
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/metadata.cc +6 -2
- data/src/core/lib/transport/metadata_batch.cc +27 -0
- data/src/core/lib/transport/metadata_batch.h +14 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +12 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +18 -24
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +16 -21
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
- data/src/core/tsi/fake_transport_security.cc +11 -2
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
- data/src/core/tsi/ssl_transport_security.cc +0 -3
- data/src/core/tsi/ssl_transport_security.h +0 -3
- data/src/ruby/ext/grpc/extconf.rb +9 -1
- data/src/ruby/ext/grpc/rb_channel.c +10 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
- data/src/ruby/ext/grpc/rb_server.c +13 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +32 -0
- data/src/ruby/spec/channel_spec.rb +17 -6
- data/src/ruby/spec/client_auth_spec.rb +27 -1
- data/src/ruby/spec/errors_spec.rb +1 -1
- data/src/ruby/spec/generic/active_call_spec.rb +2 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +25 -0
- data/src/ruby/spec/server_spec.rb +22 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +715 -713
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +147 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -29
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +19 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +67 -33
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -99
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +139 -36
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +37 -16
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +20 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +362 -50
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +66 -24
- data/third_party/xxhash/xxhash.h +5443 -0
- metadata +140 -84
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
- data/src/core/lib/iomgr/iomgr_posix.h +0 -26
- data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
- data/src/core/lib/security/authorization/authorization_engine.h +0 -84
- data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
- data/src/core/lib/security/authorization/evaluate_args.h +0 -59
- data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
- data/third_party/upb/upb/json_decode.c +0 -1443
- data/third_party/upb/upb/json_decode.h +0 -23
- data/third_party/upb/upb/json_encode.c +0 -713
- data/third_party/upb/upb/json_encode.h +0 -36
@@ -23,10 +23,11 @@
|
|
23
23
|
|
24
24
|
#include "src/core/lib/channel/channel_stack.h"
|
25
25
|
|
26
|
-
extern const grpc_channel_filter grpc_lame_filter;
|
27
|
-
|
28
26
|
namespace grpc_core {
|
29
|
-
|
27
|
+
// Does NOT take ownership of error.
|
28
|
+
grpc_arg MakeLameClientErrorArg(grpc_error* error);
|
30
29
|
} // namespace grpc_core
|
31
30
|
|
31
|
+
extern const grpc_channel_filter grpc_lame_filter;
|
32
|
+
|
32
33
|
#endif /* GRPC_CORE_LIB_SURFACE_LAME_CLIENT_H */
|
@@ -318,7 +318,8 @@ class Server::RealRequestMatcher : public RequestMatcherInterface {
|
|
318
318
|
// advance or queue up any incoming RPC for later match. Instead, MatchOrQueue
|
319
319
|
// will call out to an allocation function passed in at the construction of the
|
320
320
|
// object. These request matchers are designed for the C++ callback API, so they
|
321
|
-
// only support 1 completion queue (passed in at the constructor).
|
321
|
+
// only support 1 completion queue (passed in at the constructor). They are also
|
322
|
+
// used for the sync API.
|
322
323
|
class Server::AllocatingRequestMatcherBase : public RequestMatcherInterface {
|
323
324
|
public:
|
324
325
|
AllocatingRequestMatcherBase(Server* server, grpc_completion_queue* cq)
|
@@ -370,15 +371,20 @@ class Server::AllocatingRequestMatcherBatch
|
|
370
371
|
|
371
372
|
void MatchOrQueue(size_t /*start_request_queue_index*/,
|
372
373
|
CallData* calld) override {
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
374
|
+
if (server()->ShutdownRefOnRequest()) {
|
375
|
+
BatchCallAllocation call_info = allocator_();
|
376
|
+
GPR_ASSERT(server()->ValidateServerRequest(
|
377
|
+
cq(), static_cast<void*>(call_info.tag), nullptr,
|
378
|
+
nullptr) == GRPC_CALL_OK);
|
379
|
+
RequestedCall* rc = new RequestedCall(
|
380
|
+
static_cast<void*>(call_info.tag), call_info.cq, call_info.call,
|
381
|
+
call_info.initial_metadata, call_info.details);
|
382
|
+
calld->SetState(CallData::CallState::ACTIVATED);
|
383
|
+
calld->Publish(cq_idx(), rc);
|
384
|
+
} else {
|
385
|
+
calld->FailCallCreation();
|
386
|
+
}
|
387
|
+
server()->ShutdownUnrefOnRequest();
|
382
388
|
}
|
383
389
|
|
384
390
|
private:
|
@@ -398,17 +404,21 @@ class Server::AllocatingRequestMatcherRegistered
|
|
398
404
|
|
399
405
|
void MatchOrQueue(size_t /*start_request_queue_index*/,
|
400
406
|
CallData* calld) override {
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
407
|
+
if (server()->ShutdownRefOnRequest()) {
|
408
|
+
RegisteredCallAllocation call_info = allocator_();
|
409
|
+
GPR_ASSERT(server()->ValidateServerRequest(
|
410
|
+
cq(), call_info.tag, call_info.optional_payload,
|
411
|
+
registered_method_) == GRPC_CALL_OK);
|
412
|
+
RequestedCall* rc =
|
413
|
+
new RequestedCall(call_info.tag, call_info.cq, call_info.call,
|
414
|
+
call_info.initial_metadata, registered_method_,
|
415
|
+
call_info.deadline, call_info.optional_payload);
|
416
|
+
calld->SetState(CallData::CallState::ACTIVATED);
|
417
|
+
calld->Publish(cq_idx(), rc);
|
418
|
+
} else {
|
419
|
+
calld->FailCallCreation();
|
420
|
+
}
|
421
|
+
server()->ShutdownUnrefOnRequest();
|
412
422
|
}
|
413
423
|
|
414
424
|
private:
|
@@ -513,7 +523,7 @@ grpc_resource_user* CreateDefaultResourceUser(const grpc_channel_args* args) {
|
|
513
523
|
}
|
514
524
|
|
515
525
|
RefCountedPtr<channelz::ServerNode> CreateChannelzNode(
|
516
|
-
|
526
|
+
const grpc_channel_args* args) {
|
517
527
|
RefCountedPtr<channelz::ServerNode> channelz_node;
|
518
528
|
if (grpc_channel_args_find_bool(args, GRPC_ARG_ENABLE_CHANNELZ,
|
519
529
|
GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
@@ -534,7 +544,7 @@ RefCountedPtr<channelz::ServerNode> CreateChannelzNode(
|
|
534
544
|
Server::Server(const grpc_channel_args* args)
|
535
545
|
: channel_args_(grpc_channel_args_copy(args)),
|
536
546
|
default_resource_user_(CreateDefaultResourceUser(args)),
|
537
|
-
channelz_node_(CreateChannelzNode(
|
547
|
+
channelz_node_(CreateChannelzNode(args)) {}
|
538
548
|
|
539
549
|
Server::~Server() {
|
540
550
|
grpc_channel_args_destroy(channel_args_);
|
@@ -711,7 +721,7 @@ void Server::FailCall(size_t cq_idx, RequestedCall* rc, grpc_error* error) {
|
|
711
721
|
// Before calling MaybeFinishShutdown(), we must hold mu_global_ and not
|
712
722
|
// hold mu_call_.
|
713
723
|
void Server::MaybeFinishShutdown() {
|
714
|
-
if (!
|
724
|
+
if (!ShutdownReady() || shutdown_published_) {
|
715
725
|
return;
|
716
726
|
}
|
717
727
|
{
|
@@ -796,7 +806,7 @@ void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
|
|
796
806
|
{
|
797
807
|
// Wait for startup to be finished. Locks mu_global.
|
798
808
|
MutexLock lock(&mu_global_);
|
799
|
-
|
809
|
+
WaitUntil(&starting_cv_, &mu_global_, [this] { return !starting_; });
|
800
810
|
// Stay locked, and gather up some stuff to do.
|
801
811
|
GPR_ASSERT(grpc_cq_begin_op(cq, tag));
|
802
812
|
if (shutdown_published_) {
|
@@ -805,19 +815,18 @@ void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
|
|
805
815
|
return;
|
806
816
|
}
|
807
817
|
shutdown_tags_.emplace_back(tag, cq);
|
808
|
-
if (
|
818
|
+
if (ShutdownCalled()) {
|
809
819
|
return;
|
810
820
|
}
|
811
821
|
last_shutdown_message_time_ = gpr_now(GPR_CLOCK_REALTIME);
|
812
822
|
broadcaster.FillChannelsLocked(GetChannelsLocked());
|
813
|
-
shutdown_flag_.store(true, std::memory_order_release);
|
814
823
|
// Collect all unregistered then registered calls.
|
815
824
|
{
|
816
825
|
MutexLock lock(&mu_call_);
|
817
826
|
KillPendingWorkLocked(
|
818
827
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
|
819
828
|
}
|
820
|
-
|
829
|
+
ShutdownUnrefOnShutdownCall();
|
821
830
|
}
|
822
831
|
// Shutdown listeners.
|
823
832
|
for (auto& listener : listeners_) {
|
@@ -849,8 +858,7 @@ void Server::CancelAllCalls() {
|
|
849
858
|
void Server::Orphan() {
|
850
859
|
{
|
851
860
|
MutexLock lock(&mu_global_);
|
852
|
-
GPR_ASSERT(
|
853
|
-
listeners_.empty());
|
861
|
+
GPR_ASSERT(ShutdownCalled() || listeners_.empty());
|
854
862
|
GPR_ASSERT(listeners_destroyed_ == listeners_.size());
|
855
863
|
}
|
856
864
|
if (default_resource_user_ != nullptr) {
|
@@ -869,7 +877,7 @@ grpc_call_error Server::ValidateServerRequest(
|
|
869
877
|
(rm->payload_handling == GRPC_SRM_PAYLOAD_NONE)))) {
|
870
878
|
return GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH;
|
871
879
|
}
|
872
|
-
if (grpc_cq_begin_op(cq_for_notification, tag)
|
880
|
+
if (!grpc_cq_begin_op(cq_for_notification, tag)) {
|
873
881
|
return GRPC_CALL_ERROR_COMPLETION_QUEUE_SHUTDOWN;
|
874
882
|
}
|
875
883
|
return GRPC_CALL_OK;
|
@@ -897,7 +905,7 @@ grpc_call_error Server::ValidateServerRequestAndCq(
|
|
897
905
|
}
|
898
906
|
|
899
907
|
grpc_call_error Server::QueueRequestedCall(size_t cq_idx, RequestedCall* rc) {
|
900
|
-
if (
|
908
|
+
if (ShutdownCalled()) {
|
901
909
|
FailCall(cq_idx, rc,
|
902
910
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
|
903
911
|
return GRPC_CALL_OK;
|
@@ -1066,7 +1074,7 @@ void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
|
|
1066
1074
|
op->set_accept_stream_fn = AcceptStream;
|
1067
1075
|
op->set_accept_stream_user_data = this;
|
1068
1076
|
op->start_connectivity_watch = MakeOrphanable<ConnectivityWatcher>(this);
|
1069
|
-
if (server_->
|
1077
|
+
if (server_->ShutdownCalled()) {
|
1070
1078
|
op->disconnect_with_error =
|
1071
1079
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown");
|
1072
1080
|
}
|
@@ -1282,8 +1290,7 @@ void Server::CallData::PublishNewRpc(void* arg, grpc_error* error) {
|
|
1282
1290
|
auto* chand = static_cast<Server::ChannelData*>(call_elem->channel_data);
|
1283
1291
|
RequestMatcherInterface* rm = calld->matcher_;
|
1284
1292
|
Server* server = rm->server();
|
1285
|
-
if (error != GRPC_ERROR_NONE ||
|
1286
|
-
server->shutdown_flag_.load(std::memory_order_acquire)) {
|
1293
|
+
if (error != GRPC_ERROR_NONE || server->ShutdownCalled()) {
|
1287
1294
|
calld->state_.Store(CallState::ZOMBIED, MemoryOrder::RELAXED);
|
1288
1295
|
calld->KillZombie();
|
1289
1296
|
return;
|
@@ -1307,7 +1314,7 @@ void Server::CallData::KillZombie() {
|
|
1307
1314
|
|
1308
1315
|
void Server::CallData::StartNewRpc(grpc_call_element* elem) {
|
1309
1316
|
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
1310
|
-
if (server_->
|
1317
|
+
if (server_->ShutdownCalled()) {
|
1311
1318
|
state_.Store(CallState::ZOMBIED, MemoryOrder::RELAXED);
|
1312
1319
|
KillZombie();
|
1313
1320
|
return;
|
@@ -22,6 +22,7 @@
|
|
22
22
|
#include <list>
|
23
23
|
#include <vector>
|
24
24
|
|
25
|
+
#include "absl/status/statusor.h"
|
25
26
|
#include "absl/types/optional.h"
|
26
27
|
|
27
28
|
#include <grpc/grpc.h>
|
@@ -31,6 +32,7 @@
|
|
31
32
|
#include "src/core/lib/channel/channelz.h"
|
32
33
|
#include "src/core/lib/debug/trace.h"
|
33
34
|
#include "src/core/lib/gprpp/atomic.h"
|
35
|
+
#include "src/core/lib/iomgr/resolve_address.h"
|
34
36
|
#include "src/core/lib/surface/completion_queue.h"
|
35
37
|
#include "src/core/lib/transport/transport.h"
|
36
38
|
|
@@ -49,21 +51,23 @@ class Server : public InternallyRefCounted<Server> {
|
|
49
51
|
// An object to represent the most relevant characteristics of a
|
50
52
|
// newly-allocated call object when using an AllocatingRequestMatcherBatch.
|
51
53
|
struct BatchCallAllocation {
|
52
|
-
|
54
|
+
void* tag;
|
53
55
|
grpc_call** call;
|
54
56
|
grpc_metadata_array* initial_metadata;
|
55
57
|
grpc_call_details* details;
|
58
|
+
grpc_completion_queue* cq;
|
56
59
|
};
|
57
60
|
|
58
61
|
// An object to represent the most relevant characteristics of a
|
59
62
|
// newly-allocated call object when using an
|
60
63
|
// AllocatingRequestMatcherRegistered.
|
61
64
|
struct RegisteredCallAllocation {
|
62
|
-
|
65
|
+
void* tag;
|
63
66
|
grpc_call** call;
|
64
67
|
grpc_metadata_array* initial_metadata;
|
65
68
|
gpr_timespec* deadline;
|
66
69
|
grpc_byte_buffer** optional_payload;
|
70
|
+
grpc_completion_queue* cq;
|
67
71
|
};
|
68
72
|
|
69
73
|
/// Interface for listeners.
|
@@ -90,7 +94,7 @@ class Server : public InternallyRefCounted<Server> {
|
|
90
94
|
explicit Server(const grpc_channel_args* args);
|
91
95
|
~Server() override;
|
92
96
|
|
93
|
-
void Orphan() override;
|
97
|
+
void Orphan() ABSL_LOCKS_EXCLUDED(mu_global_) override;
|
94
98
|
|
95
99
|
const grpc_channel_args* channel_args() const { return channel_args_; }
|
96
100
|
grpc_resource_user* default_resource_user() const {
|
@@ -112,7 +116,7 @@ class Server : public InternallyRefCounted<Server> {
|
|
112
116
|
config_fetcher_ = std::move(config_fetcher);
|
113
117
|
}
|
114
118
|
|
115
|
-
bool HasOpenConnections();
|
119
|
+
bool HasOpenConnections() ABSL_LOCKS_EXCLUDED(mu_global_);
|
116
120
|
|
117
121
|
// Adds a listener to the server. When the server starts, it will call
|
118
122
|
// the listener's Start() method, and when it shuts down, it will orphan
|
@@ -120,7 +124,7 @@ class Server : public InternallyRefCounted<Server> {
|
|
120
124
|
void AddListener(OrphanablePtr<ListenerInterface> listener);
|
121
125
|
|
122
126
|
// Starts listening for connections.
|
123
|
-
void Start();
|
127
|
+
void Start() ABSL_LOCKS_EXCLUDED(mu_global_);
|
124
128
|
|
125
129
|
// Sets up a transport. Creates a channel stack and binds the transport to
|
126
130
|
// the server. Called from the listener when a new connection is accepted.
|
@@ -158,9 +162,10 @@ class Server : public InternallyRefCounted<Server> {
|
|
158
162
|
grpc_completion_queue* cq_bound_to_call,
|
159
163
|
grpc_completion_queue* cq_for_notification, void* tag_new);
|
160
164
|
|
161
|
-
void ShutdownAndNotify(grpc_completion_queue* cq, void* tag)
|
165
|
+
void ShutdownAndNotify(grpc_completion_queue* cq, void* tag)
|
166
|
+
ABSL_LOCKS_EXCLUDED(mu_global_, mu_call_);
|
162
167
|
|
163
|
-
void CancelAllCalls();
|
168
|
+
void CancelAllCalls() ABSL_LOCKS_EXCLUDED(mu_global_);
|
164
169
|
|
165
170
|
private:
|
166
171
|
struct RequestedCall;
|
@@ -207,7 +212,7 @@ class Server : public InternallyRefCounted<Server> {
|
|
207
212
|
static void AcceptStream(void* arg, grpc_transport* /*transport*/,
|
208
213
|
const void* transport_server_data);
|
209
214
|
|
210
|
-
void Destroy();
|
215
|
+
void Destroy() ABSL_EXCLUSIVE_LOCKS_REQUIRED(server_->mu_global_);
|
211
216
|
|
212
217
|
static void FinishDestroy(void* arg, grpc_error* error);
|
213
218
|
|
@@ -343,9 +348,11 @@ class Server : public InternallyRefCounted<Server> {
|
|
343
348
|
void FailCall(size_t cq_idx, RequestedCall* rc, grpc_error* error);
|
344
349
|
grpc_call_error QueueRequestedCall(size_t cq_idx, RequestedCall* rc);
|
345
350
|
|
346
|
-
void MaybeFinishShutdown()
|
351
|
+
void MaybeFinishShutdown() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_global_)
|
352
|
+
ABSL_LOCKS_EXCLUDED(mu_call_);
|
347
353
|
|
348
|
-
void KillPendingWorkLocked(grpc_error* error)
|
354
|
+
void KillPendingWorkLocked(grpc_error* error)
|
355
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_call_);
|
349
356
|
|
350
357
|
static grpc_call_error ValidateServerRequest(
|
351
358
|
grpc_completion_queue* cq_for_notification, void* tag,
|
@@ -356,6 +363,39 @@ class Server : public InternallyRefCounted<Server> {
|
|
356
363
|
|
357
364
|
std::vector<grpc_channel*> GetChannelsLocked() const;
|
358
365
|
|
366
|
+
// Take a shutdown ref for a request (increment by 2) and return if shutdown
|
367
|
+
// has already been called.
|
368
|
+
bool ShutdownRefOnRequest() {
|
369
|
+
int old_value = shutdown_refs_.FetchAdd(2, MemoryOrder::ACQ_REL);
|
370
|
+
return (old_value & 1) != 0;
|
371
|
+
}
|
372
|
+
|
373
|
+
// Decrement the shutdown ref counter by either 1 (for shutdown call) or 2
|
374
|
+
// (for in-flight request) and possibly call MaybeFinishShutdown if
|
375
|
+
// appropriate.
|
376
|
+
void ShutdownUnrefOnRequest() ABSL_LOCKS_EXCLUDED(mu_global_) {
|
377
|
+
if (shutdown_refs_.FetchSub(2, MemoryOrder::ACQ_REL) == 2) {
|
378
|
+
MutexLock lock(&mu_global_);
|
379
|
+
MaybeFinishShutdown();
|
380
|
+
}
|
381
|
+
}
|
382
|
+
void ShutdownUnrefOnShutdownCall() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_global_) {
|
383
|
+
if (shutdown_refs_.FetchSub(1, MemoryOrder::ACQ_REL) == 1) {
|
384
|
+
MaybeFinishShutdown();
|
385
|
+
}
|
386
|
+
}
|
387
|
+
|
388
|
+
bool ShutdownCalled() const {
|
389
|
+
return (shutdown_refs_.Load(MemoryOrder::ACQUIRE) & 1) == 0;
|
390
|
+
}
|
391
|
+
|
392
|
+
// Returns whether there are no more shutdown refs, which means that shutdown
|
393
|
+
// has been called and all accepted requests have been published if using an
|
394
|
+
// AllocatingRequestMatcher.
|
395
|
+
bool ShutdownReady() const {
|
396
|
+
return shutdown_refs_.Load(MemoryOrder::ACQUIRE) == 0;
|
397
|
+
}
|
398
|
+
|
359
399
|
grpc_channel_args* const channel_args_;
|
360
400
|
grpc_resource_user* default_resource_user_ = nullptr;
|
361
401
|
RefCountedPtr<channelz::ServerNode> channelz_node_;
|
@@ -385,9 +425,15 @@ class Server : public InternallyRefCounted<Server> {
|
|
385
425
|
// Request matcher for unregistered methods.
|
386
426
|
std::unique_ptr<RequestMatcherInterface> unregistered_request_matcher_;
|
387
427
|
|
388
|
-
|
389
|
-
|
390
|
-
|
428
|
+
// The shutdown refs counter tracks whether or not shutdown has been called
|
429
|
+
// and whether there are any AllocatingRequestMatcher requests that have been
|
430
|
+
// accepted but not yet started (+2 on each one). If shutdown has been called,
|
431
|
+
// the lowest bit will be 0 (defaults to 1) and the counter will be even. The
|
432
|
+
// server should not notify on shutdown until the counter is 0 (shutdown is
|
433
|
+
// called and there are no requests that are accepted but not started).
|
434
|
+
Atomic<int> shutdown_refs_{1};
|
435
|
+
bool shutdown_published_ ABSL_GUARDED_BY(mu_global_) = false;
|
436
|
+
std::vector<ShutdownTag> shutdown_tags_ ABSL_GUARDED_BY(mu_global_);
|
391
437
|
|
392
438
|
std::list<ChannelData*> channels_;
|
393
439
|
|
@@ -412,15 +458,31 @@ struct grpc_server {
|
|
412
458
|
// approaches here.
|
413
459
|
struct grpc_server_config_fetcher {
|
414
460
|
public:
|
461
|
+
class ConnectionManager : public grpc_core::RefCounted<ConnectionManager> {
|
462
|
+
public:
|
463
|
+
// Ownership of \a args is transfered.
|
464
|
+
virtual absl::StatusOr<grpc_channel_args*> UpdateChannelArgsForConnection(
|
465
|
+
grpc_channel_args* args, grpc_endpoint* tcp) = 0;
|
466
|
+
};
|
467
|
+
|
415
468
|
class WatcherInterface {
|
416
469
|
public:
|
417
470
|
virtual ~WatcherInterface() = default;
|
418
|
-
|
471
|
+
// UpdateConnectionManager() is invoked by the config fetcher when a new
|
472
|
+
// config is available. Implementations should update the connection manager
|
473
|
+
// and start serving if not already serving.
|
474
|
+
virtual void UpdateConnectionManager(
|
475
|
+
grpc_core::RefCountedPtr<ConnectionManager> manager) = 0;
|
476
|
+
// Implementations should stop serving when this is called. Serving should
|
477
|
+
// only resume when UpdateConfig() is invoked.
|
478
|
+
virtual void StopServing() = 0;
|
419
479
|
};
|
420
480
|
|
421
481
|
virtual ~grpc_server_config_fetcher() = default;
|
422
482
|
|
483
|
+
// Ownership of \a args is transferred.
|
423
484
|
virtual void StartWatch(std::string listening_address,
|
485
|
+
grpc_channel_args* args,
|
424
486
|
std::unique_ptr<WatcherInterface> watcher) = 0;
|
425
487
|
virtual void CancelWatch(WatcherInterface* watcher) = 0;
|
426
488
|
virtual grpc_pollset_set* interested_parties() = 0;
|
@@ -23,6 +23,6 @@
|
|
23
23
|
|
24
24
|
#include <grpc/grpc.h>
|
25
25
|
|
26
|
-
const char* grpc_version_string(void) { return "
|
26
|
+
const char* grpc_version_string(void) { return "15.0.0"; }
|
27
27
|
|
28
|
-
const char* grpc_g_stands_for(void) { return "
|
28
|
+
const char* grpc_g_stands_for(void) { return "gilded"; }
|
@@ -252,7 +252,7 @@ void grpc_mdctx_global_shutdown() {
|
|
252
252
|
if (shard->count != 0) {
|
253
253
|
gpr_log(GPR_ERROR, "WARNING: %" PRIuPTR " metadata elements were leaked",
|
254
254
|
shard->count);
|
255
|
-
for (
|
255
|
+
for (size_t i = 0; i < shard->capacity; i++) {
|
256
256
|
for (InternedMetadata* md = shard->elems[i].next; md;
|
257
257
|
md = md->bucket_next()) {
|
258
258
|
char* key_str = grpc_slice_to_c_string(md->key());
|
@@ -596,7 +596,7 @@ static void* set_user_data(UserData* ud, void (*destroy_func)(void*),
|
|
596
596
|
grpc_core::ReleasableMutexLock lock(&ud->mu_user_data);
|
597
597
|
if (ud->destroy_user_data.Load(grpc_core::MemoryOrder::RELAXED)) {
|
598
598
|
/* user data can only be set once */
|
599
|
-
lock.
|
599
|
+
lock.Release();
|
600
600
|
if (destroy_func != nullptr) {
|
601
601
|
destroy_func(data);
|
602
602
|
}
|
@@ -673,6 +673,10 @@ void grpc_mdelem_do_unref(grpc_mdelem gmd DEBUG_ARGS) {
|
|
673
673
|
|
674
674
|
void grpc_mdelem_on_final_unref(grpc_mdelem_data_storage storage, void* ptr,
|
675
675
|
uint32_t hash DEBUG_ARGS) {
|
676
|
+
#ifndef NDEBUG
|
677
|
+
(void)file;
|
678
|
+
(void)line;
|
679
|
+
#endif
|
676
680
|
switch (storage) {
|
677
681
|
case GRPC_MDELEM_STORAGE_EXTERNAL:
|
678
682
|
case GRPC_MDELEM_STORAGE_STATIC:
|
@@ -23,6 +23,9 @@
|
|
23
23
|
#include <stdbool.h>
|
24
24
|
#include <string.h>
|
25
25
|
|
26
|
+
#include "absl/container/inlined_vector.h"
|
27
|
+
#include "absl/strings/str_join.h"
|
28
|
+
|
26
29
|
#include <grpc/support/alloc.h>
|
27
30
|
#include <grpc/support/log.h>
|
28
31
|
|
@@ -296,6 +299,30 @@ void grpc_metadata_batch_set_value(grpc_linked_mdelem* storage,
|
|
296
299
|
GRPC_MDELEM_UNREF(old_mdelem);
|
297
300
|
}
|
298
301
|
|
302
|
+
absl::optional<absl::string_view> grpc_metadata_batch_get_value(
|
303
|
+
grpc_metadata_batch* batch, absl::string_view target_key,
|
304
|
+
std::string* concatenated_value) {
|
305
|
+
// Find all values for the specified key.
|
306
|
+
GPR_DEBUG_ASSERT(batch != nullptr);
|
307
|
+
absl::InlinedVector<absl::string_view, 1> values;
|
308
|
+
for (grpc_linked_mdelem* md = batch->list.head; md != nullptr;
|
309
|
+
md = md->next) {
|
310
|
+
absl::string_view key = grpc_core::StringViewFromSlice(GRPC_MDKEY(md->md));
|
311
|
+
absl::string_view value =
|
312
|
+
grpc_core::StringViewFromSlice(GRPC_MDVALUE(md->md));
|
313
|
+
if (target_key == key) values.push_back(value);
|
314
|
+
}
|
315
|
+
// If none found, no match.
|
316
|
+
if (values.empty()) return absl::nullopt;
|
317
|
+
// If exactly one found, return it as-is.
|
318
|
+
if (values.size() == 1) return values.front();
|
319
|
+
// If more than one found, concatenate the values, using
|
320
|
+
// *concatenated_values as a temporary holding place for the
|
321
|
+
// concatenated string.
|
322
|
+
*concatenated_value = absl::StrJoin(values, ",");
|
323
|
+
return *concatenated_value;
|
324
|
+
}
|
325
|
+
|
299
326
|
grpc_error* grpc_metadata_batch_substitute(grpc_metadata_batch* batch,
|
300
327
|
grpc_linked_mdelem* storage,
|
301
328
|
grpc_mdelem new_mdelem) {
|