grpc 1.84.0 → 1.85.0.pre1
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 +40 -27
- data/include/grpc/event_engine/memory_allocator.h +1 -0
- data/include/grpc/grpc.h +3 -0
- data/include/grpc/grpc_security_constants.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +4 -0
- data/src/core/call/call_filters.h +10 -10
- data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
- data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
- data/src/core/call/filter_fusion.h +15 -15
- data/src/core/call/interception_chain.h +3 -3
- data/src/core/call/metadata_batch.cc +1 -0
- data/src/core/call/metadata_batch.h +45 -33
- data/src/core/call/parsed_metadata.h +3 -3
- data/src/core/call/request_buffer.cc +6 -6
- data/src/core/call/request_buffer.h +1 -1
- data/src/core/channelz/channel_trace.cc +5 -5
- data/src/core/channelz/channel_trace.h +1 -1
- data/src/core/channelz/channelz.cc +9 -9
- data/src/core/channelz/channelz.h +12 -12
- data/src/core/channelz/channelz_registry.cc +10 -10
- data/src/core/channelz/ztrace_collector.h +5 -5
- data/src/core/client_channel/client_channel.cc +4 -4
- data/src/core/client_channel/client_channel_filter.cc +14 -14
- data/src/core/client_channel/global_subchannel_pool.cc +4 -4
- data/src/core/client_channel/subchannel.cc +24 -23
- data/src/core/client_channel/subchannel_stream_client.cc +5 -5
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
- data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
- data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
- data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
- data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
- data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
- data/src/core/credentials/transport/tls/tls_utils.h +9 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
- data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
- data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
- data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
- data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
- data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
- data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
- data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
- data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
- data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
- data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
- data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
- data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
- data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
- data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
- data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
- data/src/core/handshaker/handshaker.cc +4 -4
- data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
- data/src/core/handshaker/security/secure_endpoint.cc +13 -13
- data/src/core/handshaker/security/security_handshaker.cc +6 -6
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
- data/src/core/lib/channel/channel_args.cc +20 -0
- data/src/core/lib/channel/channel_args.h +17 -17
- data/src/core/lib/channel/promise_based_filter.cc +2 -2
- data/src/core/lib/channel/promise_based_filter.h +66 -27
- data/src/core/lib/debug/trace_flags.cc +2 -0
- data/src/core/lib/debug/trace_flags.h +1 -0
- data/src/core/lib/event_engine/ares_resolver.cc +14 -14
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
- data/src/core/lib/event_engine/default_event_engine.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
- data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
- data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
- data/src/core/lib/experiments/experiments.cc +48 -0
- data/src/core/lib/experiments/experiments.h +24 -0
- data/src/core/lib/iomgr/buffer_list.cc +3 -3
- data/src/core/lib/iomgr/buffer_list.h +1 -1
- data/src/core/lib/iomgr/combiner.cc +0 -1
- data/src/core/lib/iomgr/ev_apple.cc +4 -4
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_posix.cc +7 -7
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +1 -1
- data/src/core/lib/promise/arena_promise.h +7 -7
- data/src/core/lib/promise/detail/promise_factory.h +8 -8
- data/src/core/lib/promise/detail/promise_like.h +4 -4
- data/src/core/lib/promise/inter_activity_latch.h +6 -6
- data/src/core/lib/promise/inter_activity_pipe.h +1 -1
- data/src/core/lib/promise/observable.h +3 -3
- data/src/core/lib/promise/party.cc +1 -1
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resource_quota/arena.h +3 -3
- data/src/core/lib/resource_quota/memory_quota.cc +16 -16
- data/src/core/lib/resource_quota/memory_quota.h +1 -1
- data/src/core/lib/resource_quota/thread_quota.cc +3 -3
- data/src/core/lib/security/authorization/audit_logging.cc +5 -5
- data/src/core/lib/security/authorization/authorization_engine.h +1 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
- data/src/core/lib/security/authorization/matchers.h +1 -1
- data/src/core/lib/surface/call.cc +8 -7
- data/src/core/lib/surface/call.h +3 -3
- data/src/core/lib/surface/call_utils.h +4 -0
- data/src/core/lib/surface/channel.cc +1 -1
- data/src/core/lib/surface/channel.h +1 -1
- data/src/core/lib/surface/channel_init.cc +1 -1
- data/src/core/lib/surface/init.cc +7 -7
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/legacy_channel.cc +2 -2
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
- data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
- data/src/core/load_balancing/autosharding/autosharding.h +78 -0
- data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
- data/src/core/load_balancing/health_check_client.cc +7 -7
- data/src/core/load_balancing/lb_policy.cc +1 -1
- data/src/core/load_balancing/oob_backend_metric.cc +5 -5
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
- data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
- data/src/core/load_balancing/rls/rls.cc +23 -17
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
- data/src/core/load_balancing/xds/cds.cc +6 -5
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
- data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
- data/src/core/mitigation_engine/mitigation_engine.h +28 -4
- data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
- data/src/core/resolver/dns/dns_resolver.cc +7 -7
- data/src/core/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
- data/src/core/server/server.cc +30 -30
- data/src/core/server/server.h +4 -3
- data/src/core/server/server_config_selector_filter.cc +3 -3
- data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
- data/src/core/telemetry/default_tcp_tracer.cc +1 -1
- data/src/core/telemetry/instrument.cc +30 -16
- data/src/core/telemetry/instrument.h +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
- data/src/core/tsi/ssl_transport_security.cc +46 -13
- data/src/core/tsi/ssl_transport_security.h +7 -0
- data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
- data/src/core/util/event_log.cc +3 -3
- data/src/core/util/http_client/httpcli.cc +5 -5
- data/src/core/util/http_client/httpcli.h +1 -1
- data/src/core/util/json/json_object_loader.cc +7 -0
- data/src/core/util/json/json_object_loader.h +17 -2
- data/src/core/util/latent_see.cc +123 -36
- data/src/core/util/latent_see.h +14 -1
- data/src/core/util/mpscq.cc +1 -1
- data/src/core/util/notification.h +4 -4
- data/src/core/util/sync.h +20 -6
- data/src/core/util/table.h +20 -22
- data/src/core/util/work_serializer.cc +2 -2
- data/src/core/xds/grpc/blackboard.cc +4 -3
- data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
- data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
- data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_endpoint.cc +1 -1
- data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
- data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
- data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
- data/src/core/xds/grpc/xds_matcher.h +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
- data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
- data/src/core/xds/xds_client/lrs_client.cc +22 -19
- data/src/core/xds/xds_client/xds_client.cc +19 -16
- data/src/core/xds/xds_client/xds_transport.h +49 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -1
- data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
- data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
- data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
- data/third_party/abseil-cpp/absl/base/casts.h +135 -2
- data/third_party/abseil-cpp/absl/base/config.h +63 -41
- data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
- data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
- data/third_party/abseil-cpp/absl/base/macros.h +76 -37
- data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
- data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
- data/third_party/abseil-cpp/absl/base/options.h +46 -18
- data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
- data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
- data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
- data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
- data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
- data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
- data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
- data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
- data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
- data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
- data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
- data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
- data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
- data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
- data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
- data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
- data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
- data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
- data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
- data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
- data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
- data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
- data/third_party/abseil-cpp/absl/log/log.h +2 -2
- data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
- data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
- data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
- data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
- data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
- data/third_party/abseil-cpp/absl/status/status.cc +66 -70
- data/third_party/abseil-cpp/absl/status/status.h +254 -23
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
- data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
- data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
- data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
- data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
- data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
- data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
- data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
- data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
- data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
- data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
- data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
- data/third_party/abseil-cpp/absl/time/clock.h +3 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
- data/third_party/abseil-cpp/absl/time/format.cc +3 -10
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- data/third_party/abseil-cpp/absl/time/time.cc +4 -4
- data/third_party/abseil-cpp/absl/time/time.h +14 -13
- data/third_party/abseil-cpp/absl/types/compare.h +64 -63
- data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
- data/third_party/abseil-cpp/absl/types/optional.h +31 -4
- data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
- data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
- data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
- data/third_party/abseil-cpp/absl/types/span.h +67 -38
- data/third_party/abseil-cpp/absl/types/variant.h +75 -18
- data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
- data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
- data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
- data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
- data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
- data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
- data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
- data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
- data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
- data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
- data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
- data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
- data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
- data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
- data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
- data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
- data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
- data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
- data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
- data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
- data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
- data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
- data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
- data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
- data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
- data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
- data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
- data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
- data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
- data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
- data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
- data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
- data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
- data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
- data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
- data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
- data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
- data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
- data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
- data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
- data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
- data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
- data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
- data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
- data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
- data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
- data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
- data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
- data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
- data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
- data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
- data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
- data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
- data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
- data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
- data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
- data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
- data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
- data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
- data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
- data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
- data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
- data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
- data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
- data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
- data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
- data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
- data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
- data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
- data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
- data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
- data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
- data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
- data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
- data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
- data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
- data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
- data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
- data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
- data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
- data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
- data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
- data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
- data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
- data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
- data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
- data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
- data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
- data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
- data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
- data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
- data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
- data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
- data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
- data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
- data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
- data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
- data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
- data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
- data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
- data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
- data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
- data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
- data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
- data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
- data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
- data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
- data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
- data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
- data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
- data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
- data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
- data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
- data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
- data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
- data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
- data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
- data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
- data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
- data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
- data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
- data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
- data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
- data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
- data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
- data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
- data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
- data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
- data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
- data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
- data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
- data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
- data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
- data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
- data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
- data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
- data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
- data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
- data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
- data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
- data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
- data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
- data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
- data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
- data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
- data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
- data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
- data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
- data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
- data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
- data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
- data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
- data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
- data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
- data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
- data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
- data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
- data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
- data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
- data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
- data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
- data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
- data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
- data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
- data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
- data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
- data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
- data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
- data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
- data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
- data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
- data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
- data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
- data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
- data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
- data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
- data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
- data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
- data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
- data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
- data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
- data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
- data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
- data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
- data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
- data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
- data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
- data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
- data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
- data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
- data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
- data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
- data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
- data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
- data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
- data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
- data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
- data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
- data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
- data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
- data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
- data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
- data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
- data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
- data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
- data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
- data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
- data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
- data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
- data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
- data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
- data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
- data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
- data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
- data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
- data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
- data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
- data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
- data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
- data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
- data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
- data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
- data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
- data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
- data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
- data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
- data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
- data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
- data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
- data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
- data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
- data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
- data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
- data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
- data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
- data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
- data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
- data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
- data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
- data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
- data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
- data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
- data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
- data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
- data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
- data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
- data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
- data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
- data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
- data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
- data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
- data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
- data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
- data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
- data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
- data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
- data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
- data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
- data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
- data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
- data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
- data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
- data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
- data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
- data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
- data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
- data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
- data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
- data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
- data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
- data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
- data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
- data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
- data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
- data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
- data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
- data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
- data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
- data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
- data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
- data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
- data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
- data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
- data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
- data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
- data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
- data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
- data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
- data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
- data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
- data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
- data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
- data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
- data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
- data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
- data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
- data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
- data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
- data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
- data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
- data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
- data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
- data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
- data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
- data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
- data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
- data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
- data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
- data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
- data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
- data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
- data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
- data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
- data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
- data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
- data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
- data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
- data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
- data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
- data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
- data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
- data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
- data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
- data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
- data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
- data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
- data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
- data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
- data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
- data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
- data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
- data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
- data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
- data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
- data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
- data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
- data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
- data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
- data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
- data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
- data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
- data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
- data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
- data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
- data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
- data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
- data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
- data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
- data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
- data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
- data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
- data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
- data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
- data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
- data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
- data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
- data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
- data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
- data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
- data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
- data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
- data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
- data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
- data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
- data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
- data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
- data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
- data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
- data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
- data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
- data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
- data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
- data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
- metadata +77 -52
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
- data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
- data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
- data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
- data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
- data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
- data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
- data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
- data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
- data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
- data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
- data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
- data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
- data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
- data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
- data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
- data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
- data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
- data/third_party/boringssl-with-bazel/include/openssl/experimental/kyber.h +0 -146
|
@@ -0,0 +1,931 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 gRPC authors.
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
//
|
|
16
|
+
|
|
17
|
+
#include "src/core/load_balancing/autosharding/autosharding.h"
|
|
18
|
+
|
|
19
|
+
#include <grpc/impl/channel_arg_names.h>
|
|
20
|
+
#include <grpc/impl/connectivity_state.h>
|
|
21
|
+
#include <grpc/support/port_platform.h>
|
|
22
|
+
#include <inttypes.h>
|
|
23
|
+
|
|
24
|
+
#include <algorithm>
|
|
25
|
+
#include <map>
|
|
26
|
+
#include <memory>
|
|
27
|
+
#include <string>
|
|
28
|
+
#include <utility>
|
|
29
|
+
#include <vector>
|
|
30
|
+
|
|
31
|
+
#include "src/core/config/core_configuration.h"
|
|
32
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
|
33
|
+
#include "src/core/lib/channel/channel_args.h"
|
|
34
|
+
#include "src/core/lib/debug/trace.h"
|
|
35
|
+
#include "src/core/lib/iomgr/pollset_set.h"
|
|
36
|
+
#include "src/core/lib/transport/connectivity_state.h"
|
|
37
|
+
#include "src/core/load_balancing/delegating_helper.h"
|
|
38
|
+
#include "src/core/load_balancing/lb_policy.h"
|
|
39
|
+
#include "src/core/load_balancing/lb_policy_factory.h"
|
|
40
|
+
#include "src/core/load_balancing/lb_policy_registry.h"
|
|
41
|
+
#include "src/core/load_balancing/pick_first/pick_first.h"
|
|
42
|
+
#include "src/core/resolver/endpoint_addresses.h"
|
|
43
|
+
#include "src/core/util/crash.h"
|
|
44
|
+
#include "src/core/util/debug_location.h"
|
|
45
|
+
#include "src/core/util/grpc_check.h"
|
|
46
|
+
#include "src/core/util/json/json.h"
|
|
47
|
+
#include "src/core/util/json/json_args.h"
|
|
48
|
+
#include "src/core/util/json/json_object_loader.h"
|
|
49
|
+
#include "src/core/util/orphanable.h"
|
|
50
|
+
#include "src/core/util/ref_counted.h"
|
|
51
|
+
#include "src/core/util/ref_counted_ptr.h"
|
|
52
|
+
#include "src/core/util/shared_bit_gen.h"
|
|
53
|
+
#include "src/core/util/validation_errors.h"
|
|
54
|
+
#include "absl/log/log.h"
|
|
55
|
+
#include "absl/random/random.h"
|
|
56
|
+
#include "absl/status/status.h"
|
|
57
|
+
#include "absl/status/statusor.h"
|
|
58
|
+
#include "absl/strings/str_cat.h"
|
|
59
|
+
#include "absl/strings/str_join.h"
|
|
60
|
+
#include "absl/strings/string_view.h"
|
|
61
|
+
#include "absl/types/span.h"
|
|
62
|
+
|
|
63
|
+
namespace grpc_core {
|
|
64
|
+
|
|
65
|
+
namespace {
|
|
66
|
+
|
|
67
|
+
constexpr absl::string_view kAutoSharding = "autosharding_experimental";
|
|
68
|
+
|
|
69
|
+
//
|
|
70
|
+
// autosharding LB policy
|
|
71
|
+
//
|
|
72
|
+
|
|
73
|
+
class AutoshardingLbPolicy final : public LoadBalancingPolicy {
|
|
74
|
+
public:
|
|
75
|
+
explicit AutoshardingLbPolicy(Args args);
|
|
76
|
+
|
|
77
|
+
absl::string_view name() const override { return kAutoSharding; }
|
|
78
|
+
|
|
79
|
+
absl::Status UpdateLocked(UpdateArgs args) override;
|
|
80
|
+
void ResetBackoffLocked() override;
|
|
81
|
+
|
|
82
|
+
private:
|
|
83
|
+
class AutoShardingEndpoint;
|
|
84
|
+
|
|
85
|
+
// A complete assignment received from the sharding service.
|
|
86
|
+
class Assignment {
|
|
87
|
+
public:
|
|
88
|
+
// A key range and its assigned endpoints.
|
|
89
|
+
// Slices partition [-infinity, +infinity) contiguously without gaps.
|
|
90
|
+
// The first slice implicitly starts at -infinity; subsequent slices
|
|
91
|
+
// implicitly start at the previous slice's end_key.
|
|
92
|
+
struct Slice {
|
|
93
|
+
// Exclusive end key. Empty for +infinity.
|
|
94
|
+
std::string end_key;
|
|
95
|
+
// Indices into Assignment::endpoint_names_.
|
|
96
|
+
std::vector<size_t> endpoints;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
Assignment(std::vector<Slice> slices,
|
|
100
|
+
std::vector<std::string> endpoint_names)
|
|
101
|
+
: slices_(std::move(slices)),
|
|
102
|
+
endpoint_names_(std::move(endpoint_names)) {}
|
|
103
|
+
|
|
104
|
+
// Slices covering the keyspace. The autosharding client validates that
|
|
105
|
+
// they cover [-infinity, +infinity) with strictly increasing end keys,
|
|
106
|
+
// and that all endpoint indices are valid, before reporting the
|
|
107
|
+
// assignment to the LB policy.
|
|
108
|
+
const std::vector<Slice>& slices() const { return slices_; }
|
|
109
|
+
// Complete list of endpoint names in the assignment.
|
|
110
|
+
const std::vector<std::string>& endpoint_names() const {
|
|
111
|
+
return endpoint_names_;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
private:
|
|
115
|
+
std::vector<Slice> slices_;
|
|
116
|
+
std::vector<std::string> endpoint_names_;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
//
|
|
120
|
+
// SliceMap
|
|
121
|
+
//
|
|
122
|
+
// Immutable, lookup-optimized mapping of slices to endpoint indices.
|
|
123
|
+
//
|
|
124
|
+
|
|
125
|
+
class SliceMap final : public RefCounted<SliceMap> {
|
|
126
|
+
public:
|
|
127
|
+
struct Entry {
|
|
128
|
+
// Exclusive end key. Empty for +infinity.
|
|
129
|
+
std::string end_key;
|
|
130
|
+
// Indices into Picker::endpoints_.
|
|
131
|
+
std::vector<size_t> endpoints;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// Populates slices from assignment and endpoint_map.
|
|
135
|
+
SliceMap(const Assignment& assignment,
|
|
136
|
+
const std::map<std::string, OrphanablePtr<AutoShardingEndpoint>>&
|
|
137
|
+
endpoint_map);
|
|
138
|
+
|
|
139
|
+
const std::vector<Entry>& slices() const { return slices_; }
|
|
140
|
+
|
|
141
|
+
// Returns endpoint indices covering key. Lookup is guaranteed to succeed
|
|
142
|
+
// because slices partition the entire keyspace.
|
|
143
|
+
absl::Span<const size_t> Lookup(absl::string_view key) const {
|
|
144
|
+
auto it = std::upper_bound(slices_.begin(), slices_.end(), key,
|
|
145
|
+
[](absl::string_view key, const Entry& entry) {
|
|
146
|
+
// An empty end_key means +infinity.
|
|
147
|
+
return entry.end_key.empty() ||
|
|
148
|
+
key < entry.end_key;
|
|
149
|
+
});
|
|
150
|
+
GRPC_CHECK(it != slices_.end());
|
|
151
|
+
return it->endpoints;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
private:
|
|
155
|
+
std::vector<Entry> slices_;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
// State for a particular endpoint. Delegates to a pick_first child policy.
|
|
159
|
+
class AutoShardingEndpoint final
|
|
160
|
+
: public InternallyRefCounted<AutoShardingEndpoint> {
|
|
161
|
+
public:
|
|
162
|
+
// index is the index of this endpoint in AutoshardingLbPolicy::endpoints_.
|
|
163
|
+
AutoShardingEndpoint(RefCountedPtr<AutoshardingLbPolicy> autosharding_lb,
|
|
164
|
+
size_t index)
|
|
165
|
+
: autosharding_lb_(std::move(autosharding_lb)), index_(index) {}
|
|
166
|
+
|
|
167
|
+
void Orphan() override;
|
|
168
|
+
|
|
169
|
+
size_t index() const { return index_; }
|
|
170
|
+
|
|
171
|
+
absl::Status UpdateLocked(size_t index);
|
|
172
|
+
|
|
173
|
+
grpc_connectivity_state connectivity_state() const {
|
|
174
|
+
return connectivity_state_;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Info about the endpoint, stored in the picker.
|
|
178
|
+
struct EndpointInfo {
|
|
179
|
+
RefCountedPtr<AutoShardingEndpoint> endpoint;
|
|
180
|
+
RefCountedPtr<SubchannelPicker> picker;
|
|
181
|
+
grpc_connectivity_state state;
|
|
182
|
+
absl::Status status;
|
|
183
|
+
};
|
|
184
|
+
EndpointInfo GetInfoForPicker() {
|
|
185
|
+
return {Ref(), picker_, connectivity_state_, status_};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
void ResetBackoffLocked();
|
|
189
|
+
|
|
190
|
+
// If the child policy does not yet exist, creates it; otherwise,
|
|
191
|
+
// asks the child to exit IDLE.
|
|
192
|
+
void RequestConnectionLocked();
|
|
193
|
+
|
|
194
|
+
private:
|
|
195
|
+
class Helper;
|
|
196
|
+
|
|
197
|
+
void CreateChildPolicy();
|
|
198
|
+
absl::Status UpdateChildPolicyLocked();
|
|
199
|
+
|
|
200
|
+
// Called when the child policy reports a connectivity state update.
|
|
201
|
+
void OnStateUpdate(grpc_connectivity_state new_state,
|
|
202
|
+
const absl::Status& status,
|
|
203
|
+
RefCountedPtr<SubchannelPicker> picker);
|
|
204
|
+
|
|
205
|
+
// Ref to our parent.
|
|
206
|
+
RefCountedPtr<AutoshardingLbPolicy> autosharding_lb_;
|
|
207
|
+
size_t index_;
|
|
208
|
+
|
|
209
|
+
// The pick_first child policy. Created lazily, on first use.
|
|
210
|
+
OrphanablePtr<LoadBalancingPolicy> child_policy_;
|
|
211
|
+
|
|
212
|
+
grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_IDLE;
|
|
213
|
+
absl::Status status_;
|
|
214
|
+
RefCountedPtr<SubchannelPicker> picker_;
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
class Picker final : public SubchannelPicker {
|
|
218
|
+
public:
|
|
219
|
+
Picker(RefCountedPtr<AutoshardingLbPolicy> autosharding_lb,
|
|
220
|
+
RefCountedPtr<SliceMap> slice_map)
|
|
221
|
+
: autosharding_lb_(std::move(autosharding_lb)),
|
|
222
|
+
config_(autosharding_lb_->config_),
|
|
223
|
+
slice_map_(std::move(slice_map)),
|
|
224
|
+
endpoints_(autosharding_lb_->endpoints_.size()),
|
|
225
|
+
resolution_note_(autosharding_lb_->resolution_note_) {
|
|
226
|
+
for (const auto& [_, endpoint] : autosharding_lb_->endpoint_map_) {
|
|
227
|
+
endpoints_[endpoint->index()] = endpoint->GetInfoForPicker();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
PickResult Pick(PickArgs args) override;
|
|
232
|
+
|
|
233
|
+
private:
|
|
234
|
+
// Iterator interface over endpoint indices.
|
|
235
|
+
class EndpointIndexIterator {
|
|
236
|
+
public:
|
|
237
|
+
virtual ~EndpointIndexIterator() = default;
|
|
238
|
+
|
|
239
|
+
virtual size_t size() const = 0;
|
|
240
|
+
virtual size_t operator[](size_t index) const = 0;
|
|
241
|
+
};
|
|
242
|
+
class SliceEndpointIndexIterator;
|
|
243
|
+
class FallbackEndpointIndexIterator;
|
|
244
|
+
|
|
245
|
+
bool IsPoolInFallback(absl::Span<const size_t> indices) const;
|
|
246
|
+
|
|
247
|
+
PickResult PickFromEndpointIndices(const EndpointIndexIterator& indices,
|
|
248
|
+
PickArgs args);
|
|
249
|
+
|
|
250
|
+
void RequestConnectionForEndpoint(
|
|
251
|
+
const RefCountedPtr<AutoShardingEndpoint>& endpoint);
|
|
252
|
+
|
|
253
|
+
RefCountedPtr<AutoshardingLbPolicy> autosharding_lb_;
|
|
254
|
+
RefCountedPtr<AutoShardingLbConfig> config_;
|
|
255
|
+
RefCountedPtr<SliceMap> slice_map_;
|
|
256
|
+
std::vector<AutoShardingEndpoint::EndpointInfo> endpoints_;
|
|
257
|
+
std::string resolution_note_;
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
~AutoshardingLbPolicy() override;
|
|
261
|
+
|
|
262
|
+
void ShutdownLocked() override;
|
|
263
|
+
|
|
264
|
+
// Updates the aggregate policy's connectivity state based on the
|
|
265
|
+
// number of endpoints in each state, creating a new picker.
|
|
266
|
+
// If the call to this method is triggered by an endpoint entering
|
|
267
|
+
// TRANSIENT_FAILURE, then status is the status reported by the endpoint.
|
|
268
|
+
void UpdateAggregatedConnectivityStateLocked(absl::Status status);
|
|
269
|
+
|
|
270
|
+
// Creates a new autosharding client, which will provide the assignments
|
|
271
|
+
// used by this policy.
|
|
272
|
+
// TODO(bpawan): Implement the autosharding client (gRFC A119). A new
|
|
273
|
+
// client is created whenever a config update changes the channel factory
|
|
274
|
+
// key or the autosharding target, both of which are constant for the
|
|
275
|
+
// lifetime of a given client instance. The client will be responsible for:
|
|
276
|
+
// - Maintaining the stream to the autosharding server, retrying with
|
|
277
|
+
// appropriate backoff whenever the stream breaks, and ensuring that we
|
|
278
|
+
// don't revert to an older generation after restarting the stream.
|
|
279
|
+
// - Reading assignment chunks from the autosharding server and compiling
|
|
280
|
+
// them into a complete assignment, including all necessary validation.
|
|
281
|
+
// - Handling the initial assignment timer, while the policy continues
|
|
282
|
+
// using the previous assignment until a new assignment is received or
|
|
283
|
+
// the timer fires.
|
|
284
|
+
// The client reports results to this policy via
|
|
285
|
+
// OnAssignmentReceivedLocked().
|
|
286
|
+
void CreateAutoshardingClientLocked();
|
|
287
|
+
|
|
288
|
+
// Called by the autosharding client to report a new assignment, or a
|
|
289
|
+
// non-OK status if no valid assignment has been received yet (i.e., an
|
|
290
|
+
// invalid assignment was received, or the initial assignment timer fired
|
|
291
|
+
// before any valid assignment was received).
|
|
292
|
+
void OnAssignmentReceivedLocked(absl::StatusOr<Assignment> assignment);
|
|
293
|
+
|
|
294
|
+
std::map<std::string, OrphanablePtr<AutoShardingEndpoint>> endpoint_map_;
|
|
295
|
+
EndpointAddressesList endpoints_;
|
|
296
|
+
ChannelArgs args_;
|
|
297
|
+
// TODO(bpawan): Until the initial assignment timer fires, the policy must
|
|
298
|
+
// queue picks and report CONNECTING instead of using this status, so this
|
|
299
|
+
// placeholder message must never reach a picker. Fix this when the
|
|
300
|
+
// autosharding client is implemented.
|
|
301
|
+
absl::StatusOr<Assignment> assignment_ =
|
|
302
|
+
absl::UnavailableError("invalid_value");
|
|
303
|
+
RefCountedPtr<SliceMap> slice_map_;
|
|
304
|
+
RefCountedPtr<AutoShardingLbConfig> config_;
|
|
305
|
+
std::string resolution_note_;
|
|
306
|
+
|
|
307
|
+
// TODO(roth): If we ever change the helper UpdateState() API to not
|
|
308
|
+
// need the status reported for TRANSIENT_FAILURE state (because
|
|
309
|
+
// it's not currently actually used for anything outside of the picker),
|
|
310
|
+
// then we will no longer need this data member.
|
|
311
|
+
absl::Status last_failure_;
|
|
312
|
+
bool shutdown_ = false;
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
//
|
|
316
|
+
// AutoshardingLbPolicy::Picker::SliceEndpointIndexIterator
|
|
317
|
+
//
|
|
318
|
+
|
|
319
|
+
class AutoshardingLbPolicy::Picker::SliceEndpointIndexIterator final
|
|
320
|
+
: public EndpointIndexIterator {
|
|
321
|
+
public:
|
|
322
|
+
explicit SliceEndpointIndexIterator(absl::Span<const size_t> indices)
|
|
323
|
+
: indices_(indices) {}
|
|
324
|
+
|
|
325
|
+
size_t size() const override { return indices_.size(); }
|
|
326
|
+
size_t operator[](size_t index) const override { return indices_[index]; }
|
|
327
|
+
|
|
328
|
+
private:
|
|
329
|
+
absl::Span<const size_t> indices_;
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
//
|
|
333
|
+
// AutoshardingLbPolicy::Picker::FallbackEndpointIndexIterator
|
|
334
|
+
//
|
|
335
|
+
|
|
336
|
+
class AutoshardingLbPolicy::Picker::FallbackEndpointIndexIterator final
|
|
337
|
+
: public EndpointIndexIterator {
|
|
338
|
+
public:
|
|
339
|
+
explicit FallbackEndpointIndexIterator(size_t num_endpoints)
|
|
340
|
+
: num_endpoints_(num_endpoints) {}
|
|
341
|
+
|
|
342
|
+
size_t size() const override { return num_endpoints_; }
|
|
343
|
+
size_t operator[](size_t index) const override { return index; }
|
|
344
|
+
|
|
345
|
+
private:
|
|
346
|
+
size_t num_endpoints_;
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
//
|
|
350
|
+
// AutoshardingLbPolicy::Picker
|
|
351
|
+
//
|
|
352
|
+
|
|
353
|
+
bool AutoshardingLbPolicy::Picker::IsPoolInFallback(
|
|
354
|
+
absl::Span<const size_t> indices) const {
|
|
355
|
+
if (indices.empty()) return true;
|
|
356
|
+
for (size_t idx : indices) {
|
|
357
|
+
if (endpoints_[idx].state != GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return true;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
AutoshardingLbPolicy::PickResult AutoshardingLbPolicy::Picker::Pick(
|
|
365
|
+
PickArgs args) {
|
|
366
|
+
// Extract the sharding key from the request metadata.
|
|
367
|
+
std::string buffer;
|
|
368
|
+
const absl::string_view key_header_name =
|
|
369
|
+
config_->key_header_name().as_string_view();
|
|
370
|
+
auto key = args.initial_metadata->Lookup(key_header_name, &buffer);
|
|
371
|
+
if (!key.has_value()) {
|
|
372
|
+
return PickResult::Fail(absl::InternalError(absl::StrCat(
|
|
373
|
+
"slice key header \"", key_header_name, "\" not present")));
|
|
374
|
+
}
|
|
375
|
+
// If we have no assignment, use all endpoints. We get here only if
|
|
376
|
+
// fallback is enabled; otherwise, the LB policy returns a picker that
|
|
377
|
+
// fails all picks.
|
|
378
|
+
if (slice_map_ == nullptr) {
|
|
379
|
+
FallbackEndpointIndexIterator iterator(endpoints_.size());
|
|
380
|
+
return PickFromEndpointIndices(iterator, args);
|
|
381
|
+
}
|
|
382
|
+
// Look up the endpoints covering the key.
|
|
383
|
+
absl::Span<const size_t> indices = slice_map_->Lookup(*key);
|
|
384
|
+
if (IsPoolInFallback(indices) && config_->enable_fallback()) {
|
|
385
|
+
FallbackEndpointIndexIterator iterator(endpoints_.size());
|
|
386
|
+
return PickFromEndpointIndices(iterator, args);
|
|
387
|
+
}
|
|
388
|
+
SliceEndpointIndexIterator iterator(indices);
|
|
389
|
+
return PickFromEndpointIndices(iterator, args);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
AutoshardingLbPolicy::PickResult
|
|
393
|
+
AutoshardingLbPolicy::Picker::PickFromEndpointIndices(
|
|
394
|
+
const EndpointIndexIterator& indices, PickArgs args) {
|
|
395
|
+
if (indices.size() == 0) {
|
|
396
|
+
std::string message = "no endpoint available";
|
|
397
|
+
if (!resolution_note_.empty()) {
|
|
398
|
+
absl::StrAppend(&message, " (", resolution_note_, ")");
|
|
399
|
+
}
|
|
400
|
+
return PickResult::Fail(absl::UnavailableError(message));
|
|
401
|
+
}
|
|
402
|
+
// Scan the pool for a READY endpoint, starting from a random index and
|
|
403
|
+
// triggering at most one connection attempt on an IDLE endpoint.
|
|
404
|
+
size_t first_index = absl::Uniform<size_t>(SharedBitGen(), 0, indices.size());
|
|
405
|
+
bool requested_connection = false;
|
|
406
|
+
bool found_connecting = false;
|
|
407
|
+
for (size_t i = 0; i < indices.size(); ++i) {
|
|
408
|
+
const auto& endpoint_info =
|
|
409
|
+
endpoints_[indices[(first_index + i) % indices.size()]];
|
|
410
|
+
switch (endpoint_info.state) {
|
|
411
|
+
case GRPC_CHANNEL_READY:
|
|
412
|
+
return endpoint_info.picker->Pick(args);
|
|
413
|
+
case GRPC_CHANNEL_CONNECTING:
|
|
414
|
+
found_connecting = true;
|
|
415
|
+
break;
|
|
416
|
+
case GRPC_CHANNEL_IDLE:
|
|
417
|
+
if (!requested_connection) {
|
|
418
|
+
RequestConnectionForEndpoint(endpoint_info.endpoint);
|
|
419
|
+
requested_connection = true;
|
|
420
|
+
}
|
|
421
|
+
break;
|
|
422
|
+
default:
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
if (requested_connection || found_connecting) {
|
|
427
|
+
return PickResult::Queue();
|
|
428
|
+
}
|
|
429
|
+
// All endpoints in TRANSIENT_FAILURE. Delegate to the first endpoint's
|
|
430
|
+
// picker to yield a detailed error message (or queue if the child policy
|
|
431
|
+
// has not yet been created).
|
|
432
|
+
const auto& endpoint_info = endpoints_[indices[first_index]];
|
|
433
|
+
if (endpoint_info.picker == nullptr) {
|
|
434
|
+
return PickResult::Queue();
|
|
435
|
+
}
|
|
436
|
+
return endpoint_info.picker->Pick(args);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
void AutoshardingLbPolicy::Picker::RequestConnectionForEndpoint(
|
|
440
|
+
const RefCountedPtr<AutoShardingEndpoint>& endpoint) {
|
|
441
|
+
autosharding_lb_->work_serializer()->Run(
|
|
442
|
+
[autosharding_lb = autosharding_lb_, endpoint]() {
|
|
443
|
+
if (!autosharding_lb->shutdown_) {
|
|
444
|
+
endpoint->RequestConnectionLocked();
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
//
|
|
450
|
+
// AutoshardingLbPolicy::AutoShardingEndpoint::Helper
|
|
451
|
+
//
|
|
452
|
+
|
|
453
|
+
class AutoshardingLbPolicy::AutoShardingEndpoint::Helper final
|
|
454
|
+
: public LoadBalancingPolicy::DelegatingChannelControlHelper {
|
|
455
|
+
public:
|
|
456
|
+
explicit Helper(RefCountedPtr<AutoShardingEndpoint> endpoint)
|
|
457
|
+
: endpoint_(std::move(endpoint)) {}
|
|
458
|
+
|
|
459
|
+
~Helper() override { endpoint_.reset(DEBUG_LOCATION, "Helper"); }
|
|
460
|
+
|
|
461
|
+
void UpdateState(
|
|
462
|
+
grpc_connectivity_state state, const absl::Status& status,
|
|
463
|
+
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker) override {
|
|
464
|
+
endpoint_->OnStateUpdate(state, status, std::move(picker));
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
private:
|
|
468
|
+
LoadBalancingPolicy::ChannelControlHelper* parent_helper() const override {
|
|
469
|
+
return endpoint_->autosharding_lb_->channel_control_helper();
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
RefCountedPtr<AutoShardingEndpoint> endpoint_;
|
|
473
|
+
};
|
|
474
|
+
|
|
475
|
+
//
|
|
476
|
+
// AutoshardingLbPolicy::AutoShardingEndpoint
|
|
477
|
+
//
|
|
478
|
+
|
|
479
|
+
void AutoshardingLbPolicy::AutoShardingEndpoint::Orphan() {
|
|
480
|
+
if (child_policy_ != nullptr) {
|
|
481
|
+
// Remove pollset_set linkage.
|
|
482
|
+
grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
|
|
483
|
+
autosharding_lb_->interested_parties());
|
|
484
|
+
child_policy_.reset();
|
|
485
|
+
picker_.reset();
|
|
486
|
+
}
|
|
487
|
+
Unref();
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
absl::Status AutoshardingLbPolicy::AutoShardingEndpoint::UpdateLocked(
|
|
491
|
+
size_t index) {
|
|
492
|
+
index_ = index;
|
|
493
|
+
if (child_policy_ == nullptr) return absl::OkStatus();
|
|
494
|
+
return UpdateChildPolicyLocked();
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
void AutoshardingLbPolicy::AutoShardingEndpoint::ResetBackoffLocked() {
|
|
498
|
+
if (child_policy_ != nullptr) child_policy_->ResetBackoffLocked();
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
void AutoshardingLbPolicy::AutoShardingEndpoint::RequestConnectionLocked() {
|
|
502
|
+
if (child_policy_ == nullptr) {
|
|
503
|
+
CreateChildPolicy();
|
|
504
|
+
} else {
|
|
505
|
+
child_policy_->ExitIdleLocked();
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
void AutoshardingLbPolicy::AutoShardingEndpoint::CreateChildPolicy() {
|
|
510
|
+
GRPC_CHECK(child_policy_ == nullptr);
|
|
511
|
+
LoadBalancingPolicy::Args lb_policy_args;
|
|
512
|
+
lb_policy_args.work_serializer = autosharding_lb_->work_serializer();
|
|
513
|
+
lb_policy_args.args =
|
|
514
|
+
autosharding_lb_->args_
|
|
515
|
+
.Set(GRPC_ARG_INTERNAL_PICK_FIRST_ENABLE_HEALTH_CHECKING, true)
|
|
516
|
+
.Set(GRPC_ARG_INTERNAL_PICK_FIRST_OMIT_STATUS_MESSAGE_PREFIX, true);
|
|
517
|
+
lb_policy_args.channel_control_helper =
|
|
518
|
+
std::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
|
|
519
|
+
child_policy_ =
|
|
520
|
+
CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy(
|
|
521
|
+
"pick_first", std::move(lb_policy_args));
|
|
522
|
+
if (GRPC_TRACE_FLAG_ENABLED(autosharding_lb)) {
|
|
523
|
+
const EndpointAddresses& endpoint = autosharding_lb_->endpoints_[index_];
|
|
524
|
+
LOG(INFO) << "[AS " << autosharding_lb_.get() << "] endpoint " << this
|
|
525
|
+
<< " (index " << index_ << " of "
|
|
526
|
+
<< autosharding_lb_->endpoints_.size() << ", "
|
|
527
|
+
<< endpoint.ToString() << "): created child policy "
|
|
528
|
+
<< child_policy_.get();
|
|
529
|
+
}
|
|
530
|
+
// Add our interested_parties pollset_set to that of the newly created
|
|
531
|
+
// child policy.
|
|
532
|
+
grpc_pollset_set_add_pollset_set(child_policy_->interested_parties(),
|
|
533
|
+
autosharding_lb_->interested_parties());
|
|
534
|
+
// If the child policy returns a non-OK status, request re-resolution.
|
|
535
|
+
absl::Status status = UpdateChildPolicyLocked();
|
|
536
|
+
if (!status.ok()) {
|
|
537
|
+
autosharding_lb_->channel_control_helper()->RequestReresolution();
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
absl::Status
|
|
542
|
+
AutoshardingLbPolicy::AutoShardingEndpoint::UpdateChildPolicyLocked() {
|
|
543
|
+
// Construct pick_first config.
|
|
544
|
+
auto config =
|
|
545
|
+
CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
|
|
546
|
+
Json::FromArray(
|
|
547
|
+
{Json::FromObject({{"pick_first", Json::FromObject({})}})}));
|
|
548
|
+
GRPC_CHECK(config.ok());
|
|
549
|
+
// Update child policy.
|
|
550
|
+
LoadBalancingPolicy::UpdateArgs update_args;
|
|
551
|
+
update_args.addresses = std::make_shared<SingleEndpointIterator>(
|
|
552
|
+
autosharding_lb_->endpoints_[index_]);
|
|
553
|
+
update_args.args = autosharding_lb_->args_;
|
|
554
|
+
update_args.config = std::move(*config);
|
|
555
|
+
return child_policy_->UpdateLocked(std::move(update_args));
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
void AutoshardingLbPolicy::AutoShardingEndpoint::OnStateUpdate(
|
|
559
|
+
grpc_connectivity_state new_state, const absl::Status& status,
|
|
560
|
+
RefCountedPtr<SubchannelPicker> picker) {
|
|
561
|
+
if (child_policy_ == nullptr) return;
|
|
562
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO)
|
|
563
|
+
<< "[AS " << autosharding_lb_.get()
|
|
564
|
+
<< "] connectivity changed for endpoint " << this << " ("
|
|
565
|
+
<< autosharding_lb_->endpoints_[index_].ToString()
|
|
566
|
+
<< ", child_policy=" << child_policy_.get()
|
|
567
|
+
<< "): prev_state=" << ConnectivityStateName(connectivity_state_)
|
|
568
|
+
<< " new_state=" << ConnectivityStateName(new_state) << " (" << status
|
|
569
|
+
<< ")";
|
|
570
|
+
// Update state.
|
|
571
|
+
connectivity_state_ = new_state;
|
|
572
|
+
status_ = status;
|
|
573
|
+
picker_ = std::move(picker);
|
|
574
|
+
// Update the aggregated connectivity state.
|
|
575
|
+
autosharding_lb_->UpdateAggregatedConnectivityStateLocked(status);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
//
|
|
579
|
+
// AutoshardingLbPolicy::SliceMap
|
|
580
|
+
//
|
|
581
|
+
|
|
582
|
+
AutoshardingLbPolicy::SliceMap::SliceMap(
|
|
583
|
+
const Assignment& assignment,
|
|
584
|
+
const std::map<std::string, OrphanablePtr<AutoShardingEndpoint>>&
|
|
585
|
+
endpoint_map) {
|
|
586
|
+
// Build entries for each slice in the assignment.
|
|
587
|
+
slices_.reserve(assignment.slices().size());
|
|
588
|
+
for (const auto& slice : assignment.slices()) {
|
|
589
|
+
Entry entry;
|
|
590
|
+
entry.end_key = slice.end_key;
|
|
591
|
+
entry.endpoints.reserve(slice.endpoints.size());
|
|
592
|
+
for (size_t idx : slice.endpoints) {
|
|
593
|
+
GRPC_CHECK_LT(idx, assignment.endpoint_names().size());
|
|
594
|
+
auto it = endpoint_map.find(assignment.endpoint_names()[idx]);
|
|
595
|
+
if (it != endpoint_map.end()) {
|
|
596
|
+
entry.endpoints.push_back(it->second->index());
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
slices_.push_back(std::move(entry));
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
//
|
|
604
|
+
// AutoshardingLbPolicy
|
|
605
|
+
//
|
|
606
|
+
|
|
607
|
+
AutoshardingLbPolicy::AutoshardingLbPolicy(Args args)
|
|
608
|
+
: LoadBalancingPolicy(std::move(args)) {
|
|
609
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO) << "[AS " << this << "] Created";
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
AutoshardingLbPolicy::~AutoshardingLbPolicy() {
|
|
613
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO)
|
|
614
|
+
<< "[AS " << this << "] Destroying AutoshardingLbPolicy";
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
void AutoshardingLbPolicy::ShutdownLocked() {
|
|
618
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO) << "[AS " << this << "] Shutting down";
|
|
619
|
+
shutdown_ = true;
|
|
620
|
+
endpoint_map_.clear();
|
|
621
|
+
slice_map_.reset();
|
|
622
|
+
assignment_ = absl::CancelledError("LB policy shut down");
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
void AutoshardingLbPolicy::ResetBackoffLocked() {
|
|
626
|
+
for (const auto& [_, endpoint] : endpoint_map_) {
|
|
627
|
+
endpoint->ResetBackoffLocked();
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
// Extracts hostname from endpoint attribute (gRFC A81) or first address.
|
|
632
|
+
std::string ComputeHostname(const EndpointAddresses& endpoint) {
|
|
633
|
+
auto hostname_arg = endpoint.args().GetString(GRPC_ARG_ADDRESS_NAME);
|
|
634
|
+
if (hostname_arg.has_value()) return std::string(*hostname_arg);
|
|
635
|
+
return grpc_sockaddr_to_string(&endpoint.addresses().front(), false)
|
|
636
|
+
.value_or("<invalid address>");
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
absl::Status AutoshardingLbPolicy::UpdateLocked(UpdateArgs args) {
|
|
640
|
+
// Save channel args.
|
|
641
|
+
args_ = std::move(args.args);
|
|
642
|
+
// Save config.
|
|
643
|
+
auto new_config = args.config.TakeAsSubclass<AutoShardingLbConfig>();
|
|
644
|
+
const bool channel_factory_key_changed =
|
|
645
|
+
config_ == nullptr ||
|
|
646
|
+
new_config->channel_factory_key() != config_->channel_factory_key();
|
|
647
|
+
const bool autosharding_target_changed =
|
|
648
|
+
config_ == nullptr ||
|
|
649
|
+
new_config->autosharding_target() != config_->autosharding_target();
|
|
650
|
+
config_ = std::move(new_config);
|
|
651
|
+
if (channel_factory_key_changed || autosharding_target_changed) {
|
|
652
|
+
CreateAutoshardingClientLocked();
|
|
653
|
+
}
|
|
654
|
+
// Update resolution note.
|
|
655
|
+
resolution_note_ = std::move(args.resolution_note);
|
|
656
|
+
// Update endpoint list.
|
|
657
|
+
absl::Status status;
|
|
658
|
+
if (!args.addresses.ok()) {
|
|
659
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO)
|
|
660
|
+
<< "[AS " << this << "] received update with addresses error: "
|
|
661
|
+
<< args.addresses.status();
|
|
662
|
+
status = args.addresses.status();
|
|
663
|
+
// If we already have an endpoint list, then we keep using it.
|
|
664
|
+
} else {
|
|
665
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO)
|
|
666
|
+
<< "[AS " << this << "] received update";
|
|
667
|
+
endpoints_.clear();
|
|
668
|
+
std::map<std::string, OrphanablePtr<AutoShardingEndpoint>> endpoint_map;
|
|
669
|
+
std::vector<std::string> errors;
|
|
670
|
+
(*args.addresses)->ForEach([&](const EndpointAddresses& endpoint) {
|
|
671
|
+
const std::string hostname = ComputeHostname(endpoint);
|
|
672
|
+
auto& autosharding_endpoint = endpoint_map[hostname];
|
|
673
|
+
// If we've already seen this hostname, skip the dup.
|
|
674
|
+
if (autosharding_endpoint != nullptr) {
|
|
675
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO)
|
|
676
|
+
<< "[AS " << this << "] ignoring duplicate endpoint for \""
|
|
677
|
+
<< hostname << "\"";
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
// Have not yet seen this hostname, so add a new endpoint.
|
|
681
|
+
const size_t index = endpoints_.size();
|
|
682
|
+
endpoints_.push_back(endpoint);
|
|
683
|
+
// If present in old map, retain it; otherwise, create a new one.
|
|
684
|
+
auto it = endpoint_map_.find(hostname);
|
|
685
|
+
if (it != endpoint_map_.end()) {
|
|
686
|
+
absl::Status status = it->second->UpdateLocked(index);
|
|
687
|
+
if (!status.ok()) {
|
|
688
|
+
errors.emplace_back(
|
|
689
|
+
absl::StrCat("endpoint ", hostname, ": ", status.ToString()));
|
|
690
|
+
}
|
|
691
|
+
autosharding_endpoint = std::move(it->second);
|
|
692
|
+
} else {
|
|
693
|
+
autosharding_endpoint = MakeOrphanable<AutoShardingEndpoint>(
|
|
694
|
+
RefAsSubclass<AutoshardingLbPolicy>(), index);
|
|
695
|
+
}
|
|
696
|
+
});
|
|
697
|
+
endpoint_map_ = std::move(endpoint_map);
|
|
698
|
+
if (!errors.empty()) {
|
|
699
|
+
status = absl::UnavailableError(absl::StrCat(
|
|
700
|
+
"errors from children: [", absl::StrJoin(errors, "; "), "]"));
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
// If the address list is empty, report TRANSIENT_FAILURE.
|
|
704
|
+
if (endpoints_.empty()) {
|
|
705
|
+
if (status.ok()) {
|
|
706
|
+
status = absl::UnavailableError(
|
|
707
|
+
absl::StrCat("empty address list: ", resolution_note_));
|
|
708
|
+
}
|
|
709
|
+
channel_control_helper()->UpdateState(
|
|
710
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
|
711
|
+
MakeRefCounted<TransientFailurePicker>(status));
|
|
712
|
+
} else {
|
|
713
|
+
// Build new SliceMap. If we have no assignment, we reset it.
|
|
714
|
+
slice_map_ = assignment_.ok()
|
|
715
|
+
? MakeRefCounted<SliceMap>(*assignment_, endpoint_map_)
|
|
716
|
+
: nullptr;
|
|
717
|
+
// Return a new picker.
|
|
718
|
+
UpdateAggregatedConnectivityStateLocked(absl::OkStatus());
|
|
719
|
+
}
|
|
720
|
+
return status;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
void AutoshardingLbPolicy::CreateAutoshardingClientLocked() {
|
|
724
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO)
|
|
725
|
+
<< "[AS " << this << "] creating autosharding client for target \""
|
|
726
|
+
<< config_->autosharding_target() << "\" using channel factory key \""
|
|
727
|
+
<< config_->channel_factory_key() << "\"";
|
|
728
|
+
// TODO(bpawan): Create the autosharding client here (gRFC A119).
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
void AutoshardingLbPolicy::OnAssignmentReceivedLocked(
|
|
732
|
+
absl::StatusOr<Assignment> assignment) {
|
|
733
|
+
if (shutdown_) return;
|
|
734
|
+
assignment_ = std::move(assignment);
|
|
735
|
+
// Build a new SliceMap. If we have no assignment, we reset it.
|
|
736
|
+
slice_map_ = assignment_.ok()
|
|
737
|
+
? MakeRefCounted<SliceMap>(*assignment_, endpoint_map_)
|
|
738
|
+
: nullptr;
|
|
739
|
+
UpdateAggregatedConnectivityStateLocked(absl::OkStatus());
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
void AutoshardingLbPolicy::UpdateAggregatedConnectivityStateLocked(
|
|
743
|
+
absl::Status status) {
|
|
744
|
+
// TODO(bpawan): Once the autosharding client is implemented, if we don't
|
|
745
|
+
// yet have an assignment, immediately report CONNECTING state with a
|
|
746
|
+
// queuing picker (and set delay_type per gRFC A121 once supported) without
|
|
747
|
+
// iterating over endpoints.
|
|
748
|
+
// If we have no assignment and fallback is disabled, we cannot route any
|
|
749
|
+
// pick, so report TRANSIENT_FAILURE.
|
|
750
|
+
if (!assignment_.ok() && !config_->enable_fallback()) {
|
|
751
|
+
std::string message(assignment_.status().message());
|
|
752
|
+
if (!resolution_note_.empty()) {
|
|
753
|
+
absl::StrAppend(&message, " (", resolution_note_, ")");
|
|
754
|
+
}
|
|
755
|
+
absl::Status pick_status = absl::UnavailableError(message);
|
|
756
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO)
|
|
757
|
+
<< "[AS " << this << "] no assignment and fallback disabled, failing "
|
|
758
|
+
<< "picks: " << pick_status;
|
|
759
|
+
channel_control_helper()->UpdateState(
|
|
760
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, pick_status,
|
|
761
|
+
MakeRefCounted<TransientFailurePicker>(pick_status));
|
|
762
|
+
return;
|
|
763
|
+
}
|
|
764
|
+
// Count the number of endpoints in each state.
|
|
765
|
+
size_t num_idle = 0;
|
|
766
|
+
size_t num_connecting = 0;
|
|
767
|
+
size_t num_ready = 0;
|
|
768
|
+
size_t num_transient_failure = 0;
|
|
769
|
+
AutoShardingEndpoint* idle_endpoint = nullptr;
|
|
770
|
+
for (const auto& [_, endpoint] : endpoint_map_) {
|
|
771
|
+
switch (endpoint->connectivity_state()) {
|
|
772
|
+
case GRPC_CHANNEL_READY:
|
|
773
|
+
++num_ready;
|
|
774
|
+
break;
|
|
775
|
+
case GRPC_CHANNEL_IDLE:
|
|
776
|
+
++num_idle;
|
|
777
|
+
if (idle_endpoint == nullptr) idle_endpoint = endpoint.get();
|
|
778
|
+
break;
|
|
779
|
+
case GRPC_CHANNEL_CONNECTING:
|
|
780
|
+
++num_connecting;
|
|
781
|
+
break;
|
|
782
|
+
case GRPC_CHANNEL_TRANSIENT_FAILURE:
|
|
783
|
+
++num_transient_failure;
|
|
784
|
+
break;
|
|
785
|
+
default:
|
|
786
|
+
Crash("child policy should never report SHUTDOWN");
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
// The overall aggregation rules here are the same as those used by the
|
|
790
|
+
// ring_hash LB policy (gRFC A42):
|
|
791
|
+
// 1. If there is at least one endpoint in READY state, report READY.
|
|
792
|
+
// 2. If there are 2 or more endpoints in TRANSIENT_FAILURE state, report
|
|
793
|
+
// TRANSIENT_FAILURE.
|
|
794
|
+
// 3. If there is at least one endpoint in CONNECTING state, report
|
|
795
|
+
// CONNECTING.
|
|
796
|
+
// 4. If there is one endpoint in TRANSIENT_FAILURE state and there is
|
|
797
|
+
// more than one endpoint, report CONNECTING.
|
|
798
|
+
// 5. If there is at least one endpoint in IDLE state, report IDLE.
|
|
799
|
+
// 6. Otherwise, report TRANSIENT_FAILURE.
|
|
800
|
+
grpc_connectivity_state state;
|
|
801
|
+
if (num_ready > 0) {
|
|
802
|
+
state = GRPC_CHANNEL_READY;
|
|
803
|
+
} else if (num_transient_failure >= 2) {
|
|
804
|
+
state = GRPC_CHANNEL_TRANSIENT_FAILURE;
|
|
805
|
+
} else if (num_connecting > 0) {
|
|
806
|
+
state = GRPC_CHANNEL_CONNECTING;
|
|
807
|
+
} else if (num_transient_failure == 1 && endpoint_map_.size() > 1) {
|
|
808
|
+
state = GRPC_CHANNEL_CONNECTING;
|
|
809
|
+
} else if (num_idle > 0) {
|
|
810
|
+
state = GRPC_CHANNEL_IDLE;
|
|
811
|
+
} else {
|
|
812
|
+
state = GRPC_CHANNEL_TRANSIENT_FAILURE;
|
|
813
|
+
}
|
|
814
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO)
|
|
815
|
+
<< "[AS " << this << "] setting connectivity state to "
|
|
816
|
+
<< ConnectivityStateName(state) << " (num_idle=" << num_idle
|
|
817
|
+
<< ", num_connecting=" << num_connecting << ", num_ready=" << num_ready
|
|
818
|
+
<< ", num_transient_failure=" << num_transient_failure
|
|
819
|
+
<< ", size=" << endpoint_map_.size() << ")";
|
|
820
|
+
// In TRANSIENT_FAILURE, report the last reported failure.
|
|
821
|
+
// Otherwise, report OK.
|
|
822
|
+
if (state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
|
823
|
+
if (!status.ok()) {
|
|
824
|
+
last_failure_ = absl::UnavailableError(absl::StrCat(
|
|
825
|
+
"no reachable endpoints; last error: ", status.message()));
|
|
826
|
+
}
|
|
827
|
+
status = last_failure_;
|
|
828
|
+
} else {
|
|
829
|
+
status = absl::OkStatus();
|
|
830
|
+
}
|
|
831
|
+
channel_control_helper()->UpdateState(
|
|
832
|
+
state, status,
|
|
833
|
+
MakeRefCounted<Picker>(RefAsSubclass<AutoshardingLbPolicy>(
|
|
834
|
+
DEBUG_LOCATION, "AutoShardingPicker"),
|
|
835
|
+
slice_map_));
|
|
836
|
+
// If in TRANSIENT_FAILURE or CONNECTING without a CONNECTING endpoint,
|
|
837
|
+
// trigger a connection attempt on an IDLE endpoint to prevent premature
|
|
838
|
+
// failover when used as a child of the priority policy (same as ring_hash).
|
|
839
|
+
if ((state == GRPC_CHANNEL_CONNECTING ||
|
|
840
|
+
state == GRPC_CHANNEL_TRANSIENT_FAILURE) &&
|
|
841
|
+
num_connecting == 0 && idle_endpoint != nullptr) {
|
|
842
|
+
GRPC_TRACE_LOG(autosharding_lb, INFO)
|
|
843
|
+
<< "[AS " << this
|
|
844
|
+
<< "] triggering internal connection attempt for endpoint "
|
|
845
|
+
<< idle_endpoint << " ("
|
|
846
|
+
<< endpoints_[idle_endpoint->index()].ToString() << ") (index "
|
|
847
|
+
<< idle_endpoint->index() << " of " << endpoints_.size() << ")";
|
|
848
|
+
idle_endpoint->RequestConnectionLocked();
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
//
|
|
853
|
+
// factory
|
|
854
|
+
//
|
|
855
|
+
|
|
856
|
+
class AutoShardingFactory final : public LoadBalancingPolicyFactory {
|
|
857
|
+
public:
|
|
858
|
+
OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
|
|
859
|
+
LoadBalancingPolicy::Args args) const override {
|
|
860
|
+
return MakeOrphanable<AutoshardingLbPolicy>(std::move(args));
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
absl::string_view name() const override { return kAutoSharding; }
|
|
864
|
+
|
|
865
|
+
absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
|
|
866
|
+
ParseLoadBalancingConfig(const Json& json) const override {
|
|
867
|
+
return LoadFromJson<RefCountedPtr<AutoShardingLbConfig>>(
|
|
868
|
+
json, JsonArgs(), "errors validating autosharding LB policy config");
|
|
869
|
+
}
|
|
870
|
+
};
|
|
871
|
+
|
|
872
|
+
} // namespace
|
|
873
|
+
|
|
874
|
+
//
|
|
875
|
+
// AutoShardingLbConfig
|
|
876
|
+
//
|
|
877
|
+
|
|
878
|
+
absl::string_view AutoShardingLbConfig::name() const { return kAutoSharding; }
|
|
879
|
+
|
|
880
|
+
const JsonLoaderInterface* AutoShardingLbConfig::JsonLoader(const JsonArgs&) {
|
|
881
|
+
static const auto* loader =
|
|
882
|
+
JsonObjectLoader<AutoShardingLbConfig>()
|
|
883
|
+
.Field("channelFactoryKey",
|
|
884
|
+
&AutoShardingLbConfig::channel_factory_key_)
|
|
885
|
+
.Field("autoshardingTarget",
|
|
886
|
+
&AutoShardingLbConfig::autosharding_target_)
|
|
887
|
+
.Field("keyHeaderName", &AutoShardingLbConfig::key_header_name_)
|
|
888
|
+
.OptionalField("enableFallback",
|
|
889
|
+
&AutoShardingLbConfig::enable_fallback_)
|
|
890
|
+
.OptionalField("initialAssignmentTimeout",
|
|
891
|
+
&AutoShardingLbConfig::initial_assignment_timeout_)
|
|
892
|
+
.Finish();
|
|
893
|
+
return loader;
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
void AutoShardingLbConfig::JsonPostLoad(const Json&, const JsonArgs&,
|
|
897
|
+
ValidationErrors* errors) {
|
|
898
|
+
{
|
|
899
|
+
ValidationErrors::ScopedField field(errors, ".channelFactoryKey");
|
|
900
|
+
if (!errors->FieldHasErrors() && channel_factory_key_.empty()) {
|
|
901
|
+
errors->AddError("must be non-empty");
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
{
|
|
905
|
+
ValidationErrors::ScopedField field(errors, ".autoshardingTarget");
|
|
906
|
+
if (!errors->FieldHasErrors() && autosharding_target_.empty()) {
|
|
907
|
+
errors->AddError("must be non-empty");
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
{
|
|
911
|
+
ValidationErrors::ScopedField field(errors, ".keyHeaderName");
|
|
912
|
+
if (!errors->FieldHasErrors() &&
|
|
913
|
+
key_header_name_.as_string_view().empty()) {
|
|
914
|
+
errors->AddError("must be non-empty");
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
{
|
|
918
|
+
ValidationErrors::ScopedField field(errors, ".initialAssignmentTimeout");
|
|
919
|
+
if (!errors->FieldHasErrors() &&
|
|
920
|
+
initial_assignment_timeout_.millis() <= 0) {
|
|
921
|
+
errors->AddError("must be greater than zero");
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
void RegisterAutoShardingLbPolicy(CoreConfiguration::Builder* builder) {
|
|
927
|
+
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
|
928
|
+
std::make_unique<AutoShardingFactory>());
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
} // namespace grpc_core
|