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
@@ -51,6 +51,7 @@
|
|
51
51
|
#include "src/core/client_channel/client_channel_internal.h"
|
52
52
|
#include "src/core/client_channel/config_selector.h"
|
53
53
|
#include "src/core/config/core_configuration.h"
|
54
|
+
#include "src/core/filter/blackboard.h"
|
54
55
|
#include "src/core/lib/channel/channel_args.h"
|
55
56
|
#include "src/core/lib/channel/channel_fwd.h"
|
56
57
|
#include "src/core/lib/channel/channel_stack.h"
|
@@ -274,12 +275,16 @@ class XdsResolver final : public Resolver {
|
|
274
275
|
|
275
276
|
absl::Status GetCallConfig(GetCallConfigArgs args) override;
|
276
277
|
|
277
|
-
void AddFilters(InterceptionChainBuilder& builder
|
278
|
+
void AddFilters(InterceptionChainBuilder& builder,
|
279
|
+
const Blackboard* old_blackboard,
|
280
|
+
Blackboard* new_blackboard) override;
|
278
281
|
|
279
|
-
std::vector<const grpc_channel_filter*> GetFilters(
|
282
|
+
std::vector<const grpc_channel_filter*> GetFilters(
|
283
|
+
const Blackboard* old_blackboard, Blackboard* new_blackboard) override;
|
280
284
|
|
281
285
|
private:
|
282
286
|
RefCountedPtr<XdsResolver> resolver_;
|
287
|
+
std::shared_ptr<const XdsListenerResource> listener_;
|
283
288
|
RefCountedPtr<RouteConfigData> route_config_data_;
|
284
289
|
std::vector<const XdsHttpFilterImpl*> filters_;
|
285
290
|
};
|
@@ -517,7 +522,7 @@ absl::Status XdsResolver::RouteConfigData::AddRouteEntry(
|
|
517
522
|
XdsResolver* resolver, const XdsRouteConfigResource::Route& route,
|
518
523
|
const Duration& default_max_stream_duration) {
|
519
524
|
GRPC_TRACE_LOG(xds_resolver, INFO)
|
520
|
-
<< "[xds_resolver " << resolver << "]
|
525
|
+
<< "[xds_resolver " << resolver << "] RouteConfigData " << this
|
521
526
|
<< ": route: " << route.ToString();
|
522
527
|
routes_.emplace_back(route);
|
523
528
|
auto* route_entry = &routes_.back();
|
@@ -606,18 +611,19 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
606
611
|
RefCountedPtr<XdsResolver> resolver,
|
607
612
|
RefCountedPtr<RouteConfigData> route_config_data)
|
608
613
|
: resolver_(std::move(resolver)),
|
614
|
+
listener_(resolver_->current_config_->listener),
|
609
615
|
route_config_data_(std::move(route_config_data)) {
|
610
616
|
GRPC_TRACE_LOG(xds_resolver, INFO) << "[xds_resolver " << resolver_.get()
|
611
617
|
<< "] creating XdsConfigSelector " << this;
|
612
618
|
// Populate filter list.
|
613
619
|
const auto& http_filter_registry =
|
614
|
-
|
620
|
+
DownCast<const GrpcXdsBootstrap&>(resolver_->xds_client_->bootstrap())
|
615
621
|
.http_filter_registry();
|
616
|
-
const auto& hcm =
|
617
|
-
|
622
|
+
const auto& hcm =
|
623
|
+
std::get<XdsListenerResource::HttpConnectionManager>(listener_->listener);
|
618
624
|
for (const auto& http_filter : hcm.http_filters) {
|
619
625
|
// Find filter. This is guaranteed to succeed, because it's checked
|
620
|
-
// at config validation time
|
626
|
+
// at config validation time.
|
621
627
|
const XdsHttpFilterImpl* filter_impl =
|
622
628
|
http_filter_registry.GetFilterForType(
|
623
629
|
http_filter.config.config_proto_type_name);
|
@@ -771,20 +777,34 @@ absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
771
777
|
}
|
772
778
|
|
773
779
|
void XdsResolver::XdsConfigSelector::AddFilters(
|
774
|
-
InterceptionChainBuilder& builder
|
775
|
-
|
780
|
+
InterceptionChainBuilder& builder, const Blackboard* old_blackboard,
|
781
|
+
Blackboard* new_blackboard) {
|
782
|
+
const auto& hcm =
|
783
|
+
std::get<XdsListenerResource::HttpConnectionManager>(listener_->listener);
|
784
|
+
CHECK_EQ(filters_.size(), hcm.http_filters.size());
|
785
|
+
for (size_t i = 0; i < filters_.size(); ++i) {
|
786
|
+
auto* filter = filters_[i];
|
776
787
|
filter->AddFilter(builder);
|
788
|
+
filter->UpdateBlackboard(hcm.http_filters[i].config, old_blackboard,
|
789
|
+
new_blackboard);
|
777
790
|
}
|
778
791
|
builder.Add<ClusterSelectionFilter>();
|
779
792
|
}
|
780
793
|
|
781
794
|
std::vector<const grpc_channel_filter*>
|
782
|
-
XdsResolver::XdsConfigSelector::GetFilters(
|
795
|
+
XdsResolver::XdsConfigSelector::GetFilters(const Blackboard* old_blackboard,
|
796
|
+
Blackboard* new_blackboard) {
|
797
|
+
const auto& hcm =
|
798
|
+
std::get<XdsListenerResource::HttpConnectionManager>(listener_->listener);
|
799
|
+
CHECK_EQ(filters_.size(), hcm.http_filters.size());
|
783
800
|
std::vector<const grpc_channel_filter*> filters;
|
784
|
-
for (
|
801
|
+
for (size_t i = 0; i < filters_.size(); ++i) {
|
802
|
+
auto* filter = filters_[i];
|
785
803
|
if (filter->channel_filter() != nullptr) {
|
786
804
|
filters.push_back(filter->channel_filter());
|
787
805
|
}
|
806
|
+
filter->UpdateBlackboard(hcm.http_filters[i].config, old_blackboard,
|
807
|
+
new_blackboard);
|
788
808
|
}
|
789
809
|
filters.push_back(&ClusterSelectionFilter::kFilter);
|
790
810
|
return filters;
|
data/src/core/server/server.cc
CHANGED
@@ -48,6 +48,7 @@
|
|
48
48
|
#include "src/core/call/server_call.h"
|
49
49
|
#include "src/core/channelz/channel_trace.h"
|
50
50
|
#include "src/core/channelz/channelz.h"
|
51
|
+
#include "src/core/channelz/property_list.h"
|
51
52
|
#include "src/core/config/core_configuration.h"
|
52
53
|
#include "src/core/credentials/transport/transport_credentials.h"
|
53
54
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
@@ -105,6 +106,16 @@ void Server::ListenerState::ConfigFetcherWatcher::UpdateConnectionManager(
|
|
105
106
|
if (listener_state_->server_->ShutdownCalled()) {
|
106
107
|
return;
|
107
108
|
}
|
109
|
+
RefCountedPtr<Blackboard> new_blackboard;
|
110
|
+
for (auto& blackboard_shard : listener_state_->blackboards_) {
|
111
|
+
MutexLock lock(&blackboard_shard.mu);
|
112
|
+
if (new_blackboard == nullptr) {
|
113
|
+
new_blackboard = MakeRefCounted<Blackboard>();
|
114
|
+
listener_state_->connection_manager_->UpdateBlackboard(
|
115
|
+
blackboard_shard.blackboard.get(), new_blackboard.get());
|
116
|
+
}
|
117
|
+
blackboard_shard.blackboard = new_blackboard;
|
118
|
+
}
|
108
119
|
listener_state_->is_serving_ = true;
|
109
120
|
if (listener_state_->started_) return;
|
110
121
|
listener_state_->started_ = true;
|
@@ -131,7 +142,8 @@ Server::ListenerState::ListenerState(RefCountedPtr<Server> server,
|
|
131
142
|
event_engine_(
|
132
143
|
server_->channel_args()
|
133
144
|
.GetObject<grpc_event_engine::experimental::EventEngine>()),
|
134
|
-
listener_(std::move(l))
|
145
|
+
listener_(std::move(l)),
|
146
|
+
blackboards_(PerCpuOptions().SetMaxShards(16)) {
|
135
147
|
auto max_allowed_incoming_connections =
|
136
148
|
server_->channel_args().GetInt(GRPC_ARG_MAX_ALLOWED_INCOMING_CONNECTIONS);
|
137
149
|
if (max_allowed_incoming_connections.has_value()) {
|
@@ -277,6 +289,19 @@ void Server::ListenerState::RemoveLogicalConnection(
|
|
277
289
|
}
|
278
290
|
}
|
279
291
|
|
292
|
+
grpc_error_handle Server::ListenerState::SetupTransport(
|
293
|
+
Transport* transport, grpc_pollset* accepting_pollset,
|
294
|
+
const ChannelArgs& args) {
|
295
|
+
RefCountedPtr<Blackboard> blackboard;
|
296
|
+
{
|
297
|
+
auto& blackboard_shard = blackboards_.this_cpu();
|
298
|
+
MutexLock lock(&blackboard_shard.mu);
|
299
|
+
blackboard = blackboard_shard.blackboard;
|
300
|
+
}
|
301
|
+
return server_->SetupTransport(transport, accepting_pollset, args,
|
302
|
+
blackboard.get());
|
303
|
+
}
|
304
|
+
|
280
305
|
void Server::ListenerState::DrainConnectionsLocked() {
|
281
306
|
if (connections_.empty()) {
|
282
307
|
return;
|
@@ -1060,9 +1085,7 @@ RefCountedPtr<channelz::ServerNode> CreateChannelzNode(
|
|
1060
1085
|
.value_or(GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT));
|
1061
1086
|
channelz_node =
|
1062
1087
|
MakeRefCounted<channelz::ServerNode>(channel_tracer_max_memory);
|
1063
|
-
channelz_node
|
1064
|
-
channelz::ChannelTrace::Severity::Info,
|
1065
|
-
grpc_slice_from_static_string("Server created"));
|
1088
|
+
GRPC_CHANNELZ_LOG(channelz_node) << "Server created";
|
1066
1089
|
channelz_node->SetChannelArgs(args);
|
1067
1090
|
}
|
1068
1091
|
return channelz_node;
|
@@ -1151,8 +1174,9 @@ auto Server::MatchAndPublishCall(CallHandler call_handler) {
|
|
1151
1174
|
}
|
1152
1175
|
|
1153
1176
|
absl::StatusOr<RefCountedPtr<UnstartedCallDestination>>
|
1154
|
-
Server::MakeCallDestination(const ChannelArgs& args
|
1155
|
-
|
1177
|
+
Server::MakeCallDestination(const ChannelArgs& args,
|
1178
|
+
const Blackboard* blackboard) {
|
1179
|
+
InterceptionChainBuilder builder(args, blackboard);
|
1156
1180
|
// TODO(ctiller): find a way to avoid adding a server ref per call
|
1157
1181
|
builder.AddOnClientInitialMetadata([self = Ref()](ClientMetadata& md) {
|
1158
1182
|
self->SetRegisteredMethodOnMetadata(md);
|
@@ -1166,16 +1190,23 @@ Server::MakeCallDestination(const ChannelArgs& args) {
|
|
1166
1190
|
}
|
1167
1191
|
|
1168
1192
|
Server::Server(const ChannelArgs& args)
|
1169
|
-
:
|
1170
|
-
|
1193
|
+
: channelz::DataSource(CreateChannelzNode(args)),
|
1194
|
+
channel_args_(args),
|
1195
|
+
channelz_node_(channelz::DataSource::channelz_node() == nullptr
|
1196
|
+
? nullptr
|
1197
|
+
: channelz::DataSource::channelz_node()
|
1198
|
+
->RefAsSubclass<channelz::ServerNode>()),
|
1171
1199
|
server_call_tracer_factory_(ServerCallTracerFactory::Get(args)),
|
1172
1200
|
compression_options_(CompressionOptionsFromChannelArgs(args)),
|
1173
1201
|
max_time_in_pending_queue_(Duration::Seconds(
|
1174
1202
|
channel_args_
|
1175
1203
|
.GetInt(GRPC_ARG_SERVER_MAX_UNREQUESTED_TIME_IN_SERVER_SECONDS)
|
1176
|
-
.value_or(30))) {
|
1204
|
+
.value_or(30))) {
|
1205
|
+
SourceConstructed();
|
1206
|
+
}
|
1177
1207
|
|
1178
1208
|
Server::~Server() {
|
1209
|
+
SourceDestructing();
|
1179
1210
|
// Remove the cq pollsets from the config_fetcher.
|
1180
1211
|
if (started_ && config_fetcher_ != nullptr &&
|
1181
1212
|
config_fetcher_->interested_parties() != nullptr) {
|
@@ -1189,6 +1220,44 @@ Server::~Server() {
|
|
1189
1220
|
}
|
1190
1221
|
}
|
1191
1222
|
|
1223
|
+
void Server::AddData(channelz::DataSink sink) {
|
1224
|
+
MutexLock global_lock(&mu_global_);
|
1225
|
+
sink.AddData(
|
1226
|
+
"server",
|
1227
|
+
channelz::PropertyList()
|
1228
|
+
// TODO(ctiller): config_fetcher?
|
1229
|
+
// TODO(ctiller): server_call_tracer_factory?
|
1230
|
+
// TODO(ctiller): compression_options?
|
1231
|
+
// TODO(ctiller): unregistered_request_matcher?
|
1232
|
+
// TODO(ctiller): connection_manager?
|
1233
|
+
.Set("registered_cqs", cqs_.size())
|
1234
|
+
.Set("pollsets", pollsets_.size())
|
1235
|
+
.Set("started", started_)
|
1236
|
+
.Set("starting", starting_)
|
1237
|
+
.Set("registered_methods",
|
1238
|
+
[this]() {
|
1239
|
+
channelz::PropertyGrid grid;
|
1240
|
+
for (auto& [host_method, rm] : registered_methods_) {
|
1241
|
+
grid.Set("host", host_method.second, host_method.first)
|
1242
|
+
.Set("payload_handling", host_method.second,
|
1243
|
+
rm->payload_handling ==
|
1244
|
+
GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER
|
1245
|
+
? "READ_INITIAL_BYTE_BUFFER"
|
1246
|
+
: "PAYLOAD_NONE");
|
1247
|
+
}
|
1248
|
+
return grid;
|
1249
|
+
}())
|
1250
|
+
.Set("shutdown_refs", shutdown_refs_.load(std::memory_order_relaxed))
|
1251
|
+
.Set("shutdown_published", shutdown_published_)
|
1252
|
+
.Set("num_shutdown_tags", shutdown_tags_.size())
|
1253
|
+
.Set("max_time_in_pending_queue", max_time_in_pending_queue_)
|
1254
|
+
.Set("num_channels", channels_.size())
|
1255
|
+
.Set("num_connections", connections_.size())
|
1256
|
+
.Set("connections_open", connections_open_)
|
1257
|
+
.Set("num_listener_states", listener_states_.size())
|
1258
|
+
.Set("listeners_destroyed", listeners_destroyed_));
|
1259
|
+
}
|
1260
|
+
|
1192
1261
|
void Server::AddListener(OrphanablePtr<ListenerInterface> listener) {
|
1193
1262
|
channelz::ListenSocketNode* listen_socket_node =
|
1194
1263
|
listener->channelz_listen_socket_node();
|
@@ -1240,7 +1309,8 @@ void Server::Start() {
|
|
1240
1309
|
|
1241
1310
|
grpc_error_handle Server::SetupTransport(Transport* transport,
|
1242
1311
|
grpc_pollset* accepting_pollset,
|
1243
|
-
const ChannelArgs& args
|
1312
|
+
const ChannelArgs& args,
|
1313
|
+
const Blackboard* blackboard) {
|
1244
1314
|
GRPC_LATENT_SEE_INNER_SCOPE("Server::SetupTransport");
|
1245
1315
|
// Create channel.
|
1246
1316
|
global_stats().IncrementServerChannelsCreated();
|
@@ -1252,7 +1322,8 @@ grpc_error_handle Server::SetupTransport(Transport* transport,
|
|
1252
1322
|
OrphanablePtr<ServerTransport> t(transport->server_transport());
|
1253
1323
|
auto destination = MakeCallDestination(
|
1254
1324
|
args.SetObject(transport).SetObject<channelz::BaseNode>(
|
1255
|
-
transport->GetSocketNode())
|
1325
|
+
transport->GetSocketNode()),
|
1326
|
+
blackboard);
|
1256
1327
|
if (!destination.ok()) {
|
1257
1328
|
return absl_status_to_grpc_error(destination.status());
|
1258
1329
|
}
|
@@ -1275,7 +1346,7 @@ grpc_error_handle Server::SetupTransport(Transport* transport,
|
|
1275
1346
|
"",
|
1276
1347
|
args.SetObject(transport).SetObject<channelz::BaseNode>(
|
1277
1348
|
transport->GetSocketNode()),
|
1278
|
-
GRPC_SERVER_CHANNEL);
|
1349
|
+
GRPC_SERVER_CHANNEL, blackboard);
|
1279
1350
|
if (!channel.ok()) {
|
1280
1351
|
return absl_status_to_grpc_error(channel.status());
|
1281
1352
|
}
|
data/src/core/server/server.h
CHANGED
@@ -45,6 +45,7 @@
|
|
45
45
|
#include "absl/strings/string_view.h"
|
46
46
|
#include "src/core/call/metadata_batch.h"
|
47
47
|
#include "src/core/channelz/channelz.h"
|
48
|
+
#include "src/core/filter/blackboard.h"
|
48
49
|
#include "src/core/lib/channel/channel_args.h"
|
49
50
|
#include "src/core/lib/channel/channel_fwd.h"
|
50
51
|
#include "src/core/lib/channel/channel_stack.h"
|
@@ -66,6 +67,7 @@
|
|
66
67
|
#include "src/core/util/cpp_impl_of.h"
|
67
68
|
#include "src/core/util/dual_ref_counted.h"
|
68
69
|
#include "src/core/util/orphanable.h"
|
70
|
+
#include "src/core/util/per_cpu.h"
|
69
71
|
#include "src/core/util/random_early_detection.h"
|
70
72
|
#include "src/core/util/ref_counted_ptr.h"
|
71
73
|
#include "src/core/util/sync.h"
|
@@ -86,6 +88,9 @@ class ServerConfigFetcher
|
|
86
88
|
virtual absl::StatusOr<grpc_core::ChannelArgs>
|
87
89
|
UpdateChannelArgsForConnection(const grpc_core::ChannelArgs& args,
|
88
90
|
grpc_endpoint* tcp) = 0;
|
91
|
+
|
92
|
+
virtual void UpdateBlackboard(const Blackboard* old_blackboard,
|
93
|
+
Blackboard* new_blackboard) = 0;
|
89
94
|
};
|
90
95
|
|
91
96
|
class WatcherInterface {
|
@@ -120,6 +125,7 @@ class ListenerStateTestPeer;
|
|
120
125
|
|
121
126
|
class Server : public ServerInterface,
|
122
127
|
public InternallyRefCounted<Server>,
|
128
|
+
public channelz::DataSource,
|
123
129
|
public CppImplOf<Server, grpc_server> {
|
124
130
|
public:
|
125
131
|
// Filter vtable.
|
@@ -246,6 +252,10 @@ class Server : public ServerInterface,
|
|
246
252
|
void RemoveLogicalConnection(
|
247
253
|
ListenerInterface::LogicalConnection* connection);
|
248
254
|
|
255
|
+
grpc_error_handle SetupTransport(Transport* transport,
|
256
|
+
grpc_pollset* accepting_pollset,
|
257
|
+
const ChannelArgs& args);
|
258
|
+
|
249
259
|
const MemoryQuotaRefPtr& memory_quota() const { return memory_quota_; }
|
250
260
|
|
251
261
|
const ConnectionQuotaRefPtr& connection_quota() const {
|
@@ -282,6 +292,11 @@ class Server : public ServerInterface,
|
|
282
292
|
grpc_core::Timestamp timestamp;
|
283
293
|
};
|
284
294
|
|
295
|
+
struct BlackboardShard {
|
296
|
+
Mutex mu;
|
297
|
+
RefCountedPtr<Blackboard> blackboard ABSL_GUARDED_BY(&mu);
|
298
|
+
};
|
299
|
+
|
285
300
|
void DrainConnectionsLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
286
301
|
|
287
302
|
void OnDrainGraceTimer();
|
@@ -299,6 +314,7 @@ class Server : public ServerInterface,
|
|
299
314
|
OrphanablePtr<ListenerInterface> listener_;
|
300
315
|
grpc_closure destroy_done_;
|
301
316
|
ConfigFetcherWatcher* config_fetcher_watcher_ = nullptr;
|
317
|
+
PerCpu<BlackboardShard> blackboards_;
|
302
318
|
Mutex mu_; // We could share this mutex with Listener implementations. It's
|
303
319
|
// a tradeoff between increased memory requirement and more
|
304
320
|
// granular critical regions.
|
@@ -318,6 +334,8 @@ class Server : public ServerInterface,
|
|
318
334
|
explicit Server(const ChannelArgs& args);
|
319
335
|
~Server() override;
|
320
336
|
|
337
|
+
void AddData(channelz::DataSink sink) override;
|
338
|
+
|
321
339
|
void Orphan() ABSL_LOCKS_EXCLUDED(mu_global_) override;
|
322
340
|
|
323
341
|
const ChannelArgs& channel_args() const override { return channel_args_; }
|
@@ -355,7 +373,8 @@ class Server : public ServerInterface,
|
|
355
373
|
// Takes ownership of a ref on resource_user from the caller.
|
356
374
|
grpc_error_handle SetupTransport(Transport* transport,
|
357
375
|
grpc_pollset* accepting_pollset,
|
358
|
-
const ChannelArgs& args
|
376
|
+
const ChannelArgs& args,
|
377
|
+
const Blackboard* blackboard = nullptr)
|
359
378
|
ABSL_LOCKS_EXCLUDED(mu_global_);
|
360
379
|
|
361
380
|
void RegisterCompletionQueue(grpc_completion_queue* cq);
|
@@ -641,7 +660,7 @@ class Server : public ServerInterface,
|
|
641
660
|
ClientMetadataHandle md);
|
642
661
|
auto MatchAndPublishCall(CallHandler call_handler);
|
643
662
|
absl::StatusOr<RefCountedPtr<UnstartedCallDestination>> MakeCallDestination(
|
644
|
-
const ChannelArgs& args);
|
663
|
+
const ChannelArgs& args, const Blackboard* blackboard);
|
645
664
|
|
646
665
|
ChannelArgs const channel_args_;
|
647
666
|
RefCountedPtr<channelz::ServerNode> channelz_node_;
|
@@ -70,6 +70,7 @@
|
|
70
70
|
#include "src/core/service_config/service_config.h"
|
71
71
|
#include "src/core/service_config/service_config_impl.h"
|
72
72
|
#include "src/core/util/debug_location.h"
|
73
|
+
#include "src/core/util/down_cast.h"
|
73
74
|
#include "src/core/util/host_port.h"
|
74
75
|
#include "src/core/util/match.h"
|
75
76
|
#include "src/core/util/ref_counted_ptr.h"
|
@@ -210,6 +211,9 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager final
|
|
210
211
|
absl::StatusOr<ChannelArgs> UpdateChannelArgsForConnection(
|
211
212
|
const ChannelArgs& args, grpc_endpoint* tcp) override;
|
212
213
|
|
214
|
+
void UpdateBlackboard(const Blackboard* old_blackboard,
|
215
|
+
Blackboard* new_blackboard) override;
|
216
|
+
|
213
217
|
// Invoked by ListenerWatcher to start fetching referenced RDS resources.
|
214
218
|
void StartRdsWatch(RefCountedPtr<ListenerWatcher> listener_watcher)
|
215
219
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ListenerWatcher::mu_);
|
@@ -248,6 +252,10 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager final
|
|
248
252
|
route_config);
|
249
253
|
void OnAmbientError(const std::string& resource_name, absl::Status status);
|
250
254
|
|
255
|
+
// Executes cb once for each unique filter chain object in the LDS resource.
|
256
|
+
void ForEachFilterChain(
|
257
|
+
absl::FunctionRef<void(XdsListenerResource::FilterChainData&)> cb);
|
258
|
+
|
251
259
|
RefCountedPtr<GrpcXdsClient> xds_client_;
|
252
260
|
// This ref is only kept around till the FilterChainMatchManager becomes
|
253
261
|
// ready.
|
@@ -402,7 +410,7 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
402
410
|
return static_resource_.status();
|
403
411
|
}
|
404
412
|
return XdsServerConfigSelector::Create(
|
405
|
-
|
413
|
+
DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
406
414
|
.http_filter_registry(),
|
407
415
|
static_resource_.value(), http_filters_);
|
408
416
|
}
|
@@ -529,7 +537,7 @@ void XdsServerConfigFetcher::StartWatch(
|
|
529
537
|
XdsListenerResourceType::StartWatch(
|
530
538
|
xds_client_.get(),
|
531
539
|
ListenerResourceName(
|
532
|
-
|
540
|
+
DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
533
541
|
.server_listener_resource_name_template(),
|
534
542
|
listening_address),
|
535
543
|
std::move(listener_watcher));
|
@@ -546,7 +554,7 @@ void XdsServerConfigFetcher::CancelWatch(
|
|
546
554
|
XdsListenerResourceType::CancelWatch(
|
547
555
|
xds_client_.get(),
|
548
556
|
ListenerResourceName(
|
549
|
-
|
557
|
+
DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
550
558
|
.server_listener_resource_name_template(),
|
551
559
|
it->second->listening_address()),
|
552
560
|
it->second, false /* delay_unsubscription */);
|
@@ -685,37 +693,47 @@ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
685
693
|
default_filter_chain_(std::move(default_filter_chain)) {}
|
686
694
|
|
687
695
|
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
688
|
-
|
689
|
-
|
690
|
-
//
|
691
|
-
//
|
692
|
-
|
696
|
+
ForEachFilterChain(
|
697
|
+
absl::FunctionRef<void(XdsListenerResource::FilterChainData&)> cb) {
|
698
|
+
// A given FilterChainData object may appear more than once in the map,
|
699
|
+
// but we want to invoke the callback exactly once for each
|
700
|
+
// FilterChainData object. Therefore, we start by constructing a set
|
701
|
+
// of all FilterChainData objects by address, to weed out duplicates.
|
693
702
|
std::set<XdsListenerResource::FilterChainData*> filter_chain_data_set;
|
694
703
|
for (const auto& destination_ip : filter_chain_map_.destination_ip_vector) {
|
695
704
|
for (const auto& source_type : destination_ip.source_types_array) {
|
696
705
|
for (const auto& source_ip : source_type) {
|
697
706
|
for (const auto& source_port_pair : source_ip.ports_map) {
|
698
707
|
auto* filter_chain_data = source_port_pair.second.data.get();
|
699
|
-
const auto* rds_name = std::get_if<std::string>(
|
700
|
-
&filter_chain_data->http_connection_manager.route_config);
|
701
|
-
if (rds_name != nullptr) resource_names.insert(*rds_name);
|
702
708
|
filter_chain_data_set.insert(filter_chain_data);
|
703
709
|
}
|
704
710
|
}
|
705
711
|
}
|
706
712
|
}
|
707
|
-
|
708
|
-
auto& hcm = default_filter_chain_->http_connection_manager;
|
709
|
-
const auto* rds_name = std::get_if<std::string>(&hcm.route_config);
|
710
|
-
if (rds_name != nullptr) resource_names.insert(*rds_name);
|
711
|
-
std::reverse(hcm.http_filters.begin(), hcm.http_filters.end());
|
712
|
-
}
|
713
|
-
// Reverse the lists of HTTP filters in all the filter chains
|
713
|
+
// Invoke the callback once for each FilterChainData object.
|
714
714
|
for (auto* filter_chain_data : filter_chain_data_set) {
|
715
|
-
|
716
|
-
std::reverse(hcm.http_filters.begin(), hcm.http_filters.end());
|
715
|
+
cb(*filter_chain_data);
|
717
716
|
}
|
718
|
-
//
|
717
|
+
// Also invoke the callback for the default filter chain, if present.
|
718
|
+
if (default_filter_chain_.has_value()) {
|
719
|
+
cb(*default_filter_chain_);
|
720
|
+
}
|
721
|
+
}
|
722
|
+
|
723
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
724
|
+
StartRdsWatch(RefCountedPtr<ListenerWatcher> listener_watcher) {
|
725
|
+
// Get the set of RDS resources to watch on. Also reverse the list of
|
726
|
+
// HTTP filters in each filter chain, since received data moves *up*
|
727
|
+
// the stack on the server side.
|
728
|
+
std::set<std::string> resource_names;
|
729
|
+
ForEachFilterChain(
|
730
|
+
[&](XdsListenerResource::FilterChainData& filter_chain_data) {
|
731
|
+
auto& hcm = filter_chain_data.http_connection_manager;
|
732
|
+
const auto* rds_name = std::get_if<std::string>(&hcm.route_config);
|
733
|
+
if (rds_name != nullptr) resource_names.insert(*rds_name);
|
734
|
+
std::reverse(hcm.http_filters.begin(), hcm.http_filters.end());
|
735
|
+
});
|
736
|
+
// Start watching referenced RDS resources.
|
719
737
|
struct WatcherToStart {
|
720
738
|
std::string resource_name;
|
721
739
|
RefCountedPtr<RouteConfigWatcher> watcher;
|
@@ -1026,7 +1044,7 @@ absl::StatusOr<ChannelArgs> XdsServerConfigFetcher::ListenerWatcher::
|
|
1026
1044
|
// flows *up* the stack.
|
1027
1045
|
std::vector<const grpc_channel_filter*> filters;
|
1028
1046
|
const auto& http_filter_registry =
|
1029
|
-
|
1047
|
+
DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
1030
1048
|
.http_filter_registry();
|
1031
1049
|
for (const auto& http_filter :
|
1032
1050
|
filter_chain->http_connection_manager.http_filters) {
|
@@ -1090,6 +1108,26 @@ absl::StatusOr<ChannelArgs> XdsServerConfigFetcher::ListenerWatcher::
|
|
1090
1108
|
return args;
|
1091
1109
|
}
|
1092
1110
|
|
1111
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
1112
|
+
UpdateBlackboard(const Blackboard* old_blackboard,
|
1113
|
+
Blackboard* new_blackboard) {
|
1114
|
+
const auto& http_filter_registry =
|
1115
|
+
DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
1116
|
+
.http_filter_registry();
|
1117
|
+
ForEachFilterChain(
|
1118
|
+
[&](XdsListenerResource::FilterChainData& filter_chain_data) {
|
1119
|
+
auto& hcm = filter_chain_data.http_connection_manager;
|
1120
|
+
for (const auto& http_filter : hcm.http_filters) {
|
1121
|
+
const XdsHttpFilterImpl* filter_impl =
|
1122
|
+
http_filter_registry.GetFilterForType(
|
1123
|
+
http_filter.config.config_proto_type_name);
|
1124
|
+
CHECK_NE(filter_impl, nullptr); // Enforced in config validation.
|
1125
|
+
filter_impl->UpdateBlackboard(http_filter.config, old_blackboard,
|
1126
|
+
new_blackboard);
|
1127
|
+
}
|
1128
|
+
});
|
1129
|
+
}
|
1130
|
+
|
1093
1131
|
//
|
1094
1132
|
// XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::XdsServerConfigSelector
|
1095
1133
|
//
|
@@ -1237,7 +1275,7 @@ XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
1237
1275
|
return resource.status();
|
1238
1276
|
}
|
1239
1277
|
return XdsServerConfigSelector::Create(
|
1240
|
-
|
1278
|
+
DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
1241
1279
|
.http_filter_registry(),
|
1242
1280
|
resource.value(), http_filters_);
|
1243
1281
|
}
|
@@ -1269,7 +1307,7 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
|
1269
1307
|
watcher_->OnServerConfigSelectorUpdate(resource_.status());
|
1270
1308
|
} else {
|
1271
1309
|
watcher_->OnServerConfigSelectorUpdate(XdsServerConfigSelector::Create(
|
1272
|
-
|
1310
|
+
DownCast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
|
1273
1311
|
.http_filter_registry(),
|
1274
1312
|
*resource_, http_filters_));
|
1275
1313
|
}
|
@@ -1304,7 +1342,7 @@ grpc_server_config_fetcher* grpc_server_config_fetcher_xds_create(
|
|
1304
1342
|
LOG(ERROR) << "Failed to create xds client: " << xds_client.status();
|
1305
1343
|
return nullptr;
|
1306
1344
|
}
|
1307
|
-
if (
|
1345
|
+
if (grpc_core::DownCast<const grpc_core::GrpcXdsBootstrap&>(
|
1308
1346
|
(*xds_client)->bootstrap())
|
1309
1347
|
.server_listener_resource_name_template()
|
1310
1348
|
.empty()) {
|
@@ -72,7 +72,7 @@ class ServiceConfig : public RefCounted<ServiceConfig> {
|
|
72
72
|
/// lifetime of the returned object is tied to the lifetime of the
|
73
73
|
/// ServiceConfig object.
|
74
74
|
virtual ServiceConfigParser::ParsedConfig* GetGlobalParsedConfig(
|
75
|
-
size_t index) = 0;
|
75
|
+
size_t index) const = 0;
|
76
76
|
|
77
77
|
/// Retrieves the vector of parsed configs for the method identified
|
78
78
|
/// by \a path. The lifetime of the returned vector and contained objects
|
@@ -86,7 +86,7 @@ class ServiceConfigImpl final : public ServiceConfig {
|
|
86
86
|
/// lifetime of the returned object is tied to the lifetime of the
|
87
87
|
/// ServiceConfig object.
|
88
88
|
ServiceConfigParser::ParsedConfig* GetGlobalParsedConfig(
|
89
|
-
size_t index) override {
|
89
|
+
size_t index) const override {
|
90
90
|
DCHECK(index < parsed_global_configs_.size());
|
91
91
|
return parsed_global_configs_[index].get();
|
92
92
|
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
// Copyright 2025 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/telemetry/context_list_entry.h"
|
16
|
+
|
17
|
+
namespace grpc_core {
|
18
|
+
|
19
|
+
namespace {
|
20
|
+
CopyContextFn g_get_copied_context_fn = nullptr;
|
21
|
+
DeleteContextFn g_delete_copied_context_fn = nullptr;
|
22
|
+
} // namespace
|
23
|
+
|
24
|
+
void GrpcHttp2SetCopyContextFn(CopyContextFn fn) {
|
25
|
+
g_get_copied_context_fn = fn;
|
26
|
+
}
|
27
|
+
|
28
|
+
void GrpcHttp2SetDeleteContextFn(DeleteContextFn fn) {
|
29
|
+
g_delete_copied_context_fn = fn;
|
30
|
+
}
|
31
|
+
|
32
|
+
CopyContextFn GrpcHttp2GetCopyContextFn() { return g_get_copied_context_fn; }
|
33
|
+
|
34
|
+
DeleteContextFn GrpcHttp2GetDeleteContextFn() {
|
35
|
+
return g_delete_copied_context_fn;
|
36
|
+
}
|
37
|
+
|
38
|
+
} // namespace grpc_core
|