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
data/src/core/ext/xds/xds_api.h
CHANGED
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
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
|
+
//
|
18
16
|
|
19
17
|
#ifndef GRPC_CORE_EXT_XDS_XDS_API_H
|
20
18
|
#define GRPC_CORE_EXT_XDS_XDS_API_H
|
@@ -25,561 +23,53 @@
|
|
25
23
|
|
26
24
|
#include <set>
|
27
25
|
|
28
|
-
#include "absl/container/inlined_vector.h"
|
29
|
-
#include "absl/types/optional.h"
|
30
|
-
#include "absl/types/variant.h"
|
31
26
|
#include "envoy/admin/v3/config_dump.upb.h"
|
32
|
-
#include "re2/re2.h"
|
33
27
|
#include "upb/def.hpp"
|
34
28
|
|
35
|
-
#include <grpc/
|
29
|
+
#include <grpc/slice.h>
|
36
30
|
|
37
|
-
#include "src/core/ext/
|
31
|
+
#include "src/core/ext/xds/upb_utils.h"
|
38
32
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
39
33
|
#include "src/core/ext/xds/xds_client_stats.h"
|
40
34
|
#include "src/core/ext/xds/xds_http_filters.h"
|
41
35
|
#include "src/core/lib/channel/status_util.h"
|
42
36
|
#include "src/core/lib/matchers/matchers.h"
|
37
|
+
#include "src/core/lib/resolver/server_address.h"
|
43
38
|
|
44
39
|
namespace grpc_core {
|
45
40
|
|
46
|
-
bool XdsRbacEnabled();
|
47
|
-
|
48
41
|
class XdsClient;
|
49
42
|
|
43
|
+
// TODO(roth): When we have time, split this into multiple pieces:
|
44
|
+
// - a common upb-based parsing framework (combine with XdsEncodingContext)
|
45
|
+
// - ADS request/response handling
|
46
|
+
// - LRS request/response handling
|
47
|
+
// - CSDS response generation
|
50
48
|
class XdsApi {
|
51
49
|
public:
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
int32_t nanos = 0;
|
61
|
-
bool operator==(const Duration& other) const {
|
62
|
-
return seconds == other.seconds && nanos == other.nanos;
|
63
|
-
}
|
64
|
-
std::string ToString() const {
|
65
|
-
return absl::StrFormat("Duration seconds: %ld, nanos %d", seconds, nanos);
|
66
|
-
}
|
67
|
-
};
|
68
|
-
|
69
|
-
using TypedPerFilterConfig =
|
70
|
-
std::map<std::string, XdsHttpFilterImpl::FilterConfig>;
|
71
|
-
|
72
|
-
struct RetryPolicy {
|
73
|
-
internal::StatusCodeSet retry_on;
|
74
|
-
uint32_t num_retries;
|
75
|
-
|
76
|
-
struct RetryBackOff {
|
77
|
-
Duration base_interval;
|
78
|
-
Duration max_interval;
|
79
|
-
|
80
|
-
bool operator==(const RetryBackOff& other) const {
|
81
|
-
return base_interval == other.base_interval &&
|
82
|
-
max_interval == other.max_interval;
|
83
|
-
}
|
84
|
-
std::string ToString() const;
|
85
|
-
};
|
86
|
-
RetryBackOff retry_back_off;
|
87
|
-
|
88
|
-
bool operator==(const RetryPolicy& other) const {
|
89
|
-
return (retry_on == other.retry_on && num_retries == other.num_retries &&
|
90
|
-
retry_back_off == other.retry_back_off);
|
91
|
-
}
|
92
|
-
std::string ToString() const;
|
93
|
-
};
|
94
|
-
|
95
|
-
// TODO(donnadionne): When we can use absl::variant<>, consider using that
|
96
|
-
// for: PathMatcher, HeaderMatcher, cluster_name and weighted_clusters
|
97
|
-
struct Route {
|
98
|
-
// Matchers for this route.
|
99
|
-
struct Matchers {
|
100
|
-
StringMatcher path_matcher;
|
101
|
-
std::vector<HeaderMatcher> header_matchers;
|
102
|
-
absl::optional<uint32_t> fraction_per_million;
|
103
|
-
|
104
|
-
bool operator==(const Matchers& other) const {
|
105
|
-
return path_matcher == other.path_matcher &&
|
106
|
-
header_matchers == other.header_matchers &&
|
107
|
-
fraction_per_million == other.fraction_per_million;
|
108
|
-
}
|
109
|
-
std::string ToString() const;
|
110
|
-
};
|
111
|
-
|
112
|
-
Matchers matchers;
|
113
|
-
|
114
|
-
struct UnknownAction {
|
115
|
-
bool operator==(const UnknownAction& /* other */) const { return true; }
|
116
|
-
};
|
117
|
-
|
118
|
-
struct RouteAction {
|
119
|
-
struct HashPolicy {
|
120
|
-
enum Type { HEADER, CHANNEL_ID };
|
121
|
-
Type type;
|
122
|
-
bool terminal = false;
|
123
|
-
// Fields used for type HEADER.
|
124
|
-
std::string header_name;
|
125
|
-
std::unique_ptr<RE2> regex = nullptr;
|
126
|
-
std::string regex_substitution;
|
127
|
-
|
128
|
-
HashPolicy() {}
|
129
|
-
|
130
|
-
// Copyable.
|
131
|
-
HashPolicy(const HashPolicy& other);
|
132
|
-
HashPolicy& operator=(const HashPolicy& other);
|
133
|
-
|
134
|
-
// Moveable.
|
135
|
-
HashPolicy(HashPolicy&& other) noexcept;
|
136
|
-
HashPolicy& operator=(HashPolicy&& other) noexcept;
|
137
|
-
|
138
|
-
bool operator==(const HashPolicy& other) const;
|
139
|
-
std::string ToString() const;
|
140
|
-
};
|
141
|
-
|
142
|
-
struct ClusterWeight {
|
143
|
-
std::string name;
|
144
|
-
uint32_t weight;
|
145
|
-
TypedPerFilterConfig typed_per_filter_config;
|
146
|
-
|
147
|
-
bool operator==(const ClusterWeight& other) const {
|
148
|
-
return name == other.name && weight == other.weight &&
|
149
|
-
typed_per_filter_config == other.typed_per_filter_config;
|
150
|
-
}
|
151
|
-
std::string ToString() const;
|
152
|
-
};
|
153
|
-
|
154
|
-
std::vector<HashPolicy> hash_policies;
|
155
|
-
absl::optional<RetryPolicy> retry_policy;
|
156
|
-
|
157
|
-
// Action for this route.
|
158
|
-
// TODO(roth): When we can use absl::variant<>, consider using that
|
159
|
-
// here, to enforce the fact that only one of the two fields can be set.
|
160
|
-
std::string cluster_name;
|
161
|
-
std::vector<ClusterWeight> weighted_clusters;
|
162
|
-
// Storing the timeout duration from route action:
|
163
|
-
// RouteAction.max_stream_duration.grpc_timeout_header_max or
|
164
|
-
// RouteAction.max_stream_duration.max_stream_duration if the former is
|
165
|
-
// not set.
|
166
|
-
absl::optional<Duration> max_stream_duration;
|
167
|
-
|
168
|
-
bool operator==(const RouteAction& other) const {
|
169
|
-
return hash_policies == other.hash_policies &&
|
170
|
-
retry_policy == other.retry_policy &&
|
171
|
-
cluster_name == other.cluster_name &&
|
172
|
-
weighted_clusters == other.weighted_clusters &&
|
173
|
-
max_stream_duration == other.max_stream_duration;
|
174
|
-
}
|
175
|
-
std::string ToString() const;
|
176
|
-
};
|
177
|
-
|
178
|
-
struct NonForwardingAction {
|
179
|
-
bool operator==(const NonForwardingAction& /* other */) const {
|
180
|
-
return true;
|
181
|
-
}
|
182
|
-
};
|
183
|
-
|
184
|
-
absl::variant<UnknownAction, RouteAction, NonForwardingAction> action;
|
185
|
-
TypedPerFilterConfig typed_per_filter_config;
|
186
|
-
|
187
|
-
bool operator==(const Route& other) const {
|
188
|
-
return matchers == other.matchers && action == other.action &&
|
189
|
-
typed_per_filter_config == other.typed_per_filter_config;
|
190
|
-
}
|
191
|
-
std::string ToString() const;
|
192
|
-
};
|
193
|
-
|
194
|
-
struct RdsUpdate {
|
195
|
-
struct VirtualHost {
|
196
|
-
std::vector<std::string> domains;
|
197
|
-
std::vector<Route> routes;
|
198
|
-
TypedPerFilterConfig typed_per_filter_config;
|
199
|
-
|
200
|
-
bool operator==(const VirtualHost& other) const {
|
201
|
-
return domains == other.domains && routes == other.routes &&
|
202
|
-
typed_per_filter_config == other.typed_per_filter_config;
|
203
|
-
}
|
204
|
-
};
|
205
|
-
|
206
|
-
std::vector<VirtualHost> virtual_hosts;
|
207
|
-
|
208
|
-
bool operator==(const RdsUpdate& other) const {
|
209
|
-
return virtual_hosts == other.virtual_hosts;
|
210
|
-
}
|
211
|
-
std::string ToString() const;
|
212
|
-
};
|
213
|
-
|
214
|
-
struct CommonTlsContext {
|
215
|
-
struct CertificateProviderPluginInstance {
|
216
|
-
std::string instance_name;
|
217
|
-
std::string certificate_name;
|
218
|
-
|
219
|
-
bool operator==(const CertificateProviderPluginInstance& other) const {
|
220
|
-
return instance_name == other.instance_name &&
|
221
|
-
certificate_name == other.certificate_name;
|
222
|
-
}
|
223
|
-
|
224
|
-
std::string ToString() const;
|
225
|
-
bool Empty() const;
|
226
|
-
};
|
227
|
-
|
228
|
-
struct CertificateValidationContext {
|
229
|
-
CertificateProviderPluginInstance ca_certificate_provider_instance;
|
230
|
-
std::vector<StringMatcher> match_subject_alt_names;
|
231
|
-
|
232
|
-
bool operator==(const CertificateValidationContext& other) const {
|
233
|
-
return ca_certificate_provider_instance ==
|
234
|
-
other.ca_certificate_provider_instance &&
|
235
|
-
match_subject_alt_names == other.match_subject_alt_names;
|
236
|
-
}
|
237
|
-
|
238
|
-
std::string ToString() const;
|
239
|
-
bool Empty() const;
|
240
|
-
};
|
241
|
-
|
242
|
-
CertificateValidationContext certificate_validation_context;
|
243
|
-
CertificateProviderPluginInstance tls_certificate_provider_instance;
|
244
|
-
|
245
|
-
bool operator==(const CommonTlsContext& other) const {
|
246
|
-
return certificate_validation_context ==
|
247
|
-
other.certificate_validation_context &&
|
248
|
-
tls_certificate_provider_instance ==
|
249
|
-
other.tls_certificate_provider_instance;
|
250
|
-
}
|
251
|
-
|
252
|
-
std::string ToString() const;
|
253
|
-
bool Empty() const;
|
254
|
-
};
|
255
|
-
|
256
|
-
struct DownstreamTlsContext {
|
257
|
-
CommonTlsContext common_tls_context;
|
258
|
-
bool require_client_certificate = false;
|
259
|
-
|
260
|
-
bool operator==(const DownstreamTlsContext& other) const {
|
261
|
-
return common_tls_context == other.common_tls_context &&
|
262
|
-
require_client_certificate == other.require_client_certificate;
|
263
|
-
}
|
264
|
-
|
265
|
-
std::string ToString() const;
|
266
|
-
bool Empty() const;
|
267
|
-
};
|
268
|
-
|
269
|
-
// TODO(roth): When we can use absl::variant<>, consider using that
|
270
|
-
// here, to enforce the fact that only one of the two fields can be set.
|
271
|
-
struct LdsUpdate {
|
272
|
-
enum class ListenerType {
|
273
|
-
kTcpListener = 0,
|
274
|
-
kHttpApiListener,
|
275
|
-
} type;
|
276
|
-
|
277
|
-
struct HttpConnectionManager {
|
278
|
-
// The name to use in the RDS request.
|
279
|
-
std::string route_config_name;
|
280
|
-
// Storing the Http Connection Manager Common Http Protocol Option
|
281
|
-
// max_stream_duration
|
282
|
-
Duration http_max_stream_duration;
|
283
|
-
// The RouteConfiguration to use for this listener.
|
284
|
-
// Present only if it is inlined in the LDS response.
|
285
|
-
absl::optional<RdsUpdate> rds_update;
|
286
|
-
|
287
|
-
struct HttpFilter {
|
288
|
-
std::string name;
|
289
|
-
XdsHttpFilterImpl::FilterConfig config;
|
290
|
-
|
291
|
-
bool operator==(const HttpFilter& other) const {
|
292
|
-
return name == other.name && config == other.config;
|
293
|
-
}
|
294
|
-
|
295
|
-
std::string ToString() const;
|
296
|
-
};
|
297
|
-
std::vector<HttpFilter> http_filters;
|
298
|
-
|
299
|
-
bool operator==(const HttpConnectionManager& other) const {
|
300
|
-
return route_config_name == other.route_config_name &&
|
301
|
-
http_max_stream_duration == other.http_max_stream_duration &&
|
302
|
-
rds_update == other.rds_update &&
|
303
|
-
http_filters == other.http_filters;
|
304
|
-
}
|
305
|
-
|
306
|
-
std::string ToString() const;
|
307
|
-
};
|
308
|
-
|
309
|
-
// Populated for type=kHttpApiListener.
|
310
|
-
HttpConnectionManager http_connection_manager;
|
311
|
-
|
312
|
-
// Populated for type=kTcpListener.
|
313
|
-
// host:port listening_address set when type is kTcpListener
|
314
|
-
std::string address;
|
315
|
-
|
316
|
-
struct FilterChainData {
|
317
|
-
DownstreamTlsContext downstream_tls_context;
|
318
|
-
// This is in principle the filter list.
|
319
|
-
// We currently require exactly one filter, which is the HCM.
|
320
|
-
HttpConnectionManager http_connection_manager;
|
321
|
-
|
322
|
-
bool operator==(const FilterChainData& other) const {
|
323
|
-
return downstream_tls_context == other.downstream_tls_context &&
|
324
|
-
http_connection_manager == other.http_connection_manager;
|
325
|
-
}
|
326
|
-
|
327
|
-
std::string ToString() const;
|
50
|
+
// Interface defined by caller and passed to ParseAdsResponse().
|
51
|
+
class AdsResponseParserInterface {
|
52
|
+
public:
|
53
|
+
struct AdsResponseFields {
|
54
|
+
std::string type_url;
|
55
|
+
std::string version;
|
56
|
+
std::string nonce;
|
57
|
+
size_t num_resources;
|
328
58
|
};
|
329
59
|
|
330
|
-
|
331
|
-
// incoming connection. Determining the right filter chain for a given
|
332
|
-
// connection checks the following properties, in order:
|
333
|
-
// - destination port (never matched, so not present in map)
|
334
|
-
// - destination IP address
|
335
|
-
// - server name (never matched, so not present in map)
|
336
|
-
// - transport protocol (allows only "raw_buffer" or unset, prefers the
|
337
|
-
// former, so only one of those two types is present in map)
|
338
|
-
// - application protocol (never matched, so not present in map)
|
339
|
-
// - connection source type (any, local or external)
|
340
|
-
// - source IP address
|
341
|
-
// - source port
|
342
|
-
// https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/listener/v3/listener_components.proto#config-listener-v3-filterchainmatch
|
343
|
-
// for more details
|
344
|
-
struct FilterChainMap {
|
345
|
-
struct FilterChainDataSharedPtr {
|
346
|
-
std::shared_ptr<FilterChainData> data;
|
347
|
-
bool operator==(const FilterChainDataSharedPtr& other) const {
|
348
|
-
return *data == *other.data;
|
349
|
-
}
|
350
|
-
};
|
351
|
-
struct CidrRange {
|
352
|
-
grpc_resolved_address address;
|
353
|
-
uint32_t prefix_len;
|
354
|
-
|
355
|
-
bool operator==(const CidrRange& other) const {
|
356
|
-
return memcmp(&address, &other.address, sizeof(address)) == 0 &&
|
357
|
-
prefix_len == other.prefix_len;
|
358
|
-
}
|
359
|
-
|
360
|
-
std::string ToString() const;
|
361
|
-
};
|
362
|
-
using SourcePortsMap = std::map<uint16_t, FilterChainDataSharedPtr>;
|
363
|
-
struct SourceIp {
|
364
|
-
absl::optional<CidrRange> prefix_range;
|
365
|
-
SourcePortsMap ports_map;
|
366
|
-
|
367
|
-
bool operator==(const SourceIp& other) const {
|
368
|
-
return prefix_range == other.prefix_range &&
|
369
|
-
ports_map == other.ports_map;
|
370
|
-
}
|
371
|
-
};
|
372
|
-
using SourceIpVector = std::vector<SourceIp>;
|
373
|
-
enum class ConnectionSourceType {
|
374
|
-
kAny = 0,
|
375
|
-
kSameIpOrLoopback,
|
376
|
-
kExternal
|
377
|
-
};
|
378
|
-
using ConnectionSourceTypesArray = std::array<SourceIpVector, 3>;
|
379
|
-
struct DestinationIp {
|
380
|
-
absl::optional<CidrRange> prefix_range;
|
381
|
-
// We always fail match on server name, so those filter chains are not
|
382
|
-
// included here.
|
383
|
-
ConnectionSourceTypesArray source_types_array;
|
384
|
-
|
385
|
-
bool operator==(const DestinationIp& other) const {
|
386
|
-
return prefix_range == other.prefix_range &&
|
387
|
-
source_types_array == other.source_types_array;
|
388
|
-
}
|
389
|
-
};
|
390
|
-
// We always fail match on destination ports map
|
391
|
-
using DestinationIpVector = std::vector<DestinationIp>;
|
392
|
-
DestinationIpVector destination_ip_vector;
|
393
|
-
|
394
|
-
bool operator==(const FilterChainMap& other) const {
|
395
|
-
return destination_ip_vector == other.destination_ip_vector;
|
396
|
-
}
|
397
|
-
|
398
|
-
std::string ToString() const;
|
399
|
-
} filter_chain_map;
|
400
|
-
|
401
|
-
absl::optional<FilterChainData> default_filter_chain;
|
402
|
-
|
403
|
-
bool operator==(const LdsUpdate& other) const {
|
404
|
-
return http_connection_manager == other.http_connection_manager &&
|
405
|
-
address == other.address &&
|
406
|
-
filter_chain_map == other.filter_chain_map &&
|
407
|
-
default_filter_chain == other.default_filter_chain;
|
408
|
-
}
|
409
|
-
|
410
|
-
std::string ToString() const;
|
411
|
-
};
|
412
|
-
|
413
|
-
struct ResourceName {
|
414
|
-
std::string authority;
|
415
|
-
std::string id;
|
416
|
-
|
417
|
-
bool operator<(const ResourceName& other) const {
|
418
|
-
if (authority < other.authority) return true;
|
419
|
-
if (id < other.id) return true;
|
420
|
-
return false;
|
421
|
-
}
|
422
|
-
};
|
423
|
-
|
424
|
-
struct LdsResourceData {
|
425
|
-
LdsUpdate resource;
|
426
|
-
std::string serialized_proto;
|
427
|
-
};
|
428
|
-
|
429
|
-
using LdsUpdateMap = std::map<ResourceName, LdsResourceData>;
|
430
|
-
|
431
|
-
struct RdsResourceData {
|
432
|
-
RdsUpdate resource;
|
433
|
-
std::string serialized_proto;
|
434
|
-
};
|
60
|
+
virtual ~AdsResponseParserInterface() = default;
|
435
61
|
|
436
|
-
|
62
|
+
// Called when the top-level ADS fields are parsed.
|
63
|
+
// If this returns non-OK, parsing will stop, and the individual
|
64
|
+
// resources will not be processed.
|
65
|
+
virtual absl::Status ProcessAdsResponseFields(AdsResponseFields fields) = 0;
|
437
66
|
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
// The name to use in the EDS request.
|
443
|
-
// If empty, the cluster name will be used.
|
444
|
-
std::string eds_service_name;
|
445
|
-
// For cluster type LOGICAL_DNS.
|
446
|
-
// The hostname to lookup in DNS.
|
447
|
-
std::string dns_hostname;
|
448
|
-
// For cluster type AGGREGATE.
|
449
|
-
// The prioritized list of cluster names.
|
450
|
-
std::vector<std::string> prioritized_cluster_names;
|
451
|
-
|
452
|
-
// Tls Context used by clients
|
453
|
-
CommonTlsContext common_tls_context;
|
454
|
-
|
455
|
-
// The LRS server to use for load reporting.
|
456
|
-
// If not set, load reporting will be disabled.
|
457
|
-
// If set to the empty string, will use the same server we obtained the CDS
|
458
|
-
// data from.
|
459
|
-
absl::optional<std::string> lrs_load_reporting_server_name;
|
460
|
-
|
461
|
-
// The LB policy to use (e.g., "ROUND_ROBIN" or "RING_HASH").
|
462
|
-
std::string lb_policy;
|
463
|
-
// Used for RING_HASH LB policy only.
|
464
|
-
uint64_t min_ring_size = 1024;
|
465
|
-
uint64_t max_ring_size = 8388608;
|
466
|
-
// Maximum number of outstanding requests can be made to the upstream
|
467
|
-
// cluster.
|
468
|
-
uint32_t max_concurrent_requests = 1024;
|
469
|
-
|
470
|
-
bool operator==(const CdsUpdate& other) const {
|
471
|
-
return cluster_type == other.cluster_type &&
|
472
|
-
eds_service_name == other.eds_service_name &&
|
473
|
-
dns_hostname == other.dns_hostname &&
|
474
|
-
prioritized_cluster_names == other.prioritized_cluster_names &&
|
475
|
-
common_tls_context == other.common_tls_context &&
|
476
|
-
lrs_load_reporting_server_name ==
|
477
|
-
other.lrs_load_reporting_server_name &&
|
478
|
-
lb_policy == other.lb_policy &&
|
479
|
-
min_ring_size == other.min_ring_size &&
|
480
|
-
max_ring_size == other.max_ring_size &&
|
481
|
-
max_concurrent_requests == other.max_concurrent_requests;
|
482
|
-
}
|
483
|
-
|
484
|
-
std::string ToString() const;
|
485
|
-
};
|
486
|
-
|
487
|
-
struct CdsResourceData {
|
488
|
-
CdsUpdate resource;
|
489
|
-
std::string serialized_proto;
|
67
|
+
// Called to parse each individual resource in the ADS response.
|
68
|
+
virtual void ParseResource(const XdsEncodingContext& context, size_t idx,
|
69
|
+
absl::string_view type_url,
|
70
|
+
absl::string_view serialized_resource) = 0;
|
490
71
|
};
|
491
72
|
|
492
|
-
using CdsUpdateMap = std::map<ResourceName, CdsResourceData>;
|
493
|
-
|
494
|
-
struct EdsUpdate {
|
495
|
-
struct Priority {
|
496
|
-
struct Locality {
|
497
|
-
RefCountedPtr<XdsLocalityName> name;
|
498
|
-
uint32_t lb_weight;
|
499
|
-
ServerAddressList endpoints;
|
500
|
-
|
501
|
-
bool operator==(const Locality& other) const {
|
502
|
-
return *name == *other.name && lb_weight == other.lb_weight &&
|
503
|
-
endpoints == other.endpoints;
|
504
|
-
}
|
505
|
-
bool operator!=(const Locality& other) const {
|
506
|
-
return !(*this == other);
|
507
|
-
}
|
508
|
-
std::string ToString() const;
|
509
|
-
};
|
510
|
-
|
511
|
-
std::map<XdsLocalityName*, Locality, XdsLocalityName::Less> localities;
|
512
|
-
|
513
|
-
bool operator==(const Priority& other) const;
|
514
|
-
std::string ToString() const;
|
515
|
-
};
|
516
|
-
using PriorityList = absl::InlinedVector<Priority, 2>;
|
517
|
-
|
518
|
-
// There are two phases of accessing this class's content:
|
519
|
-
// 1. to initialize in the control plane combiner;
|
520
|
-
// 2. to use in the data plane combiner.
|
521
|
-
// So no additional synchronization is needed.
|
522
|
-
class DropConfig : public RefCounted<DropConfig> {
|
523
|
-
public:
|
524
|
-
struct DropCategory {
|
525
|
-
bool operator==(const DropCategory& other) const {
|
526
|
-
return name == other.name &&
|
527
|
-
parts_per_million == other.parts_per_million;
|
528
|
-
}
|
529
|
-
|
530
|
-
std::string name;
|
531
|
-
const uint32_t parts_per_million;
|
532
|
-
};
|
533
|
-
|
534
|
-
using DropCategoryList = absl::InlinedVector<DropCategory, 2>;
|
535
|
-
|
536
|
-
void AddCategory(std::string name, uint32_t parts_per_million) {
|
537
|
-
drop_category_list_.emplace_back(
|
538
|
-
DropCategory{std::move(name), parts_per_million});
|
539
|
-
if (parts_per_million == 1000000) drop_all_ = true;
|
540
|
-
}
|
541
|
-
|
542
|
-
// The only method invoked from outside the WorkSerializer (used in
|
543
|
-
// the data plane).
|
544
|
-
bool ShouldDrop(const std::string** category_name) const;
|
545
|
-
|
546
|
-
const DropCategoryList& drop_category_list() const {
|
547
|
-
return drop_category_list_;
|
548
|
-
}
|
549
|
-
|
550
|
-
bool drop_all() const { return drop_all_; }
|
551
|
-
|
552
|
-
bool operator==(const DropConfig& other) const {
|
553
|
-
return drop_category_list_ == other.drop_category_list_;
|
554
|
-
}
|
555
|
-
bool operator!=(const DropConfig& other) const {
|
556
|
-
return !(*this == other);
|
557
|
-
}
|
558
|
-
|
559
|
-
std::string ToString() const;
|
560
|
-
|
561
|
-
private:
|
562
|
-
DropCategoryList drop_category_list_;
|
563
|
-
bool drop_all_ = false;
|
564
|
-
};
|
565
|
-
|
566
|
-
PriorityList priorities;
|
567
|
-
RefCountedPtr<DropConfig> drop_config;
|
568
|
-
|
569
|
-
bool operator==(const EdsUpdate& other) const {
|
570
|
-
return priorities == other.priorities &&
|
571
|
-
*drop_config == *other.drop_config;
|
572
|
-
}
|
573
|
-
std::string ToString() const;
|
574
|
-
};
|
575
|
-
|
576
|
-
struct EdsResourceData {
|
577
|
-
EdsUpdate resource;
|
578
|
-
std::string serialized_proto;
|
579
|
-
};
|
580
|
-
|
581
|
-
using EdsUpdateMap = std::map<ResourceName, EdsResourceData>;
|
582
|
-
|
583
73
|
struct ClusterLoadReport {
|
584
74
|
XdsClusterDropStats::Snapshot dropped_requests;
|
585
75
|
std::map<RefCountedPtr<XdsLocalityName>, XdsClusterLocalityStats::Snapshot,
|
@@ -647,69 +137,24 @@ class XdsApi {
|
|
647
137
|
ResourceMetadata::ClientResourceStatus::NACKED,
|
648
138
|
"");
|
649
139
|
|
650
|
-
// If the response can't be parsed at the top level, the resulting
|
651
|
-
// type_url will be empty.
|
652
|
-
// If there is any other type of validation error, the parse_error
|
653
|
-
// field will be set to something other than GRPC_ERROR_NONE and the
|
654
|
-
// resource_names_failed field will be populated.
|
655
|
-
// Otherwise, one of the *_update_map fields will be populated, based
|
656
|
-
// on the type_url field.
|
657
|
-
struct AdsParseResult {
|
658
|
-
grpc_error_handle parse_error = GRPC_ERROR_NONE;
|
659
|
-
std::string version;
|
660
|
-
std::string nonce;
|
661
|
-
std::string type_url;
|
662
|
-
LdsUpdateMap lds_update_map;
|
663
|
-
RdsUpdateMap rds_update_map;
|
664
|
-
CdsUpdateMap cds_update_map;
|
665
|
-
EdsUpdateMap eds_update_map;
|
666
|
-
std::set<ResourceName> resource_names_failed;
|
667
|
-
};
|
668
|
-
|
669
140
|
XdsApi(XdsClient* client, TraceFlag* tracer, const XdsBootstrap::Node* node,
|
670
|
-
const CertificateProviderStore::PluginDefinitionMap* map
|
671
|
-
|
672
|
-
static bool IsLds(absl::string_view type_url);
|
673
|
-
static bool IsRds(absl::string_view type_url);
|
674
|
-
static bool IsCds(absl::string_view type_url);
|
675
|
-
static bool IsEds(absl::string_view type_url);
|
676
|
-
|
677
|
-
// A helper method to parse the resource name and return back a ResourceName
|
678
|
-
// struct. Optionally the parser can check the resource type portion of the
|
679
|
-
// resource name.
|
680
|
-
static absl::StatusOr<ResourceName> ParseResourceName(
|
681
|
-
absl::string_view name,
|
682
|
-
bool (*is_expected_type)(absl::string_view) = nullptr);
|
683
|
-
|
684
|
-
// A helper method to construct the resource name from parts.
|
685
|
-
static std::string ConstructFullResourceName(absl::string_view authority,
|
686
|
-
absl::string_view resource_type,
|
687
|
-
absl::string_view name);
|
141
|
+
const CertificateProviderStore::PluginDefinitionMap* map,
|
142
|
+
upb::SymbolTable* symtab);
|
688
143
|
|
689
144
|
// Creates an ADS request.
|
690
145
|
// Takes ownership of \a error.
|
691
|
-
grpc_slice CreateAdsRequest(
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
//
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
subscribed_listener_names,
|
704
|
-
const std::map<absl::string_view /*authority*/,
|
705
|
-
std::set<absl::string_view /*name*/>>&
|
706
|
-
subscribed_route_config_names,
|
707
|
-
const std::map<absl::string_view /*authority*/,
|
708
|
-
std::set<absl::string_view /*name*/>>&
|
709
|
-
subscribed_cluster_names,
|
710
|
-
const std::map<absl::string_view /*authority*/,
|
711
|
-
std::set<absl::string_view /*name*/>>&
|
712
|
-
subscribed_eds_service_names);
|
146
|
+
grpc_slice CreateAdsRequest(const XdsBootstrap::XdsServer& server,
|
147
|
+
absl::string_view type_url,
|
148
|
+
absl::string_view version,
|
149
|
+
absl::string_view nonce,
|
150
|
+
const std::vector<std::string>& resource_names,
|
151
|
+
grpc_error_handle error, bool populate_node);
|
152
|
+
|
153
|
+
// Returns non-OK when failing to deserialize response message.
|
154
|
+
// Otherwise, all events are reported to the parser.
|
155
|
+
absl::Status ParseAdsResponse(const XdsBootstrap::XdsServer& server,
|
156
|
+
const grpc_slice& encoded_response,
|
157
|
+
AdsResponseParserInterface* parser);
|
713
158
|
|
714
159
|
// Creates an initial LRS request.
|
715
160
|
grpc_slice CreateLrsInitialRequest(const XdsBootstrap::XdsServer& server);
|
@@ -735,7 +180,7 @@ class XdsApi {
|
|
735
180
|
const XdsBootstrap::Node* node_; // Do not own.
|
736
181
|
const CertificateProviderStore::PluginDefinitionMap*
|
737
182
|
certificate_provider_definition_map_; // Do not own.
|
738
|
-
upb::SymbolTable symtab_;
|
183
|
+
upb::SymbolTable* symtab_; // Do not own.
|
739
184
|
const std::string build_version_;
|
740
185
|
const std::string user_agent_name_;
|
741
186
|
const std::string user_agent_version_;
|
@@ -743,4 +188,4 @@ class XdsApi {
|
|
743
188
|
|
744
189
|
} // namespace grpc_core
|
745
190
|
|
746
|
-
#endif
|
191
|
+
#endif // GRPC_CORE_EXT_XDS_XDS_API_H
|