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
@@ -0,0 +1,451 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include "src/core/ext/xds/xds_cluster.h"
|
20
|
+
|
21
|
+
#include "absl/container/inlined_vector.h"
|
22
|
+
#include "absl/strings/str_cat.h"
|
23
|
+
#include "absl/strings/str_format.h"
|
24
|
+
#include "absl/strings/str_join.h"
|
25
|
+
#include "envoy/config/cluster/v3/circuit_breaker.upb.h"
|
26
|
+
#include "envoy/config/cluster/v3/cluster.upb.h"
|
27
|
+
#include "envoy/config/cluster/v3/cluster.upbdefs.h"
|
28
|
+
#include "envoy/config/core/v3/address.upb.h"
|
29
|
+
#include "envoy/config/core/v3/base.upb.h"
|
30
|
+
#include "envoy/config/core/v3/config_source.upb.h"
|
31
|
+
#include "envoy/config/endpoint/v3/endpoint.upb.h"
|
32
|
+
#include "envoy/config/endpoint/v3/endpoint_components.upb.h"
|
33
|
+
#include "envoy/extensions/clusters/aggregate/v3/cluster.upb.h"
|
34
|
+
#include "google/protobuf/any.upb.h"
|
35
|
+
#include "google/protobuf/wrappers.upb.h"
|
36
|
+
|
37
|
+
#include <grpc/support/alloc.h>
|
38
|
+
|
39
|
+
#include "src/core/lib/gpr/env.h"
|
40
|
+
#include "src/core/lib/gpr/string.h"
|
41
|
+
#include "src/core/lib/gprpp/host_port.h"
|
42
|
+
|
43
|
+
namespace grpc_core {
|
44
|
+
|
45
|
+
//
|
46
|
+
// XdsClusterResource
|
47
|
+
//
|
48
|
+
|
49
|
+
std::string XdsClusterResource::ToString() const {
|
50
|
+
absl::InlinedVector<std::string, 8> contents;
|
51
|
+
switch (cluster_type) {
|
52
|
+
case EDS:
|
53
|
+
contents.push_back("cluster_type=EDS");
|
54
|
+
if (!eds_service_name.empty()) {
|
55
|
+
contents.push_back(
|
56
|
+
absl::StrFormat("eds_service_name=%s", eds_service_name));
|
57
|
+
}
|
58
|
+
break;
|
59
|
+
case LOGICAL_DNS:
|
60
|
+
contents.push_back("cluster_type=LOGICAL_DNS");
|
61
|
+
contents.push_back(absl::StrFormat("dns_hostname=%s", dns_hostname));
|
62
|
+
break;
|
63
|
+
case AGGREGATE:
|
64
|
+
contents.push_back("cluster_type=AGGREGATE");
|
65
|
+
contents.push_back(
|
66
|
+
absl::StrFormat("prioritized_cluster_names=[%s]",
|
67
|
+
absl::StrJoin(prioritized_cluster_names, ", ")));
|
68
|
+
}
|
69
|
+
if (!common_tls_context.Empty()) {
|
70
|
+
contents.push_back(absl::StrFormat("common_tls_context=%s",
|
71
|
+
common_tls_context.ToString()));
|
72
|
+
}
|
73
|
+
if (lrs_load_reporting_server_name.has_value()) {
|
74
|
+
contents.push_back(absl::StrFormat("lrs_load_reporting_server_name=%s",
|
75
|
+
lrs_load_reporting_server_name.value()));
|
76
|
+
}
|
77
|
+
contents.push_back(absl::StrCat("lb_policy=", lb_policy));
|
78
|
+
if (lb_policy == "RING_HASH") {
|
79
|
+
contents.push_back(absl::StrCat("min_ring_size=", min_ring_size));
|
80
|
+
contents.push_back(absl::StrCat("max_ring_size=", max_ring_size));
|
81
|
+
}
|
82
|
+
contents.push_back(
|
83
|
+
absl::StrFormat("max_concurrent_requests=%d", max_concurrent_requests));
|
84
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
85
|
+
}
|
86
|
+
|
87
|
+
//
|
88
|
+
// XdsClusterResourceType
|
89
|
+
//
|
90
|
+
|
91
|
+
namespace {
|
92
|
+
|
93
|
+
grpc_error_handle UpstreamTlsContextParse(
|
94
|
+
const XdsEncodingContext& context,
|
95
|
+
const envoy_config_core_v3_TransportSocket* transport_socket,
|
96
|
+
CommonTlsContext* common_tls_context) {
|
97
|
+
// Record Upstream tls context
|
98
|
+
absl::string_view name = UpbStringToAbsl(
|
99
|
+
envoy_config_core_v3_TransportSocket_name(transport_socket));
|
100
|
+
if (name != "envoy.transport_sockets.tls") {
|
101
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
102
|
+
absl::StrCat("Unrecognized transport socket: ", name));
|
103
|
+
}
|
104
|
+
auto* typed_config =
|
105
|
+
envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
|
106
|
+
if (typed_config != nullptr) {
|
107
|
+
const upb_strview encoded_upstream_tls_context =
|
108
|
+
google_protobuf_Any_value(typed_config);
|
109
|
+
auto* upstream_tls_context =
|
110
|
+
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_parse(
|
111
|
+
encoded_upstream_tls_context.data,
|
112
|
+
encoded_upstream_tls_context.size, context.arena);
|
113
|
+
if (upstream_tls_context == nullptr) {
|
114
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
115
|
+
"Can't decode upstream tls context.");
|
116
|
+
}
|
117
|
+
auto* common_tls_context_proto =
|
118
|
+
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_common_tls_context(
|
119
|
+
upstream_tls_context);
|
120
|
+
if (common_tls_context_proto != nullptr) {
|
121
|
+
grpc_error_handle error = CommonTlsContext::Parse(
|
122
|
+
context, common_tls_context_proto, common_tls_context);
|
123
|
+
if (error != GRPC_ERROR_NONE) {
|
124
|
+
return grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
125
|
+
"Error parsing UpstreamTlsContext"),
|
126
|
+
error);
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
if (common_tls_context->certificate_validation_context
|
131
|
+
.ca_certificate_provider_instance.instance_name.empty()) {
|
132
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
133
|
+
"UpstreamTlsContext: TLS configuration provided but no "
|
134
|
+
"ca_certificate_provider_instance found.");
|
135
|
+
}
|
136
|
+
return GRPC_ERROR_NONE;
|
137
|
+
}
|
138
|
+
|
139
|
+
grpc_error_handle CdsLogicalDnsParse(
|
140
|
+
const envoy_config_cluster_v3_Cluster* cluster,
|
141
|
+
XdsClusterResource* cds_update) {
|
142
|
+
const auto* load_assignment =
|
143
|
+
envoy_config_cluster_v3_Cluster_load_assignment(cluster);
|
144
|
+
if (load_assignment == nullptr) {
|
145
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
146
|
+
"load_assignment not present for LOGICAL_DNS cluster");
|
147
|
+
}
|
148
|
+
size_t num_localities;
|
149
|
+
const auto* const* localities =
|
150
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(load_assignment,
|
151
|
+
&num_localities);
|
152
|
+
if (num_localities != 1) {
|
153
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
154
|
+
absl::StrCat("load_assignment for LOGICAL_DNS cluster must have "
|
155
|
+
"exactly one locality, found ",
|
156
|
+
num_localities));
|
157
|
+
}
|
158
|
+
size_t num_endpoints;
|
159
|
+
const auto* const* endpoints =
|
160
|
+
envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(localities[0],
|
161
|
+
&num_endpoints);
|
162
|
+
if (num_endpoints != 1) {
|
163
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
164
|
+
absl::StrCat("locality for LOGICAL_DNS cluster must have "
|
165
|
+
"exactly one endpoint, found ",
|
166
|
+
num_endpoints));
|
167
|
+
}
|
168
|
+
const auto* endpoint =
|
169
|
+
envoy_config_endpoint_v3_LbEndpoint_endpoint(endpoints[0]);
|
170
|
+
if (endpoint == nullptr) {
|
171
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
172
|
+
"LbEndpoint endpoint field not set");
|
173
|
+
}
|
174
|
+
const auto* address = envoy_config_endpoint_v3_Endpoint_address(endpoint);
|
175
|
+
if (address == nullptr) {
|
176
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
177
|
+
"Endpoint address field not set");
|
178
|
+
}
|
179
|
+
const auto* socket_address =
|
180
|
+
envoy_config_core_v3_Address_socket_address(address);
|
181
|
+
if (socket_address == nullptr) {
|
182
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
183
|
+
"Address socket_address field not set");
|
184
|
+
}
|
185
|
+
if (envoy_config_core_v3_SocketAddress_resolver_name(socket_address).size !=
|
186
|
+
0) {
|
187
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
188
|
+
"LOGICAL_DNS clusters must NOT have a custom resolver name set");
|
189
|
+
}
|
190
|
+
absl::string_view address_str = UpbStringToAbsl(
|
191
|
+
envoy_config_core_v3_SocketAddress_address(socket_address));
|
192
|
+
if (address_str.empty()) {
|
193
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
194
|
+
"SocketAddress address field not set");
|
195
|
+
}
|
196
|
+
if (!envoy_config_core_v3_SocketAddress_has_port_value(socket_address)) {
|
197
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
198
|
+
"SocketAddress port_value field not set");
|
199
|
+
}
|
200
|
+
cds_update->dns_hostname = JoinHostPort(
|
201
|
+
address_str,
|
202
|
+
envoy_config_core_v3_SocketAddress_port_value(socket_address));
|
203
|
+
return GRPC_ERROR_NONE;
|
204
|
+
}
|
205
|
+
|
206
|
+
// TODO(donnadionne): Check to see if cluster types aggregate_cluster and
|
207
|
+
// logical_dns are enabled, this will be
|
208
|
+
// removed once the cluster types are fully integration-tested and enabled by
|
209
|
+
// default.
|
210
|
+
bool XdsAggregateAndLogicalDnsClusterEnabled() {
|
211
|
+
char* value = gpr_getenv(
|
212
|
+
"GRPC_XDS_EXPERIMENTAL_ENABLE_AGGREGATE_AND_LOGICAL_DNS_CLUSTER");
|
213
|
+
bool parsed_value;
|
214
|
+
bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
|
215
|
+
gpr_free(value);
|
216
|
+
return parse_succeeded && parsed_value;
|
217
|
+
}
|
218
|
+
|
219
|
+
grpc_error_handle CdsResourceParse(
|
220
|
+
const XdsEncodingContext& context,
|
221
|
+
const envoy_config_cluster_v3_Cluster* cluster, bool /*is_v2*/,
|
222
|
+
XdsClusterResource* cds_update) {
|
223
|
+
std::vector<grpc_error_handle> errors;
|
224
|
+
// Check the cluster_discovery_type.
|
225
|
+
if (!envoy_config_cluster_v3_Cluster_has_type(cluster) &&
|
226
|
+
!envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
|
227
|
+
errors.push_back(
|
228
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType not found."));
|
229
|
+
} else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
|
230
|
+
envoy_config_cluster_v3_Cluster_EDS) {
|
231
|
+
cds_update->cluster_type = XdsClusterResource::ClusterType::EDS;
|
232
|
+
// Check the EDS config source.
|
233
|
+
const envoy_config_cluster_v3_Cluster_EdsClusterConfig* eds_cluster_config =
|
234
|
+
envoy_config_cluster_v3_Cluster_eds_cluster_config(cluster);
|
235
|
+
const envoy_config_core_v3_ConfigSource* eds_config =
|
236
|
+
envoy_config_cluster_v3_Cluster_EdsClusterConfig_eds_config(
|
237
|
+
eds_cluster_config);
|
238
|
+
if (!envoy_config_core_v3_ConfigSource_has_ads(eds_config)) {
|
239
|
+
errors.push_back(
|
240
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("EDS ConfigSource is not ADS."));
|
241
|
+
}
|
242
|
+
// Record EDS service_name (if any).
|
243
|
+
upb_strview service_name =
|
244
|
+
envoy_config_cluster_v3_Cluster_EdsClusterConfig_service_name(
|
245
|
+
eds_cluster_config);
|
246
|
+
if (service_name.size != 0) {
|
247
|
+
cds_update->eds_service_name = UpbStringToStdString(service_name);
|
248
|
+
}
|
249
|
+
} else if (!XdsAggregateAndLogicalDnsClusterEnabled()) {
|
250
|
+
errors.push_back(
|
251
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType is not valid."));
|
252
|
+
} else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
|
253
|
+
envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
|
254
|
+
cds_update->cluster_type = XdsClusterResource::ClusterType::LOGICAL_DNS;
|
255
|
+
grpc_error_handle error = CdsLogicalDnsParse(cluster, cds_update);
|
256
|
+
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
257
|
+
} else {
|
258
|
+
if (!envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
|
259
|
+
errors.push_back(
|
260
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType is not valid."));
|
261
|
+
} else {
|
262
|
+
const envoy_config_cluster_v3_Cluster_CustomClusterType*
|
263
|
+
custom_cluster_type =
|
264
|
+
envoy_config_cluster_v3_Cluster_cluster_type(cluster);
|
265
|
+
upb_strview type_name =
|
266
|
+
envoy_config_cluster_v3_Cluster_CustomClusterType_name(
|
267
|
+
custom_cluster_type);
|
268
|
+
if (UpbStringToAbsl(type_name) != "envoy.clusters.aggregate") {
|
269
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
270
|
+
"DiscoveryType is not valid."));
|
271
|
+
} else {
|
272
|
+
cds_update->cluster_type = XdsClusterResource::ClusterType::AGGREGATE;
|
273
|
+
// Retrieve aggregate clusters.
|
274
|
+
const google_protobuf_Any* typed_config =
|
275
|
+
envoy_config_cluster_v3_Cluster_CustomClusterType_typed_config(
|
276
|
+
custom_cluster_type);
|
277
|
+
const upb_strview aggregate_cluster_config_upb_strview =
|
278
|
+
google_protobuf_Any_value(typed_config);
|
279
|
+
const envoy_extensions_clusters_aggregate_v3_ClusterConfig*
|
280
|
+
aggregate_cluster_config =
|
281
|
+
envoy_extensions_clusters_aggregate_v3_ClusterConfig_parse(
|
282
|
+
aggregate_cluster_config_upb_strview.data,
|
283
|
+
aggregate_cluster_config_upb_strview.size, context.arena);
|
284
|
+
if (aggregate_cluster_config == nullptr) {
|
285
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
286
|
+
"Can't parse aggregate cluster."));
|
287
|
+
} else {
|
288
|
+
size_t size;
|
289
|
+
const upb_strview* clusters =
|
290
|
+
envoy_extensions_clusters_aggregate_v3_ClusterConfig_clusters(
|
291
|
+
aggregate_cluster_config, &size);
|
292
|
+
for (size_t i = 0; i < size; ++i) {
|
293
|
+
const upb_strview cluster = clusters[i];
|
294
|
+
cds_update->prioritized_cluster_names.emplace_back(
|
295
|
+
UpbStringToStdString(cluster));
|
296
|
+
}
|
297
|
+
}
|
298
|
+
}
|
299
|
+
}
|
300
|
+
}
|
301
|
+
// Check the LB policy.
|
302
|
+
if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
|
303
|
+
envoy_config_cluster_v3_Cluster_ROUND_ROBIN) {
|
304
|
+
cds_update->lb_policy = "ROUND_ROBIN";
|
305
|
+
} else if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
|
306
|
+
envoy_config_cluster_v3_Cluster_RING_HASH) {
|
307
|
+
cds_update->lb_policy = "RING_HASH";
|
308
|
+
// Record ring hash lb config
|
309
|
+
auto* ring_hash_config =
|
310
|
+
envoy_config_cluster_v3_Cluster_ring_hash_lb_config(cluster);
|
311
|
+
if (ring_hash_config != nullptr) {
|
312
|
+
const google_protobuf_UInt64Value* max_ring_size =
|
313
|
+
envoy_config_cluster_v3_Cluster_RingHashLbConfig_maximum_ring_size(
|
314
|
+
ring_hash_config);
|
315
|
+
if (max_ring_size != nullptr) {
|
316
|
+
cds_update->max_ring_size =
|
317
|
+
google_protobuf_UInt64Value_value(max_ring_size);
|
318
|
+
if (cds_update->max_ring_size > 8388608 ||
|
319
|
+
cds_update->max_ring_size == 0) {
|
320
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
321
|
+
"max_ring_size is not in the range of 1 to 8388608."));
|
322
|
+
}
|
323
|
+
}
|
324
|
+
const google_protobuf_UInt64Value* min_ring_size =
|
325
|
+
envoy_config_cluster_v3_Cluster_RingHashLbConfig_minimum_ring_size(
|
326
|
+
ring_hash_config);
|
327
|
+
if (min_ring_size != nullptr) {
|
328
|
+
cds_update->min_ring_size =
|
329
|
+
google_protobuf_UInt64Value_value(min_ring_size);
|
330
|
+
if (cds_update->min_ring_size > 8388608 ||
|
331
|
+
cds_update->min_ring_size == 0) {
|
332
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
333
|
+
"min_ring_size is not in the range of 1 to 8388608."));
|
334
|
+
}
|
335
|
+
if (cds_update->min_ring_size > cds_update->max_ring_size) {
|
336
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
337
|
+
"min_ring_size cannot be greater than max_ring_size."));
|
338
|
+
}
|
339
|
+
}
|
340
|
+
if (envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
|
341
|
+
ring_hash_config) !=
|
342
|
+
envoy_config_cluster_v3_Cluster_RingHashLbConfig_XX_HASH) {
|
343
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
344
|
+
"ring hash lb config has invalid hash function."));
|
345
|
+
}
|
346
|
+
}
|
347
|
+
} else {
|
348
|
+
errors.push_back(
|
349
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("LB policy is not supported."));
|
350
|
+
}
|
351
|
+
auto* transport_socket =
|
352
|
+
envoy_config_cluster_v3_Cluster_transport_socket(cluster);
|
353
|
+
if (transport_socket != nullptr) {
|
354
|
+
grpc_error_handle error = UpstreamTlsContextParse(
|
355
|
+
context, transport_socket, &cds_update->common_tls_context);
|
356
|
+
if (error != GRPC_ERROR_NONE) {
|
357
|
+
errors.push_back(
|
358
|
+
grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
359
|
+
"Error parsing security configuration"),
|
360
|
+
error));
|
361
|
+
}
|
362
|
+
}
|
363
|
+
// Record LRS server name (if any).
|
364
|
+
const envoy_config_core_v3_ConfigSource* lrs_server =
|
365
|
+
envoy_config_cluster_v3_Cluster_lrs_server(cluster);
|
366
|
+
if (lrs_server != nullptr) {
|
367
|
+
if (!envoy_config_core_v3_ConfigSource_has_self(lrs_server)) {
|
368
|
+
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
369
|
+
": LRS ConfigSource is not self."));
|
370
|
+
}
|
371
|
+
cds_update->lrs_load_reporting_server_name.emplace("");
|
372
|
+
}
|
373
|
+
// The Cluster resource encodes the circuit breaking parameters in a list of
|
374
|
+
// Thresholds messages, where each message specifies the parameters for a
|
375
|
+
// particular RoutingPriority. we will look only at the first entry in the
|
376
|
+
// list for priority DEFAULT and default to 1024 if not found.
|
377
|
+
if (envoy_config_cluster_v3_Cluster_has_circuit_breakers(cluster)) {
|
378
|
+
const envoy_config_cluster_v3_CircuitBreakers* circuit_breakers =
|
379
|
+
envoy_config_cluster_v3_Cluster_circuit_breakers(cluster);
|
380
|
+
size_t num_thresholds;
|
381
|
+
const envoy_config_cluster_v3_CircuitBreakers_Thresholds* const*
|
382
|
+
thresholds = envoy_config_cluster_v3_CircuitBreakers_thresholds(
|
383
|
+
circuit_breakers, &num_thresholds);
|
384
|
+
for (size_t i = 0; i < num_thresholds; ++i) {
|
385
|
+
const auto* threshold = thresholds[i];
|
386
|
+
if (envoy_config_cluster_v3_CircuitBreakers_Thresholds_priority(
|
387
|
+
threshold) == envoy_config_core_v3_DEFAULT) {
|
388
|
+
const google_protobuf_UInt32Value* max_requests =
|
389
|
+
envoy_config_cluster_v3_CircuitBreakers_Thresholds_max_requests(
|
390
|
+
threshold);
|
391
|
+
if (max_requests != nullptr) {
|
392
|
+
cds_update->max_concurrent_requests =
|
393
|
+
google_protobuf_UInt32Value_value(max_requests);
|
394
|
+
}
|
395
|
+
break;
|
396
|
+
}
|
397
|
+
}
|
398
|
+
}
|
399
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing CDS resource", &errors);
|
400
|
+
}
|
401
|
+
|
402
|
+
void MaybeLogCluster(const XdsEncodingContext& context,
|
403
|
+
const envoy_config_cluster_v3_Cluster* cluster) {
|
404
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
405
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
406
|
+
const upb_msgdef* msg_type =
|
407
|
+
envoy_config_cluster_v3_Cluster_getmsgdef(context.symtab);
|
408
|
+
char buf[10240];
|
409
|
+
upb_text_encode(cluster, msg_type, nullptr, 0, buf, sizeof(buf));
|
410
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] Cluster: %s", context.client, buf);
|
411
|
+
}
|
412
|
+
}
|
413
|
+
|
414
|
+
} // namespace
|
415
|
+
|
416
|
+
absl::StatusOr<XdsResourceType::DecodeResult> XdsClusterResourceType::Decode(
|
417
|
+
const XdsEncodingContext& context, absl::string_view serialized_resource,
|
418
|
+
bool is_v2) const {
|
419
|
+
// Parse serialized proto.
|
420
|
+
auto* resource = envoy_config_cluster_v3_Cluster_parse(
|
421
|
+
serialized_resource.data(), serialized_resource.size(), context.arena);
|
422
|
+
if (resource == nullptr) {
|
423
|
+
return absl::InvalidArgumentError("Can't parse Cluster resource.");
|
424
|
+
}
|
425
|
+
MaybeLogCluster(context, resource);
|
426
|
+
// Validate resource.
|
427
|
+
DecodeResult result;
|
428
|
+
result.name =
|
429
|
+
UpbStringToStdString(envoy_config_cluster_v3_Cluster_name(resource));
|
430
|
+
auto cluster_data = absl::make_unique<ResourceDataSubclass>();
|
431
|
+
grpc_error_handle error =
|
432
|
+
CdsResourceParse(context, resource, is_v2, &cluster_data->resource);
|
433
|
+
if (error != GRPC_ERROR_NONE) {
|
434
|
+
std::string error_str = grpc_error_std_string(error);
|
435
|
+
GRPC_ERROR_UNREF(error);
|
436
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
437
|
+
gpr_log(GPR_ERROR, "[xds_client %p] invalid Cluster %s: %s",
|
438
|
+
context.client, result.name.c_str(), error_str.c_str());
|
439
|
+
}
|
440
|
+
result.resource = absl::InvalidArgumentError(error_str);
|
441
|
+
} else {
|
442
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
443
|
+
gpr_log(GPR_INFO, "[xds_client %p] parsed Cluster %s: %s", context.client,
|
444
|
+
result.name.c_str(), cluster_data->resource.ToString().c_str());
|
445
|
+
}
|
446
|
+
result.resource = std::move(cluster_data);
|
447
|
+
}
|
448
|
+
return std::move(result);
|
449
|
+
}
|
450
|
+
|
451
|
+
} // namespace grpc_core
|
@@ -0,0 +1,111 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#ifndef GRPC_CORE_EXT_XDS_XDS_CLUSTER_H
|
18
|
+
#define GRPC_CORE_EXT_XDS_XDS_CLUSTER_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include <string>
|
23
|
+
#include <vector>
|
24
|
+
|
25
|
+
#include "absl/types/optional.h"
|
26
|
+
#include "envoy/config/cluster/v3/cluster.upbdefs.h"
|
27
|
+
#include "envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h"
|
28
|
+
#include "envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h"
|
29
|
+
|
30
|
+
#include "src/core/ext/xds/xds_client.h"
|
31
|
+
#include "src/core/ext/xds/xds_common_types.h"
|
32
|
+
#include "src/core/ext/xds/xds_resource_type_impl.h"
|
33
|
+
|
34
|
+
namespace grpc_core {
|
35
|
+
|
36
|
+
struct XdsClusterResource {
|
37
|
+
enum ClusterType { EDS, LOGICAL_DNS, AGGREGATE };
|
38
|
+
ClusterType cluster_type;
|
39
|
+
// For cluster type EDS.
|
40
|
+
// The name to use in the EDS request.
|
41
|
+
// If empty, the cluster name will be used.
|
42
|
+
std::string eds_service_name;
|
43
|
+
// For cluster type LOGICAL_DNS.
|
44
|
+
// The hostname to lookup in DNS.
|
45
|
+
std::string dns_hostname;
|
46
|
+
// For cluster type AGGREGATE.
|
47
|
+
// The prioritized list of cluster names.
|
48
|
+
std::vector<std::string> prioritized_cluster_names;
|
49
|
+
|
50
|
+
// Tls Context used by clients
|
51
|
+
CommonTlsContext common_tls_context;
|
52
|
+
|
53
|
+
// The LRS server to use for load reporting.
|
54
|
+
// If not set, load reporting will be disabled.
|
55
|
+
// If set to the empty string, will use the same server we obtained the CDS
|
56
|
+
// data from.
|
57
|
+
absl::optional<std::string> lrs_load_reporting_server_name;
|
58
|
+
|
59
|
+
// The LB policy to use (e.g., "ROUND_ROBIN" or "RING_HASH").
|
60
|
+
std::string lb_policy;
|
61
|
+
// Used for RING_HASH LB policy only.
|
62
|
+
uint64_t min_ring_size = 1024;
|
63
|
+
uint64_t max_ring_size = 8388608;
|
64
|
+
// Maximum number of outstanding requests can be made to the upstream
|
65
|
+
// cluster.
|
66
|
+
uint32_t max_concurrent_requests = 1024;
|
67
|
+
|
68
|
+
bool operator==(const XdsClusterResource& other) const {
|
69
|
+
return cluster_type == other.cluster_type &&
|
70
|
+
eds_service_name == other.eds_service_name &&
|
71
|
+
dns_hostname == other.dns_hostname &&
|
72
|
+
prioritized_cluster_names == other.prioritized_cluster_names &&
|
73
|
+
common_tls_context == other.common_tls_context &&
|
74
|
+
lrs_load_reporting_server_name ==
|
75
|
+
other.lrs_load_reporting_server_name &&
|
76
|
+
lb_policy == other.lb_policy &&
|
77
|
+
min_ring_size == other.min_ring_size &&
|
78
|
+
max_ring_size == other.max_ring_size &&
|
79
|
+
max_concurrent_requests == other.max_concurrent_requests;
|
80
|
+
}
|
81
|
+
|
82
|
+
std::string ToString() const;
|
83
|
+
};
|
84
|
+
|
85
|
+
class XdsClusterResourceType
|
86
|
+
: public XdsResourceTypeImpl<XdsClusterResourceType, XdsClusterResource> {
|
87
|
+
public:
|
88
|
+
absl::string_view type_url() const override {
|
89
|
+
return "envoy.config.cluster.v3.Cluster";
|
90
|
+
}
|
91
|
+
absl::string_view v2_type_url() const override {
|
92
|
+
return "envoy.api.v2.Cluster";
|
93
|
+
}
|
94
|
+
|
95
|
+
absl::StatusOr<DecodeResult> Decode(const XdsEncodingContext& context,
|
96
|
+
absl::string_view serialized_resource,
|
97
|
+
bool is_v2) const override;
|
98
|
+
|
99
|
+
bool AllResourcesRequiredInSotW() const override { return true; }
|
100
|
+
|
101
|
+
void InitUpbSymtab(upb_symtab* symtab) const override {
|
102
|
+
envoy_config_cluster_v3_Cluster_getmsgdef(symtab);
|
103
|
+
envoy_extensions_clusters_aggregate_v3_ClusterConfig_getmsgdef(symtab);
|
104
|
+
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_getmsgdef(
|
105
|
+
symtab);
|
106
|
+
}
|
107
|
+
};
|
108
|
+
|
109
|
+
} // namespace grpc_core
|
110
|
+
|
111
|
+
#endif // GRPC_CORE_EXT_XDS_XDS_CLUSTER_H
|