grpc 1.28.0 → 1.30.0
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 +7694 -11190
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security.h +22 -9
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/grpc_types.h +19 -21
- data/include/grpc/impl/codegen/port_platform.h +6 -2
- data/include/grpc/module.modulemap +24 -39
- data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
- data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
- data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
- data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
- data/src/core/ext/filters/client_channel/resolver.cc +5 -8
- data/src/core/ext/filters/client_channel/resolver.h +12 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
- data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
- data/src/core/ext/filters/client_channel/server_address.cc +6 -9
- data/src/core/ext/filters/client_channel/server_address.h +6 -12
- data/src/core/ext/filters/client_channel/service_config.cc +104 -144
- data/src/core/ext/filters/client_channel/service_config.h +28 -98
- data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
- data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
- data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
- data/src/core/ext/filters/client_channel/subchannel.h +35 -11
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
- data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
- data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
- data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
- data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
- data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
- data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
- data/src/core/lib/channel/channel_args.cc +15 -14
- data/src/core/lib/channel/channel_args.h +3 -1
- data/src/core/lib/channel/channel_stack.h +20 -13
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +3 -2
- data/src/core/lib/channel/channelz_registry.cc +5 -3
- data/src/core/lib/channel/connected_channel.cc +7 -5
- data/src/core/lib/channel/context.h +1 -1
- data/src/core/lib/channel/handshaker.cc +11 -13
- data/src/core/lib/channel/handshaker.h +4 -2
- data/src/core/lib/channel/handshaker_registry.cc +5 -17
- data/src/core/lib/channel/status_util.cc +2 -3
- data/src/core/lib/compression/message_compress.cc +5 -1
- data/src/core/lib/debug/stats.cc +21 -27
- data/src/core/lib/debug/stats.h +3 -1
- data/src/core/lib/gpr/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +2 -26
- data/src/core/lib/gpr/string.h +0 -16
- data/src/core/lib/gpr/sync_abseil.cc +2 -0
- data/src/core/lib/gpr/time.cc +4 -0
- data/src/core/lib/gpr/time_posix.cc +1 -1
- data/src/core/lib/gprpp/atomic.h +6 -6
- data/src/core/lib/gprpp/fork.cc +1 -1
- data/src/core/lib/gprpp/host_port.cc +29 -35
- data/src/core/lib/gprpp/host_port.h +14 -17
- data/src/core/lib/gprpp/map.h +5 -11
- data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
- data/src/core/lib/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +2 -3
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/http/parser.h +2 -3
- data/src/core/lib/iomgr/buffer_list.h +22 -21
- data/src/core/lib/iomgr/call_combiner.h +3 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
- data/src/core/lib/iomgr/closure.h +2 -3
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
- data/src/core/lib/iomgr/endpoint_pair.h +2 -3
- data/src/core/lib/iomgr/error.cc +6 -9
- data/src/core/lib/iomgr/error.h +0 -1
- data/src/core/lib/iomgr/ev_apple.cc +356 -0
- data/src/core/lib/iomgr/ev_apple.h +43 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
- data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.cc +2 -3
- data/src/core/lib/iomgr/exec_ctx.h +14 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
- data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
- data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
- data/src/core/lib/iomgr/port.h +1 -0
- data/src/core/lib/iomgr/python_util.h +46 -0
- data/src/core/lib/iomgr/resolve_address.h +4 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
- data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
- data/src/core/lib/iomgr/resource_quota.cc +4 -6
- data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
- data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
- data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
- data/src/core/lib/iomgr/socket_mutator.h +2 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
- data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_custom.cc +2 -3
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
- data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
- data/src/core/lib/iomgr/tcp_uv.cc +3 -2
- data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
- data/src/core/lib/iomgr/timer_generic.cc +2 -3
- data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
- data/src/core/lib/iomgr/timer_heap.h +2 -3
- data/src/core/lib/iomgr/udp_server.cc +9 -14
- data/src/core/lib/json/json.h +3 -2
- data/src/core/lib/json/json_reader.cc +5 -5
- data/src/core/lib/json/json_writer.cc +13 -12
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
- data/src/core/lib/security/credentials/credentials.cc +0 -84
- data/src/core/lib/security/credentials/credentials.h +8 -59
- data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
- data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +14 -0
- data/src/core/lib/slice/slice_utils.h +9 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
- data/src/core/lib/surface/call.cc +2 -3
- data/src/core/lib/surface/call_log_batch.cc +50 -58
- data/src/core/lib/surface/channel.cc +53 -31
- data/src/core/lib/surface/channel.h +35 -4
- data/src/core/lib/surface/channel_ping.cc +2 -3
- data/src/core/lib/surface/completion_queue.cc +33 -33
- data/src/core/lib/surface/event_string.cc +18 -25
- data/src/core/lib/surface/event_string.h +3 -1
- data/src/core/lib/surface/init_secure.cc +1 -4
- data/src/core/lib/surface/server.cc +570 -369
- data/src/core/lib/surface/server.h +32 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.h +7 -2
- data/src/core/lib/transport/connectivity_state.cc +7 -6
- data/src/core/lib/transport/connectivity_state.h +5 -3
- data/src/core/lib/transport/metadata.cc +3 -3
- data/src/core/lib/transport/metadata_batch.h +2 -3
- data/src/core/lib/transport/static_metadata.h +1 -1
- data/src/core/lib/transport/status_conversion.cc +6 -14
- data/src/core/lib/transport/transport.cc +2 -3
- data/src/core/lib/transport/transport.h +3 -2
- data/src/core/lib/transport/transport_op_string.cc +61 -102
- data/src/core/lib/uri/uri_parser.h +2 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
- data/src/core/tsi/fake_transport_security.cc +10 -15
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
- data/src/core/tsi/ssl_transport_security.cc +52 -39
- data/src/core/tsi/ssl_transport_security.h +8 -8
- data/src/core/tsi/ssl_types.h +0 -2
- data/src/core/tsi/transport_security.h +6 -9
- data/src/core/tsi/transport_security_grpc.h +2 -3
- data/src/core/tsi/transport_security_interface.h +3 -3
- data/src/ruby/ext/grpc/rb_call.c +9 -1
- data/src/ruby/lib/grpc/errors.rb +103 -42
- data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
- data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
- data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
- data/src/ruby/lib/grpc/generic/service.rb +5 -4
- data/src/ruby/lib/grpc/structs.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +5 -3
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
- data/src/ruby/spec/debug_message_spec.rb +134 -0
- data/src/ruby/spec/generic/service_spec.rb +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
- data/src/ruby/spec/testdata/ca.pem +18 -13
- data/src/ruby/spec/testdata/client.key +26 -14
- data/src/ruby/spec/testdata/client.pem +18 -12
- data/src/ruby/spec/testdata/server1.key +26 -14
- data/src/ruby/spec/testdata/server1.pem +20 -14
- data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
- data/third_party/abseil-cpp/absl/time/clock.h +74 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
- data/third_party/abseil-cpp/absl/time/format.cc +153 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
- data/third_party/abseil-cpp/absl/time/time.cc +499 -0
- data/third_party/abseil-cpp/absl/time/time.h +1584 -0
- data/third_party/boringssl-with-bazel/err_data.c +329 -297
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
- data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
- data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
- metadata +111 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
- data/src/core/lib/gprpp/string_view.h +0 -60
- data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -0,0 +1,68 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2016 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SERVICE_CONFIG_CALL_DATA_H
|
18
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SERVICE_CONFIG_CALL_DATA_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include "src/core/ext/filters/client_channel/service_config.h"
|
23
|
+
#include "src/core/ext/filters/client_channel/service_config_parser.h"
|
24
|
+
#include "src/core/lib/channel/context.h"
|
25
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
/// When a service config is applied to a call in the client_channel_filter,
|
30
|
+
/// we create an instance of this object on the arena. A pointer to this
|
31
|
+
/// object is also stored in the call_context, so that future filters can
|
32
|
+
/// easily access method and global parameters for the call.
|
33
|
+
class ServiceConfigCallData {
|
34
|
+
public:
|
35
|
+
ServiceConfigCallData(
|
36
|
+
RefCountedPtr<ServiceConfig> service_config,
|
37
|
+
const ServiceConfigParser::ParsedConfigVector* method_configs,
|
38
|
+
grpc_call_context_element* call_context)
|
39
|
+
: service_config_(std::move(service_config)),
|
40
|
+
method_configs_(method_configs) {
|
41
|
+
call_context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value = this;
|
42
|
+
call_context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].destroy = Destroy;
|
43
|
+
}
|
44
|
+
|
45
|
+
ServiceConfig* service_config() { return service_config_.get(); }
|
46
|
+
|
47
|
+
ServiceConfigParser::ParsedConfig* GetMethodParsedConfig(size_t index) const {
|
48
|
+
return method_configs_ != nullptr ? (*method_configs_)[index].get()
|
49
|
+
: nullptr;
|
50
|
+
}
|
51
|
+
|
52
|
+
ServiceConfigParser::ParsedConfig* GetGlobalParsedConfig(size_t index) const {
|
53
|
+
return service_config_->GetGlobalParsedConfig(index);
|
54
|
+
}
|
55
|
+
|
56
|
+
private:
|
57
|
+
static void Destroy(void* ptr) {
|
58
|
+
ServiceConfigCallData* self = static_cast<ServiceConfigCallData*>(ptr);
|
59
|
+
self->~ServiceConfigCallData();
|
60
|
+
}
|
61
|
+
|
62
|
+
RefCountedPtr<ServiceConfig> service_config_;
|
63
|
+
const ServiceConfigParser::ParsedConfigVector* method_configs_ = nullptr;
|
64
|
+
};
|
65
|
+
|
66
|
+
} // namespace grpc_core
|
67
|
+
|
68
|
+
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SERVICE_CONFIG_CALL_DATA_H */
|
@@ -0,0 +1,87 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2015 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include "src/core/ext/filters/client_channel/service_config_parser.h"
|
20
|
+
|
21
|
+
#include <grpc/support/log.h>
|
22
|
+
|
23
|
+
namespace grpc_core {
|
24
|
+
|
25
|
+
namespace {
|
26
|
+
typedef absl::InlinedVector<std::unique_ptr<ServiceConfigParser::Parser>,
|
27
|
+
ServiceConfigParser::kNumPreallocatedParsers>
|
28
|
+
ServiceConfigParserList;
|
29
|
+
ServiceConfigParserList* g_registered_parsers;
|
30
|
+
} // namespace
|
31
|
+
|
32
|
+
void ServiceConfigParser::Init() {
|
33
|
+
GPR_ASSERT(g_registered_parsers == nullptr);
|
34
|
+
g_registered_parsers = new ServiceConfigParserList();
|
35
|
+
}
|
36
|
+
|
37
|
+
void ServiceConfigParser::Shutdown() {
|
38
|
+
delete g_registered_parsers;
|
39
|
+
g_registered_parsers = nullptr;
|
40
|
+
}
|
41
|
+
|
42
|
+
size_t ServiceConfigParser::RegisterParser(std::unique_ptr<Parser> parser) {
|
43
|
+
g_registered_parsers->push_back(std::move(parser));
|
44
|
+
return g_registered_parsers->size() - 1;
|
45
|
+
}
|
46
|
+
|
47
|
+
ServiceConfigParser::ParsedConfigVector
|
48
|
+
ServiceConfigParser::ParseGlobalParameters(const Json& json,
|
49
|
+
grpc_error** error) {
|
50
|
+
ParsedConfigVector parsed_global_configs;
|
51
|
+
std::vector<grpc_error*> error_list;
|
52
|
+
for (size_t i = 0; i < g_registered_parsers->size(); i++) {
|
53
|
+
grpc_error* parser_error = GRPC_ERROR_NONE;
|
54
|
+
auto parsed_config =
|
55
|
+
(*g_registered_parsers)[i]->ParseGlobalParams(json, &parser_error);
|
56
|
+
if (parser_error != GRPC_ERROR_NONE) {
|
57
|
+
error_list.push_back(parser_error);
|
58
|
+
}
|
59
|
+
parsed_global_configs.push_back(std::move(parsed_config));
|
60
|
+
}
|
61
|
+
if (!error_list.empty()) {
|
62
|
+
*error = GRPC_ERROR_CREATE_FROM_VECTOR("Global Params", &error_list);
|
63
|
+
}
|
64
|
+
return parsed_global_configs;
|
65
|
+
}
|
66
|
+
|
67
|
+
ServiceConfigParser::ParsedConfigVector
|
68
|
+
ServiceConfigParser::ParsePerMethodParameters(const Json& json,
|
69
|
+
grpc_error** error) {
|
70
|
+
ParsedConfigVector parsed_method_configs;
|
71
|
+
std::vector<grpc_error*> error_list;
|
72
|
+
for (size_t i = 0; i < g_registered_parsers->size(); i++) {
|
73
|
+
grpc_error* parser_error = GRPC_ERROR_NONE;
|
74
|
+
auto parsed_config =
|
75
|
+
(*g_registered_parsers)[i]->ParsePerMethodParams(json, &parser_error);
|
76
|
+
if (parser_error != GRPC_ERROR_NONE) {
|
77
|
+
error_list.push_back(parser_error);
|
78
|
+
}
|
79
|
+
parsed_method_configs.push_back(std::move(parsed_config));
|
80
|
+
}
|
81
|
+
if (!error_list.empty()) {
|
82
|
+
*error = GRPC_ERROR_CREATE_FROM_VECTOR("methodConfig", &error_list);
|
83
|
+
}
|
84
|
+
return parsed_method_configs;
|
85
|
+
}
|
86
|
+
|
87
|
+
} // namespace grpc_core
|
@@ -0,0 +1,89 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2016 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SERVICE_CONFIG_PARSER_H
|
18
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SERVICE_CONFIG_PARSER_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include <memory>
|
23
|
+
|
24
|
+
#include "absl/container/inlined_vector.h"
|
25
|
+
|
26
|
+
#include "src/core/lib/iomgr/error.h"
|
27
|
+
#include "src/core/lib/json/json.h"
|
28
|
+
|
29
|
+
namespace grpc_core {
|
30
|
+
|
31
|
+
// Service config parser registry.
|
32
|
+
// See service_config.h for more information.
|
33
|
+
class ServiceConfigParser {
|
34
|
+
public:
|
35
|
+
/// This is the base class that all service config parsers MUST use to store
|
36
|
+
/// parsed service config data.
|
37
|
+
class ParsedConfig {
|
38
|
+
public:
|
39
|
+
virtual ~ParsedConfig() = default;
|
40
|
+
};
|
41
|
+
|
42
|
+
/// This is the base class that all service config parsers should derive from.
|
43
|
+
class Parser {
|
44
|
+
public:
|
45
|
+
virtual ~Parser() = default;
|
46
|
+
|
47
|
+
virtual std::unique_ptr<ParsedConfig> ParseGlobalParams(
|
48
|
+
const Json& /* json */, grpc_error** error) {
|
49
|
+
// Avoid unused parameter warning on debug-only parameter
|
50
|
+
(void)error;
|
51
|
+
GPR_DEBUG_ASSERT(error != nullptr);
|
52
|
+
return nullptr;
|
53
|
+
}
|
54
|
+
|
55
|
+
virtual std::unique_ptr<ParsedConfig> ParsePerMethodParams(
|
56
|
+
const Json& /* json */, grpc_error** error) {
|
57
|
+
// Avoid unused parameter warning on debug-only parameter
|
58
|
+
(void)error;
|
59
|
+
GPR_DEBUG_ASSERT(error != nullptr);
|
60
|
+
return nullptr;
|
61
|
+
}
|
62
|
+
};
|
63
|
+
|
64
|
+
static constexpr int kNumPreallocatedParsers = 4;
|
65
|
+
typedef absl::InlinedVector<std::unique_ptr<ParsedConfig>,
|
66
|
+
kNumPreallocatedParsers>
|
67
|
+
ParsedConfigVector;
|
68
|
+
|
69
|
+
static void Init();
|
70
|
+
static void Shutdown();
|
71
|
+
|
72
|
+
/// Globally register a service config parser. On successful registration, it
|
73
|
+
/// returns the index at which the parser was registered. On failure, -1 is
|
74
|
+
/// returned. Each new service config update will go through all the
|
75
|
+
/// registered parser. Each parser is responsible for reading the service
|
76
|
+
/// config json and returning a parsed config. This parsed config can later be
|
77
|
+
/// retrieved using the same index that was returned at registration time.
|
78
|
+
static size_t RegisterParser(std::unique_ptr<Parser> parser);
|
79
|
+
|
80
|
+
static ParsedConfigVector ParseGlobalParameters(const Json& json,
|
81
|
+
grpc_error** error);
|
82
|
+
|
83
|
+
static ParsedConfigVector ParsePerMethodParameters(const Json& json,
|
84
|
+
grpc_error** error);
|
85
|
+
};
|
86
|
+
|
87
|
+
} // namespace grpc_core
|
88
|
+
|
89
|
+
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SERVICE_CONFIG_PARSER_H */
|
@@ -362,12 +362,44 @@ class Subchannel::ConnectedSubchannelStateWatcher
|
|
362
362
|
Subchannel* subchannel_;
|
363
363
|
};
|
364
364
|
|
365
|
+
// Asynchronously notifies the \a watcher of a change in the connectvity state
|
366
|
+
// of \a subchannel to the current \a state. Deletes itself when done.
|
367
|
+
class Subchannel::AsyncWatcherNotifierLocked {
|
368
|
+
public:
|
369
|
+
AsyncWatcherNotifierLocked(
|
370
|
+
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher,
|
371
|
+
Subchannel* subchannel, grpc_connectivity_state state)
|
372
|
+
: watcher_(std::move(watcher)) {
|
373
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel;
|
374
|
+
if (state == GRPC_CHANNEL_READY) {
|
375
|
+
connected_subchannel = subchannel->connected_subchannel_;
|
376
|
+
}
|
377
|
+
watcher_->PushConnectivityStateChange(
|
378
|
+
{state, std::move(connected_subchannel)});
|
379
|
+
ExecCtx::Run(
|
380
|
+
DEBUG_LOCATION,
|
381
|
+
GRPC_CLOSURE_INIT(&closure_,
|
382
|
+
[](void* arg, grpc_error* /*error*/) {
|
383
|
+
auto* self =
|
384
|
+
static_cast<AsyncWatcherNotifierLocked*>(arg);
|
385
|
+
self->watcher_->OnConnectivityStateChange();
|
386
|
+
delete self;
|
387
|
+
},
|
388
|
+
this, nullptr),
|
389
|
+
GRPC_ERROR_NONE);
|
390
|
+
}
|
391
|
+
|
392
|
+
private:
|
393
|
+
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher_;
|
394
|
+
grpc_closure closure_;
|
395
|
+
};
|
396
|
+
|
365
397
|
//
|
366
398
|
// Subchannel::ConnectivityStateWatcherList
|
367
399
|
//
|
368
400
|
|
369
401
|
void Subchannel::ConnectivityStateWatcherList::AddWatcherLocked(
|
370
|
-
|
402
|
+
RefCountedPtr<ConnectivityStateWatcherInterface> watcher) {
|
371
403
|
watchers_.insert(std::make_pair(watcher.get(), std::move(watcher)));
|
372
404
|
}
|
373
405
|
|
@@ -379,19 +411,7 @@ void Subchannel::ConnectivityStateWatcherList::RemoveWatcherLocked(
|
|
379
411
|
void Subchannel::ConnectivityStateWatcherList::NotifyLocked(
|
380
412
|
Subchannel* subchannel, grpc_connectivity_state state) {
|
381
413
|
for (const auto& p : watchers_) {
|
382
|
-
|
383
|
-
if (state == GRPC_CHANNEL_READY) {
|
384
|
-
connected_subchannel = subchannel->connected_subchannel_;
|
385
|
-
}
|
386
|
-
// TODO(roth): In principle, it seems wrong to send this notification
|
387
|
-
// to the watcher while holding the subchannel's mutex, since it could
|
388
|
-
// lead to a deadlock if the watcher calls back into the subchannel
|
389
|
-
// before returning back to us. In practice, this doesn't happen,
|
390
|
-
// because the LB policy code that watches subchannels always bounces
|
391
|
-
// the notification into the client_channel control-plane combiner
|
392
|
-
// before processing it. But if we ever have any other callers here,
|
393
|
-
// we will probably need to change this.
|
394
|
-
p.second->OnConnectivityStateChange(state, std::move(connected_subchannel));
|
414
|
+
new AsyncWatcherNotifierLocked(p.second, subchannel, state);
|
395
415
|
}
|
396
416
|
}
|
397
417
|
|
@@ -428,14 +448,9 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
428
448
|
|
429
449
|
void AddWatcherLocked(
|
430
450
|
grpc_connectivity_state initial_state,
|
431
|
-
|
451
|
+
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher) {
|
432
452
|
if (state_ != initial_state) {
|
433
|
-
|
434
|
-
if (state_ == GRPC_CHANNEL_READY) {
|
435
|
-
connected_subchannel = subchannel_->connected_subchannel_;
|
436
|
-
}
|
437
|
-
watcher->OnConnectivityStateChange(state_,
|
438
|
-
std::move(connected_subchannel));
|
453
|
+
new AsyncWatcherNotifierLocked(watcher, subchannel_, state_);
|
439
454
|
}
|
440
455
|
watcher_list_.AddWatcherLocked(std::move(watcher));
|
441
456
|
}
|
@@ -503,7 +518,7 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
503
518
|
void Subchannel::HealthWatcherMap::AddWatcherLocked(
|
504
519
|
Subchannel* subchannel, grpc_connectivity_state initial_state,
|
505
520
|
grpc_core::UniquePtr<char> health_check_service_name,
|
506
|
-
|
521
|
+
RefCountedPtr<ConnectivityStateWatcherInterface> watcher) {
|
507
522
|
// If the health check service name is not already present in the map,
|
508
523
|
// add it.
|
509
524
|
auto it = map_.find(health_check_service_name.get());
|
@@ -613,6 +628,21 @@ BackOff::Options ParseArgsForBackoffValues(
|
|
613
628
|
|
614
629
|
} // namespace
|
615
630
|
|
631
|
+
void Subchannel::ConnectivityStateWatcherInterface::PushConnectivityStateChange(
|
632
|
+
ConnectivityStateChange state_change) {
|
633
|
+
MutexLock lock(&mu_);
|
634
|
+
connectivity_state_queue_.push_back(std::move(state_change));
|
635
|
+
}
|
636
|
+
|
637
|
+
Subchannel::ConnectivityStateWatcherInterface::ConnectivityStateChange
|
638
|
+
Subchannel::ConnectivityStateWatcherInterface::PopConnectivityStateChange() {
|
639
|
+
MutexLock lock(&mu_);
|
640
|
+
GPR_ASSERT(!connectivity_state_queue_.empty());
|
641
|
+
ConnectivityStateChange state_change = connectivity_state_queue_.front();
|
642
|
+
connectivity_state_queue_.pop_front();
|
643
|
+
return state_change;
|
644
|
+
}
|
645
|
+
|
616
646
|
Subchannel::Subchannel(SubchannelKey* key,
|
617
647
|
OrphanablePtr<SubchannelConnector> connector,
|
618
648
|
const grpc_channel_args* args)
|
@@ -788,7 +818,7 @@ grpc_connectivity_state Subchannel::CheckConnectivityState(
|
|
788
818
|
void Subchannel::WatchConnectivityState(
|
789
819
|
grpc_connectivity_state initial_state,
|
790
820
|
grpc_core::UniquePtr<char> health_check_service_name,
|
791
|
-
|
821
|
+
RefCountedPtr<ConnectivityStateWatcherInterface> watcher) {
|
792
822
|
MutexLock lock(&mu_);
|
793
823
|
grpc_pollset_set* interested_parties = watcher->interested_parties();
|
794
824
|
if (interested_parties != nullptr) {
|
@@ -796,7 +826,7 @@ void Subchannel::WatchConnectivityState(
|
|
796
826
|
}
|
797
827
|
if (health_check_service_name == nullptr) {
|
798
828
|
if (state_ != initial_state) {
|
799
|
-
watcher
|
829
|
+
new AsyncWatcherNotifierLocked(watcher, this, state_);
|
800
830
|
}
|
801
831
|
watcher_list_.AddWatcherLocked(std::move(watcher));
|
802
832
|
} else {
|
@@ -21,6 +21,8 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include <deque>
|
25
|
+
|
24
26
|
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
25
27
|
#include "src/core/ext/filters/client_channel/connector.h"
|
26
28
|
#include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
|
@@ -176,24 +178,44 @@ class SubchannelCall {
|
|
176
178
|
class Subchannel {
|
177
179
|
public:
|
178
180
|
class ConnectivityStateWatcherInterface
|
179
|
-
: public
|
181
|
+
: public RefCounted<ConnectivityStateWatcherInterface> {
|
180
182
|
public:
|
183
|
+
struct ConnectivityStateChange {
|
184
|
+
grpc_connectivity_state state;
|
185
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel;
|
186
|
+
};
|
187
|
+
|
181
188
|
virtual ~ConnectivityStateWatcherInterface() = default;
|
182
189
|
|
183
190
|
// Will be invoked whenever the subchannel's connectivity state
|
184
191
|
// changes. There will be only one invocation of this method on a
|
185
192
|
// given watcher instance at any given time.
|
186
|
-
//
|
193
|
+
// Implementations should call PopConnectivityStateChange to get the next
|
194
|
+
// connectivity state change.
|
195
|
+
virtual void OnConnectivityStateChange() = 0;
|
196
|
+
|
197
|
+
virtual grpc_pollset_set* interested_parties() = 0;
|
198
|
+
|
199
|
+
// Enqueues connectivity state change notifications.
|
187
200
|
// When the state changes to READY, connected_subchannel will
|
188
201
|
// contain a ref to the connected subchannel. When it changes from
|
189
202
|
// READY to some other state, the implementation must release its
|
190
203
|
// ref to the connected subchannel.
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
204
|
+
// TODO(yashkt): This is currently needed to send the state updates in the
|
205
|
+
// right order when asynchronously notifying. This will no longer be
|
206
|
+
// necessary when we have access to EventManager.
|
207
|
+
void PushConnectivityStateChange(ConnectivityStateChange state_change);
|
195
208
|
|
196
|
-
|
209
|
+
// Dequeues connectivity state change notifications.
|
210
|
+
ConnectivityStateChange PopConnectivityStateChange();
|
211
|
+
|
212
|
+
private:
|
213
|
+
// Keeps track of the updates that the watcher instance must be notified of.
|
214
|
+
// TODO(yashkt): This is currently needed to send the state updates in the
|
215
|
+
// right order when asynchronously notifying. This will no longer be
|
216
|
+
// necessary when we have access to EventManager.
|
217
|
+
std::deque<ConnectivityStateChange> connectivity_state_queue_;
|
218
|
+
Mutex mu_; // protects the queue
|
197
219
|
};
|
198
220
|
|
199
221
|
// The ctor and dtor are not intended to use directly.
|
@@ -243,7 +265,7 @@ class Subchannel {
|
|
243
265
|
void WatchConnectivityState(
|
244
266
|
grpc_connectivity_state initial_state,
|
245
267
|
grpc_core::UniquePtr<char> health_check_service_name,
|
246
|
-
|
268
|
+
RefCountedPtr<ConnectivityStateWatcherInterface> watcher);
|
247
269
|
|
248
270
|
// Cancels a connectivity state watch.
|
249
271
|
// If the watcher has already been destroyed, this is a no-op.
|
@@ -280,7 +302,7 @@ class Subchannel {
|
|
280
302
|
~ConnectivityStateWatcherList() { Clear(); }
|
281
303
|
|
282
304
|
void AddWatcherLocked(
|
283
|
-
|
305
|
+
RefCountedPtr<ConnectivityStateWatcherInterface> watcher);
|
284
306
|
void RemoveWatcherLocked(ConnectivityStateWatcherInterface* watcher);
|
285
307
|
|
286
308
|
// Notifies all watchers in the list about a change to state.
|
@@ -294,7 +316,7 @@ class Subchannel {
|
|
294
316
|
// TODO(roth): Once we can use C++-14 heterogeneous lookups, this can
|
295
317
|
// be a set instead of a map.
|
296
318
|
std::map<ConnectivityStateWatcherInterface*,
|
297
|
-
|
319
|
+
RefCountedPtr<ConnectivityStateWatcherInterface>>
|
298
320
|
watchers_;
|
299
321
|
};
|
300
322
|
|
@@ -312,7 +334,7 @@ class Subchannel {
|
|
312
334
|
void AddWatcherLocked(
|
313
335
|
Subchannel* subchannel, grpc_connectivity_state initial_state,
|
314
336
|
grpc_core::UniquePtr<char> health_check_service_name,
|
315
|
-
|
337
|
+
RefCountedPtr<ConnectivityStateWatcherInterface> watcher);
|
316
338
|
void RemoveWatcherLocked(const char* health_check_service_name,
|
317
339
|
ConnectivityStateWatcherInterface* watcher);
|
318
340
|
|
@@ -332,6 +354,8 @@ class Subchannel {
|
|
332
354
|
|
333
355
|
class ConnectedSubchannelStateWatcher;
|
334
356
|
|
357
|
+
class AsyncWatcherNotifierLocked;
|
358
|
+
|
335
359
|
// Sets the subchannel's connectivity state to \a state.
|
336
360
|
void SetConnectivityStateLocked(grpc_connectivity_state state);
|
337
361
|
|