grpc 1.43.1 → 1.44.0.pre2
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 +84 -64
- data/include/grpc/grpc_security.h +10 -0
- data/include/grpc/impl/codegen/compression_types.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +6 -0
- data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
- data/src/core/ext/filters/client_channel/client_channel.h +8 -8
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
- data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
- data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
- data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
- data/src/core/ext/filters/client_channel/subchannel.h +2 -3
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
- data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
- data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
- data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
- data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
- data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
- data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
- data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
- data/src/core/ext/xds/upb_utils.h +65 -0
- data/src/core/ext/xds/xds_api.cc +81 -3458
- data/src/core/ext/xds/xds_api.h +56 -611
- data/src/core/ext/xds/xds_bootstrap.cc +189 -125
- data/src/core/ext/xds/xds_bootstrap.h +20 -15
- data/src/core/ext/xds/xds_certificate_provider.h +1 -0
- data/src/core/ext/xds/xds_channel_creds.cc +108 -0
- data/src/core/ext/xds/xds_channel_creds.h +50 -0
- data/src/core/ext/xds/xds_client.cc +584 -994
- data/src/core/ext/xds/xds_client.h +78 -135
- data/src/core/ext/xds/xds_cluster.cc +451 -0
- data/src/core/ext/xds/xds_cluster.h +111 -0
- data/src/core/ext/xds/xds_common_types.cc +388 -0
- data/src/core/ext/xds/xds_common_types.h +110 -0
- data/src/core/ext/xds/xds_endpoint.cc +364 -0
- data/src/core/ext/xds/xds_endpoint.h +135 -0
- data/src/core/ext/xds/xds_http_filters.cc +5 -0
- data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
- data/src/core/ext/xds/xds_listener.cc +1036 -0
- data/src/core/ext/xds/xds_listener.h +220 -0
- data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
- data/src/core/ext/xds/xds_resource_type.h +98 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
- data/src/core/ext/xds/xds_route_config.cc +993 -0
- data/src/core/ext/xds/xds_route_config.h +215 -0
- data/src/core/ext/xds/xds_routing.cc +11 -8
- data/src/core/ext/xds/xds_routing.h +8 -5
- data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
- data/src/core/lib/address_utils/parse_address.cc +20 -0
- data/src/core/lib/address_utils/parse_address.h +5 -0
- data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
- data/src/core/lib/backoff/backoff.cc +4 -30
- data/src/core/lib/backoff/backoff.h +3 -3
- data/src/core/lib/channel/channel_args.cc +0 -1
- data/src/core/lib/channel/channel_stack.cc +8 -0
- data/src/core/lib/channel/channel_stack.h +1 -1
- data/src/core/lib/channel/channel_stack_builder.cc +5 -9
- data/src/core/lib/channel/channel_stack_builder.h +4 -7
- data/src/core/lib/channel/channelz.cc +1 -0
- data/src/core/lib/compression/compression.cc +19 -111
- data/src/core/lib/compression/compression_internal.cc +142 -202
- data/src/core/lib/compression/compression_internal.h +64 -69
- data/src/core/lib/compression/message_compress.cc +11 -11
- data/src/core/lib/compression/message_compress.h +2 -2
- data/src/core/lib/gpr/useful.h +4 -0
- data/src/core/lib/gprpp/bitset.h +7 -0
- data/src/core/lib/gprpp/chunked_vector.h +45 -3
- data/src/core/lib/gprpp/status_helper.cc +20 -28
- data/src/core/lib/gprpp/status_helper.h +6 -19
- data/src/core/lib/gprpp/table.h +11 -0
- data/src/core/lib/http/httpcli.cc +37 -46
- data/src/core/lib/http/httpcli.h +3 -15
- data/src/core/lib/iomgr/call_combiner.cc +15 -4
- data/src/core/lib/iomgr/closure.h +29 -9
- data/src/core/lib/iomgr/combiner.cc +25 -3
- data/src/core/lib/iomgr/error.cc +2 -0
- data/src/core/lib/iomgr/error.h +3 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
- data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
- data/src/core/lib/iomgr/exec_ctx.cc +22 -9
- data/src/core/lib/iomgr/executor.cc +10 -1
- data/src/core/lib/iomgr/fork_posix.cc +3 -2
- data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
- data/src/core/lib/iomgr/port.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +5 -24
- data/src/core/lib/iomgr/resolve_address.h +47 -44
- data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
- data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
- data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
- data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
- data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
- data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
- data/src/core/lib/matchers/matchers.cc +1 -1
- data/src/core/lib/promise/activity.h +49 -20
- data/src/core/lib/promise/detail/status.h +5 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.h +0 -1
- data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
- data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
- data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
- data/src/core/lib/security/authorization/evaluate_args.h +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
- data/src/core/lib/security/authorization/matchers.cc +227 -0
- data/src/core/lib/security/authorization/matchers.h +211 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
- data/src/core/lib/security/authorization/rbac_policy.h +170 -0
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/context/security_context.h +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
- data/src/core/lib/security/credentials/credentials.h +10 -20
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
- data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
- data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +0 -4
- data/src/core/lib/security/security_connector/security_connector.h +5 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
- data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
- data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
- data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
- data/src/core/{ext → lib}/service_config/service_config.h +4 -4
- data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
- data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
- data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
- data/src/core/lib/slice/slice.cc +3 -1
- data/src/core/lib/slice/slice.h +43 -13
- data/src/core/lib/slice/slice_intern.cc +3 -101
- data/src/core/lib/slice/slice_internal.h +1 -2
- data/src/core/lib/slice/slice_refcount.h +4 -13
- data/src/core/lib/slice/slice_refcount_base.h +0 -16
- data/src/core/lib/surface/call.cc +140 -382
- data/src/core/lib/surface/call.h +4 -4
- data/src/core/lib/surface/channel.cc +42 -44
- data/src/core/lib/surface/channel.h +4 -4
- data/src/core/lib/surface/init.cc +0 -2
- data/src/core/lib/surface/lame_client.cc +0 -1
- data/src/core/lib/surface/server.cc +12 -29
- data/src/core/lib/surface/server.h +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.h +14 -0
- data/src/core/lib/transport/metadata_batch.h +799 -717
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +95 -92
- data/src/core/lib/transport/timeout_encoding.cc +200 -66
- data/src/core/lib/transport/timeout_encoding.h +40 -10
- data/src/core/lib/transport/transport.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +6 -39
- data/src/core/lib/uri/uri_parser.cc +223 -53
- data/src/core/lib/uri/uri_parser.h +36 -23
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
- data/src/core/tsi/ssl_transport_security.cc +53 -13
- data/src/core/tsi/ssl_transport_security.h +18 -6
- data/src/ruby/ext/grpc/extconf.rb +10 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
- data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
- data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
- data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
- data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
- data/third_party/abseil-cpp/absl/random/random.h +189 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
- data/third_party/xxhash/xxhash.h +607 -352
- metadata +149 -77
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
- data/src/core/lib/compression/algorithm_metadata.h +0 -62
- data/src/core/lib/compression/compression_args.cc +0 -140
- data/src/core/lib/compression/compression_args.h +0 -58
- data/src/core/lib/compression/stream_compression.cc +0 -81
- data/src/core/lib/compression/stream_compression.h +0 -117
- data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
- data/src/core/lib/compression/stream_compression_gzip.h +0 -28
- data/src/core/lib/compression/stream_compression_identity.cc +0 -91
- data/src/core/lib/compression/stream_compression_identity.h +0 -29
- data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
- data/src/core/lib/slice/static_slice.cc +0 -377
- data/src/core/lib/slice/static_slice.h +0 -300
- data/src/core/lib/transport/metadata.cc +0 -714
- data/src/core/lib/transport/metadata.h +0 -449
- data/src/core/lib/transport/metadata_batch.cc +0 -99
- data/src/core/lib/transport/static_metadata.cc +0 -1032
- data/src/core/lib/transport/static_metadata.h +0 -322
- data/src/core/lib/transport/status_metadata.cc +0 -63
- data/src/core/lib/transport/status_metadata.h +0 -48
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
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
|
+
//
|
18
16
|
|
19
17
|
#include <grpc/support/port_platform.h>
|
20
18
|
|
@@ -37,9 +35,6 @@
|
|
37
35
|
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
38
36
|
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
|
39
37
|
#include "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h"
|
40
|
-
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
41
|
-
#include "src/core/ext/filters/client_channel/server_address.h"
|
42
|
-
#include "src/core/ext/service_config/service_config.h"
|
43
38
|
#include "src/core/lib/backoff/backoff.h"
|
44
39
|
#include "src/core/lib/channel/channel_args.h"
|
45
40
|
#include "src/core/lib/gpr/string.h"
|
@@ -50,6 +45,10 @@
|
|
50
45
|
#include "src/core/lib/iomgr/timer.h"
|
51
46
|
#include "src/core/lib/iomgr/work_serializer.h"
|
52
47
|
#include "src/core/lib/json/json.h"
|
48
|
+
#include "src/core/lib/resolver/resolver_registry.h"
|
49
|
+
#include "src/core/lib/resolver/server_address.h"
|
50
|
+
#include "src/core/lib/service_config/service_config.h"
|
51
|
+
#include "src/core/lib/transport/error_utils.h"
|
53
52
|
|
54
53
|
#define GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
55
54
|
#define GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER 1.6
|
@@ -60,9 +59,9 @@ namespace grpc_core {
|
|
60
59
|
|
61
60
|
namespace {
|
62
61
|
|
63
|
-
class
|
62
|
+
class AresClientChannelDNSResolver : public Resolver {
|
64
63
|
public:
|
65
|
-
explicit
|
64
|
+
explicit AresClientChannelDNSResolver(ResolverArgs args);
|
66
65
|
|
67
66
|
void StartLocked() override;
|
68
67
|
|
@@ -73,7 +72,7 @@ class AresDnsResolver : public Resolver {
|
|
73
72
|
void ShutdownLocked() override;
|
74
73
|
|
75
74
|
private:
|
76
|
-
~
|
75
|
+
~AresClientChannelDNSResolver() override;
|
77
76
|
|
78
77
|
void MaybeStartResolvingLocked();
|
79
78
|
void StartResolvingLocked();
|
@@ -127,7 +126,7 @@ class AresDnsResolver : public Resolver {
|
|
127
126
|
bool shutdown_initiated_ = false;
|
128
127
|
};
|
129
128
|
|
130
|
-
|
129
|
+
AresClientChannelDNSResolver::AresClientChannelDNSResolver(ResolverArgs args)
|
131
130
|
: dns_server_(args.uri.authority()),
|
132
131
|
name_to_resolve_(absl::StripPrefix(args.uri.path(), "/")),
|
133
132
|
channel_args_(grpc_channel_args_copy(args.args)),
|
@@ -157,48 +156,53 @@ AresDnsResolver::AresDnsResolver(ResolverArgs args)
|
|
157
156
|
GRPC_CLOSURE_INIT(&on_resolved_, OnResolved, this, grpc_schedule_on_exec_ctx);
|
158
157
|
}
|
159
158
|
|
160
|
-
|
161
|
-
GRPC_CARES_TRACE_LOG("resolver:%p destroying
|
159
|
+
AresClientChannelDNSResolver::~AresClientChannelDNSResolver() {
|
160
|
+
GRPC_CARES_TRACE_LOG("resolver:%p destroying AresClientChannelDNSResolver",
|
161
|
+
this);
|
162
162
|
grpc_channel_args_destroy(channel_args_);
|
163
163
|
}
|
164
164
|
|
165
|
-
void
|
166
|
-
GRPC_CARES_TRACE_LOG(
|
167
|
-
|
165
|
+
void AresClientChannelDNSResolver::StartLocked() {
|
166
|
+
GRPC_CARES_TRACE_LOG(
|
167
|
+
"resolver:%p AresClientChannelDNSResolver::StartLocked() is called.",
|
168
|
+
this);
|
168
169
|
MaybeStartResolvingLocked();
|
169
170
|
}
|
170
171
|
|
171
|
-
void
|
172
|
+
void AresClientChannelDNSResolver::RequestReresolutionLocked() {
|
172
173
|
if (!resolving_) {
|
173
174
|
MaybeStartResolvingLocked();
|
174
175
|
}
|
175
176
|
}
|
176
177
|
|
177
|
-
void
|
178
|
+
void AresClientChannelDNSResolver::ResetBackoffLocked() {
|
178
179
|
if (have_next_resolution_timer_) {
|
179
180
|
grpc_timer_cancel(&next_resolution_timer_);
|
180
181
|
}
|
181
182
|
backoff_.Reset();
|
182
183
|
}
|
183
184
|
|
184
|
-
void
|
185
|
+
void AresClientChannelDNSResolver::ShutdownLocked() {
|
185
186
|
shutdown_initiated_ = true;
|
186
187
|
if (have_next_resolution_timer_) {
|
187
188
|
grpc_timer_cancel(&next_resolution_timer_);
|
188
189
|
}
|
189
190
|
if (pending_request_ != nullptr) {
|
190
|
-
|
191
|
+
grpc_cancel_ares_request(pending_request_);
|
191
192
|
}
|
192
193
|
}
|
193
194
|
|
194
|
-
void
|
195
|
-
|
195
|
+
void AresClientChannelDNSResolver::OnNextResolution(void* arg,
|
196
|
+
grpc_error_handle error) {
|
197
|
+
AresClientChannelDNSResolver* r =
|
198
|
+
static_cast<AresClientChannelDNSResolver*>(arg);
|
196
199
|
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
197
200
|
r->work_serializer_->Run([r, error]() { r->OnNextResolutionLocked(error); },
|
198
201
|
DEBUG_LOCATION);
|
199
202
|
}
|
200
203
|
|
201
|
-
void
|
204
|
+
void AresClientChannelDNSResolver::OnNextResolutionLocked(
|
205
|
+
grpc_error_handle error) {
|
202
206
|
GRPC_CARES_TRACE_LOG(
|
203
207
|
"resolver:%p re-resolution timer fired. error: %s. shutdown_initiated_: "
|
204
208
|
"%d",
|
@@ -303,14 +307,16 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
|
|
303
307
|
return service_config->Dump();
|
304
308
|
}
|
305
309
|
|
306
|
-
void
|
307
|
-
|
310
|
+
void AresClientChannelDNSResolver::OnResolved(void* arg,
|
311
|
+
grpc_error_handle error) {
|
312
|
+
AresClientChannelDNSResolver* r =
|
313
|
+
static_cast<AresClientChannelDNSResolver*>(arg);
|
308
314
|
(void)GRPC_ERROR_REF(error); // ref owned by lambda
|
309
315
|
r->work_serializer_->Run([r, error]() { r->OnResolvedLocked(error); },
|
310
316
|
DEBUG_LOCATION);
|
311
317
|
}
|
312
318
|
|
313
|
-
void
|
319
|
+
void AresClientChannelDNSResolver::OnResolvedLocked(grpc_error_handle error) {
|
314
320
|
GPR_ASSERT(resolving_);
|
315
321
|
resolving_ = false;
|
316
322
|
delete pending_request_;
|
@@ -320,21 +326,35 @@ void AresDnsResolver::OnResolvedLocked(grpc_error_handle error) {
|
|
320
326
|
GRPC_ERROR_UNREF(error);
|
321
327
|
return;
|
322
328
|
}
|
329
|
+
// TODO(roth): Change logic to be able to report failures for addresses
|
330
|
+
// and service config independently of each other.
|
323
331
|
if (addresses_ != nullptr || balancer_addresses_ != nullptr) {
|
324
332
|
Result result;
|
325
333
|
if (addresses_ != nullptr) {
|
326
334
|
result.addresses = std::move(*addresses_);
|
335
|
+
} else {
|
336
|
+
result.addresses = ServerAddressList();
|
327
337
|
}
|
328
338
|
if (service_config_json_ != nullptr) {
|
329
|
-
|
330
|
-
|
339
|
+
grpc_error_handle service_config_error = GRPC_ERROR_NONE;
|
340
|
+
std::string service_config_string =
|
341
|
+
ChooseServiceConfig(service_config_json_, &service_config_error);
|
331
342
|
gpr_free(service_config_json_);
|
332
|
-
|
343
|
+
RefCountedPtr<ServiceConfig> service_config;
|
344
|
+
if (service_config_error == GRPC_ERROR_NONE &&
|
333
345
|
!service_config_string.empty()) {
|
334
346
|
GRPC_CARES_TRACE_LOG("resolver:%p selected service config choice: %s",
|
335
347
|
this, service_config_string.c_str());
|
336
|
-
|
337
|
-
channel_args_, service_config_string, &
|
348
|
+
service_config = ServiceConfig::Create(
|
349
|
+
channel_args_, service_config_string, &service_config_error);
|
350
|
+
}
|
351
|
+
if (service_config_error != GRPC_ERROR_NONE) {
|
352
|
+
result.service_config = absl::UnavailableError(
|
353
|
+
absl::StrCat("failed to parse service config: ",
|
354
|
+
grpc_error_std_string(service_config_error)));
|
355
|
+
GRPC_ERROR_UNREF(service_config_error);
|
356
|
+
} else {
|
357
|
+
result.service_config = std::move(service_config);
|
338
358
|
}
|
339
359
|
}
|
340
360
|
absl::InlinedVector<grpc_arg, 1> new_args;
|
@@ -344,7 +364,7 @@ void AresDnsResolver::OnResolvedLocked(grpc_error_handle error) {
|
|
344
364
|
}
|
345
365
|
result.args = grpc_channel_args_copy_and_add(channel_args_, new_args.data(),
|
346
366
|
new_args.size());
|
347
|
-
result_handler_->
|
367
|
+
result_handler_->ReportResult(std::move(result));
|
348
368
|
addresses_.reset();
|
349
369
|
balancer_addresses_.reset();
|
350
370
|
// Reset backoff state so that we start from the beginning when the
|
@@ -353,12 +373,15 @@ void AresDnsResolver::OnResolvedLocked(grpc_error_handle error) {
|
|
353
373
|
} else {
|
354
374
|
GRPC_CARES_TRACE_LOG("resolver:%p dns resolution failed: %s", this,
|
355
375
|
grpc_error_std_string(error).c_str());
|
356
|
-
std::string error_message
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
376
|
+
std::string error_message;
|
377
|
+
grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION, &error_message);
|
378
|
+
absl::Status status = absl::UnavailableError(absl::StrCat(
|
379
|
+
"DNS resolution failed for ", name_to_resolve_, ": ", error_message));
|
380
|
+
Result result;
|
381
|
+
result.addresses = status;
|
382
|
+
result.service_config = status;
|
383
|
+
result.args = grpc_channel_args_copy(channel_args_);
|
384
|
+
result_handler_->ReportResult(std::move(result));
|
362
385
|
// Set retry timer.
|
363
386
|
// InvalidateNow to avoid getting stuck re-initializing this timer
|
364
387
|
// in a loop while draining the currently-held WorkSerializer.
|
@@ -386,7 +409,7 @@ void AresDnsResolver::OnResolvedLocked(grpc_error_handle error) {
|
|
386
409
|
GRPC_ERROR_UNREF(error);
|
387
410
|
}
|
388
411
|
|
389
|
-
void
|
412
|
+
void AresClientChannelDNSResolver::MaybeStartResolvingLocked() {
|
390
413
|
// If there is an existing timer, the time it fires is the earliest time we
|
391
414
|
// can start the next resolution.
|
392
415
|
if (have_next_resolution_timer_) return;
|
@@ -420,7 +443,7 @@ void AresDnsResolver::MaybeStartResolvingLocked() {
|
|
420
443
|
StartResolvingLocked();
|
421
444
|
}
|
422
445
|
|
423
|
-
void
|
446
|
+
void AresClientChannelDNSResolver::StartResolvingLocked() {
|
424
447
|
// TODO(roth): We currently deal with this ref manually. Once the
|
425
448
|
// new closure API is done, find a way to track this ref with the timer
|
426
449
|
// callback as part of the type system.
|
@@ -428,12 +451,12 @@ void AresDnsResolver::StartResolvingLocked() {
|
|
428
451
|
GPR_ASSERT(!resolving_);
|
429
452
|
resolving_ = true;
|
430
453
|
service_config_json_ = nullptr;
|
431
|
-
pending_request_ =
|
454
|
+
pending_request_ = grpc_dns_lookup_ares(
|
432
455
|
dns_server_.c_str(), name_to_resolve_.c_str(), kDefaultSecurePort,
|
433
456
|
interested_parties_, &on_resolved_, &addresses_,
|
434
457
|
enable_srv_queries_ ? &balancer_addresses_ : nullptr,
|
435
458
|
request_service_config_ ? &service_config_json_ : nullptr,
|
436
|
-
query_timeout_ms_
|
459
|
+
query_timeout_ms_);
|
437
460
|
last_resolution_timestamp_ = ExecCtx::Get()->Now();
|
438
461
|
GRPC_CARES_TRACE_LOG("resolver:%p Started resolving. pending_request_:%p",
|
439
462
|
this, pending_request_);
|
@@ -442,8 +465,7 @@ void AresDnsResolver::StartResolvingLocked() {
|
|
442
465
|
//
|
443
466
|
// Factory
|
444
467
|
//
|
445
|
-
|
446
|
-
class AresDnsResolverFactory : public ResolverFactory {
|
468
|
+
class AresClientChannelDNSResolverFactory : public ResolverFactory {
|
447
469
|
public:
|
448
470
|
bool IsValidUri(const URI& uri) const override {
|
449
471
|
if (absl::StripPrefix(uri.path(), "/").empty()) {
|
@@ -454,30 +476,133 @@ class AresDnsResolverFactory : public ResolverFactory {
|
|
454
476
|
}
|
455
477
|
|
456
478
|
OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
|
457
|
-
return MakeOrphanable<
|
479
|
+
return MakeOrphanable<AresClientChannelDNSResolver>(std::move(args));
|
458
480
|
}
|
459
481
|
|
460
482
|
const char* scheme() const override { return "dns"; }
|
461
483
|
};
|
462
484
|
|
463
|
-
|
485
|
+
class AresDNSResolver : public DNSResolver {
|
486
|
+
public:
|
487
|
+
class AresRequest : public DNSResolver::Request {
|
488
|
+
public:
|
489
|
+
AresRequest(
|
490
|
+
absl::string_view name, absl::string_view default_port,
|
491
|
+
grpc_pollset_set* interested_parties,
|
492
|
+
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
|
493
|
+
on_resolve_address_done)
|
494
|
+
: name_(std::string(name)),
|
495
|
+
default_port_(std::string(default_port)),
|
496
|
+
interested_parties_(interested_parties),
|
497
|
+
on_resolve_address_done_(std::move(on_resolve_address_done)) {
|
498
|
+
GRPC_CARES_TRACE_LOG("AresRequest:%p ctor", this);
|
499
|
+
GRPC_CLOSURE_INIT(&on_dns_lookup_done_, OnDnsLookupDone, this,
|
500
|
+
grpc_schedule_on_exec_ctx);
|
501
|
+
}
|
464
502
|
|
465
|
-
|
503
|
+
~AresRequest() override {
|
504
|
+
GRPC_CARES_TRACE_LOG("AresRequest:%p dtor ares_request_:%p", this,
|
505
|
+
ares_request_.get());
|
506
|
+
}
|
466
507
|
|
467
|
-
|
468
|
-
|
508
|
+
void Start() override {
|
509
|
+
absl::MutexLock lock(&mu_);
|
510
|
+
Ref().release(); // ref held by resolution
|
511
|
+
ares_request_ = std::unique_ptr<grpc_ares_request>(grpc_dns_lookup_ares(
|
512
|
+
"" /* dns_server */, name_.c_str(), default_port_.c_str(),
|
513
|
+
interested_parties_, &on_dns_lookup_done_, &addresses_,
|
514
|
+
nullptr /* balancer_addresses */, nullptr /* service_config_json */,
|
515
|
+
GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS));
|
516
|
+
GRPC_CARES_TRACE_LOG("AresRequest:%p Start ares_request_:%p", this,
|
517
|
+
ares_request_.get());
|
518
|
+
}
|
469
519
|
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
520
|
+
void Orphan() override {
|
521
|
+
{
|
522
|
+
absl::MutexLock lock(&mu_);
|
523
|
+
GRPC_CARES_TRACE_LOG("AresRequest:%p Orphan ares_request_:%p", this,
|
524
|
+
ares_request_.get());
|
525
|
+
grpc_cancel_ares_request(ares_request_.get());
|
526
|
+
}
|
527
|
+
Unref();
|
528
|
+
}
|
529
|
+
|
530
|
+
private:
|
531
|
+
static void OnDnsLookupDone(void* arg, grpc_error_handle error) {
|
532
|
+
AresRequest* r = static_cast<AresRequest*>(arg);
|
533
|
+
std::vector<grpc_resolved_address> resolved_addresses;
|
534
|
+
{
|
535
|
+
absl::MutexLock lock(&r->mu_);
|
536
|
+
GRPC_CARES_TRACE_LOG("AresRequest:%p OnDnsLookupDone error:%s", r,
|
537
|
+
grpc_error_std_string(error).c_str());
|
538
|
+
if (r->addresses_ != nullptr) {
|
539
|
+
resolved_addresses.reserve(r->addresses_->size());
|
540
|
+
for (const auto& server_address : *r->addresses_) {
|
541
|
+
resolved_addresses.push_back(server_address.address());
|
542
|
+
}
|
543
|
+
}
|
544
|
+
}
|
545
|
+
if (error == GRPC_ERROR_NONE) {
|
546
|
+
// it's safe to run this inline since we've already been scheduled
|
547
|
+
// on the ExecCtx
|
548
|
+
r->on_resolve_address_done_(std::move(resolved_addresses));
|
549
|
+
} else {
|
550
|
+
r->on_resolve_address_done_(grpc_error_to_absl_status(error));
|
551
|
+
}
|
552
|
+
r->Unref();
|
553
|
+
}
|
554
|
+
|
555
|
+
// mutex to synchronize access to this object (but not to the ares_request
|
556
|
+
// object itself).
|
557
|
+
absl::Mutex mu_;
|
558
|
+
// the name to resolve
|
559
|
+
const std::string name_;
|
560
|
+
// the default port to use if name doesn't have one
|
561
|
+
const std::string default_port_;
|
562
|
+
// parties interested in our I/O
|
563
|
+
grpc_pollset_set* const interested_parties_;
|
564
|
+
// user-provided completion callback
|
565
|
+
const std::function<void(
|
566
|
+
absl::StatusOr<std::vector<grpc_resolved_address>>)>
|
567
|
+
on_resolve_address_done_;
|
568
|
+
// currently resolving addresses
|
569
|
+
std::unique_ptr<ServerAddressList> addresses_ ABSL_GUARDED_BY(mu_);
|
570
|
+
// closure to call when the resolve_address_ares request completes
|
571
|
+
// a closure wrapping on_resolve_address_done, which should be invoked
|
572
|
+
// when the grpc_dns_lookup_ares operation is done.
|
573
|
+
grpc_closure on_dns_lookup_done_ ABSL_GUARDED_BY(mu_);
|
574
|
+
// underlying ares_request that the query is performed on
|
575
|
+
std::unique_ptr<grpc_ares_request> ares_request_ ABSL_GUARDED_BY(mu_);
|
576
|
+
};
|
577
|
+
|
578
|
+
// gets the singleton instance, possibly creating it first
|
579
|
+
static AresDNSResolver* GetOrCreate() {
|
580
|
+
static AresDNSResolver* instance = new AresDNSResolver();
|
581
|
+
return instance;
|
582
|
+
}
|
583
|
+
|
584
|
+
OrphanablePtr<DNSResolver::Request> ResolveName(
|
585
|
+
absl::string_view name, absl::string_view default_port,
|
586
|
+
grpc_pollset_set* interested_parties,
|
587
|
+
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
|
588
|
+
on_done) override {
|
589
|
+
return MakeOrphanable<AresRequest>(name, default_port, interested_parties,
|
590
|
+
std::move(on_done));
|
591
|
+
}
|
592
|
+
|
593
|
+
absl::StatusOr<std::vector<grpc_resolved_address>> ResolveNameBlocking(
|
594
|
+
absl::string_view name, absl::string_view default_port) override {
|
595
|
+
// TODO(apolcyn): change this to wrap the async version of the c-ares
|
596
|
+
// API with a promise, and remove the reference to the previous resolver.
|
597
|
+
return default_resolver_->ResolveNameBlocking(name, default_port);
|
598
|
+
}
|
476
599
|
|
477
|
-
|
478
|
-
|
600
|
+
private:
|
601
|
+
// the previous default DNS resolver, used to delegate blocking DNS calls to
|
602
|
+
DNSResolver* default_resolver_ = GetDNSResolver();
|
603
|
+
};
|
479
604
|
|
480
|
-
|
605
|
+
bool ShouldUseAres(const char* resolver_env) {
|
481
606
|
// TODO(lidiz): Remove the "g_custom_iomgr_enabled" flag once c-ares support
|
482
607
|
// custom IO managers (e.g. gevent).
|
483
608
|
return !g_custom_iomgr_enabled &&
|
@@ -485,13 +610,17 @@ static bool should_use_ares(const char* resolver_env) {
|
|
485
610
|
gpr_stricmp(resolver_env, "ares") == 0);
|
486
611
|
}
|
487
612
|
|
488
|
-
|
613
|
+
bool g_use_ares_dns_resolver;
|
614
|
+
|
615
|
+
} // namespace
|
616
|
+
|
617
|
+
} // namespace grpc_core
|
489
618
|
|
490
619
|
void grpc_resolver_dns_ares_init() {
|
491
620
|
grpc_core::UniquePtr<char> resolver =
|
492
621
|
GPR_GLOBAL_CONFIG_GET(grpc_dns_resolver);
|
493
|
-
if (
|
494
|
-
g_use_ares_dns_resolver = true;
|
622
|
+
if (grpc_core::ShouldUseAres(resolver.get())) {
|
623
|
+
grpc_core::g_use_ares_dns_resolver = true;
|
495
624
|
gpr_log(GPR_DEBUG, "Using ares dns resolver");
|
496
625
|
address_sorting_init();
|
497
626
|
grpc_error_handle error = grpc_ares_init();
|
@@ -499,19 +628,16 @@ void grpc_resolver_dns_ares_init() {
|
|
499
628
|
GRPC_LOG_IF_ERROR("grpc_ares_init() failed", error);
|
500
629
|
return;
|
501
630
|
}
|
502
|
-
|
503
|
-
default_resolver = grpc_resolve_address_impl;
|
504
|
-
}
|
505
|
-
grpc_set_resolver_impl(&ares_resolver);
|
631
|
+
grpc_core::SetDNSResolver(grpc_core::AresDNSResolver::GetOrCreate());
|
506
632
|
grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
|
507
|
-
absl::make_unique<grpc_core::
|
633
|
+
absl::make_unique<grpc_core::AresClientChannelDNSResolverFactory>());
|
508
634
|
} else {
|
509
|
-
g_use_ares_dns_resolver = false;
|
635
|
+
grpc_core::g_use_ares_dns_resolver = false;
|
510
636
|
}
|
511
637
|
}
|
512
638
|
|
513
639
|
void grpc_resolver_dns_ares_shutdown() {
|
514
|
-
if (g_use_ares_dns_resolver) {
|
640
|
+
if (grpc_core::g_use_ares_dns_resolver) {
|
515
641
|
address_sorting_shutdown();
|
516
642
|
grpc_ares_cleanup();
|
517
643
|
}
|
@@ -23,8 +23,8 @@
|
|
23
23
|
|
24
24
|
#include <ares.h>
|
25
25
|
|
26
|
+
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
|
26
27
|
#include "src/core/lib/iomgr/pollset_set.h"
|
27
|
-
#include "src/core/lib/iomgr/work_serializer.h"
|
28
28
|
|
29
29
|
namespace grpc_core {
|
30
30
|
|
@@ -36,18 +36,23 @@ class GrpcPolledFd {
|
|
36
36
|
public:
|
37
37
|
virtual ~GrpcPolledFd() {}
|
38
38
|
/* Called when c-ares library is interested and there's no pending callback */
|
39
|
-
virtual void RegisterForOnReadableLocked(grpc_closure* read_closure)
|
39
|
+
virtual void RegisterForOnReadableLocked(grpc_closure* read_closure)
|
40
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) = 0;
|
40
41
|
/* Called when c-ares library is interested and there's no pending callback */
|
41
|
-
virtual void RegisterForOnWriteableLocked(grpc_closure* write_closure)
|
42
|
+
virtual void RegisterForOnWriteableLocked(grpc_closure* write_closure)
|
43
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) = 0;
|
42
44
|
/* Indicates if there is data left even after just being read from */
|
43
|
-
virtual bool IsFdStillReadableLocked()
|
45
|
+
virtual bool IsFdStillReadableLocked()
|
46
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) = 0;
|
44
47
|
/* Called once and only once. Must cause cancellation of any pending
|
45
48
|
* read/write callbacks. */
|
46
|
-
virtual void ShutdownLocked(grpc_error_handle error)
|
49
|
+
virtual void ShutdownLocked(grpc_error_handle error)
|
50
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) = 0;
|
47
51
|
/* Get the underlying ares_socket_t that this was created from */
|
48
|
-
virtual ares_socket_t GetWrappedAresSocketLocked()
|
52
|
+
virtual ares_socket_t GetWrappedAresSocketLocked()
|
53
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) = 0;
|
49
54
|
/* A unique name, for logging */
|
50
|
-
virtual const char* GetName() = 0;
|
55
|
+
virtual const char* GetName() const = 0;
|
51
56
|
};
|
52
57
|
|
53
58
|
/* A GrpcPolledFdFactory is 1-to-1 with and owned by the
|
@@ -59,14 +64,19 @@ class GrpcPolledFdFactory {
|
|
59
64
|
virtual ~GrpcPolledFdFactory() {}
|
60
65
|
/* Creates a new wrapped fd for the current platform */
|
61
66
|
virtual GrpcPolledFd* NewGrpcPolledFdLocked(
|
62
|
-
ares_socket_t as, grpc_pollset_set* driver_pollset_set
|
63
|
-
|
67
|
+
ares_socket_t as, grpc_pollset_set* driver_pollset_set)
|
68
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) = 0;
|
64
69
|
/* Optionally configures the ares channel after creation */
|
65
|
-
virtual void ConfigureAresChannelLocked(ares_channel channel)
|
70
|
+
virtual void ConfigureAresChannelLocked(ares_channel channel)
|
71
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) = 0;
|
66
72
|
};
|
67
73
|
|
68
|
-
|
69
|
-
|
74
|
+
/* Creates a new polled fd factory.
|
75
|
+
* Note that even though ownership of mu is not transferred, the mu
|
76
|
+
* parameter is guaranteed to be alive for the the whole lifetime of
|
77
|
+
* the resulting GrpcPolledFdFactory as well as any GrpcPolledFd
|
78
|
+
* returned by the factory. */
|
79
|
+
std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(Mutex* mu);
|
70
80
|
|
71
81
|
} // namespace grpc_core
|
72
82
|
|
@@ -59,49 +59,53 @@ class GrpcPolledFdPosix : public GrpcPolledFd {
|
|
59
59
|
grpc_fd_orphan(fd_, nullptr, &phony_release_fd, "c-ares query finished");
|
60
60
|
}
|
61
61
|
|
62
|
-
void RegisterForOnReadableLocked(grpc_closure* read_closure)
|
62
|
+
void RegisterForOnReadableLocked(grpc_closure* read_closure)
|
63
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) override {
|
63
64
|
grpc_fd_notify_on_read(fd_, read_closure);
|
64
65
|
}
|
65
66
|
|
66
|
-
void RegisterForOnWriteableLocked(grpc_closure* write_closure)
|
67
|
+
void RegisterForOnWriteableLocked(grpc_closure* write_closure)
|
68
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) override {
|
67
69
|
grpc_fd_notify_on_write(fd_, write_closure);
|
68
70
|
}
|
69
71
|
|
70
|
-
bool IsFdStillReadableLocked()
|
72
|
+
bool IsFdStillReadableLocked()
|
73
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) override {
|
71
74
|
size_t bytes_available = 0;
|
72
75
|
return ioctl(grpc_fd_wrapped_fd(fd_), FIONREAD, &bytes_available) == 0 &&
|
73
76
|
bytes_available > 0;
|
74
77
|
}
|
75
78
|
|
76
|
-
void ShutdownLocked(grpc_error_handle error)
|
79
|
+
void ShutdownLocked(grpc_error_handle error)
|
80
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) override {
|
77
81
|
grpc_fd_shutdown(fd_, error);
|
78
82
|
}
|
79
83
|
|
80
|
-
ares_socket_t GetWrappedAresSocketLocked()
|
84
|
+
ares_socket_t GetWrappedAresSocketLocked()
|
85
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&grpc_ares_request::mu) override {
|
86
|
+
return as_;
|
87
|
+
}
|
81
88
|
|
82
|
-
const char* GetName() override { return name_.c_str(); }
|
89
|
+
const char* GetName() const override { return name_.c_str(); }
|
83
90
|
|
84
91
|
private:
|
85
|
-
std::string name_;
|
86
|
-
ares_socket_t as_;
|
87
|
-
grpc_fd* fd_;
|
88
|
-
grpc_pollset_set* driver_pollset_set_;
|
92
|
+
const std::string name_;
|
93
|
+
const ares_socket_t as_;
|
94
|
+
grpc_fd* fd_ ABSL_GUARDED_BY(&grpc_ares_request::mu);
|
95
|
+
grpc_pollset_set* driver_pollset_set_ ABSL_GUARDED_BY(&grpc_ares_request::mu);
|
89
96
|
};
|
90
97
|
|
91
98
|
class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
92
99
|
public:
|
93
100
|
GrpcPolledFd* NewGrpcPolledFdLocked(
|
94
|
-
ares_socket_t as, grpc_pollset_set* driver_pollset_set
|
95
|
-
std::shared_ptr<WorkSerializer> /*work_serializer*/) override {
|
101
|
+
ares_socket_t as, grpc_pollset_set* driver_pollset_set) override {
|
96
102
|
return new GrpcPolledFdPosix(as, driver_pollset_set);
|
97
103
|
}
|
98
104
|
|
99
105
|
void ConfigureAresChannelLocked(ares_channel /*channel*/) override {}
|
100
106
|
};
|
101
107
|
|
102
|
-
std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
|
103
|
-
std::shared_ptr<WorkSerializer> work_serializer) {
|
104
|
-
(void)work_serializer;
|
108
|
+
std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(Mutex* /* mu */) {
|
105
109
|
return absl::make_unique<GrpcPolledFdFactoryPosix>();
|
106
110
|
}
|
107
111
|
|