grpc 1.30.0 → 1.31.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 +560 -619
- data/include/grpc/grpc_security.h +8 -0
- data/include/grpc/grpc_security_constants.h +3 -0
- data/include/grpc/impl/codegen/grpc_types.h +7 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -32
- data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
- data/src/core/ext/filters/client_channel/client_channel.cc +406 -261
- data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
- data/src/core/ext/filters/client_channel/config_selector.h +93 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +381 -72
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
- data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
- data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
- data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
- data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
- data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
- data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
- data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
- data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
- data/src/core/lib/channel/channel_trace.cc +2 -6
- data/src/core/lib/channel/channelz.cc +5 -15
- data/src/core/lib/gpr/log_linux.cc +6 -8
- data/src/core/lib/gpr/log_posix.cc +6 -8
- data/src/core/lib/gpr/string.cc +10 -9
- data/src/core/lib/gpr/string.h +4 -2
- data/src/core/lib/gprpp/global_config_env.cc +8 -6
- data/src/core/lib/http/httpcli.cc +13 -10
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
- data/src/core/lib/iomgr/error_cfstream.cc +9 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
- data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
- data/src/core/lib/iomgr/ev_posix.cc +2 -0
- data/src/core/lib/iomgr/iomgr.cc +10 -0
- data/src/core/lib/iomgr/iomgr.h +10 -0
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
- data/src/core/lib/iomgr/port.h +1 -21
- data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
- data/src/core/lib/iomgr/resource_quota.cc +34 -31
- data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
- data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
- data/src/core/lib/iomgr/socket_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
- data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
- data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
- data/src/core/lib/iomgr/tcp_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_custom.h +1 -1
- data/src/core/lib/iomgr/tcp_server.cc +3 -4
- data/src/core/lib/iomgr/tcp_server.h +7 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
- data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
- data/src/core/lib/iomgr/timer_generic.cc +13 -12
- data/src/core/lib/iomgr/udp_server.cc +24 -23
- data/src/core/lib/iomgr/udp_server.h +5 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
- data/src/core/lib/json/json_reader.cc +20 -21
- data/src/core/lib/security/credentials/credentials.h +5 -3
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
- data/src/core/lib/security/security_connector/security_connector.cc +2 -0
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
- data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
- data/src/core/lib/security/transport/auth_filters.h +0 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
- data/src/core/lib/security/util/json_util.cc +12 -13
- data/src/core/lib/slice/slice.cc +38 -1
- data/src/core/lib/slice/slice_internal.h +1 -0
- data/src/core/lib/surface/call.cc +40 -41
- data/src/core/lib/surface/completion_queue.cc +271 -14
- data/src/core/lib/surface/completion_queue.h +8 -0
- data/src/core/lib/surface/init.cc +2 -0
- data/src/core/lib/surface/server.cc +565 -632
- data/src/core/lib/surface/server.h +34 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/transport.h +6 -0
- data/src/core/lib/uri/uri_parser.cc +8 -15
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
- data/src/core/tsi/ssl_transport_security.cc +108 -11
- data/src/core/tsi/ssl_transport_security.h +14 -2
- data/src/core/tsi/transport_security_interface.h +5 -0
- data/src/ruby/bin/math_services_pb.rb +4 -4
- data/src/ruby/ext/grpc/extconf.rb +5 -2
- data/src/ruby/ext/grpc/rb_call.c +3 -2
- data/src/ruby/ext/grpc/rb_call.h +4 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
- data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
- data/src/ruby/spec/support/services.rb +10 -4
- data/src/ruby/spec/user_agent_spec.rb +74 -0
- data/third_party/boringssl-with-bazel/err_data.c +89 -83
- 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 +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
- data/third_party/re2/re2/bitmap256.h +117 -0
- data/third_party/re2/re2/bitstate.cc +385 -0
- data/third_party/re2/re2/compile.cc +1279 -0
- data/third_party/re2/re2/dfa.cc +2130 -0
- data/third_party/re2/re2/filtered_re2.cc +121 -0
- data/third_party/re2/re2/filtered_re2.h +109 -0
- data/third_party/re2/re2/mimics_pcre.cc +197 -0
- data/third_party/re2/re2/nfa.cc +713 -0
- data/third_party/re2/re2/onepass.cc +623 -0
- data/third_party/re2/re2/parse.cc +2464 -0
- data/third_party/re2/re2/perl_groups.cc +119 -0
- data/third_party/re2/re2/pod_array.h +55 -0
- data/third_party/re2/re2/prefilter.cc +710 -0
- data/third_party/re2/re2/prefilter.h +108 -0
- data/third_party/re2/re2/prefilter_tree.cc +407 -0
- data/third_party/re2/re2/prefilter_tree.h +139 -0
- data/third_party/re2/re2/prog.cc +988 -0
- data/third_party/re2/re2/prog.h +436 -0
- data/third_party/re2/re2/re2.cc +1362 -0
- data/third_party/re2/re2/re2.h +1002 -0
- data/third_party/re2/re2/regexp.cc +980 -0
- data/third_party/re2/re2/regexp.h +659 -0
- data/third_party/re2/re2/set.cc +154 -0
- data/third_party/re2/re2/set.h +80 -0
- data/third_party/re2/re2/simplify.cc +657 -0
- data/third_party/re2/re2/sparse_array.h +392 -0
- data/third_party/re2/re2/sparse_set.h +264 -0
- data/third_party/re2/re2/stringpiece.cc +65 -0
- data/third_party/re2/re2/stringpiece.h +210 -0
- data/third_party/re2/re2/tostring.cc +351 -0
- data/third_party/re2/re2/unicode_casefold.cc +582 -0
- data/third_party/re2/re2/unicode_casefold.h +78 -0
- data/third_party/re2/re2/unicode_groups.cc +6269 -0
- data/third_party/re2/re2/unicode_groups.h +67 -0
- data/third_party/re2/re2/walker-inl.h +246 -0
- data/third_party/re2/util/benchmark.h +156 -0
- data/third_party/re2/util/flags.h +26 -0
- data/third_party/re2/util/logging.h +109 -0
- data/third_party/re2/util/malloc_counter.h +19 -0
- data/third_party/re2/util/mix.h +41 -0
- data/third_party/re2/util/mutex.h +148 -0
- data/third_party/re2/util/pcre.cc +1025 -0
- data/third_party/re2/util/pcre.h +681 -0
- data/third_party/re2/util/rune.cc +260 -0
- data/third_party/re2/util/strutil.cc +149 -0
- data/third_party/re2/util/strutil.h +21 -0
- data/third_party/re2/util/test.h +50 -0
- data/third_party/re2/util/utf.h +44 -0
- data/third_party/re2/util/util.h +42 -0
- data/third_party/upb/upb/decode.c +467 -504
- data/third_party/upb/upb/encode.c +163 -121
- data/third_party/upb/upb/msg.c +130 -64
- data/third_party/upb/upb/msg.h +418 -14
- data/third_party/upb/upb/port_def.inc +35 -6
- data/third_party/upb/upb/port_undef.inc +8 -1
- data/third_party/upb/upb/table.c +53 -75
- data/third_party/upb/upb/table.int.h +11 -43
- data/third_party/upb/upb/upb.c +148 -124
- data/third_party/upb/upb/upb.h +65 -147
- data/third_party/upb/upb/upb.hpp +86 -0
- metadata +90 -30
- data/third_party/upb/upb/generated_util.h +0 -105
@@ -338,6 +338,7 @@ inline uint32_t grpc_slice_hash_internal(const grpc_slice& s) {
|
|
338
338
|
grpc_slice grpc_slice_from_moved_buffer(grpc_core::UniquePtr<char> p,
|
339
339
|
size_t len);
|
340
340
|
grpc_slice grpc_slice_from_moved_string(grpc_core::UniquePtr<char> p);
|
341
|
+
grpc_slice grpc_slice_from_cpp_string(std::string str);
|
341
342
|
|
342
343
|
// Returns the memory used by this slice, not counting the slice structure
|
343
344
|
// itself. This means that inlined and slices from static strings will return
|
@@ -24,6 +24,11 @@
|
|
24
24
|
#include <stdlib.h>
|
25
25
|
#include <string.h>
|
26
26
|
|
27
|
+
#include <string>
|
28
|
+
|
29
|
+
#include "absl/strings/str_cat.h"
|
30
|
+
#include "absl/strings/str_format.h"
|
31
|
+
|
27
32
|
#include <grpc/compression.h>
|
28
33
|
#include <grpc/grpc.h>
|
29
34
|
#include <grpc/slice.h>
|
@@ -225,7 +230,9 @@ struct grpc_call {
|
|
225
230
|
grpc_closure receiving_initial_metadata_ready;
|
226
231
|
grpc_closure receiving_trailing_metadata_ready;
|
227
232
|
uint32_t test_only_last_message_flags = 0;
|
228
|
-
|
233
|
+
// Status about operation of call
|
234
|
+
bool sent_server_trailing_metadata = false;
|
235
|
+
gpr_atm cancelled_with_error = 0;
|
229
236
|
|
230
237
|
grpc_closure release_call;
|
231
238
|
|
@@ -686,7 +693,7 @@ static void done_termination(void* arg, grpc_error* /*error*/) {
|
|
686
693
|
}
|
687
694
|
|
688
695
|
static void cancel_with_error(grpc_call* c, grpc_error* error) {
|
689
|
-
if (!gpr_atm_rel_cas(&c->
|
696
|
+
if (!gpr_atm_rel_cas(&c->cancelled_with_error, 0, 1)) {
|
690
697
|
GRPC_ERROR_UNREF(error);
|
691
698
|
return;
|
692
699
|
}
|
@@ -751,13 +758,13 @@ static void set_final_status(grpc_call* call, grpc_error* error) {
|
|
751
758
|
}
|
752
759
|
} else {
|
753
760
|
*call->final_op.server.cancelled =
|
754
|
-
error != GRPC_ERROR_NONE ||
|
755
|
-
reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&call->status_error)) !=
|
756
|
-
GRPC_ERROR_NONE;
|
761
|
+
error != GRPC_ERROR_NONE || !call->sent_server_trailing_metadata;
|
757
762
|
grpc_core::channelz::ServerNode* channelz_server =
|
758
763
|
grpc_server_get_channelz_node(call->final_op.server.server);
|
759
764
|
if (channelz_server != nullptr) {
|
760
|
-
if (*call->final_op.server.cancelled
|
765
|
+
if (*call->final_op.server.cancelled ||
|
766
|
+
reinterpret_cast<grpc_error*>(
|
767
|
+
gpr_atm_acq_load(&call->status_error)) != GRPC_ERROR_NONE) {
|
761
768
|
channelz_server->RecordCallFailed();
|
762
769
|
} else {
|
763
770
|
channelz_server->RecordCallSucceeded();
|
@@ -1049,14 +1056,12 @@ static void recv_trailing_filter(void* args, grpc_metadata_batch* b,
|
|
1049
1056
|
grpc_get_status_code_from_metadata(b->idx.named.grpc_status->md);
|
1050
1057
|
grpc_error* error = GRPC_ERROR_NONE;
|
1051
1058
|
if (status_code != GRPC_STATUS_OK) {
|
1052
|
-
char* peer_msg = nullptr;
|
1053
1059
|
char* peer = grpc_call_get_peer(call);
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1060
|
+
error = grpc_error_set_int(
|
1061
|
+
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1062
|
+
absl::StrCat("Error received from peer ", peer).c_str()),
|
1063
|
+
GRPC_ERROR_INT_GRPC_STATUS, static_cast<intptr_t>(status_code));
|
1058
1064
|
gpr_free(peer);
|
1059
|
-
gpr_free(peer_msg);
|
1060
1065
|
}
|
1061
1066
|
if (b->idx.named.grpc_message != nullptr) {
|
1062
1067
|
error = grpc_error_set_str(
|
@@ -1367,49 +1372,41 @@ static void receiving_stream_ready_in_call_combiner(void* bctlp,
|
|
1367
1372
|
|
1368
1373
|
static void GPR_ATTRIBUTE_NOINLINE
|
1369
1374
|
handle_both_stream_and_msg_compression_set(grpc_call* call) {
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg);
|
1378
|
-
gpr_free(error_msg);
|
1375
|
+
std::string error_msg = absl::StrFormat(
|
1376
|
+
"Incoming stream has both stream compression (%d) and message "
|
1377
|
+
"compression (%d).",
|
1378
|
+
call->incoming_stream_compression_algorithm,
|
1379
|
+
call->incoming_message_compression_algorithm);
|
1380
|
+
gpr_log(GPR_ERROR, "%s", error_msg.c_str());
|
1381
|
+
cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
|
1379
1382
|
}
|
1380
1383
|
|
1381
1384
|
static void GPR_ATTRIBUTE_NOINLINE
|
1382
1385
|
handle_error_parsing_compression_algorithm(grpc_call* call) {
|
1383
|
-
|
1384
|
-
|
1385
|
-
|
1386
|
-
|
1387
|
-
|
1388
|
-
|
1389
|
-
cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg);
|
1390
|
-
gpr_free(error_msg);
|
1386
|
+
std::string error_msg = absl::StrFormat(
|
1387
|
+
"Error in incoming message compression (%d) or stream "
|
1388
|
+
"compression (%d).",
|
1389
|
+
call->incoming_stream_compression_algorithm,
|
1390
|
+
call->incoming_message_compression_algorithm);
|
1391
|
+
cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
|
1391
1392
|
}
|
1392
1393
|
|
1393
1394
|
static void GPR_ATTRIBUTE_NOINLINE handle_invalid_compression(
|
1394
1395
|
grpc_call* call, grpc_compression_algorithm compression_algorithm) {
|
1395
|
-
|
1396
|
-
|
1397
|
-
|
1398
|
-
|
1399
|
-
cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg);
|
1400
|
-
gpr_free(error_msg);
|
1396
|
+
std::string error_msg = absl::StrFormat(
|
1397
|
+
"Invalid compression algorithm value '%d'.", compression_algorithm);
|
1398
|
+
gpr_log(GPR_ERROR, "%s", error_msg.c_str());
|
1399
|
+
cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
|
1401
1400
|
}
|
1402
1401
|
|
1403
1402
|
static void GPR_ATTRIBUTE_NOINLINE handle_compression_algorithm_disabled(
|
1404
1403
|
grpc_call* call, grpc_compression_algorithm compression_algorithm) {
|
1405
|
-
char* error_msg = nullptr;
|
1406
1404
|
const char* algo_name = nullptr;
|
1407
1405
|
grpc_compression_algorithm_name(compression_algorithm, &algo_name);
|
1408
|
-
|
1409
|
-
|
1410
|
-
gpr_log(GPR_ERROR, "%s", error_msg);
|
1411
|
-
cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg);
|
1412
|
-
gpr_free(error_msg);
|
1406
|
+
std::string error_msg =
|
1407
|
+
absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
|
1408
|
+
gpr_log(GPR_ERROR, "%s", error_msg.c_str());
|
1409
|
+
cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
|
1413
1410
|
}
|
1414
1411
|
|
1415
1412
|
static void GPR_ATTRIBUTE_NOINLINE handle_compression_algorithm_not_accepted(
|
@@ -1791,6 +1788,8 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1791
1788
|
}
|
1792
1789
|
stream_op_payload->send_trailing_metadata.send_trailing_metadata =
|
1793
1790
|
&call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */];
|
1791
|
+
stream_op_payload->send_trailing_metadata.sent =
|
1792
|
+
&call->sent_server_trailing_metadata;
|
1794
1793
|
has_send_ops = true;
|
1795
1794
|
break;
|
1796
1795
|
}
|
@@ -39,6 +39,7 @@
|
|
39
39
|
#include "src/core/lib/gpr/string.h"
|
40
40
|
#include "src/core/lib/gpr/tls.h"
|
41
41
|
#include "src/core/lib/gprpp/atomic.h"
|
42
|
+
#include "src/core/lib/iomgr/closure.h"
|
42
43
|
#include "src/core/lib/iomgr/executor.h"
|
43
44
|
#include "src/core/lib/iomgr/pollset.h"
|
44
45
|
#include "src/core/lib/iomgr/timer.h"
|
@@ -208,6 +209,9 @@ struct cq_vtable {
|
|
208
209
|
void* reserved);
|
209
210
|
grpc_event (*pluck)(grpc_completion_queue* cq, void* tag,
|
210
211
|
gpr_timespec deadline, void* reserved);
|
212
|
+
// TODO(vjpai): Remove proxy_pollset once callback_alternative no longer
|
213
|
+
// needed.
|
214
|
+
grpc_pollset* (*proxy_pollset)(grpc_completion_queue* cq);
|
211
215
|
};
|
212
216
|
|
213
217
|
namespace {
|
@@ -309,7 +313,7 @@ struct cq_pluck_data {
|
|
309
313
|
};
|
310
314
|
|
311
315
|
struct cq_callback_data {
|
312
|
-
cq_callback_data(
|
316
|
+
explicit cq_callback_data(
|
313
317
|
grpc_experimental_completion_queue_functor* shutdown_callback)
|
314
318
|
: shutdown_callback(shutdown_callback) {}
|
315
319
|
|
@@ -327,17 +331,88 @@ struct cq_callback_data {
|
|
327
331
|
Initial count is dropped by grpc_completion_queue_shutdown. */
|
328
332
|
grpc_core::Atomic<intptr_t> pending_events{1};
|
329
333
|
|
330
|
-
/**
|
331
|
-
|
332
|
-
|
334
|
+
/** 0 initially. 1 once we initiated shutdown */
|
335
|
+
bool shutdown_called = false;
|
336
|
+
|
337
|
+
/** A callback that gets invoked when the CQ completes shutdown */
|
338
|
+
grpc_experimental_completion_queue_functor* shutdown_callback;
|
339
|
+
};
|
340
|
+
|
341
|
+
// TODO(vjpai): Remove all callback_alternative variants when event manager is
|
342
|
+
// the only supported poller.
|
343
|
+
struct cq_callback_alternative_data {
|
344
|
+
explicit cq_callback_alternative_data(
|
345
|
+
grpc_experimental_completion_queue_functor* shutdown_callback)
|
346
|
+
: implementation(SharedNextableCQ()),
|
347
|
+
shutdown_callback(shutdown_callback) {}
|
348
|
+
|
349
|
+
/* This just points to a single shared nextable CQ */
|
350
|
+
grpc_completion_queue* const implementation;
|
351
|
+
|
352
|
+
/** Number of outstanding events (+1 if not shut down)
|
353
|
+
Initial count is dropped by grpc_completion_queue_shutdown */
|
354
|
+
grpc_core::Atomic<intptr_t> pending_events{1};
|
333
355
|
|
334
356
|
/** 0 initially. 1 once we initiated shutdown */
|
335
357
|
bool shutdown_called = false;
|
336
358
|
|
337
359
|
/** A callback that gets invoked when the CQ completes shutdown */
|
338
360
|
grpc_experimental_completion_queue_functor* shutdown_callback;
|
361
|
+
|
362
|
+
static grpc_completion_queue* SharedNextableCQ() {
|
363
|
+
grpc_core::MutexLock lock(&*shared_cq_next_mu);
|
364
|
+
|
365
|
+
if (shared_cq_next == nullptr) {
|
366
|
+
shared_cq_next = grpc_completion_queue_create_for_next(nullptr);
|
367
|
+
int num_nexting_threads = GPR_CLAMP(gpr_cpu_num_cores(), 1, 32);
|
368
|
+
threads_remaining.Store(num_nexting_threads,
|
369
|
+
grpc_core::MemoryOrder::RELEASE);
|
370
|
+
for (int i = 0; i < num_nexting_threads; i++) {
|
371
|
+
grpc_core::Executor::Run(
|
372
|
+
GRPC_CLOSURE_CREATE(
|
373
|
+
[](void* arg, grpc_error* /*error*/) {
|
374
|
+
grpc_completion_queue* cq =
|
375
|
+
static_cast<grpc_completion_queue*>(arg);
|
376
|
+
while (true) {
|
377
|
+
grpc_event event = grpc_completion_queue_next(
|
378
|
+
cq, gpr_inf_future(GPR_CLOCK_REALTIME), nullptr);
|
379
|
+
if (event.type == GRPC_QUEUE_SHUTDOWN) {
|
380
|
+
break;
|
381
|
+
}
|
382
|
+
GPR_DEBUG_ASSERT(event.type == GRPC_OP_COMPLETE);
|
383
|
+
// We can always execute the callback inline rather than
|
384
|
+
// pushing it to another Executor thread because this
|
385
|
+
// thread is definitely running on an executor, does not
|
386
|
+
// hold any application locks before executing the callback,
|
387
|
+
// and cannot be entered recursively.
|
388
|
+
auto* functor = static_cast<
|
389
|
+
grpc_experimental_completion_queue_functor*>(event.tag);
|
390
|
+
functor->functor_run(functor, event.success);
|
391
|
+
}
|
392
|
+
if (threads_remaining.FetchSub(
|
393
|
+
1, grpc_core::MemoryOrder::ACQ_REL) == 1) {
|
394
|
+
grpc_completion_queue_destroy(cq);
|
395
|
+
}
|
396
|
+
},
|
397
|
+
shared_cq_next, nullptr),
|
398
|
+
GRPC_ERROR_NONE, grpc_core::ExecutorType::DEFAULT,
|
399
|
+
grpc_core::ExecutorJobType::LONG);
|
400
|
+
}
|
401
|
+
}
|
402
|
+
return shared_cq_next;
|
403
|
+
}
|
404
|
+
// Use manually-constructed Mutex to avoid static construction issues
|
405
|
+
static grpc_core::ManualConstructor<grpc_core::Mutex> shared_cq_next_mu;
|
406
|
+
static grpc_completion_queue*
|
407
|
+
shared_cq_next; // GUARDED_BY(shared_cq_next_mu)
|
408
|
+
static grpc_core::Atomic<int> threads_remaining;
|
339
409
|
};
|
340
410
|
|
411
|
+
grpc_core::ManualConstructor<grpc_core::Mutex>
|
412
|
+
cq_callback_alternative_data::shared_cq_next_mu;
|
413
|
+
grpc_completion_queue* cq_callback_alternative_data::shared_cq_next = nullptr;
|
414
|
+
grpc_core::Atomic<int> cq_callback_alternative_data::threads_remaining{0};
|
415
|
+
|
341
416
|
} // namespace
|
342
417
|
|
343
418
|
/* Completion queue structure */
|
@@ -350,6 +425,12 @@ struct grpc_completion_queue {
|
|
350
425
|
const cq_vtable* vtable;
|
351
426
|
const cq_poller_vtable* poller_vtable;
|
352
427
|
|
428
|
+
// The pollset entry is allowed to enable proxy CQs like the
|
429
|
+
// callback_alternative.
|
430
|
+
// TODO(vjpai): Consider removing pollset and reverting to previous
|
431
|
+
// calculation of pollset once callback_alternative is no longer needed.
|
432
|
+
grpc_pollset* pollset;
|
433
|
+
|
353
434
|
#ifndef NDEBUG
|
354
435
|
void** outstanding_tags;
|
355
436
|
size_t outstanding_tag_count;
|
@@ -364,13 +445,17 @@ struct grpc_completion_queue {
|
|
364
445
|
static void cq_finish_shutdown_next(grpc_completion_queue* cq);
|
365
446
|
static void cq_finish_shutdown_pluck(grpc_completion_queue* cq);
|
366
447
|
static void cq_finish_shutdown_callback(grpc_completion_queue* cq);
|
448
|
+
static void cq_finish_shutdown_callback_alternative(grpc_completion_queue* cq);
|
367
449
|
static void cq_shutdown_next(grpc_completion_queue* cq);
|
368
450
|
static void cq_shutdown_pluck(grpc_completion_queue* cq);
|
369
451
|
static void cq_shutdown_callback(grpc_completion_queue* cq);
|
452
|
+
static void cq_shutdown_callback_alternative(grpc_completion_queue* cq);
|
370
453
|
|
371
454
|
static bool cq_begin_op_for_next(grpc_completion_queue* cq, void* tag);
|
372
455
|
static bool cq_begin_op_for_pluck(grpc_completion_queue* cq, void* tag);
|
373
456
|
static bool cq_begin_op_for_callback(grpc_completion_queue* cq, void* tag);
|
457
|
+
static bool cq_begin_op_for_callback_alternative(grpc_completion_queue* cq,
|
458
|
+
void* tag);
|
374
459
|
|
375
460
|
// A cq_end_op function is called when an operation on a given CQ with
|
376
461
|
// a given tag has completed. The storage argument is a reference to the
|
@@ -393,12 +478,20 @@ static void cq_end_op_for_callback(
|
|
393
478
|
void (*done)(void* done_arg, grpc_cq_completion* storage), void* done_arg,
|
394
479
|
grpc_cq_completion* storage, bool internal);
|
395
480
|
|
481
|
+
static void cq_end_op_for_callback_alternative(
|
482
|
+
grpc_completion_queue* cq, void* tag, grpc_error* error,
|
483
|
+
void (*done)(void* done_arg, grpc_cq_completion* storage), void* done_arg,
|
484
|
+
grpc_cq_completion* storage, bool internal);
|
485
|
+
|
396
486
|
static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
397
487
|
void* reserved);
|
398
488
|
|
399
489
|
static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
400
490
|
gpr_timespec deadline, void* reserved);
|
401
491
|
|
492
|
+
static grpc_pollset* cq_proxy_pollset_for_callback_alternative(
|
493
|
+
grpc_completion_queue* cq);
|
494
|
+
|
402
495
|
// Note that cq_init_next and cq_init_pluck do not use the shutdown_callback
|
403
496
|
static void cq_init_next(
|
404
497
|
void* data, grpc_experimental_completion_queue_functor* shutdown_callback);
|
@@ -406,29 +499,39 @@ static void cq_init_pluck(
|
|
406
499
|
void* data, grpc_experimental_completion_queue_functor* shutdown_callback);
|
407
500
|
static void cq_init_callback(
|
408
501
|
void* data, grpc_experimental_completion_queue_functor* shutdown_callback);
|
502
|
+
// poller becomes only option.
|
503
|
+
static void cq_init_callback_alternative(
|
504
|
+
void* data, grpc_experimental_completion_queue_functor* shutdown_callback);
|
409
505
|
static void cq_destroy_next(void* data);
|
410
506
|
static void cq_destroy_pluck(void* data);
|
411
507
|
static void cq_destroy_callback(void* data);
|
508
|
+
static void cq_destroy_callback_alternative(void* data);
|
412
509
|
|
413
510
|
/* Completion queue vtables based on the completion-type */
|
414
|
-
|
511
|
+
// TODO(vjpai): Make this const again once we stop needing callback_alternative
|
512
|
+
static cq_vtable g_polling_cq_vtable[] = {
|
415
513
|
/* GRPC_CQ_NEXT */
|
416
514
|
{GRPC_CQ_NEXT, sizeof(cq_next_data), cq_init_next, cq_shutdown_next,
|
417
515
|
cq_destroy_next, cq_begin_op_for_next, cq_end_op_for_next, cq_next,
|
418
|
-
nullptr},
|
516
|
+
nullptr, nullptr},
|
419
517
|
/* GRPC_CQ_PLUCK */
|
420
518
|
{GRPC_CQ_PLUCK, sizeof(cq_pluck_data), cq_init_pluck, cq_shutdown_pluck,
|
421
519
|
cq_destroy_pluck, cq_begin_op_for_pluck, cq_end_op_for_pluck, nullptr,
|
422
|
-
cq_pluck},
|
520
|
+
cq_pluck, nullptr},
|
423
521
|
/* GRPC_CQ_CALLBACK */
|
424
522
|
{GRPC_CQ_CALLBACK, sizeof(cq_callback_data), cq_init_callback,
|
425
523
|
cq_shutdown_callback, cq_destroy_callback, cq_begin_op_for_callback,
|
426
|
-
cq_end_op_for_callback, nullptr, nullptr},
|
524
|
+
cq_end_op_for_callback, nullptr, nullptr, nullptr},
|
427
525
|
};
|
428
526
|
|
527
|
+
// Separate vtable for non-polling cqs, assign at init
|
528
|
+
static cq_vtable g_nonpolling_cq_vtable[sizeof(g_polling_cq_vtable) /
|
529
|
+
sizeof(g_polling_cq_vtable[0])];
|
530
|
+
|
429
531
|
#define DATA_FROM_CQ(cq) ((void*)(cq + 1))
|
430
|
-
#define
|
532
|
+
#define INLINE_POLLSET_FROM_CQ(cq) \
|
431
533
|
((grpc_pollset*)(cq->vtable->data_size + (char*)DATA_FROM_CQ(cq)))
|
534
|
+
#define POLLSET_FROM_CQ(cq) (cq->pollset)
|
432
535
|
|
433
536
|
grpc_core::TraceFlag grpc_cq_pluck_trace(false, "queue_pluck");
|
434
537
|
|
@@ -447,6 +550,46 @@ static void on_pollset_shutdown_done(void* cq, grpc_error* error);
|
|
447
550
|
void grpc_cq_global_init() {
|
448
551
|
gpr_tls_init(&g_cached_event);
|
449
552
|
gpr_tls_init(&g_cached_cq);
|
553
|
+
g_nonpolling_cq_vtable[GRPC_CQ_NEXT] = g_polling_cq_vtable[GRPC_CQ_NEXT];
|
554
|
+
g_nonpolling_cq_vtable[GRPC_CQ_PLUCK] = g_polling_cq_vtable[GRPC_CQ_PLUCK];
|
555
|
+
g_nonpolling_cq_vtable[GRPC_CQ_CALLBACK] =
|
556
|
+
g_polling_cq_vtable[GRPC_CQ_CALLBACK];
|
557
|
+
}
|
558
|
+
|
559
|
+
// TODO(vjpai): Remove when callback_alternative is no longer needed
|
560
|
+
void grpc_cq_init() {
|
561
|
+
// If the iomgr runs in the background, we can use the preferred callback CQ.
|
562
|
+
// If the iomgr is non-polling, we cannot use the alternative callback CQ.
|
563
|
+
if (!grpc_iomgr_run_in_background() && !grpc_iomgr_non_polling()) {
|
564
|
+
cq_callback_alternative_data::shared_cq_next_mu.Init();
|
565
|
+
g_polling_cq_vtable[GRPC_CQ_CALLBACK] = {
|
566
|
+
GRPC_CQ_CALLBACK,
|
567
|
+
sizeof(cq_callback_alternative_data),
|
568
|
+
cq_init_callback_alternative,
|
569
|
+
cq_shutdown_callback_alternative,
|
570
|
+
cq_destroy_callback_alternative,
|
571
|
+
cq_begin_op_for_callback_alternative,
|
572
|
+
cq_end_op_for_callback_alternative,
|
573
|
+
nullptr,
|
574
|
+
nullptr,
|
575
|
+
cq_proxy_pollset_for_callback_alternative};
|
576
|
+
}
|
577
|
+
}
|
578
|
+
|
579
|
+
// TODO(vjpai): Remove when callback_alternative is no longer needed
|
580
|
+
void grpc_cq_shutdown() {
|
581
|
+
if (!grpc_iomgr_run_in_background() && !grpc_iomgr_non_polling()) {
|
582
|
+
{
|
583
|
+
grpc_core::MutexLock lock(
|
584
|
+
&*cq_callback_alternative_data::shared_cq_next_mu);
|
585
|
+
if (cq_callback_alternative_data::shared_cq_next != nullptr) {
|
586
|
+
grpc_completion_queue_shutdown(
|
587
|
+
cq_callback_alternative_data::shared_cq_next);
|
588
|
+
}
|
589
|
+
cq_callback_alternative_data::shared_cq_next = nullptr;
|
590
|
+
}
|
591
|
+
cq_callback_alternative_data::shared_cq_next_mu.Destroy();
|
592
|
+
}
|
450
593
|
}
|
451
594
|
|
452
595
|
void grpc_completion_queue_thread_local_cache_init(grpc_completion_queue* cq) {
|
@@ -525,7 +668,9 @@ grpc_completion_queue* grpc_completion_queue_create_internal(
|
|
525
668
|
"polling_type=%d)",
|
526
669
|
2, (completion_type, polling_type));
|
527
670
|
|
528
|
-
const cq_vtable* vtable =
|
671
|
+
const cq_vtable* vtable = (polling_type == GRPC_CQ_NON_POLLING)
|
672
|
+
? &g_nonpolling_cq_vtable[completion_type]
|
673
|
+
: &g_polling_cq_vtable[completion_type];
|
529
674
|
const cq_poller_vtable* poller_vtable =
|
530
675
|
&g_poller_vtable_by_poller_type[polling_type];
|
531
676
|
|
@@ -542,9 +687,18 @@ grpc_completion_queue* grpc_completion_queue_create_internal(
|
|
542
687
|
/* One for destroy(), one for pollset_shutdown */
|
543
688
|
new (&cq->owning_refs) grpc_core::RefCount(2);
|
544
689
|
|
545
|
-
poller_vtable->init(POLLSET_FROM_CQ(cq), &cq->mu);
|
546
690
|
vtable->init(DATA_FROM_CQ(cq), shutdown_callback);
|
547
691
|
|
692
|
+
// TODO(vjpai): When callback_alternative is no longer needed, cq->pollset can
|
693
|
+
// be removed and the nullptr proxy_pollset value below can be the definition
|
694
|
+
// of POLLSET_FROM_CQ.
|
695
|
+
cq->pollset = cq->vtable->proxy_pollset == nullptr
|
696
|
+
? INLINE_POLLSET_FROM_CQ(cq)
|
697
|
+
: cq->vtable->proxy_pollset(cq);
|
698
|
+
// Init the inline pollset. If a proxy CQ is used, the proxy pollset will be
|
699
|
+
// init'ed in its CQ init.
|
700
|
+
cq->poller_vtable->init(INLINE_POLLSET_FROM_CQ(cq), &cq->mu);
|
701
|
+
|
548
702
|
GRPC_CLOSURE_INIT(&cq->pollset_shutdown_done, on_pollset_shutdown_done, cq,
|
549
703
|
grpc_schedule_on_exec_ctx);
|
550
704
|
return cq;
|
@@ -582,6 +736,17 @@ static void cq_destroy_callback(void* data) {
|
|
582
736
|
cqd->~cq_callback_data();
|
583
737
|
}
|
584
738
|
|
739
|
+
static void cq_init_callback_alternative(
|
740
|
+
void* data, grpc_experimental_completion_queue_functor* shutdown_callback) {
|
741
|
+
new (data) cq_callback_alternative_data(shutdown_callback);
|
742
|
+
}
|
743
|
+
|
744
|
+
static void cq_destroy_callback_alternative(void* data) {
|
745
|
+
cq_callback_alternative_data* cqd =
|
746
|
+
static_cast<cq_callback_alternative_data*>(data);
|
747
|
+
cqd->~cq_callback_alternative_data();
|
748
|
+
}
|
749
|
+
|
585
750
|
grpc_cq_completion_type grpc_get_cq_completion_type(grpc_completion_queue* cq) {
|
586
751
|
return cq->vtable->cq_completion_type;
|
587
752
|
}
|
@@ -622,7 +787,9 @@ void grpc_cq_internal_unref(grpc_completion_queue* cq) {
|
|
622
787
|
#endif
|
623
788
|
if (GPR_UNLIKELY(cq->owning_refs.Unref(debug_location, reason))) {
|
624
789
|
cq->vtable->destroy(DATA_FROM_CQ(cq));
|
625
|
-
|
790
|
+
// Only destroy the inlined pollset. If a proxy CQ is used, the proxy
|
791
|
+
// pollset will be destroyed by the proxy CQ.
|
792
|
+
cq->poller_vtable->destroy(INLINE_POLLSET_FROM_CQ(cq));
|
626
793
|
#ifndef NDEBUG
|
627
794
|
gpr_free(cq->outstanding_tags);
|
628
795
|
#endif
|
@@ -673,6 +840,14 @@ static bool cq_begin_op_for_callback(grpc_completion_queue* cq, void* /*tag*/) {
|
|
673
840
|
return cqd->pending_events.IncrementIfNonzero();
|
674
841
|
}
|
675
842
|
|
843
|
+
static bool cq_begin_op_for_callback_alternative(grpc_completion_queue* cq,
|
844
|
+
void* tag) {
|
845
|
+
cq_callback_alternative_data* cqd =
|
846
|
+
static_cast<cq_callback_alternative_data*> DATA_FROM_CQ(cq);
|
847
|
+
return grpc_cq_begin_op(cqd->implementation, tag) &&
|
848
|
+
cqd->pending_events.IncrementIfNonzero();
|
849
|
+
}
|
850
|
+
|
676
851
|
bool grpc_cq_begin_op(grpc_completion_queue* cq, void* tag) {
|
677
852
|
#ifndef NDEBUG
|
678
853
|
gpr_mu_lock(cq->mu);
|
@@ -836,7 +1011,7 @@ static void cq_end_op_for_pluck(
|
|
836
1011
|
GRPC_ERROR_UNREF(error);
|
837
1012
|
}
|
838
1013
|
|
839
|
-
|
1014
|
+
void functor_callback(void* arg, grpc_error* error) {
|
840
1015
|
auto* functor = static_cast<grpc_experimental_completion_queue_functor*>(arg);
|
841
1016
|
functor->functor_run(functor, error == GRPC_ERROR_NONE);
|
842
1017
|
}
|
@@ -870,7 +1045,6 @@ static void cq_end_op_for_callback(
|
|
870
1045
|
|
871
1046
|
cq_check_tag(cq, tag, true); /* Used in debug builds only */
|
872
1047
|
|
873
|
-
cqd->things_queued_ever.FetchAdd(1, grpc_core::MemoryOrder::RELAXED);
|
874
1048
|
if (cqd->pending_events.FetchSub(1, grpc_core::MemoryOrder::ACQ_REL) == 1) {
|
875
1049
|
cq_finish_shutdown_callback(cq);
|
876
1050
|
}
|
@@ -897,6 +1071,40 @@ static void cq_end_op_for_callback(
|
|
897
1071
|
GRPC_CLOSURE_CREATE(functor_callback, functor, nullptr), error);
|
898
1072
|
}
|
899
1073
|
|
1074
|
+
static void cq_end_op_for_callback_alternative(
|
1075
|
+
grpc_completion_queue* cq, void* tag, grpc_error* error,
|
1076
|
+
void (*done)(void* done_arg, grpc_cq_completion* storage), void* done_arg,
|
1077
|
+
grpc_cq_completion* storage, bool internal) {
|
1078
|
+
GPR_TIMER_SCOPE("cq_end_op_for_callback_alternative", 0);
|
1079
|
+
|
1080
|
+
cq_callback_alternative_data* cqd =
|
1081
|
+
static_cast<cq_callback_alternative_data*> DATA_FROM_CQ(cq);
|
1082
|
+
|
1083
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_api_trace) ||
|
1084
|
+
(GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures) &&
|
1085
|
+
error != GRPC_ERROR_NONE)) {
|
1086
|
+
const char* errmsg = grpc_error_string(error);
|
1087
|
+
GRPC_API_TRACE(
|
1088
|
+
"cq_end_op_for_callback_alternative(cq=%p, tag=%p, error=%s, "
|
1089
|
+
"done=%p, done_arg=%p, storage=%p)",
|
1090
|
+
6, (cq, tag, errmsg, done, done_arg, storage));
|
1091
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures) &&
|
1092
|
+
error != GRPC_ERROR_NONE) {
|
1093
|
+
gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
|
1094
|
+
}
|
1095
|
+
}
|
1096
|
+
|
1097
|
+
// Pass through the actual work to the internal nextable CQ
|
1098
|
+
grpc_cq_end_op(cqd->implementation, tag, error, done, done_arg, storage,
|
1099
|
+
internal);
|
1100
|
+
|
1101
|
+
cq_check_tag(cq, tag, true); /* Used in debug builds only */
|
1102
|
+
|
1103
|
+
if (cqd->pending_events.FetchSub(1, grpc_core::MemoryOrder::ACQ_REL) == 1) {
|
1104
|
+
cq_finish_shutdown_callback_alternative(cq);
|
1105
|
+
}
|
1106
|
+
}
|
1107
|
+
|
900
1108
|
void grpc_cq_end_op(grpc_completion_queue* cq, void* tag, grpc_error* error,
|
901
1109
|
void (*done)(void* done_arg, grpc_cq_completion* storage),
|
902
1110
|
void* done_arg, grpc_cq_completion* storage,
|
@@ -904,6 +1112,13 @@ void grpc_cq_end_op(grpc_completion_queue* cq, void* tag, grpc_error* error,
|
|
904
1112
|
cq->vtable->end_op(cq, tag, error, done, done_arg, storage, internal);
|
905
1113
|
}
|
906
1114
|
|
1115
|
+
static grpc_pollset* cq_proxy_pollset_for_callback_alternative(
|
1116
|
+
grpc_completion_queue* cq) {
|
1117
|
+
cq_callback_alternative_data* cqd =
|
1118
|
+
static_cast<cq_callback_alternative_data*>(DATA_FROM_CQ(cq));
|
1119
|
+
return POLLSET_FROM_CQ(cqd->implementation);
|
1120
|
+
}
|
1121
|
+
|
907
1122
|
struct cq_is_finished_arg {
|
908
1123
|
gpr_atm last_seen_things_queued_ever;
|
909
1124
|
grpc_completion_queue* cq;
|
@@ -1384,6 +1599,21 @@ static void cq_finish_shutdown_callback(grpc_completion_queue* cq) {
|
|
1384
1599
|
GRPC_ERROR_NONE);
|
1385
1600
|
}
|
1386
1601
|
|
1602
|
+
static void cq_finish_shutdown_callback_alternative(grpc_completion_queue* cq) {
|
1603
|
+
cq_callback_alternative_data* cqd =
|
1604
|
+
static_cast<cq_callback_alternative_data*> DATA_FROM_CQ(cq);
|
1605
|
+
auto* callback = cqd->shutdown_callback;
|
1606
|
+
|
1607
|
+
GPR_ASSERT(cqd->shutdown_called);
|
1608
|
+
|
1609
|
+
// Shutdown the non-proxy pollset
|
1610
|
+
cq->poller_vtable->shutdown(INLINE_POLLSET_FROM_CQ(cq),
|
1611
|
+
&cq->pollset_shutdown_done);
|
1612
|
+
grpc_core::Executor::Run(
|
1613
|
+
GRPC_CLOSURE_CREATE(functor_callback, callback, nullptr),
|
1614
|
+
GRPC_ERROR_NONE);
|
1615
|
+
}
|
1616
|
+
|
1387
1617
|
static void cq_shutdown_callback(grpc_completion_queue* cq) {
|
1388
1618
|
cq_callback_data* cqd = static_cast<cq_callback_data*> DATA_FROM_CQ(cq);
|
1389
1619
|
|
@@ -1410,6 +1640,33 @@ static void cq_shutdown_callback(grpc_completion_queue* cq) {
|
|
1410
1640
|
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (callback cq)");
|
1411
1641
|
}
|
1412
1642
|
|
1643
|
+
static void cq_shutdown_callback_alternative(grpc_completion_queue* cq) {
|
1644
|
+
cq_callback_alternative_data* cqd =
|
1645
|
+
static_cast<cq_callback_alternative_data*> DATA_FROM_CQ(cq);
|
1646
|
+
|
1647
|
+
/* Need an extra ref for cq here because:
|
1648
|
+
* We call cq_finish_shutdown_callback() below, which calls pollset shutdown.
|
1649
|
+
* Pollset shutdown decrements the cq ref count which can potentially destroy
|
1650
|
+
* the cq (if that happens to be the last ref).
|
1651
|
+
* Creating an extra ref here prevents the cq from getting destroyed while
|
1652
|
+
* this function is still active */
|
1653
|
+
GRPC_CQ_INTERNAL_REF(cq, "shutting_down (callback cq)");
|
1654
|
+
gpr_mu_lock(cq->mu);
|
1655
|
+
if (cqd->shutdown_called) {
|
1656
|
+
gpr_mu_unlock(cq->mu);
|
1657
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (callback cq)");
|
1658
|
+
return;
|
1659
|
+
}
|
1660
|
+
cqd->shutdown_called = true;
|
1661
|
+
if (cqd->pending_events.FetchSub(1, grpc_core::MemoryOrder::ACQ_REL) == 1) {
|
1662
|
+
gpr_mu_unlock(cq->mu);
|
1663
|
+
cq_finish_shutdown_callback_alternative(cq);
|
1664
|
+
} else {
|
1665
|
+
gpr_mu_unlock(cq->mu);
|
1666
|
+
}
|
1667
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (callback cq)");
|
1668
|
+
}
|
1669
|
+
|
1413
1670
|
/* Shutdown simply drops a ref that we reserved at creation time; if we drop
|
1414
1671
|
to zero here, then enter shutdown mode and wake up any waiters */
|
1415
1672
|
void grpc_completion_queue_shutdown(grpc_completion_queue* cq) {
|