grpc 1.41.1 → 1.42.0
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 +55 -43
- data/include/grpc/event_engine/event_engine.h +82 -42
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
- data/include/grpc/event_engine/memory_allocator.h +210 -0
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/grpc_security.h +18 -0
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
- data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
- data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
- data/src/core/ext/filters/client_channel/client_channel.h +74 -27
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -5
- data/src/core/ext/filters/client_channel/connector.h +18 -18
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
- 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/grpclb/load_balancer_api.cc +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
- data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
- data/src/core/ext/filters/client_channel/resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
- data/src/core/ext/filters/client_channel/server_address.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
- data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
- data/src/core/ext/filters/client_channel/subchannel.h +29 -49
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
- data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
- data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
- data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
- data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
- data/src/core/ext/service_config/service_config_call_data.h +72 -0
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
- data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
- data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/xds_api.cc +325 -362
- data/src/core/ext/xds/xds_api.h +134 -82
- data/src/core/ext/xds/xds_bootstrap.h +10 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +527 -314
- data/src/core/ext/xds/xds_client.h +42 -37
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
- data/src/core/lib/address_utils/parse_address.cc +2 -0
- data/src/core/lib/avl/avl.cc +5 -5
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/channel/channel_args.cc +24 -6
- data/src/core/lib/channel/channel_args.h +9 -0
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_trace.cc +1 -1
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +3 -3
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/channelz_registry.cc +1 -1
- data/src/core/lib/channel/channelz_registry.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +1 -3
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/compression/compression.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +6 -4
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +44 -2
- data/src/core/lib/config/core_configuration.h +39 -1
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats_data.cc +13 -13
- data/src/core/lib/gpr/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/string.cc +2 -2
- data/src/core/lib/gpr/tls.h +1 -1
- data/src/core/lib/gpr/useful.h +79 -32
- data/src/core/lib/gprpp/arena.h +10 -0
- data/src/core/lib/gprpp/bitset.h +38 -16
- data/src/core/lib/gprpp/chunked_vector.h +211 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -1
- data/src/core/lib/gprpp/match.h +1 -1
- data/src/core/lib/gprpp/memory.h +6 -0
- data/src/core/lib/gprpp/overload.h +1 -1
- data/src/core/lib/gprpp/status_helper.cc +23 -3
- data/src/core/lib/gprpp/status_helper.h +12 -1
- data/src/core/lib/gprpp/table.h +411 -0
- data/src/core/lib/http/httpcli.cc +200 -182
- data/src/core/lib/http/parser.cc +2 -2
- data/src/core/lib/iomgr/call_combiner.cc +28 -10
- data/src/core/lib/iomgr/combiner.cc +6 -21
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
- data/src/core/lib/iomgr/error.cc +113 -52
- data/src/core/lib/iomgr/error.h +50 -9
- data/src/core/lib/iomgr/error_cfstream.cc +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
- data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
- data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
- data/src/core/lib/iomgr/event_engine/closure.h +10 -1
- data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
- data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
- data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
- data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
- data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -9
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
- data/src/core/lib/iomgr/executor.cc +6 -20
- data/src/core/lib/iomgr/iomgr.cc +3 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
- data/src/core/lib/iomgr/iomgr_internal.h +3 -2
- data/src/core/lib/iomgr/load_file.cc +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +18 -0
- data/src/core/lib/iomgr/pollset_custom.cc +1 -1
- data/src/core/lib/iomgr/pollset_custom.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
- data/src/core/lib/iomgr/resource_quota.cc +13 -11
- data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_mutator.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
- data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_posix.cc +4 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_windows.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +13 -13
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/json/json_util.cc +68 -0
- data/src/core/lib/json/json_util.h +57 -99
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +4 -2
- data/src/core/lib/security/credentials/credentials.h +6 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +9 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.cc +73 -43
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
- data/src/core/lib/security/transport/tsi_error.cc +3 -5
- data/src/core/lib/slice/slice.cc +0 -16
- data/src/core/lib/slice/slice_api.cc +39 -0
- data/src/core/lib/slice/slice_buffer.cc +5 -5
- data/src/core/lib/slice/slice_intern.cc +8 -13
- data/src/core/lib/slice/slice_internal.h +1 -244
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +121 -0
- data/src/core/lib/slice/slice_refcount_base.h +173 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/slice/static_slice.cc +529 -0
- data/src/core/lib/slice/static_slice.h +331 -0
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
- data/src/core/lib/surface/call.cc +103 -120
- data/src/core/lib/surface/call.h +0 -6
- data/src/core/lib/surface/channel.cc +19 -32
- data/src/core/lib/surface/channel.h +0 -9
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/completion_queue.cc +6 -5
- data/src/core/lib/surface/init.cc +0 -39
- data/src/core/lib/surface/init_secure.cc +17 -14
- data/src/core/lib/surface/lame_client.cc +18 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +25 -17
- data/src/core/lib/surface/server.h +17 -10
- data/src/core/lib/surface/validate_metadata.cc +5 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +42 -17
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata.cc +31 -10
- data/src/core/lib/transport/metadata.h +2 -1
- data/src/core/lib/transport/metadata_batch.cc +35 -371
- data/src/core/lib/transport/metadata_batch.h +905 -71
- data/src/core/lib/transport/parsed_metadata.h +263 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +714 -846
- data/src/core/lib/transport/static_metadata.h +115 -379
- data/src/core/lib/transport/status_metadata.cc +1 -0
- data/src/core/lib/transport/transport.cc +4 -5
- data/src/core/lib/transport/transport_op_string.cc +40 -20
- data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
- data/src/core/tsi/fake_transport_security.cc +15 -7
- data/src/core/tsi/local_transport_security.cc +36 -73
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
- data/src/core/tsi/ssl_transport_security.cc +10 -2
- data/src/core/tsi/transport_security.cc +12 -0
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_interface.h +26 -0
- data/src/ruby/ext/grpc/extconf.rb +12 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
- data/third_party/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +72 -45
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +479 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- metadata +75 -63
- data/include/grpc/event_engine/slice_allocator.h +0 -71
- data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
- data/src/core/lib/iomgr/udp_server.cc +0 -747
- data/src/core/lib/iomgr/udp_server.h +0 -103
- data/src/core/lib/transport/authority_override.cc +0 -40
- data/src/core/lib/transport/authority_override.h +0 -37
@@ -15,11 +15,12 @@
|
|
15
15
|
#ifndef GRPC_CORE_LIB_CONFIG_CORE_CONFIGURATION_H
|
16
16
|
#define GRPC_CORE_LIB_CONFIG_CORE_CONFIGURATION_H
|
17
17
|
|
18
|
-
#include <grpc/
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
20
|
#include <atomic>
|
21
21
|
|
22
22
|
#include "src/core/lib/channel/handshaker_registry.h"
|
23
|
+
#include "src/core/lib/surface/channel_init.h"
|
23
24
|
|
24
25
|
namespace grpc_core {
|
25
26
|
|
@@ -34,6 +35,8 @@ class CoreConfiguration {
|
|
34
35
|
// their configuration and assemble the published CoreConfiguration.
|
35
36
|
class Builder {
|
36
37
|
public:
|
38
|
+
ChannelInit::Builder* channel_init() { return &channel_init_; }
|
39
|
+
|
37
40
|
HandshakerRegistry::Builder* handshaker_registry() {
|
38
41
|
return &handshaker_registry_;
|
39
42
|
}
|
@@ -41,6 +44,7 @@ class CoreConfiguration {
|
|
41
44
|
private:
|
42
45
|
friend class CoreConfiguration;
|
43
46
|
|
47
|
+
ChannelInit::Builder channel_init_;
|
44
48
|
HandshakerRegistry::Builder handshaker_registry_;
|
45
49
|
|
46
50
|
Builder();
|
@@ -77,13 +81,38 @@ class CoreConfiguration {
|
|
77
81
|
delete config_.exchange(p, std::memory_order_release);
|
78
82
|
}
|
79
83
|
|
84
|
+
// Attach a registration function globally.
|
85
|
+
// Each registration function is called *in addition to*
|
86
|
+
// BuildCoreConfiguration for the default core configuration. When using
|
87
|
+
// BuildSpecialConfiguration, one can use CallRegisteredBuilders to call them.
|
88
|
+
// Must be called before a configuration is built.
|
89
|
+
static void RegisterBuilder(std::function<void(Builder*)> builder);
|
90
|
+
|
91
|
+
// Call all registered builders.
|
92
|
+
// See RegisterBuilder for why you might want to call this.
|
93
|
+
static void CallRegisteredBuilders(Builder* builder);
|
94
|
+
|
80
95
|
// Drop the core configuration. Users must ensure no other threads are
|
81
96
|
// accessing the configuration.
|
82
97
|
// Clears any dynamically registered builders.
|
83
98
|
static void Reset();
|
84
99
|
|
100
|
+
// Helper for tests: Reset the configuration, build a special one, run some
|
101
|
+
// code, and then reset the configuration again.
|
102
|
+
// Templatized to be sure no codegen in normal builds.
|
103
|
+
template <typename BuildFunc, typename RunFunc>
|
104
|
+
static void RunWithSpecialConfiguration(BuildFunc build_configuration,
|
105
|
+
RunFunc code_to_run) {
|
106
|
+
Reset();
|
107
|
+
BuildSpecialConfiguration(build_configuration);
|
108
|
+
code_to_run();
|
109
|
+
Reset();
|
110
|
+
}
|
111
|
+
|
85
112
|
// Accessors
|
86
113
|
|
114
|
+
const ChannelInit& channel_init() const { return channel_init_; }
|
115
|
+
|
87
116
|
const HandshakerRegistry& handshaker_registry() const {
|
88
117
|
return handshaker_registry_;
|
89
118
|
}
|
@@ -91,13 +120,22 @@ class CoreConfiguration {
|
|
91
120
|
private:
|
92
121
|
explicit CoreConfiguration(Builder* builder);
|
93
122
|
|
123
|
+
// Stores a builder for RegisterBuilder
|
124
|
+
struct RegisteredBuilder {
|
125
|
+
std::function<void(Builder*)> builder;
|
126
|
+
RegisteredBuilder* next;
|
127
|
+
};
|
128
|
+
|
94
129
|
// Create a new CoreConfiguration, and either set it or throw it away.
|
95
130
|
// We allow multiple CoreConfiguration's to be created in parallel.
|
96
131
|
static const CoreConfiguration& BuildNewAndMaybeSet();
|
97
132
|
|
98
133
|
// The configuration
|
99
134
|
static std::atomic<CoreConfiguration*> config_;
|
135
|
+
// Extra registered builders
|
136
|
+
static std::atomic<RegisteredBuilder*> builders_;
|
100
137
|
|
138
|
+
ChannelInit channel_init_;
|
101
139
|
HandshakerRegistry handshaker_registry_;
|
102
140
|
};
|
103
141
|
|
data/src/core/lib/debug/stats.cc
CHANGED
@@ -38,7 +38,7 @@ grpc_stats_data* grpc_stats_per_cpu_storage = nullptr;
|
|
38
38
|
static size_t g_num_cores;
|
39
39
|
|
40
40
|
void grpc_stats_init(void) {
|
41
|
-
g_num_cores =
|
41
|
+
g_num_cores = std::max(1u, gpr_cpu_num_cores());
|
42
42
|
grpc_stats_per_cpu_storage = static_cast<grpc_stats_data*>(
|
43
43
|
gpr_zalloc(sizeof(grpc_stats_data) * g_num_cores));
|
44
44
|
}
|
@@ -353,7 +353,7 @@ const uint8_t grpc_stats_table_7[102] = {
|
|
353
353
|
const int grpc_stats_table_8[9] = {0, 1, 2, 4, 7, 13, 23, 39, 64};
|
354
354
|
const uint8_t grpc_stats_table_9[9] = {0, 0, 1, 2, 2, 3, 4, 4, 5};
|
355
355
|
void grpc_stats_inc_call_initial_size(int value) {
|
356
|
-
value =
|
356
|
+
value = grpc_core::Clamp(value, 0, 262144);
|
357
357
|
if (value < 6) {
|
358
358
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE, value);
|
359
359
|
return;
|
@@ -376,7 +376,7 @@ void grpc_stats_inc_call_initial_size(int value) {
|
|
376
376
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_0, 64));
|
377
377
|
}
|
378
378
|
void grpc_stats_inc_poll_events_returned(int value) {
|
379
|
-
value =
|
379
|
+
value = grpc_core::Clamp(value, 0, 1024);
|
380
380
|
if (value < 29) {
|
381
381
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_POLL_EVENTS_RETURNED, value);
|
382
382
|
return;
|
@@ -399,7 +399,7 @@ void grpc_stats_inc_poll_events_returned(int value) {
|
|
399
399
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_2, 128));
|
400
400
|
}
|
401
401
|
void grpc_stats_inc_tcp_write_size(int value) {
|
402
|
-
value =
|
402
|
+
value = grpc_core::Clamp(value, 0, 16777216);
|
403
403
|
if (value < 5) {
|
404
404
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE, value);
|
405
405
|
return;
|
@@ -422,7 +422,7 @@ void grpc_stats_inc_tcp_write_size(int value) {
|
|
422
422
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_4, 64));
|
423
423
|
}
|
424
424
|
void grpc_stats_inc_tcp_write_iov_size(int value) {
|
425
|
-
value =
|
425
|
+
value = grpc_core::Clamp(value, 0, 1024);
|
426
426
|
if (value < 13) {
|
427
427
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE, value);
|
428
428
|
return;
|
@@ -445,7 +445,7 @@ void grpc_stats_inc_tcp_write_iov_size(int value) {
|
|
445
445
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
|
446
446
|
}
|
447
447
|
void grpc_stats_inc_tcp_read_size(int value) {
|
448
|
-
value =
|
448
|
+
value = grpc_core::Clamp(value, 0, 16777216);
|
449
449
|
if (value < 5) {
|
450
450
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_READ_SIZE, value);
|
451
451
|
return;
|
@@ -468,7 +468,7 @@ void grpc_stats_inc_tcp_read_size(int value) {
|
|
468
468
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_4, 64));
|
469
469
|
}
|
470
470
|
void grpc_stats_inc_tcp_read_offer(int value) {
|
471
|
-
value =
|
471
|
+
value = grpc_core::Clamp(value, 0, 16777216);
|
472
472
|
if (value < 5) {
|
473
473
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_READ_OFFER, value);
|
474
474
|
return;
|
@@ -491,7 +491,7 @@ void grpc_stats_inc_tcp_read_offer(int value) {
|
|
491
491
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_4, 64));
|
492
492
|
}
|
493
493
|
void grpc_stats_inc_tcp_read_offer_iov_size(int value) {
|
494
|
-
value =
|
494
|
+
value = grpc_core::Clamp(value, 0, 1024);
|
495
495
|
if (value < 13) {
|
496
496
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE,
|
497
497
|
value);
|
@@ -516,7 +516,7 @@ void grpc_stats_inc_tcp_read_offer_iov_size(int value) {
|
|
516
516
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
|
517
517
|
}
|
518
518
|
void grpc_stats_inc_http2_send_message_size(int value) {
|
519
|
-
value =
|
519
|
+
value = grpc_core::Clamp(value, 0, 16777216);
|
520
520
|
if (value < 5) {
|
521
521
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE,
|
522
522
|
value);
|
@@ -541,7 +541,7 @@ void grpc_stats_inc_http2_send_message_size(int value) {
|
|
541
541
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_4, 64));
|
542
542
|
}
|
543
543
|
void grpc_stats_inc_http2_send_initial_metadata_per_write(int value) {
|
544
|
-
value =
|
544
|
+
value = grpc_core::Clamp(value, 0, 1024);
|
545
545
|
if (value < 13) {
|
546
546
|
GRPC_STATS_INC_HISTOGRAM(
|
547
547
|
GRPC_STATS_HISTOGRAM_HTTP2_SEND_INITIAL_METADATA_PER_WRITE, value);
|
@@ -566,7 +566,7 @@ void grpc_stats_inc_http2_send_initial_metadata_per_write(int value) {
|
|
566
566
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
|
567
567
|
}
|
568
568
|
void grpc_stats_inc_http2_send_message_per_write(int value) {
|
569
|
-
value =
|
569
|
+
value = grpc_core::Clamp(value, 0, 1024);
|
570
570
|
if (value < 13) {
|
571
571
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_PER_WRITE,
|
572
572
|
value);
|
@@ -591,7 +591,7 @@ void grpc_stats_inc_http2_send_message_per_write(int value) {
|
|
591
591
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
|
592
592
|
}
|
593
593
|
void grpc_stats_inc_http2_send_trailing_metadata_per_write(int value) {
|
594
|
-
value =
|
594
|
+
value = grpc_core::Clamp(value, 0, 1024);
|
595
595
|
if (value < 13) {
|
596
596
|
GRPC_STATS_INC_HISTOGRAM(
|
597
597
|
GRPC_STATS_HISTOGRAM_HTTP2_SEND_TRAILING_METADATA_PER_WRITE, value);
|
@@ -616,7 +616,7 @@ void grpc_stats_inc_http2_send_trailing_metadata_per_write(int value) {
|
|
616
616
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
|
617
617
|
}
|
618
618
|
void grpc_stats_inc_http2_send_flowctl_per_write(int value) {
|
619
|
-
value =
|
619
|
+
value = grpc_core::Clamp(value, 0, 1024);
|
620
620
|
if (value < 13) {
|
621
621
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_HTTP2_SEND_FLOWCTL_PER_WRITE,
|
622
622
|
value);
|
@@ -641,7 +641,7 @@ void grpc_stats_inc_http2_send_flowctl_per_write(int value) {
|
|
641
641
|
grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
|
642
642
|
}
|
643
643
|
void grpc_stats_inc_server_cqs_checked(int value) {
|
644
|
-
value =
|
644
|
+
value = grpc_core::Clamp(value, 0, 64);
|
645
645
|
if (value < 3) {
|
646
646
|
GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_SERVER_CQS_CHECKED, value);
|
647
647
|
return;
|
data/src/core/lib/gpr/atm.cc
CHANGED
@@ -28,7 +28,7 @@ gpr_atm gpr_atm_no_barrier_clamped_add(gpr_atm* value, gpr_atm delta,
|
|
28
28
|
gpr_atm new_value;
|
29
29
|
do {
|
30
30
|
current_value = gpr_atm_no_barrier_load(value);
|
31
|
-
new_value =
|
31
|
+
new_value = grpc_core::Clamp(current_value + delta, min, max);
|
32
32
|
if (new_value == current_value) break;
|
33
33
|
} while (!gpr_atm_no_barrier_cas(value, current_value, new_value));
|
34
34
|
return new_value;
|
@@ -77,7 +77,7 @@ unsigned gpr_cpu_current_cpu(void) {
|
|
77
77
|
pthread_setspecific(thread_id_key, thread_id);
|
78
78
|
}
|
79
79
|
|
80
|
-
return (unsigned)
|
80
|
+
return (unsigned)grpc_core::HashPointer(thread_id, gpr_cpu_num_cores());
|
81
81
|
}
|
82
82
|
|
83
83
|
#endif /* GPR_CPU_POSIX */
|
data/src/core/lib/gpr/string.cc
CHANGED
@@ -89,7 +89,7 @@ static dump_out dump_out_create(void) {
|
|
89
89
|
|
90
90
|
static void dump_out_append(dump_out* out, char c) {
|
91
91
|
if (out->length == out->capacity) {
|
92
|
-
out->capacity =
|
92
|
+
out->capacity = std::max(size_t(8), 2 * out->capacity);
|
93
93
|
out->data = static_cast<char*>(gpr_realloc(out->data, out->capacity));
|
94
94
|
}
|
95
95
|
out->data[out->length++] = c;
|
@@ -290,7 +290,7 @@ static void add_string_to_split(const char* beg, const char* end, char*** strs,
|
|
290
290
|
memcpy(out, beg, static_cast<size_t>(end - beg));
|
291
291
|
out[end - beg] = 0;
|
292
292
|
if (*nstrs == *capstrs) {
|
293
|
-
*capstrs =
|
293
|
+
*capstrs = std::max(size_t(8), 2 * *capstrs);
|
294
294
|
*strs = static_cast<char**>(gpr_realloc(*strs, sizeof(*strs) * *capstrs));
|
295
295
|
}
|
296
296
|
(*strs)[*nstrs] = out;
|
data/src/core/lib/gpr/tls.h
CHANGED
data/src/core/lib/gpr/useful.h
CHANGED
@@ -19,48 +19,95 @@
|
|
19
19
|
#ifndef GRPC_CORE_LIB_GPR_USEFUL_H
|
20
20
|
#define GRPC_CORE_LIB_GPR_USEFUL_H
|
21
21
|
|
22
|
-
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include <cstddef>
|
25
|
+
|
26
|
+
/** useful utilities that don't belong anywhere else */
|
27
|
+
|
28
|
+
namespace grpc_core {
|
29
|
+
|
30
|
+
template <typename T>
|
31
|
+
T Clamp(T val, T min, T max) {
|
32
|
+
if (val < min) return min;
|
33
|
+
if (max < val) return max;
|
34
|
+
return val;
|
35
|
+
}
|
23
36
|
|
24
|
-
#define GPR_MIN(a, b) ((a) < (b) ? (a) : (b))
|
25
|
-
#define GPR_MAX(a, b) ((a) > (b) ? (a) : (b))
|
26
|
-
#define GPR_CLAMP(a, min, max) ((a) < (min) ? (min) : (a) > (max) ? (max) : (a))
|
27
37
|
/** rotl, rotr assume x is unsigned */
|
28
|
-
|
29
|
-
|
38
|
+
template <typename T>
|
39
|
+
constexpr T RotateLeft(T x, T n) {
|
40
|
+
return ((x << n) | (x >> (sizeof(x) * 8 - n)));
|
41
|
+
}
|
42
|
+
template <typename T>
|
43
|
+
constexpr T RotateRight(T x, T n) {
|
44
|
+
return ((x >> n) | (x << (sizeof(x) * 8 - n)));
|
45
|
+
}
|
30
46
|
|
31
|
-
|
47
|
+
// Set the n-th bit of i
|
48
|
+
template <typename T>
|
49
|
+
T SetBit(T* i, size_t n) {
|
50
|
+
return *i |= (T(1) << n);
|
51
|
+
}
|
52
|
+
|
53
|
+
// Clear the n-th bit of i
|
54
|
+
template <typename T>
|
55
|
+
T ClearBit(T* i, size_t n) {
|
56
|
+
return *i &= ~(T(1) << n);
|
57
|
+
}
|
32
58
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
} while (0)
|
59
|
+
// Get the n-th bit of i
|
60
|
+
template <typename T>
|
61
|
+
bool GetBit(T i, size_t n) {
|
62
|
+
return (i & (T(1) << n)) != 0;
|
63
|
+
}
|
39
64
|
|
40
|
-
|
41
|
-
|
65
|
+
namespace useful_detail {
|
66
|
+
inline constexpr uint32_t HexdigitBitcount(uint32_t x) {
|
67
|
+
return (x - ((x >> 1) & 0x77777777) - ((x >> 2) & 0x33333333) -
|
68
|
+
((x >> 3) & 0x11111111));
|
69
|
+
}
|
70
|
+
} // namespace useful_detail
|
42
71
|
|
43
|
-
|
44
|
-
|
72
|
+
inline constexpr uint32_t BitCount(uint32_t i) {
|
73
|
+
return (((useful_detail::HexdigitBitcount(i) +
|
74
|
+
(useful_detail::HexdigitBitcount(i) >> 4)) &
|
75
|
+
0x0f0f0f0f) %
|
76
|
+
255);
|
77
|
+
}
|
45
78
|
|
46
|
-
|
47
|
-
|
79
|
+
inline constexpr uint32_t BitCount(uint64_t i) {
|
80
|
+
return BitCount(uint32_t(i)) + BitCount(uint32_t(i >> 32));
|
81
|
+
}
|
48
82
|
|
49
|
-
|
50
|
-
|
51
|
-
|
83
|
+
inline constexpr uint32_t BitCount(uint16_t i) { return BitCount(uint32_t(i)); }
|
84
|
+
inline constexpr uint32_t BitCount(uint8_t i) { return BitCount(uint32_t(i)); }
|
85
|
+
inline constexpr uint32_t BitCount(int64_t i) { return BitCount(uint64_t(i)); }
|
86
|
+
inline constexpr uint32_t BitCount(int32_t i) { return BitCount(uint32_t(i)); }
|
87
|
+
inline constexpr uint32_t BitCount(int16_t i) { return BitCount(uint16_t(i)); }
|
88
|
+
inline constexpr uint32_t BitCount(int8_t i) { return BitCount(uint8_t(i)); }
|
52
89
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
90
|
+
// This function uses operator< to implement a qsort-style comparison, whereby:
|
91
|
+
// if a is smaller than b, a number smaller than 0 is returned.
|
92
|
+
// if a is bigger than b, a number greater than 0 is returned.
|
93
|
+
// if a is neither smaller nor bigger than b, 0 is returned.
|
94
|
+
template <typename T>
|
95
|
+
int QsortCompare(const T& a, const T& b) {
|
96
|
+
if (a < b) return -1;
|
97
|
+
if (b < a) return 1;
|
98
|
+
return 0;
|
99
|
+
}
|
59
100
|
|
60
|
-
|
101
|
+
template <typename T>
|
102
|
+
constexpr size_t HashPointer(T* p, size_t range) {
|
103
|
+
return (((reinterpret_cast<size_t>(p)) >> 4) ^
|
104
|
+
((reinterpret_cast<size_t>(p)) >> 9) ^
|
105
|
+
((reinterpret_cast<size_t>(p)) >> 14)) %
|
106
|
+
range;
|
107
|
+
}
|
61
108
|
|
62
|
-
|
63
|
-
|
64
|
-
|
109
|
+
} // namespace grpc_core
|
110
|
+
|
111
|
+
#define GPR_ARRAY_SIZE(array) (sizeof(array) / sizeof(*(array)))
|
65
112
|
|
66
113
|
#endif /* GRPC_CORE_LIB_GPR_USEFUL_H */
|
data/src/core/lib/gprpp/arena.h
CHANGED
@@ -30,6 +30,7 @@
|
|
30
30
|
#include <stddef.h>
|
31
31
|
|
32
32
|
#include <atomic>
|
33
|
+
#include <memory>
|
33
34
|
#include <new>
|
34
35
|
#include <utility>
|
35
36
|
|
@@ -116,6 +117,15 @@ class Arena {
|
|
116
117
|
Zone* last_zone_ = nullptr;
|
117
118
|
};
|
118
119
|
|
120
|
+
// Smart pointer for arenas when the final size is not required.
|
121
|
+
struct ScopedArenaDeleter {
|
122
|
+
void operator()(Arena* arena) { arena->Destroy(); }
|
123
|
+
};
|
124
|
+
using ScopedArenaPtr = std::unique_ptr<Arena, ScopedArenaDeleter>;
|
125
|
+
inline ScopedArenaPtr MakeScopedArena(size_t initial_size) {
|
126
|
+
return ScopedArenaPtr(Arena::Create(initial_size));
|
127
|
+
}
|
128
|
+
|
119
129
|
} // namespace grpc_core
|
120
130
|
|
121
131
|
#endif /* GRPC_CORE_LIB_GPRPP_ARENA_H */
|
data/src/core/lib/gprpp/bitset.h
CHANGED
@@ -15,10 +15,12 @@
|
|
15
15
|
#ifndef GRPC_CORE_LIB_GPRPP_BITSET_H
|
16
16
|
#define GRPC_CORE_LIB_GPRPP_BITSET_H
|
17
17
|
|
18
|
-
#include <grpc/
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
20
|
#include <utility>
|
21
21
|
|
22
|
+
#include "src/core/lib/gpr/useful.h"
|
23
|
+
|
22
24
|
#if __cplusplus > 201103l
|
23
25
|
#define GRPC_BITSET_CONSTEXPR_MUTATOR constexpr
|
24
26
|
#else
|
@@ -29,7 +31,7 @@ namespace grpc_core {
|
|
29
31
|
|
30
32
|
// Given a bit count as an integer, vend as member type `Type` a type with
|
31
33
|
// exactly that number of bits. Undefined if that bit count is not available.
|
32
|
-
template <
|
34
|
+
template <size_t kBits>
|
33
35
|
struct UintSelector;
|
34
36
|
template <>
|
35
37
|
struct UintSelector<8> {
|
@@ -49,7 +51,7 @@ struct UintSelector<64> {
|
|
49
51
|
};
|
50
52
|
|
51
53
|
// An unsigned integer of some number of bits.
|
52
|
-
template <
|
54
|
+
template <size_t kBits>
|
53
55
|
using Uint = typename UintSelector<kBits>::Type;
|
54
56
|
|
55
57
|
// Given the total number of bits that need to be stored, choose the size of
|
@@ -58,7 +60,7 @@ using Uint = typename UintSelector<kBits>::Type;
|
|
58
60
|
// size and performance
|
59
61
|
// - the details will likely be tweaked into the future.
|
60
62
|
// Once we get over 96 bits, we just use uint64_t for everything.
|
61
|
-
constexpr
|
63
|
+
constexpr size_t ChooseUnitBitsForBitSet(size_t total_bits) {
|
62
64
|
return total_bits <= 8 ? 8
|
63
65
|
: total_bits <= 16 ? 16
|
64
66
|
: total_bits <= 24 ? 8
|
@@ -74,11 +76,10 @@ constexpr std::size_t ChooseUnitBitsForBitSet(std::size_t total_bits) {
|
|
74
76
|
// kUnitBits. e.g. to store 72 bits in 8 bit chunks, we'd say BitSet<72, 8>.
|
75
77
|
// Since most users shouldn't care about the size of unit used, we default
|
76
78
|
// kUnitBits to whatever is selected by ChooseUnitBitsForBitSet
|
77
|
-
template <
|
78
|
-
|
79
|
+
template <size_t kTotalBits,
|
80
|
+
size_t kUnitBits = ChooseUnitBitsForBitSet(kTotalBits)>
|
79
81
|
class BitSet {
|
80
|
-
static constexpr
|
81
|
-
(kTotalBits + kUnitBits - 1) / kUnitBits;
|
82
|
+
static constexpr size_t kUnits = (kTotalBits + kUnitBits - 1) / kUnitBits;
|
82
83
|
|
83
84
|
public:
|
84
85
|
// Initialize to all bits false
|
@@ -113,7 +114,7 @@ class BitSet {
|
|
113
114
|
if (kTotalBits % kUnitBits == 0) {
|
114
115
|
// kTotalBits is a multiple of kUnitBits ==> we can just check for all
|
115
116
|
// ones in each unit.
|
116
|
-
for (
|
117
|
+
for (size_t i = 0; i < kUnits; i++) {
|
117
118
|
if (units_[i] != all_ones()) return false;
|
118
119
|
}
|
119
120
|
return true;
|
@@ -121,7 +122,7 @@ class BitSet {
|
|
121
122
|
// kTotalBits is not a multiple of kUnitBits ==> we need special handling
|
122
123
|
// for checking partial filling of the last unit (since not all of its
|
123
124
|
// bits are used!)
|
124
|
-
for (
|
125
|
+
for (size_t i = 0; i < kUnits - 1; i++) {
|
125
126
|
if (units_[i] != all_ones()) return false;
|
126
127
|
}
|
127
128
|
return units_[kUnits - 1] == n_ones(kTotalBits % kUnitBits);
|
@@ -130,20 +131,27 @@ class BitSet {
|
|
130
131
|
|
131
132
|
// Return true if *no* bits are set.
|
132
133
|
bool none() const {
|
133
|
-
for (
|
134
|
+
for (size_t i = 0; i < kUnits; i++) {
|
134
135
|
if (units_[i] != 0) return false;
|
135
136
|
}
|
136
137
|
return true;
|
137
138
|
}
|
138
139
|
|
140
|
+
// Return a count of how many bits are set.
|
141
|
+
uint32_t count() const {
|
142
|
+
uint32_t count = 0;
|
143
|
+
for (size_t i = 0; i < kUnits; i++) {
|
144
|
+
count += BitCount(units_[i]);
|
145
|
+
}
|
146
|
+
return count;
|
147
|
+
}
|
148
|
+
|
139
149
|
private:
|
140
150
|
// Given a bit index, return which unit it's stored in.
|
141
|
-
static constexpr
|
142
|
-
return bit / kUnitBits;
|
143
|
-
}
|
151
|
+
static constexpr size_t unit_for(size_t bit) { return bit / kUnitBits; }
|
144
152
|
|
145
153
|
// Given a bit index, return a mask to access that bit within it's unit.
|
146
|
-
static constexpr Uint<kUnitBits> mask_for(
|
154
|
+
static constexpr Uint<kUnitBits> mask_for(size_t bit) {
|
147
155
|
return Uint<kUnitBits>{1} << (bit % kUnitBits);
|
148
156
|
}
|
149
157
|
|
@@ -153,7 +161,7 @@ class BitSet {
|
|
153
161
|
}
|
154
162
|
|
155
163
|
// Return a value with n bottom bits ones
|
156
|
-
static constexpr Uint<kUnitBits> n_ones(
|
164
|
+
static constexpr Uint<kUnitBits> n_ones(size_t n) {
|
157
165
|
return n == kUnitBits ? all_ones() : (Uint<kUnitBits>(1) << n) - 1;
|
158
166
|
}
|
159
167
|
|
@@ -161,6 +169,20 @@ class BitSet {
|
|
161
169
|
Uint<kUnitBits> units_[kUnits];
|
162
170
|
};
|
163
171
|
|
172
|
+
// Zero-size specialization of BitSet.
|
173
|
+
// Useful for generic programming.
|
174
|
+
// Make a compile time error out of get/set type accesses, and hard-codes
|
175
|
+
// queries that do make sense.
|
176
|
+
template <>
|
177
|
+
class BitSet<0> {
|
178
|
+
public:
|
179
|
+
constexpr BitSet() {}
|
180
|
+
|
181
|
+
bool all() const { return true; }
|
182
|
+
bool none() const { return true; }
|
183
|
+
uint32_t count() const { return 0; }
|
184
|
+
};
|
185
|
+
|
164
186
|
} // namespace grpc_core
|
165
187
|
|
166
188
|
#endif // GRPC_CORE_LIB_GPRPP_BITSET_H
|