grpc 1.47.0 → 1.48.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -17,69 +17,57 @@
|
|
17
17
|
#include <cassert>
|
18
18
|
#include <memory>
|
19
19
|
|
20
|
+
#include "absl/base/internal/raw_logging.h"
|
20
21
|
#include "absl/container/inlined_vector.h"
|
21
22
|
#include "absl/strings/internal/cord_rep_btree.h"
|
23
|
+
#include "absl/strings/internal/cord_rep_crc.h"
|
22
24
|
#include "absl/strings/internal/cord_rep_flat.h"
|
23
25
|
#include "absl/strings/internal/cord_rep_ring.h"
|
26
|
+
#include "absl/strings/str_cat.h"
|
24
27
|
|
25
28
|
namespace absl {
|
26
29
|
ABSL_NAMESPACE_BEGIN
|
27
30
|
namespace cord_internal {
|
28
31
|
|
29
|
-
ABSL_CONST_INIT std::atomic<bool> cord_btree_enabled(kCordEnableBtreeDefault);
|
30
32
|
ABSL_CONST_INIT std::atomic<bool> cord_ring_buffer_enabled(
|
31
33
|
kCordEnableRingBufferDefault);
|
32
34
|
ABSL_CONST_INIT std::atomic<bool> shallow_subcords_enabled(
|
33
35
|
kCordShallowSubcordsDefault);
|
34
36
|
ABSL_CONST_INIT std::atomic<bool> cord_btree_exhaustive_validation(false);
|
35
37
|
|
38
|
+
void LogFatalNodeType(CordRep* rep) {
|
39
|
+
ABSL_INTERNAL_LOG(FATAL, absl::StrCat("Unexpected node type: ",
|
40
|
+
static_cast<int>(rep->tag)));
|
41
|
+
}
|
42
|
+
|
36
43
|
void CordRep::Destroy(CordRep* rep) {
|
37
44
|
assert(rep != nullptr);
|
38
45
|
|
39
|
-
absl::InlinedVector<CordRep*, Constants::kInlinedVectorSize> pending;
|
40
46
|
while (true) {
|
41
47
|
assert(!rep->refcount.IsImmortal());
|
42
|
-
if (rep->tag ==
|
43
|
-
CordRepConcat* rep_concat = rep->concat();
|
44
|
-
CordRep* right = rep_concat->right;
|
45
|
-
if (!right->refcount.Decrement()) {
|
46
|
-
pending.push_back(right);
|
47
|
-
}
|
48
|
-
CordRep* left = rep_concat->left;
|
49
|
-
delete rep_concat;
|
50
|
-
rep = nullptr;
|
51
|
-
if (!left->refcount.Decrement()) {
|
52
|
-
rep = left;
|
53
|
-
continue;
|
54
|
-
}
|
55
|
-
} else if (rep->tag == BTREE) {
|
48
|
+
if (rep->tag == BTREE) {
|
56
49
|
CordRepBtree::Destroy(rep->btree());
|
57
|
-
|
50
|
+
return;
|
58
51
|
} else if (rep->tag == RING) {
|
59
52
|
CordRepRing::Destroy(rep->ring());
|
60
|
-
|
53
|
+
return;
|
61
54
|
} else if (rep->tag == EXTERNAL) {
|
62
55
|
CordRepExternal::Delete(rep);
|
63
|
-
|
56
|
+
return;
|
64
57
|
} else if (rep->tag == SUBSTRING) {
|
65
58
|
CordRepSubstring* rep_substring = rep->substring();
|
66
|
-
|
59
|
+
rep = rep_substring->child;
|
67
60
|
delete rep_substring;
|
68
|
-
rep
|
69
|
-
|
70
|
-
rep = child;
|
71
|
-
continue;
|
61
|
+
if (rep->refcount.Decrement()) {
|
62
|
+
return;
|
72
63
|
}
|
64
|
+
} else if (rep->tag == CRC) {
|
65
|
+
CordRepCrc::Destroy(rep->crc());
|
66
|
+
return;
|
73
67
|
} else {
|
68
|
+
assert(rep->IsFlat());
|
74
69
|
CordRepFlat::Delete(rep);
|
75
|
-
|
76
|
-
}
|
77
|
-
|
78
|
-
if (!pending.empty()) {
|
79
|
-
rep = pending.back();
|
80
|
-
pending.pop_back();
|
81
|
-
} else {
|
82
|
-
break;
|
70
|
+
return;
|
83
71
|
}
|
84
72
|
}
|
85
73
|
}
|
@@ -21,6 +21,7 @@
|
|
21
21
|
#include <cstdint>
|
22
22
|
#include <type_traits>
|
23
23
|
|
24
|
+
#include "absl/base/attributes.h"
|
24
25
|
#include "absl/base/config.h"
|
25
26
|
#include "absl/base/internal/endian.h"
|
26
27
|
#include "absl/base/internal/invoke.h"
|
@@ -33,16 +34,27 @@ namespace absl {
|
|
33
34
|
ABSL_NAMESPACE_BEGIN
|
34
35
|
namespace cord_internal {
|
35
36
|
|
37
|
+
// The overhead of a vtable is too much for Cord, so we roll our own subclasses
|
38
|
+
// using only a single byte to differentiate classes from each other - the "tag"
|
39
|
+
// byte. Define the subclasses first so we can provide downcasting helper
|
40
|
+
// functions in the base class.
|
41
|
+
struct CordRep;
|
42
|
+
struct CordRepConcat;
|
43
|
+
struct CordRepExternal;
|
44
|
+
struct CordRepFlat;
|
45
|
+
struct CordRepSubstring;
|
46
|
+
struct CordRepCrc;
|
47
|
+
class CordRepRing;
|
48
|
+
class CordRepBtree;
|
49
|
+
|
36
50
|
class CordzInfo;
|
37
51
|
|
38
52
|
// Default feature enable states for cord ring buffers
|
39
53
|
enum CordFeatureDefaults {
|
40
|
-
kCordEnableBtreeDefault = true,
|
41
54
|
kCordEnableRingBufferDefault = false,
|
42
55
|
kCordShallowSubcordsDefault = false
|
43
56
|
};
|
44
57
|
|
45
|
-
extern std::atomic<bool> cord_btree_enabled;
|
46
58
|
extern std::atomic<bool> cord_ring_buffer_enabled;
|
47
59
|
extern std::atomic<bool> shallow_subcords_enabled;
|
48
60
|
|
@@ -52,10 +64,6 @@ extern std::atomic<bool> shallow_subcords_enabled;
|
|
52
64
|
// O(n^2) complexity as recursive / full tree validation is O(n).
|
53
65
|
extern std::atomic<bool> cord_btree_exhaustive_validation;
|
54
66
|
|
55
|
-
inline void enable_cord_btree(bool enable) {
|
56
|
-
cord_btree_enabled.store(enable, std::memory_order_relaxed);
|
57
|
-
}
|
58
|
-
|
59
67
|
inline void enable_cord_ring_buffer(bool enable) {
|
60
68
|
cord_ring_buffer_enabled.store(enable, std::memory_order_relaxed);
|
61
69
|
}
|
@@ -80,6 +88,9 @@ enum Constants {
|
|
80
88
|
kMaxBytesToCopy = 511
|
81
89
|
};
|
82
90
|
|
91
|
+
// Emits a fatal error "Unexpected node type: xyz" and aborts the program.
|
92
|
+
ABSL_ATTRIBUTE_NORETURN void LogFatalNodeType(CordRep* rep);
|
93
|
+
|
83
94
|
// Compact class for tracking the reference count and state flags for CordRep
|
84
95
|
// instances. Data is stored in an atomic int32_t for compactness and speed.
|
85
96
|
class RefcountAndFlags {
|
@@ -87,9 +98,6 @@ class RefcountAndFlags {
|
|
87
98
|
constexpr RefcountAndFlags() : count_{kRefIncrement} {}
|
88
99
|
struct Immortal {};
|
89
100
|
explicit constexpr RefcountAndFlags(Immortal) : count_(kImmortalFlag) {}
|
90
|
-
struct WithCrc {};
|
91
|
-
explicit constexpr RefcountAndFlags(WithCrc)
|
92
|
-
: count_(kCrcFlag | kRefIncrement) {}
|
93
101
|
|
94
102
|
// Increments the reference count. Imposes no memory ordering.
|
95
103
|
inline void Increment() {
|
@@ -125,32 +133,14 @@ class RefcountAndFlags {
|
|
125
133
|
return count_.load(std::memory_order_acquire) >> kNumFlags;
|
126
134
|
}
|
127
135
|
|
128
|
-
// Returns
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
//
|
134
|
-
//
|
135
|
-
//
|
136
|
-
// safely mutated.
|
137
|
-
//
|
138
|
-
// If the referenced item is shared, carries a CRC, or is immortal,
|
139
|
-
// it should not be modified in-place, and this function returns false.
|
140
|
-
//
|
141
|
-
// This call performs the memory barrier needed for the owning thread
|
142
|
-
// to act on the object, so that if it returns true, it may safely
|
143
|
-
// assume exclusive access to the object.
|
144
|
-
inline bool IsMutable() {
|
145
|
-
return (count_.load(std::memory_order_acquire)) == kRefIncrement;
|
146
|
-
}
|
147
|
-
|
148
|
-
// Returns whether the atomic integer is 1. Similar to IsMutable(),
|
149
|
-
// but does not check for a stored CRC. (An unshared node with a CRC is not
|
150
|
-
// mutable, because changing its data would invalidate the CRC.)
|
151
|
-
//
|
152
|
-
// When this returns true, there are no other references, and data sinks
|
153
|
-
// may safely adopt the children of the CordRep.
|
136
|
+
// Returns whether the atomic integer is 1.
|
137
|
+
// If the reference count is used in the conventional way, a
|
138
|
+
// reference count of 1 implies that the current thread owns the
|
139
|
+
// reference and no other thread shares it.
|
140
|
+
// This call performs the test for a reference count of one, and
|
141
|
+
// performs the memory barrier needed for the owning thread
|
142
|
+
// to act on the object, knowing that it has exclusive access to the
|
143
|
+
// object. Always returns false when the immortal bit is set.
|
154
144
|
inline bool IsOne() {
|
155
145
|
return (count_.load(std::memory_order_acquire) & kRefcountMask) ==
|
156
146
|
kRefIncrement;
|
@@ -166,51 +156,43 @@ class RefcountAndFlags {
|
|
166
156
|
// used for the StringConstant constructor to avoid collecting immutable
|
167
157
|
// constant cords.
|
168
158
|
// kReservedFlag is reserved for future use.
|
169
|
-
enum {
|
159
|
+
enum Flags {
|
170
160
|
kNumFlags = 2,
|
171
161
|
|
172
162
|
kImmortalFlag = 0x1,
|
173
|
-
|
163
|
+
kReservedFlag = 0x2,
|
174
164
|
kRefIncrement = (1 << kNumFlags),
|
175
165
|
|
176
166
|
// Bitmask to use when checking refcount by equality. This masks out
|
177
167
|
// all flags except kImmortalFlag, which is part of the refcount for
|
178
168
|
// purposes of equality. (A refcount of 0 or 1 does not count as 0 or 1
|
179
169
|
// if the immortal bit is set.)
|
180
|
-
kRefcountMask = ~
|
170
|
+
kRefcountMask = ~kReservedFlag,
|
181
171
|
};
|
182
172
|
|
183
173
|
std::atomic<int32_t> count_;
|
184
174
|
};
|
185
175
|
|
186
|
-
// The overhead of a vtable is too much for Cord, so we roll our own subclasses
|
187
|
-
// using only a single byte to differentiate classes from each other - the "tag"
|
188
|
-
// byte. Define the subclasses first so we can provide downcasting helper
|
189
|
-
// functions in the base class.
|
190
|
-
|
191
|
-
struct CordRepConcat;
|
192
|
-
struct CordRepExternal;
|
193
|
-
struct CordRepFlat;
|
194
|
-
struct CordRepSubstring;
|
195
|
-
class CordRepRing;
|
196
|
-
class CordRepBtree;
|
197
|
-
|
198
176
|
// Various representations that we allow
|
199
177
|
enum CordRepKind {
|
200
|
-
|
178
|
+
UNUSED_0 = 0,
|
201
179
|
SUBSTRING = 1,
|
202
|
-
|
203
|
-
|
204
|
-
|
180
|
+
CRC = 2,
|
181
|
+
BTREE = 3,
|
182
|
+
RING = 4,
|
183
|
+
EXTERNAL = 5,
|
205
184
|
|
206
185
|
// We have different tags for different sized flat arrays,
|
207
|
-
// starting with FLAT, and limited to MAX_FLAT_TAG. The
|
208
|
-
//
|
209
|
-
//
|
210
|
-
//
|
211
|
-
//
|
212
|
-
FLAT
|
213
|
-
|
186
|
+
// starting with FLAT, and limited to MAX_FLAT_TAG. The below values map to an
|
187
|
+
// allocated range of 32 bytes to 256 KB. The current granularity is:
|
188
|
+
// - 8 byte granularity for flat sizes in [32 - 512]
|
189
|
+
// - 64 byte granularity for flat sizes in (512 - 8KiB]
|
190
|
+
// - 4KiB byte granularity for flat sizes in (8KiB, 256 KiB]
|
191
|
+
// If a new tag is needed in the future, then 'FLAT' and 'MAX_FLAT_TAG' should
|
192
|
+
// be adjusted as well as the Tag <---> Size mapping logic so that FLAT still
|
193
|
+
// represents the minimum flat allocation size. (32 bytes as of now).
|
194
|
+
FLAT = 6,
|
195
|
+
MAX_FLAT_TAG = 248
|
214
196
|
};
|
215
197
|
|
216
198
|
// There are various locations where we want to check if some rep is a 'plain'
|
@@ -225,6 +207,18 @@ static_assert(EXTERNAL == RING + 1, "BTREE and EXTERNAL not consecutive");
|
|
225
207
|
static_assert(FLAT == EXTERNAL + 1, "EXTERNAL and FLAT not consecutive");
|
226
208
|
|
227
209
|
struct CordRep {
|
210
|
+
// Result from an `extract edge` operation. Contains the (possibly changed)
|
211
|
+
// tree node as well as the extracted edge, or {tree, nullptr} if no edge
|
212
|
+
// could be extracted.
|
213
|
+
// On success, the returned `tree` value is null if `extracted` was the only
|
214
|
+
// data edge inside the tree, a data edge if there were only two data edges in
|
215
|
+
// the tree, or the (possibly new / smaller) remaining tree with the extracted
|
216
|
+
// data edge removed.
|
217
|
+
struct ExtractResult {
|
218
|
+
CordRep* tree;
|
219
|
+
CordRep* extracted;
|
220
|
+
};
|
221
|
+
|
228
222
|
CordRep() = default;
|
229
223
|
constexpr CordRep(RefcountAndFlags::Immortal immortal, size_t l)
|
230
224
|
: length(l), refcount(immortal), tag(EXTERNAL), storage{} {}
|
@@ -249,18 +243,18 @@ struct CordRep {
|
|
249
243
|
|
250
244
|
// Returns true if this instance's tag matches the requested type.
|
251
245
|
constexpr bool IsRing() const { return tag == RING; }
|
252
|
-
constexpr bool IsConcat() const { return tag == CONCAT; }
|
253
246
|
constexpr bool IsSubstring() const { return tag == SUBSTRING; }
|
247
|
+
constexpr bool IsCrc() const { return tag == CRC; }
|
254
248
|
constexpr bool IsExternal() const { return tag == EXTERNAL; }
|
255
249
|
constexpr bool IsFlat() const { return tag >= FLAT; }
|
256
250
|
constexpr bool IsBtree() const { return tag == BTREE; }
|
257
251
|
|
258
252
|
inline CordRepRing* ring();
|
259
253
|
inline const CordRepRing* ring() const;
|
260
|
-
inline CordRepConcat* concat();
|
261
|
-
inline const CordRepConcat* concat() const;
|
262
254
|
inline CordRepSubstring* substring();
|
263
255
|
inline const CordRepSubstring* substring() const;
|
256
|
+
inline CordRepCrc* crc();
|
257
|
+
inline const CordRepCrc* crc() const;
|
264
258
|
inline CordRepExternal* external();
|
265
259
|
inline const CordRepExternal* external() const;
|
266
260
|
inline CordRepFlat* flat();
|
@@ -283,17 +277,23 @@ struct CordRep {
|
|
283
277
|
static inline void Unref(CordRep* rep);
|
284
278
|
};
|
285
279
|
|
286
|
-
struct CordRepConcat : public CordRep {
|
287
|
-
CordRep* left;
|
288
|
-
CordRep* right;
|
289
|
-
|
290
|
-
uint8_t depth() const { return storage[0]; }
|
291
|
-
void set_depth(uint8_t depth) { storage[0] = depth; }
|
292
|
-
};
|
293
|
-
|
294
280
|
struct CordRepSubstring : public CordRep {
|
295
281
|
size_t start; // Starting offset of substring in child
|
296
282
|
CordRep* child;
|
283
|
+
|
284
|
+
// Creates a substring on `child`, adopting a reference on `child`.
|
285
|
+
// Requires `child` to be either a flat or external node, and `pos` and `n` to
|
286
|
+
// form a non-empty partial sub range of `'child`, i.e.:
|
287
|
+
// `n > 0 && n < length && n + pos <= length`
|
288
|
+
static inline CordRepSubstring* Create(CordRep* child, size_t pos, size_t n);
|
289
|
+
|
290
|
+
// Creates a substring of `rep`. Does not adopt a reference on `rep`.
|
291
|
+
// Requires `IsDataEdge(rep) && n > 0 && pos + n <= rep->length`.
|
292
|
+
// If `n == rep->length` then this method returns `CordRep::Ref(rep)`
|
293
|
+
// If `rep` is a substring of a flat or external node, then this method will
|
294
|
+
// return a new substring of that flat or external node with `pos` adjusted
|
295
|
+
// with the original `start` position.
|
296
|
+
static inline CordRep* Substring(CordRep* rep, size_t pos, size_t n);
|
297
297
|
};
|
298
298
|
|
299
299
|
// Type for function pointer that will invoke the releaser function and also
|
@@ -357,6 +357,47 @@ struct CordRepExternalImpl
|
|
357
357
|
}
|
358
358
|
};
|
359
359
|
|
360
|
+
inline CordRepSubstring* CordRepSubstring::Create(CordRep* child, size_t pos,
|
361
|
+
size_t n) {
|
362
|
+
assert(child != nullptr);
|
363
|
+
assert(n > 0);
|
364
|
+
assert(n < child->length);
|
365
|
+
assert(pos < child->length);
|
366
|
+
assert(n <= child->length - pos);
|
367
|
+
|
368
|
+
// TODO(b/217376272): Harden internal logic.
|
369
|
+
// Move to strategical places inside the Cord logic and make this an assert.
|
370
|
+
if (ABSL_PREDICT_FALSE(!(child->IsExternal() || child->IsFlat()))) {
|
371
|
+
LogFatalNodeType(child);
|
372
|
+
}
|
373
|
+
|
374
|
+
CordRepSubstring* rep = new CordRepSubstring();
|
375
|
+
rep->length = n;
|
376
|
+
rep->tag = SUBSTRING;
|
377
|
+
rep->start = pos;
|
378
|
+
rep->child = child;
|
379
|
+
return rep;
|
380
|
+
}
|
381
|
+
|
382
|
+
inline CordRep* CordRepSubstring::Substring(CordRep* rep, size_t pos,
|
383
|
+
size_t n) {
|
384
|
+
assert(rep != nullptr);
|
385
|
+
assert(n != 0);
|
386
|
+
assert(pos < rep->length);
|
387
|
+
assert(n <= rep->length - pos);
|
388
|
+
if (n == rep->length) return CordRep::Ref(rep);
|
389
|
+
if (rep->IsSubstring()) {
|
390
|
+
pos += rep->substring()->start;
|
391
|
+
rep = rep->substring()->child;
|
392
|
+
}
|
393
|
+
CordRepSubstring* substr = new CordRepSubstring();
|
394
|
+
substr->length = n;
|
395
|
+
substr->tag = SUBSTRING;
|
396
|
+
substr->start = pos;
|
397
|
+
substr->child = CordRep::Ref(rep);
|
398
|
+
return substr;
|
399
|
+
}
|
400
|
+
|
360
401
|
inline void CordRepExternal::Delete(CordRep* rep) {
|
361
402
|
assert(rep != nullptr && rep->IsExternal());
|
362
403
|
auto* rep_external = static_cast<CordRepExternal*>(rep);
|
@@ -370,7 +411,8 @@ struct ConstInitExternalStorage {
|
|
370
411
|
};
|
371
412
|
|
372
413
|
template <typename Str>
|
373
|
-
CordRepExternal
|
414
|
+
ABSL_CONST_INIT CordRepExternal
|
415
|
+
ConstInitExternalStorage<Str>::value(Str::value);
|
374
416
|
|
375
417
|
enum {
|
376
418
|
kMaxInline = 15,
|
@@ -456,8 +498,8 @@ class InlineData {
|
|
456
498
|
// Requires the current instance to hold a tree value.
|
457
499
|
CordzInfo* cordz_info() const {
|
458
500
|
assert(is_tree());
|
459
|
-
intptr_t info =
|
460
|
-
|
501
|
+
intptr_t info = static_cast<intptr_t>(
|
502
|
+
absl::big_endian::ToHost64(static_cast<uint64_t>(as_tree_.cordz_info)));
|
461
503
|
assert(info & 1);
|
462
504
|
return reinterpret_cast<CordzInfo*>(info - 1);
|
463
505
|
}
|
@@ -467,8 +509,9 @@ class InlineData {
|
|
467
509
|
// Requires the current instance to hold a tree value.
|
468
510
|
void set_cordz_info(CordzInfo* cordz_info) {
|
469
511
|
assert(is_tree());
|
470
|
-
|
471
|
-
as_tree_.cordz_info =
|
512
|
+
uintptr_t info = reinterpret_cast<uintptr_t>(cordz_info) | 1;
|
513
|
+
as_tree_.cordz_info =
|
514
|
+
static_cast<cordz_info_t>(absl::big_endian::FromHost64(info));
|
472
515
|
}
|
473
516
|
|
474
517
|
// Resets the current cordz_info to null / empty.
|
@@ -568,16 +611,6 @@ class InlineData {
|
|
568
611
|
|
569
612
|
static_assert(sizeof(InlineData) == kMaxInline + 1, "");
|
570
613
|
|
571
|
-
inline CordRepConcat* CordRep::concat() {
|
572
|
-
assert(IsConcat());
|
573
|
-
return static_cast<CordRepConcat*>(this);
|
574
|
-
}
|
575
|
-
|
576
|
-
inline const CordRepConcat* CordRep::concat() const {
|
577
|
-
assert(IsConcat());
|
578
|
-
return static_cast<const CordRepConcat*>(this);
|
579
|
-
}
|
580
|
-
|
581
614
|
inline CordRepSubstring* CordRep::substring() {
|
582
615
|
assert(IsSubstring());
|
583
616
|
return static_cast<CordRepSubstring*>(this);
|
@@ -599,7 +632,9 @@ inline const CordRepExternal* CordRep::external() const {
|
|
599
632
|
}
|
600
633
|
|
601
634
|
inline CordRep* CordRep::Ref(CordRep* rep) {
|
602
|
-
|
635
|
+
// ABSL_ASSUME is a workaround for
|
636
|
+
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105585
|
637
|
+
ABSL_ASSUME(rep != nullptr);
|
603
638
|
rep->refcount.Increment();
|
604
639
|
return rep;
|
605
640
|
}
|