grpc 1.73.0 → 1.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +19 -29
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.h +5 -5
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +50 -1
- data/src/core/lib/promise/party.h +66 -1
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/filter_stack_call.cc +18 -9
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +83 -12
- data/src/core/server/server.h +21 -2
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/latent_see.h +8 -5
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +72 -568
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- metadata +72 -20
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -0,0 +1,31 @@
|
|
1
|
+
// Copyright 2025 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include "src/core/util/wait_for_single_owner.h"
|
16
|
+
|
17
|
+
#include "src/core/util/no_destruct.h"
|
18
|
+
|
19
|
+
namespace grpc_core {
|
20
|
+
|
21
|
+
NoDestruct<absl::AnyInvocable<void()>> cb_{nullptr};
|
22
|
+
|
23
|
+
void SetWaitForSingleOwnerStalledCallback(absl::AnyInvocable<void()> cb) {
|
24
|
+
*cb_ = std::move(cb);
|
25
|
+
}
|
26
|
+
|
27
|
+
void WaitForSingleOwnerStalled() {
|
28
|
+
if (*cb_ != nullptr) (*cb_)();
|
29
|
+
}
|
30
|
+
|
31
|
+
} // namespace grpc_core
|
@@ -17,12 +17,23 @@
|
|
17
17
|
|
18
18
|
#include <memory>
|
19
19
|
|
20
|
+
#include "absl/functional/any_invocable.h"
|
20
21
|
#include "absl/log/log.h"
|
21
22
|
#include "src/core/util/crash.h"
|
22
23
|
#include "src/core/util/time.h"
|
23
24
|
|
24
25
|
namespace grpc_core {
|
25
26
|
|
27
|
+
constexpr Duration kWaitForSingleOwnerStallCheckFrequency =
|
28
|
+
Duration::Seconds(10);
|
29
|
+
|
30
|
+
// Provide a function that WaitForSingleOwner will call when it appears to have
|
31
|
+
// stalled.
|
32
|
+
void SetWaitForSingleOwnerStalledCallback(absl::AnyInvocable<void()> cb);
|
33
|
+
|
34
|
+
// INTERNAL: Call the stall callback.
|
35
|
+
void WaitForSingleOwnerStalled();
|
36
|
+
|
26
37
|
// Waits until the use_count of the shared_ptr has reached 1 and returns,
|
27
38
|
// destroying the object.
|
28
39
|
//
|
@@ -41,8 +52,21 @@ void WaitForSingleOwner(std::shared_ptr<T> obj) {
|
|
41
52
|
template <typename T>
|
42
53
|
void WaitForSingleOwnerWithTimeout(std::shared_ptr<T> obj, Duration timeout) {
|
43
54
|
auto start = Timestamp::Now();
|
55
|
+
size_t last_check_period = 0;
|
56
|
+
bool reported_stall = false;
|
44
57
|
while (obj.use_count() > 1) {
|
45
58
|
auto elapsed = Timestamp::Now() - start;
|
59
|
+
if (size_t current_check_period =
|
60
|
+
elapsed.seconds() /
|
61
|
+
kWaitForSingleOwnerStallCheckFrequency.seconds();
|
62
|
+
current_check_period > last_check_period) {
|
63
|
+
++last_check_period;
|
64
|
+
if (!reported_stall) {
|
65
|
+
LOG(INFO) << "Investigating stall...";
|
66
|
+
WaitForSingleOwnerStalled();
|
67
|
+
reported_stall = true;
|
68
|
+
}
|
69
|
+
}
|
46
70
|
auto remaining = timeout - elapsed;
|
47
71
|
if (remaining < Duration::Zero()) {
|
48
72
|
Crash("Timed out waiting for a single shared_ptr owner");
|
@@ -84,6 +84,8 @@ const JsonLoaderInterface* GrpcXdsBootstrap::GrpcAuthority::JsonLoader(
|
|
84
84
|
"client_listener_resource_name_template",
|
85
85
|
&GrpcAuthority::client_listener_resource_name_template_)
|
86
86
|
.OptionalField("xds_servers", &GrpcAuthority::servers_)
|
87
|
+
.OptionalField("fallback_on_reachability_only",
|
88
|
+
&GrpcAuthority::fallback_on_reachability_only_)
|
87
89
|
.Finish();
|
88
90
|
return loader;
|
89
91
|
}
|
@@ -85,6 +85,10 @@ class GrpcXdsBootstrap final : public XdsBootstrap {
|
|
85
85
|
return servers;
|
86
86
|
}
|
87
87
|
|
88
|
+
bool FallbackOnReachabilityOnly() const override {
|
89
|
+
return fallback_on_reachability_only_;
|
90
|
+
}
|
91
|
+
|
88
92
|
const std::string& client_listener_resource_name_template() const {
|
89
93
|
return client_listener_resource_name_template_;
|
90
94
|
}
|
@@ -94,6 +98,7 @@ class GrpcXdsBootstrap final : public XdsBootstrap {
|
|
94
98
|
private:
|
95
99
|
std::vector<GrpcXdsServer> servers_;
|
96
100
|
std::string client_listener_resource_name_template_;
|
101
|
+
bool fallback_on_reachability_only_;
|
97
102
|
};
|
98
103
|
|
99
104
|
// Creates bootstrap object from json_string.
|
@@ -251,6 +251,8 @@ absl::StatusOr<RefCountedPtr<GrpcXdsClient>> GrpcXdsClient::GetOrCreate(
|
|
251
251
|
std::optional<absl::string_view> bootstrap_config = args.GetString(
|
252
252
|
GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_BOOTSTRAP_CONFIG);
|
253
253
|
if (bootstrap_config.has_value()) {
|
254
|
+
GRPC_TRACE_LOG(xds_client, INFO)
|
255
|
+
<< "xDS bootstrap contents: " << *bootstrap_config;
|
254
256
|
auto bootstrap = GrpcXdsBootstrap::Create(*bootstrap_config);
|
255
257
|
if (!bootstrap.ok()) return bootstrap.status();
|
256
258
|
grpc_channel_args* xds_channel_args = args.GetPointer<grpc_channel_args>(
|
@@ -261,7 +263,8 @@ absl::StatusOr<RefCountedPtr<GrpcXdsClient>> GrpcXdsClient::GetOrCreate(
|
|
261
263
|
MakeRefCounted<GrpcXdsTransportFactory>(channel_args),
|
262
264
|
GetStatsPluginGroupForKeyAndChannelArgs(key, args));
|
263
265
|
}
|
264
|
-
// Otherwise,
|
266
|
+
// Otherwise, check the global map to see if the XdsClient instance
|
267
|
+
// for this key already exists.
|
265
268
|
MutexLock lock(g_mu);
|
266
269
|
auto it = g_xds_client_map->find(key);
|
267
270
|
if (it != g_xds_client_map->end()) {
|
@@ -270,7 +273,8 @@ absl::StatusOr<RefCountedPtr<GrpcXdsClient>> GrpcXdsClient::GetOrCreate(
|
|
270
273
|
return xds_client.TakeAsSubclass<GrpcXdsClient>();
|
271
274
|
}
|
272
275
|
}
|
273
|
-
//
|
276
|
+
// It doesn't exist, so we'll create it.
|
277
|
+
// First, find bootstrap contents.
|
274
278
|
auto bootstrap_contents = GetBootstrapContents(g_fallback_bootstrap_config);
|
275
279
|
if (!bootstrap_contents.ok()) return bootstrap_contents.status();
|
276
280
|
GRPC_TRACE_LOG(xds_client, INFO)
|
@@ -33,7 +33,6 @@
|
|
33
33
|
#include "envoy/extensions/transport_sockets/tls/v3/common.upb.h"
|
34
34
|
#include "envoy/extensions/transport_sockets/tls/v3/tls.upb.h"
|
35
35
|
#include "envoy/type/matcher/v3/regex.upb.h"
|
36
|
-
#include "envoy/type/matcher/v3/string.upb.h"
|
37
36
|
#include "google/protobuf/any.upb.h"
|
38
37
|
#include "google/protobuf/struct.upb.h"
|
39
38
|
#include "google/protobuf/struct.upbdefs.h"
|
@@ -48,6 +47,7 @@
|
|
48
47
|
#include "upb/base/status.hpp"
|
49
48
|
#include "upb/json/encode.h"
|
50
49
|
#include "upb/mem/arena.h"
|
50
|
+
#include "xds/type/matcher/v3/regex.upb.h"
|
51
51
|
#include "xds/type/v3/typed_struct.upb.h"
|
52
52
|
|
53
53
|
namespace grpc_core {
|
@@ -107,6 +107,140 @@ std::optional<grpc_resolved_address> ParseXdsAddress(
|
|
107
107
|
return *addr;
|
108
108
|
}
|
109
109
|
|
110
|
+
//
|
111
|
+
// StringMatcherParse()
|
112
|
+
//
|
113
|
+
|
114
|
+
namespace {
|
115
|
+
|
116
|
+
class StringMatcherProtoAccessor {
|
117
|
+
public:
|
118
|
+
virtual ~StringMatcherProtoAccessor() = default;
|
119
|
+
|
120
|
+
virtual bool IsPresent() const = 0;
|
121
|
+
virtual bool HasExact() const = 0;
|
122
|
+
virtual upb_StringView GetExact() const = 0;
|
123
|
+
virtual bool HasPrefix() const = 0;
|
124
|
+
virtual upb_StringView GetPrefix() const = 0;
|
125
|
+
virtual bool HasSuffix() const = 0;
|
126
|
+
virtual upb_StringView GetSuffix() const = 0;
|
127
|
+
virtual bool HasContains() const = 0;
|
128
|
+
virtual upb_StringView GetContains() const = 0;
|
129
|
+
virtual bool HasSafeRegex() const = 0;
|
130
|
+
virtual upb_StringView GetSafeRegex() const = 0;
|
131
|
+
virtual bool IgnoreCase() const = 0;
|
132
|
+
};
|
133
|
+
|
134
|
+
#define GRPC_STRING_MATCHER_PROTO_ACCESSOR_CLASS(prefix) \
|
135
|
+
class ProtoAccessor final : public StringMatcherProtoAccessor { \
|
136
|
+
public: \
|
137
|
+
explicit ProtoAccessor( \
|
138
|
+
const prefix##_type_matcher_v3_StringMatcher* proto) \
|
139
|
+
: proto_(proto) {} \
|
140
|
+
\
|
141
|
+
bool IsPresent() const override { return proto_ != nullptr; } \
|
142
|
+
bool HasExact() const override { \
|
143
|
+
return prefix##_type_matcher_v3_StringMatcher_has_exact(proto_); \
|
144
|
+
} \
|
145
|
+
upb_StringView GetExact() const override { \
|
146
|
+
return prefix##_type_matcher_v3_StringMatcher_exact(proto_); \
|
147
|
+
} \
|
148
|
+
bool HasPrefix() const override { \
|
149
|
+
return prefix##_type_matcher_v3_StringMatcher_has_prefix(proto_); \
|
150
|
+
} \
|
151
|
+
upb_StringView GetPrefix() const override { \
|
152
|
+
return prefix##_type_matcher_v3_StringMatcher_prefix(proto_); \
|
153
|
+
} \
|
154
|
+
bool HasSuffix() const override { \
|
155
|
+
return prefix##_type_matcher_v3_StringMatcher_has_suffix(proto_); \
|
156
|
+
} \
|
157
|
+
upb_StringView GetSuffix() const override { \
|
158
|
+
return prefix##_type_matcher_v3_StringMatcher_suffix(proto_); \
|
159
|
+
} \
|
160
|
+
bool HasContains() const override { \
|
161
|
+
return prefix##_type_matcher_v3_StringMatcher_has_contains(proto_); \
|
162
|
+
} \
|
163
|
+
upb_StringView GetContains() const override { \
|
164
|
+
return prefix##_type_matcher_v3_StringMatcher_contains(proto_); \
|
165
|
+
} \
|
166
|
+
bool HasSafeRegex() const override { \
|
167
|
+
return prefix##_type_matcher_v3_StringMatcher_has_safe_regex(proto_); \
|
168
|
+
} \
|
169
|
+
upb_StringView GetSafeRegex() const override { \
|
170
|
+
auto* regex_matcher = \
|
171
|
+
prefix##_type_matcher_v3_StringMatcher_safe_regex(proto_); \
|
172
|
+
return prefix##_type_matcher_v3_RegexMatcher_regex(regex_matcher); \
|
173
|
+
} \
|
174
|
+
bool IgnoreCase() const override { \
|
175
|
+
return prefix##_type_matcher_v3_StringMatcher_ignore_case(proto_); \
|
176
|
+
} \
|
177
|
+
\
|
178
|
+
private: \
|
179
|
+
const prefix##_type_matcher_v3_StringMatcher* proto_; \
|
180
|
+
};
|
181
|
+
|
182
|
+
StringMatcher StringMatcherParseInternal(
|
183
|
+
const StringMatcherProtoAccessor& proto, ValidationErrors* errors) {
|
184
|
+
if (!proto.IsPresent()) {
|
185
|
+
errors->AddError("field not present");
|
186
|
+
return StringMatcher();
|
187
|
+
}
|
188
|
+
StringMatcher::Type type;
|
189
|
+
std::string matcher;
|
190
|
+
if (proto.HasExact()) {
|
191
|
+
type = StringMatcher::Type::kExact;
|
192
|
+
matcher = UpbStringToStdString(proto.GetExact());
|
193
|
+
} else if (proto.HasPrefix()) {
|
194
|
+
type = StringMatcher::Type::kPrefix;
|
195
|
+
matcher = UpbStringToStdString(proto.GetPrefix());
|
196
|
+
} else if (proto.HasSuffix()) {
|
197
|
+
type = StringMatcher::Type::kSuffix;
|
198
|
+
matcher = UpbStringToStdString(proto.GetSuffix());
|
199
|
+
} else if (proto.HasContains()) {
|
200
|
+
type = StringMatcher::Type::kContains;
|
201
|
+
matcher = UpbStringToStdString(proto.GetContains());
|
202
|
+
} else if (proto.HasSafeRegex()) {
|
203
|
+
type = StringMatcher::Type::kSafeRegex;
|
204
|
+
matcher = UpbStringToStdString(proto.GetSafeRegex());
|
205
|
+
} else {
|
206
|
+
errors->AddError("invalid string matcher");
|
207
|
+
return StringMatcher();
|
208
|
+
}
|
209
|
+
const bool ignore_case = proto.IgnoreCase();
|
210
|
+
absl::StatusOr<StringMatcher> string_matcher =
|
211
|
+
StringMatcher::Create(type, matcher,
|
212
|
+
/*case_sensitive=*/!ignore_case);
|
213
|
+
if (!string_matcher.ok()) {
|
214
|
+
errors->AddError(string_matcher.status().message());
|
215
|
+
return StringMatcher();
|
216
|
+
}
|
217
|
+
if (type == StringMatcher::Type::kSafeRegex && ignore_case) {
|
218
|
+
ValidationErrors::ScopedField field(errors, ".ignore_case");
|
219
|
+
errors->AddError("not supported for regex matcher");
|
220
|
+
}
|
221
|
+
return std::move(*string_matcher);
|
222
|
+
}
|
223
|
+
|
224
|
+
} // namespace
|
225
|
+
|
226
|
+
StringMatcher StringMatcherParse(
|
227
|
+
const XdsResourceType::DecodeContext& /*context*/,
|
228
|
+
const envoy_type_matcher_v3_StringMatcher* matcher_proto,
|
229
|
+
ValidationErrors* errors) {
|
230
|
+
GRPC_STRING_MATCHER_PROTO_ACCESSOR_CLASS(envoy);
|
231
|
+
ProtoAccessor proto_accessor(matcher_proto);
|
232
|
+
return StringMatcherParseInternal(proto_accessor, errors);
|
233
|
+
}
|
234
|
+
|
235
|
+
StringMatcher StringMatcherParse(
|
236
|
+
const XdsResourceType::DecodeContext& /*context*/,
|
237
|
+
const xds_type_matcher_v3_StringMatcher* matcher_proto,
|
238
|
+
ValidationErrors* errors) {
|
239
|
+
GRPC_STRING_MATCHER_PROTO_ACCESSOR_CLASS(xds);
|
240
|
+
ProtoAccessor proto_accessor(matcher_proto);
|
241
|
+
return StringMatcherParseInternal(proto_accessor, errors);
|
242
|
+
}
|
243
|
+
|
110
244
|
//
|
111
245
|
// CommonTlsContextParse()
|
112
246
|
//
|
@@ -182,56 +316,10 @@ CertificateValidationContextParse(
|
|
182
316
|
for (size_t i = 0; i < len; ++i) {
|
183
317
|
ValidationErrors::ScopedField field(
|
184
318
|
errors, absl::StrCat(".match_subject_alt_names[", i, "]"));
|
185
|
-
|
186
|
-
|
187
|
-
if (envoy_type_matcher_v3_StringMatcher_has_exact(
|
188
|
-
subject_alt_names_matchers[i])) {
|
189
|
-
type = StringMatcher::Type::kExact;
|
190
|
-
matcher = UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_exact(
|
191
|
-
subject_alt_names_matchers[i]));
|
192
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_prefix(
|
193
|
-
subject_alt_names_matchers[i])) {
|
194
|
-
type = StringMatcher::Type::kPrefix;
|
195
|
-
matcher = UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_prefix(
|
196
|
-
subject_alt_names_matchers[i]));
|
197
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_suffix(
|
198
|
-
subject_alt_names_matchers[i])) {
|
199
|
-
type = StringMatcher::Type::kSuffix;
|
200
|
-
matcher = UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_suffix(
|
201
|
-
subject_alt_names_matchers[i]));
|
202
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_contains(
|
203
|
-
subject_alt_names_matchers[i])) {
|
204
|
-
type = StringMatcher::Type::kContains;
|
205
|
-
matcher =
|
206
|
-
UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_contains(
|
207
|
-
subject_alt_names_matchers[i]));
|
208
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_safe_regex(
|
209
|
-
subject_alt_names_matchers[i])) {
|
210
|
-
type = StringMatcher::Type::kSafeRegex;
|
211
|
-
auto* regex_matcher = envoy_type_matcher_v3_StringMatcher_safe_regex(
|
212
|
-
subject_alt_names_matchers[i]);
|
213
|
-
matcher = UpbStringToStdString(
|
214
|
-
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
215
|
-
} else {
|
216
|
-
errors->AddError("invalid StringMatcher specified");
|
217
|
-
continue;
|
218
|
-
}
|
219
|
-
bool ignore_case = envoy_type_matcher_v3_StringMatcher_ignore_case(
|
220
|
-
subject_alt_names_matchers[i]);
|
221
|
-
absl::StatusOr<StringMatcher> string_matcher =
|
222
|
-
StringMatcher::Create(type, matcher,
|
223
|
-
/*case_sensitive=*/!ignore_case);
|
224
|
-
if (!string_matcher.ok()) {
|
225
|
-
errors->AddError(string_matcher.status().message());
|
226
|
-
continue;
|
227
|
-
}
|
228
|
-
if (type == StringMatcher::Type::kSafeRegex && ignore_case) {
|
229
|
-
ValidationErrors::ScopedField field(errors, ".ignore_case");
|
230
|
-
errors->AddError("not supported for regex matcher");
|
231
|
-
continue;
|
232
|
-
}
|
319
|
+
auto string_matcher =
|
320
|
+
StringMatcherParse(context, subject_alt_names_matchers[i], errors);
|
233
321
|
certificate_validation_context.match_subject_alt_names.push_back(
|
234
|
-
std::move(string_matcher
|
322
|
+
std::move(string_matcher));
|
235
323
|
}
|
236
324
|
auto* ca_certificate_provider_instance =
|
237
325
|
envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext_ca_certificate_provider_instance(
|
@@ -21,15 +21,18 @@
|
|
21
21
|
|
22
22
|
#include "envoy/config/core/v3/base.upb.h"
|
23
23
|
#include "envoy/extensions/transport_sockets/tls/v3/tls.upb.h"
|
24
|
+
#include "envoy/type/matcher/v3/string.upb.h"
|
24
25
|
#include "google/protobuf/any.upb.h"
|
25
26
|
#include "google/protobuf/duration.upb.h"
|
26
27
|
#include "google/protobuf/struct.upb.h"
|
27
28
|
#include "google/protobuf/wrappers.upb.h"
|
28
29
|
#include "src/core/lib/iomgr/resolved_address.h"
|
30
|
+
#include "src/core/util/matchers.h"
|
29
31
|
#include "src/core/util/time.h"
|
30
32
|
#include "src/core/util/validation_errors.h"
|
31
33
|
#include "src/core/xds/grpc/xds_common_types.h"
|
32
34
|
#include "src/core/xds/xds_client/xds_resource_type.h"
|
35
|
+
#include "xds/type/matcher/v3/string.upb.h"
|
33
36
|
|
34
37
|
namespace grpc_core {
|
35
38
|
|
@@ -58,6 +61,15 @@ inline std::optional<uint32_t> ParseUInt32Value(
|
|
58
61
|
std::optional<grpc_resolved_address> ParseXdsAddress(
|
59
62
|
const envoy_config_core_v3_Address* address, ValidationErrors* errors);
|
60
63
|
|
64
|
+
StringMatcher StringMatcherParse(
|
65
|
+
const XdsResourceType::DecodeContext& context,
|
66
|
+
const envoy_type_matcher_v3_StringMatcher* matcher_proto,
|
67
|
+
ValidationErrors* errors);
|
68
|
+
StringMatcher StringMatcherParse(
|
69
|
+
const XdsResourceType::DecodeContext& context,
|
70
|
+
const xds_type_matcher_v3_StringMatcher* matcher_proto,
|
71
|
+
ValidationErrors* errors);
|
72
|
+
|
61
73
|
CommonTlsContext CommonTlsContextParse(
|
62
74
|
const XdsResourceType::DecodeContext& context,
|
63
75
|
const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext*
|
@@ -24,6 +24,7 @@
|
|
24
24
|
#include "absl/strings/str_cat.h"
|
25
25
|
#include "absl/strings/string_view.h"
|
26
26
|
#include "src/core/call/interception_chain.h"
|
27
|
+
#include "src/core/filter/blackboard.h"
|
27
28
|
#include "src/core/lib/channel/channel_args.h"
|
28
29
|
#include "src/core/lib/channel/channel_fwd.h"
|
29
30
|
#include "src/core/util/json/json.h"
|
@@ -119,6 +120,12 @@ class XdsHttpFilterImpl {
|
|
119
120
|
virtual absl::StatusOr<ServiceConfigJsonEntry> GenerateServiceConfig(
|
120
121
|
const FilterConfig& hcm_filter_config) const = 0;
|
121
122
|
|
123
|
+
// Adds state to new_blackboard if needed for the specified filter
|
124
|
+
// config. Copies existing state from old_blackboard as appropriate.
|
125
|
+
virtual void UpdateBlackboard(const FilterConfig& /*hcm_filter_config*/,
|
126
|
+
const Blackboard* /*old_blackboard*/,
|
127
|
+
Blackboard* /*new_blackboard*/) const {}
|
128
|
+
|
122
129
|
// Returns true if the filter is supported on clients; false otherwise
|
123
130
|
virtual bool IsSupportedOnClients() const = 0;
|
124
131
|
|
@@ -138,4 +138,26 @@ XdsHttpGcpAuthnFilter::GenerateServiceConfig(
|
|
138
138
|
JsonDump(hcm_filter_config.config)};
|
139
139
|
}
|
140
140
|
|
141
|
+
void XdsHttpGcpAuthnFilter::UpdateBlackboard(
|
142
|
+
const FilterConfig& hcm_filter_config, const Blackboard* old_blackboard,
|
143
|
+
Blackboard* new_blackboard) const {
|
144
|
+
ValidationErrors errors;
|
145
|
+
auto config = LoadFromJson<GcpAuthenticationParsedConfig::Config>(
|
146
|
+
hcm_filter_config.config, JsonArgs(), &errors);
|
147
|
+
CHECK(errors.ok()) << errors.message("filter config validation failed");
|
148
|
+
RefCountedPtr<GcpAuthenticationFilter::CallCredentialsCache> cache;
|
149
|
+
if (old_blackboard != nullptr) {
|
150
|
+
cache = old_blackboard->Get<GcpAuthenticationFilter::CallCredentialsCache>(
|
151
|
+
config.filter_instance_name);
|
152
|
+
}
|
153
|
+
if (cache != nullptr) {
|
154
|
+
cache->SetMaxSize(config.cache_size);
|
155
|
+
} else {
|
156
|
+
cache = MakeRefCounted<GcpAuthenticationFilter::CallCredentialsCache>(
|
157
|
+
config.cache_size);
|
158
|
+
}
|
159
|
+
CHECK_NE(new_blackboard, nullptr);
|
160
|
+
new_blackboard->Set(config.filter_instance_name, std::move(cache));
|
161
|
+
}
|
162
|
+
|
141
163
|
} // namespace grpc_core
|
@@ -52,6 +52,9 @@ class XdsHttpGcpAuthnFilter final : public XdsHttpFilterImpl {
|
|
52
52
|
const FilterConfig* filter_config_override) const override;
|
53
53
|
absl::StatusOr<ServiceConfigJsonEntry> GenerateServiceConfig(
|
54
54
|
const FilterConfig& hcm_filter_config) const override;
|
55
|
+
void UpdateBlackboard(const FilterConfig& hcm_filter_config,
|
56
|
+
const Blackboard* old_blackboard,
|
57
|
+
Blackboard* new_blackboard) const override;
|
55
58
|
bool IsSupportedOnClients() const override { return true; }
|
56
59
|
bool IsSupportedOnServers() const override { return false; }
|
57
60
|
};
|
@@ -237,7 +237,8 @@ std::optional<StringMatcher> RoutePathMatchParse(
|
|
237
237
|
return std::move(*string_matcher);
|
238
238
|
}
|
239
239
|
|
240
|
-
void RouteHeaderMatchersParse(const
|
240
|
+
void RouteHeaderMatchersParse(const XdsResourceType::DecodeContext& context,
|
241
|
+
const envoy_config_route_v3_RouteMatch* match,
|
241
242
|
XdsRouteConfigResource::Route* route,
|
242
243
|
ValidationErrors* errors) {
|
243
244
|
size_t size;
|
@@ -250,6 +251,18 @@ void RouteHeaderMatchersParse(const envoy_config_route_v3_RouteMatch* match,
|
|
250
251
|
CHECK_NE(header, nullptr);
|
251
252
|
const std::string name =
|
252
253
|
UpbStringToStdString(envoy_config_route_v3_HeaderMatcher_name(header));
|
254
|
+
const bool invert_match =
|
255
|
+
envoy_config_route_v3_HeaderMatcher_invert_match(header);
|
256
|
+
if (envoy_config_route_v3_HeaderMatcher_has_string_match(header)) {
|
257
|
+
ValidationErrors::ScopedField field(errors, ".string_match");
|
258
|
+
auto string_matcher = StringMatcherParse(
|
259
|
+
context, envoy_config_route_v3_HeaderMatcher_string_match(header),
|
260
|
+
errors);
|
261
|
+
route->matchers.header_matchers.emplace_back(
|
262
|
+
HeaderMatcher::CreateFromStringMatcher(
|
263
|
+
name, std::move(string_matcher), invert_match));
|
264
|
+
continue;
|
265
|
+
}
|
253
266
|
HeaderMatcher::Type type;
|
254
267
|
std::string match_string;
|
255
268
|
int64_t range_start = 0;
|
@@ -290,46 +303,10 @@ void RouteHeaderMatchersParse(const envoy_config_route_v3_RouteMatch* match,
|
|
290
303
|
} else if (envoy_config_route_v3_HeaderMatcher_has_present_match(header)) {
|
291
304
|
type = HeaderMatcher::Type::kPresent;
|
292
305
|
present_match = envoy_config_route_v3_HeaderMatcher_present_match(header);
|
293
|
-
} else if (envoy_config_route_v3_HeaderMatcher_has_string_match(header)) {
|
294
|
-
ValidationErrors::ScopedField field(errors, ".string_match");
|
295
|
-
const auto* matcher =
|
296
|
-
envoy_config_route_v3_HeaderMatcher_string_match(header);
|
297
|
-
CHECK_NE(matcher, nullptr);
|
298
|
-
if (envoy_type_matcher_v3_StringMatcher_has_exact(matcher)) {
|
299
|
-
type = HeaderMatcher::Type::kExact;
|
300
|
-
match_string = UpbStringToStdString(
|
301
|
-
envoy_type_matcher_v3_StringMatcher_exact(matcher));
|
302
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_prefix(matcher)) {
|
303
|
-
type = HeaderMatcher::Type::kPrefix;
|
304
|
-
match_string = UpbStringToStdString(
|
305
|
-
envoy_type_matcher_v3_StringMatcher_prefix(matcher));
|
306
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_suffix(matcher)) {
|
307
|
-
type = HeaderMatcher::Type::kSuffix;
|
308
|
-
match_string = UpbStringToStdString(
|
309
|
-
envoy_type_matcher_v3_StringMatcher_suffix(matcher));
|
310
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_contains(matcher)) {
|
311
|
-
type = HeaderMatcher::Type::kContains;
|
312
|
-
match_string = UpbStringToStdString(
|
313
|
-
envoy_type_matcher_v3_StringMatcher_contains(matcher));
|
314
|
-
} else if (envoy_type_matcher_v3_StringMatcher_has_safe_regex(matcher)) {
|
315
|
-
type = HeaderMatcher::Type::kSafeRegex;
|
316
|
-
const auto* regex_matcher =
|
317
|
-
envoy_type_matcher_v3_StringMatcher_safe_regex(matcher);
|
318
|
-
CHECK_NE(regex_matcher, nullptr);
|
319
|
-
match_string = UpbStringToStdString(
|
320
|
-
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
321
|
-
} else {
|
322
|
-
errors->AddError("invalid string matcher");
|
323
|
-
continue;
|
324
|
-
}
|
325
|
-
case_sensitive =
|
326
|
-
!envoy_type_matcher_v3_StringMatcher_ignore_case(matcher);
|
327
306
|
} else {
|
328
307
|
errors->AddError("invalid header matcher");
|
329
308
|
continue;
|
330
309
|
}
|
331
|
-
bool invert_match =
|
332
|
-
envoy_config_route_v3_HeaderMatcher_invert_match(header);
|
333
310
|
absl::StatusOr<HeaderMatcher> header_matcher =
|
334
311
|
HeaderMatcher::Create(name, type, match_string, range_start, range_end,
|
335
312
|
present_match, invert_match, case_sensitive);
|
@@ -746,7 +723,7 @@ std::optional<XdsRouteConfigResource::Route> ParseRoute(
|
|
746
723
|
auto path_matcher = RoutePathMatchParse(match, errors);
|
747
724
|
if (!path_matcher.has_value()) return std::nullopt;
|
748
725
|
route.matchers.path_matcher = std::move(*path_matcher);
|
749
|
-
RouteHeaderMatchersParse(match, &route, errors);
|
726
|
+
RouteHeaderMatchersParse(context, match, &route, errors);
|
750
727
|
RouteRuntimeFractionParse(match, &route, errors);
|
751
728
|
}
|
752
729
|
// Parse route action.
|
@@ -27,6 +27,7 @@
|
|
27
27
|
#include "absl/strings/string_view.h"
|
28
28
|
#include "src/core/config/core_configuration.h"
|
29
29
|
#include "src/core/util/down_cast.h"
|
30
|
+
#include "src/core/util/env.h"
|
30
31
|
#include "src/core/util/json/json_reader.h"
|
31
32
|
#include "src/core/util/json/json_writer.h"
|
32
33
|
|
@@ -82,29 +83,40 @@ const JsonLoaderInterface* GrpcXdsServer::JsonLoader(const JsonArgs&) {
|
|
82
83
|
|
83
84
|
namespace {
|
84
85
|
|
85
|
-
struct
|
86
|
+
struct ChannelOrCallCreds {
|
86
87
|
std::string type;
|
87
88
|
Json::Object config;
|
88
89
|
|
89
90
|
static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
|
90
91
|
static const auto* loader =
|
91
|
-
JsonObjectLoader<
|
92
|
-
.Field("type", &
|
93
|
-
.OptionalField("config", &
|
92
|
+
JsonObjectLoader<ChannelOrCallCreds>()
|
93
|
+
.Field("type", &ChannelOrCallCreds::type)
|
94
|
+
.OptionalField("config", &ChannelOrCallCreds::config)
|
94
95
|
.Finish();
|
95
96
|
return loader;
|
96
97
|
}
|
97
98
|
};
|
98
99
|
|
100
|
+
// TODO(roth): Remove this guard once we have reports from OSS Istio
|
101
|
+
// users that this works properly.
|
102
|
+
bool XdsBootstrapCallCredsEnabled() {
|
103
|
+
auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_BOOTSTRAP_CALL_CREDS");
|
104
|
+
if (!value.has_value()) return false;
|
105
|
+
bool parsed_value;
|
106
|
+
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
107
|
+
return parse_succeeded && parsed_value;
|
108
|
+
}
|
109
|
+
|
99
110
|
} // namespace
|
100
111
|
|
101
112
|
void GrpcXdsServer::JsonPostLoad(const Json& json, const JsonArgs& args,
|
102
113
|
ValidationErrors* errors) {
|
114
|
+
// Parse "channel_creds".
|
103
115
|
RefCountedPtr<ChannelCredsConfig> channel_creds_config;
|
104
116
|
{
|
105
|
-
|
106
|
-
|
107
|
-
|
117
|
+
auto channel_creds_list =
|
118
|
+
LoadJsonObjectField<std::vector<ChannelOrCallCreds>>(
|
119
|
+
json.object(), args, "channel_creds", errors);
|
108
120
|
if (channel_creds_list.has_value()) {
|
109
121
|
ValidationErrors::ScopedField field(errors, ".channel_creds");
|
110
122
|
for (size_t i = 0; i < channel_creds_list->size(); ++i) {
|
@@ -128,6 +140,26 @@ void GrpcXdsServer::JsonPostLoad(const Json& json, const JsonArgs& args,
|
|
128
140
|
}
|
129
141
|
}
|
130
142
|
}
|
143
|
+
// Parse "call_creds".
|
144
|
+
std::vector<RefCountedPtr<CallCredsConfig>> call_creds_configs;
|
145
|
+
if (XdsBootstrapCallCredsEnabled()) {
|
146
|
+
auto call_creds_list = LoadJsonObjectField<std::vector<ChannelOrCallCreds>>(
|
147
|
+
json.object(), args, "call_creds", errors);
|
148
|
+
if (call_creds_list.has_value()) {
|
149
|
+
ValidationErrors::ScopedField field(errors, ".call_creds");
|
150
|
+
for (size_t i = 0; i < call_creds_list->size(); ++i) {
|
151
|
+
ValidationErrors::ScopedField field(errors, absl::StrCat("[", i, "]"));
|
152
|
+
auto& creds = (*call_creds_list)[i];
|
153
|
+
if (CoreConfiguration::Get().call_creds_registry().IsSupported(
|
154
|
+
creds.type)) {
|
155
|
+
ValidationErrors::ScopedField field(errors, ".config");
|
156
|
+
call_creds_configs.push_back(
|
157
|
+
CoreConfiguration::Get().call_creds_registry().ParseConfig(
|
158
|
+
creds.type, Json::FromObject(creds.config), args, errors));
|
159
|
+
}
|
160
|
+
}
|
161
|
+
}
|
162
|
+
}
|
131
163
|
// Parse "server_features".
|
132
164
|
{
|
133
165
|
ValidationErrors::ScopedField field(errors, ".server_features");
|
@@ -155,7 +187,8 @@ void GrpcXdsServer::JsonPostLoad(const Json& json, const JsonArgs& args,
|
|
155
187
|
json.object(), args, "server_uri", errors)
|
156
188
|
.value_or("");
|
157
189
|
server_target_ = std::make_shared<GrpcXdsServerTarget>(
|
158
|
-
std::move(server_uri_target), std::move(channel_creds_config)
|
190
|
+
std::move(server_uri_target), std::move(channel_creds_config),
|
191
|
+
std::move(call_creds_configs));
|
159
192
|
}
|
160
193
|
|
161
194
|
std::string GrpcXdsServer::Key() const {
|
@@ -175,9 +208,14 @@ std::string GrpcXdsServerTarget::Key() const {
|
|
175
208
|
parts.push_back("{");
|
176
209
|
parts.push_back(absl::StrCat("server_uri=", server_uri_));
|
177
210
|
if (channel_creds_config_ != nullptr) {
|
178
|
-
parts.push_back(absl::StrCat("creds_type=", channel_creds_config_->type()));
|
179
211
|
parts.push_back(
|
180
|
-
absl::StrCat("
|
212
|
+
absl::StrCat("channel_creds={type=", channel_creds_config_->type(),
|
213
|
+
", config=", channel_creds_config_->ToString(), "}"));
|
214
|
+
}
|
215
|
+
for (const auto& call_creds_config : call_creds_configs_) {
|
216
|
+
parts.push_back(absl::StrCat("call_creds={type=", call_creds_config->type(),
|
217
|
+
", config=", call_creds_config->ToString(),
|
218
|
+
"}"));
|
181
219
|
}
|
182
220
|
parts.push_back("}");
|
183
221
|
return absl::StrJoin(parts, ",");
|
@@ -185,9 +223,21 @@ std::string GrpcXdsServerTarget::Key() const {
|
|
185
223
|
|
186
224
|
bool GrpcXdsServerTarget::Equals(const XdsServerTarget& other) const {
|
187
225
|
const auto& o = DownCast<const GrpcXdsServerTarget&>(other);
|
188
|
-
|
189
|
-
|
190
|
-
|
226
|
+
if (server_uri_ != o.server_uri_) return false;
|
227
|
+
if (channel_creds_config_->type() != o.channel_creds_config_->type() ||
|
228
|
+
!channel_creds_config_->Equals(*o.channel_creds_config_)) {
|
229
|
+
return false;
|
230
|
+
}
|
231
|
+
if (call_creds_configs_.size() != o.call_creds_configs_.size()) {
|
232
|
+
return false;
|
233
|
+
}
|
234
|
+
for (size_t i = 0; i < call_creds_configs_.size(); ++i) {
|
235
|
+
if (call_creds_configs_[i]->type() != o.call_creds_configs_[i]->type() ||
|
236
|
+
!call_creds_configs_[i]->Equals(*o.call_creds_configs_[i])) {
|
237
|
+
return false;
|
238
|
+
}
|
239
|
+
}
|
240
|
+
return true;
|
191
241
|
}
|
192
242
|
|
193
243
|
} // namespace grpc_core
|