grpc 1.55.0 → 1.56.0.pre3
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 +100 -68
- data/include/grpc/event_engine/event_engine.h +4 -3
- data/include/grpc/grpc_audit_logging.h +96 -0
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/support/json.h +218 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
- data/src/core/ext/filters/client_channel/client_channel.h +6 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
- data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
- data/src/core/ext/filters/client_channel/config_selector.h +9 -24
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
- data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
- data/src/core/ext/filters/client_channel/subchannel.h +3 -43
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -9
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
- data/src/core/ext/xds/xds_api.cc +9 -6
- data/src/core/ext/xds/xds_api.h +3 -2
- data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
- data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
- data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
- data/src/core/ext/xds/xds_client.cc +5 -4
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_cluster.cc +20 -19
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
- data/src/core/ext/xds/xds_common_types.cc +3 -1
- data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
- data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
- data/src/core/ext/xds/xds_http_filters.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
- data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
- data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
- data/src/core/ext/xds/xds_listener.cc +1 -0
- data/src/core/ext/xds/xds_route_config.cc +40 -3
- data/src/core/ext/xds/xds_routing.cc +2 -2
- data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
- data/src/core/lib/avl/avl.h +5 -0
- data/src/core/lib/channel/channel_args.cc +80 -22
- data/src/core/lib/channel/channel_args.h +34 -1
- data/src/core/lib/channel/channel_trace.cc +16 -12
- data/src/core/lib/channel/channelz.cc +159 -132
- data/src/core/lib/channel/channelz.h +42 -35
- data/src/core/lib/channel/channelz_registry.cc +23 -20
- data/src/core/lib/channel/connected_channel.cc +17 -6
- data/src/core/lib/channel/promise_based_filter.cc +0 -4
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression_internal.cc +2 -5
- data/src/core/lib/config/config_vars.cc +20 -18
- data/src/core/lib/config/config_vars.h +4 -4
- data/src/core/lib/config/load_config.cc +13 -0
- data/src/core/lib/config/load_config.h +6 -0
- data/src/core/lib/debug/event_log.h +1 -1
- data/src/core/lib/debug/stats_data.h +1 -1
- data/src/core/lib/debug/trace.cc +24 -55
- data/src/core/lib/debug/trace.h +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
- data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
- data/src/core/lib/event_engine/default_event_engine.cc +13 -1
- data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
- data/src/core/lib/event_engine/poller.h +2 -2
- data/src/core/lib/event_engine/posix.h +4 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
- data/src/core/lib/event_engine/shim.cc +7 -1
- data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
- data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
- data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
- data/src/core/lib/event_engine/windows/iocp.cc +4 -3
- data/src/core/lib/event_engine/windows/iocp.h +3 -3
- data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
- data/src/core/lib/event_engine/windows/win_socket.h +4 -4
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
- data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
- data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
- data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
- data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
- data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
- data/src/core/lib/experiments/config.cc +38 -7
- data/src/core/lib/experiments/config.h +16 -0
- data/src/core/lib/experiments/experiments.cc +67 -20
- data/src/core/lib/experiments/experiments.h +27 -21
- data/src/core/lib/gpr/log_internal.h +55 -0
- data/src/core/lib/gprpp/crash.cc +10 -0
- data/src/core/lib/gprpp/crash.h +3 -0
- data/src/core/lib/gprpp/per_cpu.cc +33 -0
- data/src/core/lib/gprpp/per_cpu.h +29 -6
- data/src/core/lib/gprpp/time.cc +1 -0
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
- data/src/core/lib/iomgr/ev_apple.cc +12 -12
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
- data/src/core/lib/iomgr/iocp_windows.cc +24 -3
- data/src/core/lib/iomgr/iocp_windows.h +11 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
- data/src/core/lib/iomgr/socket_windows.cc +61 -7
- data/src/core/lib/iomgr/socket_windows.h +9 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
- data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
- data/src/core/lib/json/json.h +2 -166
- data/src/core/lib/json/json_object_loader.cc +8 -9
- data/src/core/lib/json/json_object_loader.h +25 -18
- data/src/core/lib/json/json_reader.cc +13 -6
- data/src/core/lib/json/json_util.cc +6 -11
- data/src/core/lib/json/json_writer.cc +7 -8
- data/src/core/lib/load_balancing/lb_policy.h +13 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/matchers/matchers.h +2 -1
- data/src/core/lib/promise/activity.cc +5 -0
- data/src/core/lib/promise/activity.h +10 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -1
- data/src/core/lib/promise/party.cc +31 -13
- data/src/core/lib/promise/party.h +11 -2
- data/src/core/lib/promise/pipe.h +9 -2
- data/src/core/lib/promise/prioritized_race.h +95 -0
- data/src/core/lib/promise/sleep.cc +2 -1
- data/src/core/lib/resolver/server_address.cc +0 -8
- data/src/core/lib/resolver/server_address.h +0 -6
- data/src/core/lib/resource_quota/memory_quota.cc +7 -7
- data/src/core/lib/resource_quota/memory_quota.h +1 -2
- data/src/core/lib/security/authorization/audit_logging.cc +98 -0
- data/src/core/lib/security/authorization/audit_logging.h +73 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
- data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
- data/src/core/lib/security/authorization/rbac_policy.h +19 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
- data/src/core/lib/security/authorization/stdout_logger.h +61 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
- data/src/core/lib/security/util/json_util.cc +1 -0
- data/src/core/lib/service_config/service_config_call_data.h +49 -20
- data/src/core/lib/service_config/service_config_impl.cc +2 -1
- data/src/core/lib/surface/call.cc +38 -23
- data/src/core/lib/surface/completion_queue.cc +6 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/batch_builder.cc +15 -12
- data/src/core/lib/transport/batch_builder.h +39 -35
- data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +8 -9
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
- data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
- data/third_party/cares/cares/include/ares.h +23 -1
- data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
- data/third_party/cares/cares/include/ares_rules.h +2 -2
- data/third_party/cares/cares/include/ares_version.h +3 -3
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
- data/third_party/cares/cares/src/lib/ares_data.c +16 -0
- data/third_party/cares/cares/src/lib/ares_data.h +7 -0
- data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
- data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
- data/third_party/cares/cares/src/lib/ares_init.c +97 -485
- data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
- data/third_party/cares/cares/src/lib/ares_private.h +30 -16
- data/third_party/cares/cares/src/lib/ares_process.c +55 -16
- data/third_party/cares/cares/src/lib/ares_query.c +1 -35
- data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
- data/third_party/cares/cares/src/lib/ares_send.c +5 -7
- data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
- data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
- data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
- data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
- data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
- metadata +50 -14
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
- data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
- data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -16,11 +16,12 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
+
#include <stdint.h>
|
19
20
|
#include <stdlib.h>
|
20
21
|
#include <string.h>
|
21
22
|
|
22
23
|
#include <algorithm>
|
23
|
-
#include <
|
24
|
+
#include <functional>
|
24
25
|
#include <initializer_list>
|
25
26
|
#include <map>
|
26
27
|
#include <memory>
|
@@ -29,7 +30,6 @@
|
|
29
30
|
#include <utility>
|
30
31
|
#include <vector>
|
31
32
|
|
32
|
-
#include "absl/functional/any_invocable.h"
|
33
33
|
#include "absl/meta/type_traits.h"
|
34
34
|
#include "absl/random/random.h"
|
35
35
|
#include "absl/status/status.h"
|
@@ -57,8 +57,10 @@
|
|
57
57
|
#include <grpc/status.h>
|
58
58
|
#include <grpc/support/log.h>
|
59
59
|
|
60
|
+
#include "src/core/ext/filters/client_channel/client_channel_internal.h"
|
60
61
|
#include "src/core/ext/filters/client_channel/config_selector.h"
|
61
62
|
#include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
|
63
|
+
#include "src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h"
|
62
64
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
63
65
|
#include "src/core/ext/xds/xds_bootstrap_grpc.h"
|
64
66
|
#include "src/core/ext/xds/xds_client_grpc.h"
|
@@ -68,6 +70,9 @@
|
|
68
70
|
#include "src/core/ext/xds/xds_routing.h"
|
69
71
|
#include "src/core/lib/channel/channel_args.h"
|
70
72
|
#include "src/core/lib/channel/channel_fwd.h"
|
73
|
+
#include "src/core/lib/channel/channel_stack.h"
|
74
|
+
#include "src/core/lib/channel/context.h"
|
75
|
+
#include "src/core/lib/channel/promise_based_filter.h"
|
71
76
|
#include "src/core/lib/channel/status_util.h"
|
72
77
|
#include "src/core/lib/config/core_configuration.h"
|
73
78
|
#include "src/core/lib/debug/trace.h"
|
@@ -75,11 +80,14 @@
|
|
75
80
|
#include "src/core/lib/gprpp/dual_ref_counted.h"
|
76
81
|
#include "src/core/lib/gprpp/match.h"
|
77
82
|
#include "src/core/lib/gprpp/orphanable.h"
|
83
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
78
84
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
79
85
|
#include "src/core/lib/gprpp/time.h"
|
80
86
|
#include "src/core/lib/gprpp/work_serializer.h"
|
81
87
|
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
82
88
|
#include "src/core/lib/iomgr/pollset_set.h"
|
89
|
+
#include "src/core/lib/promise/arena_promise.h"
|
90
|
+
#include "src/core/lib/promise/context.h"
|
83
91
|
#include "src/core/lib/resolver/resolver.h"
|
84
92
|
#include "src/core/lib/resolver/resolver_factory.h"
|
85
93
|
#include "src/core/lib/resolver/server_address.h"
|
@@ -87,13 +95,14 @@
|
|
87
95
|
#include "src/core/lib/service_config/service_config.h"
|
88
96
|
#include "src/core/lib/service_config/service_config_impl.h"
|
89
97
|
#include "src/core/lib/transport/metadata_batch.h"
|
98
|
+
#include "src/core/lib/transport/transport.h"
|
90
99
|
#include "src/core/lib/uri/uri_parser.h"
|
91
100
|
|
92
101
|
namespace grpc_core {
|
93
102
|
|
94
103
|
TraceFlag grpc_xds_resolver_trace(false, "xds_resolver");
|
95
104
|
|
96
|
-
UniqueTypeName
|
105
|
+
UniqueTypeName XdsClusterAttribute::TypeName() {
|
97
106
|
static UniqueTypeName::Factory kFactory("xds_cluster_name");
|
98
107
|
return kFactory.Create();
|
99
108
|
}
|
@@ -239,14 +248,9 @@ class XdsResolver : public Resolver {
|
|
239
248
|
// back into the WorkSerializer to remove the entry from the map.
|
240
249
|
class ClusterState : public DualRefCounted<ClusterState> {
|
241
250
|
public:
|
242
|
-
using ClusterStateMap =
|
243
|
-
std::map<std::string, WeakRefCountedPtr<ClusterState>>;
|
244
|
-
|
245
251
|
ClusterState(RefCountedPtr<XdsResolver> resolver,
|
246
|
-
|
247
|
-
: resolver_(std::move(resolver)),
|
248
|
-
it_(resolver_->cluster_state_map_.emplace(cluster_name, WeakRef())
|
249
|
-
.first) {}
|
252
|
+
absl::string_view cluster_name)
|
253
|
+
: resolver_(std::move(resolver)), cluster_name_(cluster_name) {}
|
250
254
|
|
251
255
|
void Orphan() override {
|
252
256
|
auto* resolver = resolver_.get();
|
@@ -257,11 +261,37 @@ class XdsResolver : public Resolver {
|
|
257
261
|
DEBUG_LOCATION);
|
258
262
|
}
|
259
263
|
|
260
|
-
const std::string&
|
264
|
+
const std::string& cluster_name() const { return cluster_name_; }
|
261
265
|
|
262
266
|
private:
|
263
267
|
RefCountedPtr<XdsResolver> resolver_;
|
264
|
-
|
268
|
+
std::string cluster_name_;
|
269
|
+
};
|
270
|
+
|
271
|
+
// A map containing cluster refs held by the XdsConfigSelector. A ref to
|
272
|
+
// this map will be taken by each call processed by the XdsConfigSelector,
|
273
|
+
// stored in a the call's call attributes, and later unreffed
|
274
|
+
// by the ClusterSelection filter.
|
275
|
+
class XdsClusterMap : public RefCounted<XdsClusterMap> {
|
276
|
+
public:
|
277
|
+
explicit XdsClusterMap(
|
278
|
+
std::map<absl::string_view, RefCountedPtr<ClusterState>> clusters)
|
279
|
+
: clusters_(std::move(clusters)) {}
|
280
|
+
|
281
|
+
bool operator==(const XdsClusterMap& other) const {
|
282
|
+
return clusters_ == other.clusters_;
|
283
|
+
}
|
284
|
+
|
285
|
+
RefCountedPtr<ClusterState> Find(absl::string_view name) const {
|
286
|
+
auto it = clusters_.find(name);
|
287
|
+
if (it == clusters_.end()) {
|
288
|
+
return nullptr;
|
289
|
+
}
|
290
|
+
return it->second;
|
291
|
+
}
|
292
|
+
|
293
|
+
private:
|
294
|
+
std::map<absl::string_view, RefCountedPtr<ClusterState>> clusters_;
|
265
295
|
};
|
266
296
|
|
267
297
|
class XdsConfigSelector : public ConfigSelector {
|
@@ -276,10 +306,10 @@ class XdsResolver : public Resolver {
|
|
276
306
|
const auto* other_xds = static_cast<const XdsConfigSelector*>(other);
|
277
307
|
// Don't need to compare resolver_, since that will always be the same.
|
278
308
|
return route_table_ == other_xds->route_table_ &&
|
279
|
-
|
309
|
+
*cluster_map_ == *other_xds->cluster_map_;
|
280
310
|
}
|
281
311
|
|
282
|
-
absl::
|
312
|
+
absl::Status GetCallConfig(GetCallConfigArgs args) override;
|
283
313
|
|
284
314
|
std::vector<const grpc_channel_filter*> GetFilters() override {
|
285
315
|
return filters_;
|
@@ -305,7 +335,6 @@ class XdsResolver : public Resolver {
|
|
305
335
|
|
306
336
|
class RouteListIterator;
|
307
337
|
|
308
|
-
void MaybeAddCluster(const std::string& name);
|
309
338
|
absl::StatusOr<RefCountedPtr<ServiceConfig>> CreateMethodConfig(
|
310
339
|
const XdsRouteConfigResource::Route& route,
|
311
340
|
const XdsRouteConfigResource::Route::RouteAction::ClusterWeight*
|
@@ -313,10 +342,92 @@ class XdsResolver : public Resolver {
|
|
313
342
|
|
314
343
|
RefCountedPtr<XdsResolver> resolver_;
|
315
344
|
RouteTable route_table_;
|
316
|
-
|
345
|
+
RefCountedPtr<XdsClusterMap> cluster_map_;
|
317
346
|
std::vector<const grpc_channel_filter*> filters_;
|
318
347
|
};
|
319
348
|
|
349
|
+
class ClusterSelectionFilter : public ChannelFilter {
|
350
|
+
public:
|
351
|
+
const static grpc_channel_filter kFilter;
|
352
|
+
|
353
|
+
static absl::StatusOr<ClusterSelectionFilter> Create(
|
354
|
+
const ChannelArgs& /* unused */, ChannelFilter::Args filter_args) {
|
355
|
+
return ClusterSelectionFilter(filter_args);
|
356
|
+
}
|
357
|
+
|
358
|
+
// Construct a promise for one call.
|
359
|
+
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
360
|
+
CallArgs call_args, NextPromiseFactory next_promise_factory) override {
|
361
|
+
auto* service_config_call_data =
|
362
|
+
static_cast<ClientChannelServiceConfigCallData*>(
|
363
|
+
GetContext<grpc_call_context_element>()
|
364
|
+
[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA]
|
365
|
+
.value);
|
366
|
+
GPR_ASSERT(service_config_call_data != nullptr);
|
367
|
+
auto* cluster_data = static_cast<XdsClusterMapAttribute*>(
|
368
|
+
service_config_call_data->GetCallAttribute(
|
369
|
+
XdsClusterMapAttribute::TypeName()));
|
370
|
+
auto* cluster_name_attribute = static_cast<XdsClusterAttribute*>(
|
371
|
+
service_config_call_data->GetCallAttribute(
|
372
|
+
XdsClusterAttribute::TypeName()));
|
373
|
+
if (cluster_data != nullptr && cluster_name_attribute != nullptr) {
|
374
|
+
auto cluster =
|
375
|
+
cluster_data->LockAndGetCluster(cluster_name_attribute->cluster());
|
376
|
+
if (cluster != nullptr) {
|
377
|
+
service_config_call_data->SetOnCommit(
|
378
|
+
[cluster = std::move(cluster)]() mutable { cluster.reset(); });
|
379
|
+
}
|
380
|
+
}
|
381
|
+
return next_promise_factory(std::move(call_args));
|
382
|
+
}
|
383
|
+
|
384
|
+
private:
|
385
|
+
explicit ClusterSelectionFilter(ChannelFilter::Args filter_args)
|
386
|
+
: filter_args_(filter_args) {}
|
387
|
+
|
388
|
+
ChannelFilter::Args filter_args_;
|
389
|
+
};
|
390
|
+
|
391
|
+
RefCountedPtr<ClusterState> GetOrCreateClusterState(
|
392
|
+
absl::string_view cluster_name) {
|
393
|
+
auto it = cluster_state_map_.find(cluster_name);
|
394
|
+
if (it == cluster_state_map_.end()) {
|
395
|
+
auto cluster = MakeRefCounted<ClusterState>(Ref(), cluster_name);
|
396
|
+
cluster_state_map_.emplace(cluster->cluster_name(), cluster->WeakRef());
|
397
|
+
return cluster;
|
398
|
+
}
|
399
|
+
return it->second->Ref();
|
400
|
+
}
|
401
|
+
|
402
|
+
class XdsClusterMapAttribute
|
403
|
+
: public ServiceConfigCallData::CallAttributeInterface {
|
404
|
+
public:
|
405
|
+
static UniqueTypeName TypeName() {
|
406
|
+
static UniqueTypeName::Factory factory("xds_cluster_lb_data");
|
407
|
+
return factory.Create();
|
408
|
+
}
|
409
|
+
|
410
|
+
explicit XdsClusterMapAttribute(RefCountedPtr<XdsClusterMap> cluster_map)
|
411
|
+
: cluster_map_(std::move(cluster_map)) {}
|
412
|
+
|
413
|
+
// This method can be called only once. The first call will release the
|
414
|
+
// reference to the cluster map, and subsequent calls will return nullptr.
|
415
|
+
RefCountedPtr<ClusterState> LockAndGetCluster(
|
416
|
+
absl::string_view cluster_name) {
|
417
|
+
if (cluster_map_ == nullptr) {
|
418
|
+
return nullptr;
|
419
|
+
}
|
420
|
+
auto cluster = cluster_map_->Find(cluster_name);
|
421
|
+
cluster_map_.reset();
|
422
|
+
return cluster;
|
423
|
+
}
|
424
|
+
|
425
|
+
UniqueTypeName type() const override { return TypeName(); }
|
426
|
+
|
427
|
+
private:
|
428
|
+
RefCountedPtr<XdsClusterMap> cluster_map_;
|
429
|
+
};
|
430
|
+
|
320
431
|
void OnListenerUpdate(XdsListenerResource listener);
|
321
432
|
void OnRouteConfigUpdate(XdsRouteConfigResource rds_update);
|
322
433
|
void OnError(absl::string_view context, absl::Status status);
|
@@ -350,7 +461,8 @@ class XdsResolver : public Resolver {
|
|
350
461
|
std::string /*LB policy config*/>
|
351
462
|
cluster_specifier_plugin_map_;
|
352
463
|
|
353
|
-
|
464
|
+
std::map<absl::string_view, WeakRefCountedPtr<ClusterState>>
|
465
|
+
cluster_state_map_;
|
354
466
|
};
|
355
467
|
|
356
468
|
//
|
@@ -363,6 +475,11 @@ bool MethodConfigsEqual(const ServiceConfig* sc1, const ServiceConfig* sc2) {
|
|
363
475
|
return sc1->json_string() == sc2->json_string();
|
364
476
|
}
|
365
477
|
|
478
|
+
const grpc_channel_filter XdsResolver::ClusterSelectionFilter::kFilter =
|
479
|
+
MakePromiseBasedFilter<ClusterSelectionFilter, FilterEndpoint::kClient,
|
480
|
+
kFilterExaminesServerInitialMetadata>(
|
481
|
+
"cluster_selection_filter");
|
482
|
+
|
366
483
|
bool XdsResolver::XdsConfigSelector::Route::ClusterWeightState::operator==(
|
367
484
|
const ClusterWeightState& other) const {
|
368
485
|
return range_end == other.range_end && cluster == other.cluster &&
|
@@ -416,6 +533,13 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
416
533
|
// moving the entry in a reallocation will cause the string_view to point to
|
417
534
|
// invalid data.
|
418
535
|
route_table_.reserve(resolver_->current_virtual_host_->routes.size());
|
536
|
+
std::map<absl::string_view, RefCountedPtr<ClusterState>> clusters;
|
537
|
+
auto maybe_add_cluster = [&](absl::string_view cluster_name) {
|
538
|
+
if (clusters.find(cluster_name) != clusters.end()) return;
|
539
|
+
auto cluster_state = resolver_->GetOrCreateClusterState(cluster_name);
|
540
|
+
absl::string_view name = cluster_state->cluster_name();
|
541
|
+
clusters.emplace(name, std::move(cluster_state));
|
542
|
+
};
|
419
543
|
for (auto& route : resolver_->current_virtual_host_->routes) {
|
420
544
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
421
545
|
gpr_log(GPR_INFO, "[xds_resolver %p] XdsConfigSelector %p: route: %s",
|
@@ -445,7 +569,7 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
445
569
|
return;
|
446
570
|
}
|
447
571
|
route_entry.method_config = std::move(*result);
|
448
|
-
|
572
|
+
maybe_add_cluster(
|
449
573
|
absl::StrCat("cluster:", cluster_name.cluster_name));
|
450
574
|
},
|
451
575
|
// WeightedClusters
|
@@ -467,7 +591,8 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
467
591
|
cluster_weight_state.cluster = weighted_cluster.name;
|
468
592
|
route_entry.weighted_cluster_state.push_back(
|
469
593
|
std::move(cluster_weight_state));
|
470
|
-
|
594
|
+
maybe_add_cluster(
|
595
|
+
absl::StrCat("cluster:", weighted_cluster.name));
|
471
596
|
}
|
472
597
|
},
|
473
598
|
// ClusterSpecifierPlugin
|
@@ -479,13 +604,14 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
479
604
|
return;
|
480
605
|
}
|
481
606
|
route_entry.method_config = std::move(*result);
|
482
|
-
|
607
|
+
maybe_add_cluster(absl::StrCat(
|
483
608
|
"cluster_specifier_plugin:",
|
484
609
|
cluster_specifier_plugin_name.cluster_specifier_plugin_name));
|
485
610
|
});
|
486
611
|
if (!status->ok()) return;
|
487
612
|
}
|
488
613
|
}
|
614
|
+
cluster_map_ = MakeRefCounted<XdsClusterMap>(std::move(clusters));
|
489
615
|
// Populate filter list.
|
490
616
|
const auto& http_filter_registry =
|
491
617
|
static_cast<const GrpcXdsBootstrap&>(resolver_->xds_client_->bootstrap())
|
@@ -502,6 +628,7 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
502
628
|
filters_.push_back(filter_impl->channel_filter());
|
503
629
|
}
|
504
630
|
}
|
631
|
+
filters_.push_back(&ClusterSelectionFilter::kFilter);
|
505
632
|
}
|
506
633
|
|
507
634
|
XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
|
@@ -509,7 +636,7 @@ XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
|
|
509
636
|
gpr_log(GPR_INFO, "[xds_resolver %p] destroying XdsConfigSelector %p",
|
510
637
|
resolver_.get(), this);
|
511
638
|
}
|
512
|
-
|
639
|
+
cluster_map_.reset();
|
513
640
|
resolver_->MaybeRemoveUnusedClusters();
|
514
641
|
}
|
515
642
|
|
@@ -595,18 +722,6 @@ XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
595
722
|
return nullptr;
|
596
723
|
}
|
597
724
|
|
598
|
-
void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
|
599
|
-
if (clusters_.find(name) == clusters_.end()) {
|
600
|
-
auto it = resolver_->cluster_state_map_.find(name);
|
601
|
-
if (it == resolver_->cluster_state_map_.end()) {
|
602
|
-
auto new_cluster_state = MakeRefCounted<ClusterState>(resolver_, name);
|
603
|
-
clusters_[new_cluster_state->cluster()] = std::move(new_cluster_state);
|
604
|
-
} else {
|
605
|
-
clusters_[it->second->cluster()] = it->second->Ref();
|
606
|
-
}
|
607
|
-
}
|
608
|
-
}
|
609
|
-
|
610
725
|
absl::optional<uint64_t> HeaderHashHelper(
|
611
726
|
const XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header&
|
612
727
|
header_policy,
|
@@ -628,8 +743,8 @@ absl::optional<uint64_t> HeaderHashHelper(
|
|
628
743
|
return XXH64(header_value->data(), header_value->size(), 0);
|
629
744
|
}
|
630
745
|
|
631
|
-
absl::
|
632
|
-
|
746
|
+
absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
|
747
|
+
GetCallConfigArgs args) {
|
633
748
|
Slice* path = args.initial_metadata->get_pointer(HttpPathMetadata());
|
634
749
|
GPR_ASSERT(path != nullptr);
|
635
750
|
auto route_index = XdsRouting::GetRouteForRequest(
|
@@ -694,8 +809,8 @@ XdsResolver::XdsConfigSelector::GetCallConfig(GetCallConfigArgs args) {
|
|
694
809
|
cluster_specifier_plugin_name.cluster_specifier_plugin_name);
|
695
810
|
method_config = entry.method_config;
|
696
811
|
});
|
697
|
-
auto
|
698
|
-
GPR_ASSERT(
|
812
|
+
auto cluster = cluster_map_->Find(cluster_name);
|
813
|
+
GPR_ASSERT(cluster != nullptr);
|
699
814
|
// Generate a hash.
|
700
815
|
absl::optional<uint64_t> hash;
|
701
816
|
for (const auto& hash_policy : route_action->hash_policies) {
|
@@ -725,23 +840,25 @@ XdsResolver::XdsConfigSelector::GetCallConfig(GetCallConfigArgs args) {
|
|
725
840
|
if (!hash.has_value()) {
|
726
841
|
hash = absl::Uniform<uint64_t>(absl::BitGen());
|
727
842
|
}
|
728
|
-
|
843
|
+
// Populate service config call data.
|
729
844
|
if (method_config != nullptr) {
|
730
|
-
|
845
|
+
auto* parsed_method_configs =
|
731
846
|
method_config->GetMethodParsedConfigVector(grpc_empty_slice());
|
732
|
-
|
847
|
+
args.service_config_call_data->SetServiceConfig(std::move(method_config),
|
848
|
+
parsed_method_configs);
|
733
849
|
}
|
734
|
-
|
850
|
+
args.service_config_call_data->SetCallAttribute(
|
851
|
+
args.arena->New<XdsClusterAttribute>(cluster->cluster_name()));
|
735
852
|
std::string hash_string = absl::StrCat(hash.value());
|
736
853
|
char* hash_value =
|
737
854
|
static_cast<char*>(args.arena->Alloc(hash_string.size() + 1));
|
738
855
|
memcpy(hash_value, hash_string.c_str(), hash_string.size());
|
739
856
|
hash_value[hash_string.size()] = '\0';
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
return
|
857
|
+
args.service_config_call_data->SetCallAttribute(
|
858
|
+
args.arena->New<RequestHashAttribute>(hash_value));
|
859
|
+
args.service_config_call_data->SetCallAttribute(
|
860
|
+
args.arena->ManagedNew<XdsClusterMapAttribute>(cluster_map_));
|
861
|
+
return absl::OkStatus();
|
745
862
|
}
|
746
863
|
|
747
864
|
//
|
@@ -19,12 +19,27 @@
|
|
19
19
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
22
|
+
#include "absl/strings/string_view.h"
|
23
|
+
|
22
24
|
#include "src/core/lib/gprpp/unique_type_name.h"
|
25
|
+
#include "src/core/lib/service_config/service_config_call_data.h"
|
23
26
|
|
24
27
|
namespace grpc_core {
|
25
28
|
|
26
|
-
|
29
|
+
class XdsClusterAttribute
|
30
|
+
: public ServiceConfigCallData::CallAttributeInterface {
|
31
|
+
public:
|
32
|
+
static UniqueTypeName TypeName();
|
33
|
+
|
34
|
+
explicit XdsClusterAttribute(absl::string_view cluster) : cluster_(cluster) {}
|
35
|
+
|
36
|
+
absl::string_view cluster() const { return cluster_; }
|
37
|
+
|
38
|
+
private:
|
39
|
+
UniqueTypeName type() const override { return TypeName(); }
|
27
40
|
|
41
|
+
absl::string_view cluster_;
|
42
|
+
};
|
28
43
|
} // namespace grpc_core
|
29
44
|
|
30
45
|
#endif // GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_XDS_XDS_RESOLVER_H
|
@@ -34,11 +34,11 @@
|
|
34
34
|
#include "src/core/lib/channel/channel_fwd.h"
|
35
35
|
#include "src/core/lib/channel/channel_stack.h"
|
36
36
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
37
|
-
#include "src/core/lib/channel/context.h"
|
38
37
|
#include "src/core/lib/config/core_configuration.h"
|
39
38
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
40
39
|
#include "src/core/lib/iomgr/closure.h"
|
41
40
|
#include "src/core/lib/iomgr/error.h"
|
41
|
+
#include "src/core/lib/resource_quota/arena.h"
|
42
42
|
#include "src/core/lib/service_config/service_config.h"
|
43
43
|
#include "src/core/lib/service_config/service_config_call_data.h"
|
44
44
|
#include "src/core/lib/service_config/service_config_impl.h"
|
@@ -75,55 +75,25 @@ class ServiceConfigChannelArgChannelData {
|
|
75
75
|
RefCountedPtr<ServiceConfig> service_config_;
|
76
76
|
};
|
77
77
|
|
78
|
-
class ServiceConfigChannelArgCallData {
|
79
|
-
public:
|
80
|
-
ServiceConfigChannelArgCallData(
|
81
|
-
RefCountedPtr<ServiceConfig> service_config,
|
82
|
-
const ServiceConfigParser::ParsedConfigVector* method_config,
|
83
|
-
const grpc_call_element_args* args)
|
84
|
-
: call_context_(args->context),
|
85
|
-
service_config_call_data_(std::move(service_config), method_config,
|
86
|
-
/*call_attributes=*/{}) {
|
87
|
-
GPR_DEBUG_ASSERT(args->context != nullptr);
|
88
|
-
// No need to set the destroy function, since it will be cleaned up
|
89
|
-
// when this filter is destroyed in the filter stack.
|
90
|
-
args->context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value =
|
91
|
-
&service_config_call_data_;
|
92
|
-
}
|
93
|
-
|
94
|
-
~ServiceConfigChannelArgCallData() {
|
95
|
-
// Remove the entry from call context, just in case anyone above us
|
96
|
-
// tries to look at it during call stack destruction.
|
97
|
-
call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value = nullptr;
|
98
|
-
}
|
99
|
-
|
100
|
-
private:
|
101
|
-
grpc_call_context_element* call_context_;
|
102
|
-
ServiceConfigCallData service_config_call_data_;
|
103
|
-
};
|
104
|
-
|
105
78
|
grpc_error_handle ServiceConfigChannelArgInitCallElem(
|
106
79
|
grpc_call_element* elem, const grpc_call_element_args* args) {
|
107
80
|
auto* chand =
|
108
81
|
static_cast<ServiceConfigChannelArgChannelData*>(elem->channel_data);
|
109
|
-
auto* calld = static_cast<ServiceConfigChannelArgCallData*>(elem->call_data);
|
110
82
|
RefCountedPtr<ServiceConfig> service_config = chand->service_config();
|
111
|
-
const ServiceConfigParser::ParsedConfigVector*
|
83
|
+
const ServiceConfigParser::ParsedConfigVector* method_configs = nullptr;
|
112
84
|
if (service_config != nullptr) {
|
113
|
-
|
85
|
+
method_configs = service_config->GetMethodParsedConfigVector(args->path);
|
114
86
|
}
|
115
|
-
|
116
|
-
|
87
|
+
auto* service_config_call_data =
|
88
|
+
args->arena->New<ServiceConfigCallData>(args->arena, args->context);
|
89
|
+
service_config_call_data->SetServiceConfig(std::move(service_config),
|
90
|
+
method_configs);
|
117
91
|
return absl::OkStatus();
|
118
92
|
}
|
119
93
|
|
120
94
|
void ServiceConfigChannelArgDestroyCallElem(
|
121
|
-
grpc_call_element* elem
|
122
|
-
grpc_closure* /*
|
123
|
-
ServiceConfigChannelArgCallData* calld =
|
124
|
-
static_cast<ServiceConfigChannelArgCallData*>(elem->call_data);
|
125
|
-
calld->~ServiceConfigChannelArgCallData();
|
126
|
-
}
|
95
|
+
grpc_call_element* /*elem*/, const grpc_call_final_info* /*final_info*/,
|
96
|
+
grpc_closure* /*then_schedule_closure*/) {}
|
127
97
|
|
128
98
|
grpc_error_handle ServiceConfigChannelArgInitChannelElem(
|
129
99
|
grpc_channel_element* elem, grpc_channel_element_args* args) {
|
@@ -143,7 +113,7 @@ const grpc_channel_filter ServiceConfigChannelArgFilter = {
|
|
143
113
|
grpc_call_next_op,
|
144
114
|
nullptr,
|
145
115
|
grpc_channel_next_op,
|
146
|
-
|
116
|
+
0,
|
147
117
|
ServiceConfigChannelArgInitCallElem,
|
148
118
|
grpc_call_stack_ignore_set_pollset_or_pollset_set,
|
149
119
|
ServiceConfigChannelArgDestroyCallElem,
|