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,364 @@
|
|
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_endpoint.h"
|
20
|
+
|
21
|
+
#include "absl/memory/memory.h"
|
22
|
+
#include "absl/strings/str_cat.h"
|
23
|
+
#include "absl/strings/str_join.h"
|
24
|
+
#include "envoy/config/core/v3/address.upb.h"
|
25
|
+
#include "envoy/config/core/v3/base.upb.h"
|
26
|
+
#include "envoy/config/core/v3/health_check.upb.h"
|
27
|
+
#include "envoy/config/endpoint/v3/endpoint.upb.h"
|
28
|
+
#include "envoy/config/endpoint/v3/endpoint.upbdefs.h"
|
29
|
+
#include "envoy/config/endpoint/v3/endpoint_components.upb.h"
|
30
|
+
#include "envoy/type/v3/percent.upb.h"
|
31
|
+
#include "google/protobuf/wrappers.upb.h"
|
32
|
+
#include "upb/text_encode.h"
|
33
|
+
#include "upb/upb.h"
|
34
|
+
#include "upb/upb.hpp"
|
35
|
+
|
36
|
+
#include "src/core/ext/xds/upb_utils.h"
|
37
|
+
#include "src/core/lib/address_utils/parse_address.h"
|
38
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
39
|
+
|
40
|
+
namespace grpc_core {
|
41
|
+
|
42
|
+
//
|
43
|
+
// XdsEndpointResource
|
44
|
+
//
|
45
|
+
|
46
|
+
std::string XdsEndpointResource::Priority::Locality::ToString() const {
|
47
|
+
std::vector<std::string> endpoint_strings;
|
48
|
+
for (const ServerAddress& endpoint : endpoints) {
|
49
|
+
endpoint_strings.emplace_back(endpoint.ToString());
|
50
|
+
}
|
51
|
+
return absl::StrCat("{name=", name->AsHumanReadableString(),
|
52
|
+
", lb_weight=", lb_weight, ", endpoints=[",
|
53
|
+
absl::StrJoin(endpoint_strings, ", "), "]}");
|
54
|
+
}
|
55
|
+
|
56
|
+
bool XdsEndpointResource::Priority::operator==(const Priority& other) const {
|
57
|
+
if (localities.size() != other.localities.size()) return false;
|
58
|
+
auto it1 = localities.begin();
|
59
|
+
auto it2 = other.localities.begin();
|
60
|
+
while (it1 != localities.end()) {
|
61
|
+
if (*it1->first != *it2->first) return false;
|
62
|
+
if (it1->second != it2->second) return false;
|
63
|
+
++it1;
|
64
|
+
++it2;
|
65
|
+
}
|
66
|
+
return true;
|
67
|
+
}
|
68
|
+
|
69
|
+
std::string XdsEndpointResource::Priority::ToString() const {
|
70
|
+
std::vector<std::string> locality_strings;
|
71
|
+
for (const auto& p : localities) {
|
72
|
+
locality_strings.emplace_back(p.second.ToString());
|
73
|
+
}
|
74
|
+
return absl::StrCat("[", absl::StrJoin(locality_strings, ", "), "]");
|
75
|
+
}
|
76
|
+
|
77
|
+
bool XdsEndpointResource::DropConfig::ShouldDrop(
|
78
|
+
const std::string** category_name) const {
|
79
|
+
for (size_t i = 0; i < drop_category_list_.size(); ++i) {
|
80
|
+
const auto& drop_category = drop_category_list_[i];
|
81
|
+
// Generate a random number in [0, 1000000).
|
82
|
+
const uint32_t random = static_cast<uint32_t>(rand()) % 1000000;
|
83
|
+
if (random < drop_category.parts_per_million) {
|
84
|
+
*category_name = &drop_category.name;
|
85
|
+
return true;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
return false;
|
89
|
+
}
|
90
|
+
|
91
|
+
std::string XdsEndpointResource::DropConfig::ToString() const {
|
92
|
+
std::vector<std::string> category_strings;
|
93
|
+
for (const DropCategory& category : drop_category_list_) {
|
94
|
+
category_strings.emplace_back(
|
95
|
+
absl::StrCat(category.name, "=", category.parts_per_million));
|
96
|
+
}
|
97
|
+
return absl::StrCat("{[", absl::StrJoin(category_strings, ", "),
|
98
|
+
"], drop_all=", drop_all_, "}");
|
99
|
+
}
|
100
|
+
|
101
|
+
std::string XdsEndpointResource::ToString() const {
|
102
|
+
std::vector<std::string> priority_strings;
|
103
|
+
for (size_t i = 0; i < priorities.size(); ++i) {
|
104
|
+
const Priority& priority = priorities[i];
|
105
|
+
priority_strings.emplace_back(
|
106
|
+
absl::StrCat("priority ", i, ": ", priority.ToString()));
|
107
|
+
}
|
108
|
+
return absl::StrCat("priorities=[", absl::StrJoin(priority_strings, ", "),
|
109
|
+
"], drop_config=", drop_config->ToString());
|
110
|
+
}
|
111
|
+
|
112
|
+
//
|
113
|
+
// XdsEndpointResourceType
|
114
|
+
//
|
115
|
+
|
116
|
+
namespace {
|
117
|
+
|
118
|
+
void MaybeLogClusterLoadAssignment(
|
119
|
+
const XdsEncodingContext& context,
|
120
|
+
const envoy_config_endpoint_v3_ClusterLoadAssignment* cla) {
|
121
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
122
|
+
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
123
|
+
const upb_msgdef* msg_type =
|
124
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(
|
125
|
+
context.symtab);
|
126
|
+
char buf[10240];
|
127
|
+
upb_text_encode(cla, msg_type, nullptr, 0, buf, sizeof(buf));
|
128
|
+
gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s",
|
129
|
+
context.client, buf);
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
grpc_error_handle ServerAddressParseAndAppend(
|
134
|
+
const envoy_config_endpoint_v3_LbEndpoint* lb_endpoint,
|
135
|
+
ServerAddressList* list) {
|
136
|
+
// If health_status is not HEALTHY or UNKNOWN, skip this endpoint.
|
137
|
+
const int32_t health_status =
|
138
|
+
envoy_config_endpoint_v3_LbEndpoint_health_status(lb_endpoint);
|
139
|
+
if (health_status != envoy_config_core_v3_UNKNOWN &&
|
140
|
+
health_status != envoy_config_core_v3_HEALTHY) {
|
141
|
+
return GRPC_ERROR_NONE;
|
142
|
+
}
|
143
|
+
// Find the ip:port.
|
144
|
+
const envoy_config_endpoint_v3_Endpoint* endpoint =
|
145
|
+
envoy_config_endpoint_v3_LbEndpoint_endpoint(lb_endpoint);
|
146
|
+
const envoy_config_core_v3_Address* address =
|
147
|
+
envoy_config_endpoint_v3_Endpoint_address(endpoint);
|
148
|
+
const envoy_config_core_v3_SocketAddress* socket_address =
|
149
|
+
envoy_config_core_v3_Address_socket_address(address);
|
150
|
+
std::string address_str = UpbStringToStdString(
|
151
|
+
envoy_config_core_v3_SocketAddress_address(socket_address));
|
152
|
+
uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
|
153
|
+
if (GPR_UNLIKELY(port >> 16) != 0) {
|
154
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port.");
|
155
|
+
}
|
156
|
+
// Find load_balancing_weight for the endpoint.
|
157
|
+
const google_protobuf_UInt32Value* load_balancing_weight =
|
158
|
+
envoy_config_endpoint_v3_LbEndpoint_load_balancing_weight(lb_endpoint);
|
159
|
+
const int32_t weight =
|
160
|
+
load_balancing_weight != nullptr
|
161
|
+
? google_protobuf_UInt32Value_value(load_balancing_weight)
|
162
|
+
: 500;
|
163
|
+
if (weight == 0) {
|
164
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
165
|
+
"Invalid endpoint weight of 0.");
|
166
|
+
}
|
167
|
+
// Populate grpc_resolved_address.
|
168
|
+
grpc_resolved_address addr;
|
169
|
+
grpc_error_handle error =
|
170
|
+
grpc_string_to_sockaddr(&addr, address_str.c_str(), port);
|
171
|
+
if (error != GRPC_ERROR_NONE) return error;
|
172
|
+
// Append the address to the list.
|
173
|
+
std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
|
174
|
+
attributes;
|
175
|
+
attributes[ServerAddressWeightAttribute::kServerAddressWeightAttributeKey] =
|
176
|
+
absl::make_unique<ServerAddressWeightAttribute>(weight);
|
177
|
+
list->emplace_back(addr, nullptr, std::move(attributes));
|
178
|
+
return GRPC_ERROR_NONE;
|
179
|
+
}
|
180
|
+
|
181
|
+
grpc_error_handle LocalityParse(
|
182
|
+
const envoy_config_endpoint_v3_LocalityLbEndpoints* locality_lb_endpoints,
|
183
|
+
XdsEndpointResource::Priority::Locality* output_locality,
|
184
|
+
size_t* priority) {
|
185
|
+
// Parse LB weight.
|
186
|
+
const google_protobuf_UInt32Value* lb_weight =
|
187
|
+
envoy_config_endpoint_v3_LocalityLbEndpoints_load_balancing_weight(
|
188
|
+
locality_lb_endpoints);
|
189
|
+
// If LB weight is not specified, it means this locality is assigned no load.
|
190
|
+
// TODO(juanlishen): When we support CDS to configure the inter-locality
|
191
|
+
// policy, we should change the LB weight handling.
|
192
|
+
output_locality->lb_weight =
|
193
|
+
lb_weight != nullptr ? google_protobuf_UInt32Value_value(lb_weight) : 0;
|
194
|
+
if (output_locality->lb_weight == 0) return GRPC_ERROR_NONE;
|
195
|
+
// Parse locality name.
|
196
|
+
const envoy_config_core_v3_Locality* locality =
|
197
|
+
envoy_config_endpoint_v3_LocalityLbEndpoints_locality(
|
198
|
+
locality_lb_endpoints);
|
199
|
+
if (locality == nullptr) {
|
200
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty locality.");
|
201
|
+
}
|
202
|
+
std::string region =
|
203
|
+
UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
|
204
|
+
std::string zone =
|
205
|
+
UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
|
206
|
+
std::string sub_zone =
|
207
|
+
UpbStringToStdString(envoy_config_core_v3_Locality_sub_zone(locality));
|
208
|
+
output_locality->name = MakeRefCounted<XdsLocalityName>(
|
209
|
+
std::move(region), std::move(zone), std::move(sub_zone));
|
210
|
+
// Parse the addresses.
|
211
|
+
size_t size;
|
212
|
+
const envoy_config_endpoint_v3_LbEndpoint* const* lb_endpoints =
|
213
|
+
envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(
|
214
|
+
locality_lb_endpoints, &size);
|
215
|
+
for (size_t i = 0; i < size; ++i) {
|
216
|
+
grpc_error_handle error = ServerAddressParseAndAppend(
|
217
|
+
lb_endpoints[i], &output_locality->endpoints);
|
218
|
+
if (error != GRPC_ERROR_NONE) return error;
|
219
|
+
}
|
220
|
+
// Parse the priority.
|
221
|
+
*priority = envoy_config_endpoint_v3_LocalityLbEndpoints_priority(
|
222
|
+
locality_lb_endpoints);
|
223
|
+
return GRPC_ERROR_NONE;
|
224
|
+
}
|
225
|
+
|
226
|
+
grpc_error_handle DropParseAndAppend(
|
227
|
+
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload*
|
228
|
+
drop_overload,
|
229
|
+
XdsEndpointResource::DropConfig* drop_config) {
|
230
|
+
// Get the category.
|
231
|
+
std::string category = UpbStringToStdString(
|
232
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_category(
|
233
|
+
drop_overload));
|
234
|
+
if (category.empty()) {
|
235
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty drop category name");
|
236
|
+
}
|
237
|
+
// Get the drop rate (per million).
|
238
|
+
const envoy_type_v3_FractionalPercent* drop_percentage =
|
239
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
|
240
|
+
drop_overload);
|
241
|
+
uint32_t numerator =
|
242
|
+
envoy_type_v3_FractionalPercent_numerator(drop_percentage);
|
243
|
+
const auto denominator =
|
244
|
+
static_cast<envoy_type_v3_FractionalPercent_DenominatorType>(
|
245
|
+
envoy_type_v3_FractionalPercent_denominator(drop_percentage));
|
246
|
+
// Normalize to million.
|
247
|
+
switch (denominator) {
|
248
|
+
case envoy_type_v3_FractionalPercent_HUNDRED:
|
249
|
+
numerator *= 10000;
|
250
|
+
break;
|
251
|
+
case envoy_type_v3_FractionalPercent_TEN_THOUSAND:
|
252
|
+
numerator *= 100;
|
253
|
+
break;
|
254
|
+
case envoy_type_v3_FractionalPercent_MILLION:
|
255
|
+
break;
|
256
|
+
default:
|
257
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unknown denominator type");
|
258
|
+
}
|
259
|
+
// Cap numerator to 1000000.
|
260
|
+
numerator = std::min(numerator, 1000000u);
|
261
|
+
drop_config->AddCategory(std::move(category), numerator);
|
262
|
+
return GRPC_ERROR_NONE;
|
263
|
+
}
|
264
|
+
|
265
|
+
grpc_error_handle EdsResourceParse(
|
266
|
+
const XdsEncodingContext& /*context*/,
|
267
|
+
const envoy_config_endpoint_v3_ClusterLoadAssignment*
|
268
|
+
cluster_load_assignment,
|
269
|
+
bool /*is_v2*/, XdsEndpointResource* eds_update) {
|
270
|
+
std::vector<grpc_error_handle> errors;
|
271
|
+
// Get the endpoints.
|
272
|
+
size_t locality_size;
|
273
|
+
const envoy_config_endpoint_v3_LocalityLbEndpoints* const* endpoints =
|
274
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
|
275
|
+
cluster_load_assignment, &locality_size);
|
276
|
+
for (size_t j = 0; j < locality_size; ++j) {
|
277
|
+
size_t priority;
|
278
|
+
XdsEndpointResource::Priority::Locality locality;
|
279
|
+
grpc_error_handle error = LocalityParse(endpoints[j], &locality, &priority);
|
280
|
+
if (error != GRPC_ERROR_NONE) {
|
281
|
+
errors.push_back(error);
|
282
|
+
continue;
|
283
|
+
}
|
284
|
+
// Filter out locality with weight 0.
|
285
|
+
if (locality.lb_weight == 0) continue;
|
286
|
+
// Make sure prorities is big enough. Note that they might not
|
287
|
+
// arrive in priority order.
|
288
|
+
while (eds_update->priorities.size() < priority + 1) {
|
289
|
+
eds_update->priorities.emplace_back();
|
290
|
+
}
|
291
|
+
eds_update->priorities[priority].localities.emplace(locality.name.get(),
|
292
|
+
std::move(locality));
|
293
|
+
}
|
294
|
+
for (const auto& priority : eds_update->priorities) {
|
295
|
+
if (priority.localities.empty()) {
|
296
|
+
errors.push_back(
|
297
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("sparse priority list"));
|
298
|
+
}
|
299
|
+
}
|
300
|
+
// Get the drop config.
|
301
|
+
eds_update->drop_config = MakeRefCounted<XdsEndpointResource::DropConfig>();
|
302
|
+
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy* policy =
|
303
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_policy(
|
304
|
+
cluster_load_assignment);
|
305
|
+
if (policy != nullptr) {
|
306
|
+
size_t drop_size;
|
307
|
+
const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload* const*
|
308
|
+
drop_overload =
|
309
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_drop_overloads(
|
310
|
+
policy, &drop_size);
|
311
|
+
for (size_t j = 0; j < drop_size; ++j) {
|
312
|
+
grpc_error_handle error =
|
313
|
+
DropParseAndAppend(drop_overload[j], eds_update->drop_config.get());
|
314
|
+
if (error != GRPC_ERROR_NONE) {
|
315
|
+
errors.push_back(
|
316
|
+
grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
317
|
+
"drop config validation error"),
|
318
|
+
error));
|
319
|
+
}
|
320
|
+
}
|
321
|
+
}
|
322
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing EDS resource", &errors);
|
323
|
+
}
|
324
|
+
|
325
|
+
} // namespace
|
326
|
+
|
327
|
+
absl::StatusOr<XdsResourceType::DecodeResult> XdsEndpointResourceType::Decode(
|
328
|
+
const XdsEncodingContext& context, absl::string_view serialized_resource,
|
329
|
+
bool is_v2) const {
|
330
|
+
// Parse serialized proto.
|
331
|
+
auto* resource = envoy_config_endpoint_v3_ClusterLoadAssignment_parse(
|
332
|
+
serialized_resource.data(), serialized_resource.size(), context.arena);
|
333
|
+
if (resource == nullptr) {
|
334
|
+
return absl::InvalidArgumentError(
|
335
|
+
"Can't parse ClusterLoadAssignment resource.");
|
336
|
+
}
|
337
|
+
MaybeLogClusterLoadAssignment(context, resource);
|
338
|
+
// Validate resource.
|
339
|
+
DecodeResult result;
|
340
|
+
result.name = UpbStringToStdString(
|
341
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(resource));
|
342
|
+
auto endpoint_data = absl::make_unique<ResourceDataSubclass>();
|
343
|
+
grpc_error_handle error =
|
344
|
+
EdsResourceParse(context, resource, is_v2, &endpoint_data->resource);
|
345
|
+
if (error != GRPC_ERROR_NONE) {
|
346
|
+
std::string error_str = grpc_error_std_string(error);
|
347
|
+
GRPC_ERROR_UNREF(error);
|
348
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
349
|
+
gpr_log(GPR_ERROR, "[xds_client %p] invalid ClusterLoadAssignment %s: %s",
|
350
|
+
context.client, result.name.c_str(), error_str.c_str());
|
351
|
+
}
|
352
|
+
result.resource = absl::InvalidArgumentError(error_str);
|
353
|
+
} else {
|
354
|
+
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
355
|
+
gpr_log(GPR_INFO, "[xds_client %p] parsed ClusterLoadAssignment %s: %s",
|
356
|
+
context.client, result.name.c_str(),
|
357
|
+
endpoint_data->resource.ToString().c_str());
|
358
|
+
}
|
359
|
+
result.resource = std::move(endpoint_data);
|
360
|
+
}
|
361
|
+
return std::move(result);
|
362
|
+
}
|
363
|
+
|
364
|
+
} // namespace grpc_core
|
@@ -0,0 +1,135 @@
|
|
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_ENDPOINT_H
|
18
|
+
#define GRPC_CORE_EXT_XDS_XDS_ENDPOINT_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include <map>
|
23
|
+
#include <set>
|
24
|
+
#include <string>
|
25
|
+
|
26
|
+
#include "absl/container/inlined_vector.h"
|
27
|
+
#include "envoy/config/endpoint/v3/endpoint.upbdefs.h"
|
28
|
+
|
29
|
+
#include "src/core/ext/xds/xds_client.h"
|
30
|
+
#include "src/core/ext/xds/xds_client_stats.h"
|
31
|
+
#include "src/core/ext/xds/xds_resource_type_impl.h"
|
32
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
33
|
+
#include "src/core/lib/resolver/server_address.h"
|
34
|
+
|
35
|
+
namespace grpc_core {
|
36
|
+
|
37
|
+
struct XdsEndpointResource {
|
38
|
+
struct Priority {
|
39
|
+
struct Locality {
|
40
|
+
RefCountedPtr<XdsLocalityName> name;
|
41
|
+
uint32_t lb_weight;
|
42
|
+
ServerAddressList endpoints;
|
43
|
+
|
44
|
+
bool operator==(const Locality& other) const {
|
45
|
+
return *name == *other.name && lb_weight == other.lb_weight &&
|
46
|
+
endpoints == other.endpoints;
|
47
|
+
}
|
48
|
+
bool operator!=(const Locality& other) const { return !(*this == other); }
|
49
|
+
std::string ToString() const;
|
50
|
+
};
|
51
|
+
|
52
|
+
std::map<XdsLocalityName*, Locality, XdsLocalityName::Less> localities;
|
53
|
+
|
54
|
+
bool operator==(const Priority& other) const;
|
55
|
+
std::string ToString() const;
|
56
|
+
};
|
57
|
+
using PriorityList = absl::InlinedVector<Priority, 2>;
|
58
|
+
|
59
|
+
// There are two phases of accessing this class's content:
|
60
|
+
// 1. to initialize in the control plane combiner;
|
61
|
+
// 2. to use in the data plane combiner.
|
62
|
+
// So no additional synchronization is needed.
|
63
|
+
class DropConfig : public RefCounted<DropConfig> {
|
64
|
+
public:
|
65
|
+
struct DropCategory {
|
66
|
+
bool operator==(const DropCategory& other) const {
|
67
|
+
return name == other.name &&
|
68
|
+
parts_per_million == other.parts_per_million;
|
69
|
+
}
|
70
|
+
|
71
|
+
std::string name;
|
72
|
+
const uint32_t parts_per_million;
|
73
|
+
};
|
74
|
+
|
75
|
+
using DropCategoryList = absl::InlinedVector<DropCategory, 2>;
|
76
|
+
|
77
|
+
void AddCategory(std::string name, uint32_t parts_per_million) {
|
78
|
+
drop_category_list_.emplace_back(
|
79
|
+
DropCategory{std::move(name), parts_per_million});
|
80
|
+
if (parts_per_million == 1000000) drop_all_ = true;
|
81
|
+
}
|
82
|
+
|
83
|
+
// The only method invoked from outside the WorkSerializer (used in
|
84
|
+
// the data plane).
|
85
|
+
bool ShouldDrop(const std::string** category_name) const;
|
86
|
+
|
87
|
+
const DropCategoryList& drop_category_list() const {
|
88
|
+
return drop_category_list_;
|
89
|
+
}
|
90
|
+
|
91
|
+
bool drop_all() const { return drop_all_; }
|
92
|
+
|
93
|
+
bool operator==(const DropConfig& other) const {
|
94
|
+
return drop_category_list_ == other.drop_category_list_;
|
95
|
+
}
|
96
|
+
bool operator!=(const DropConfig& other) const { return !(*this == other); }
|
97
|
+
|
98
|
+
std::string ToString() const;
|
99
|
+
|
100
|
+
private:
|
101
|
+
DropCategoryList drop_category_list_;
|
102
|
+
bool drop_all_ = false;
|
103
|
+
};
|
104
|
+
|
105
|
+
PriorityList priorities;
|
106
|
+
RefCountedPtr<DropConfig> drop_config;
|
107
|
+
|
108
|
+
bool operator==(const XdsEndpointResource& other) const {
|
109
|
+
return priorities == other.priorities && *drop_config == *other.drop_config;
|
110
|
+
}
|
111
|
+
std::string ToString() const;
|
112
|
+
};
|
113
|
+
|
114
|
+
class XdsEndpointResourceType
|
115
|
+
: public XdsResourceTypeImpl<XdsEndpointResourceType, XdsEndpointResource> {
|
116
|
+
public:
|
117
|
+
absl::string_view type_url() const override {
|
118
|
+
return "envoy.config.endpoint.v3.ClusterLoadAssignment";
|
119
|
+
}
|
120
|
+
absl::string_view v2_type_url() const override {
|
121
|
+
return "envoy.api.v2.ClusterLoadAssignment";
|
122
|
+
}
|
123
|
+
|
124
|
+
absl::StatusOr<DecodeResult> Decode(const XdsEncodingContext& context,
|
125
|
+
absl::string_view serialized_resource,
|
126
|
+
bool is_v2) const override;
|
127
|
+
|
128
|
+
void InitUpbSymtab(upb_symtab* symtab) const override {
|
129
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(symtab);
|
130
|
+
}
|
131
|
+
};
|
132
|
+
|
133
|
+
} // namespace grpc_core
|
134
|
+
|
135
|
+
#endif // GRPC_CORE_EXT_XDS_XDS_ENDPOINT_H
|
@@ -22,6 +22,7 @@
|
|
22
22
|
#include "envoy/extensions/filters/http/router/v3/router.upbdefs.h"
|
23
23
|
|
24
24
|
#include "src/core/ext/xds/xds_http_fault_filter.h"
|
25
|
+
#include "src/core/ext/xds/xds_http_rbac_filter.h"
|
25
26
|
|
26
27
|
namespace grpc_core {
|
27
28
|
|
@@ -106,6 +107,10 @@ void XdsHttpFilterRegistry::Init() {
|
|
106
107
|
{kXdsHttpRouterFilterConfigName});
|
107
108
|
RegisterFilter(absl::make_unique<XdsHttpFaultFilter>(),
|
108
109
|
{kXdsHttpFaultFilterConfigName});
|
110
|
+
RegisterFilter(absl::make_unique<XdsHttpRbacFilter>(),
|
111
|
+
{kXdsHttpRbacFilterConfigName});
|
112
|
+
RegisterFilter(absl::make_unique<XdsHttpRbacFilter>(),
|
113
|
+
{kXdsHttpRbacFilterConfigOverrideName});
|
109
114
|
}
|
110
115
|
|
111
116
|
void XdsHttpFilterRegistry::Shutdown() {
|