grpc 1.41.0.pre2 → 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 +57 -44
- data/etc/roots.pem +335 -326
- 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/err_data.c +278 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
- 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 +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
- 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/mem.c +12 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
- 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 +81 -68
- 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
@@ -102,18 +102,6 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
102
102
|
|
103
103
|
grpc_pollset_set* interested_parties() const { return interested_parties_; }
|
104
104
|
|
105
|
-
// TODO(roth): When we add federation, there will be multiple channels
|
106
|
-
// inside the XdsClient, and the set of channels may change over time,
|
107
|
-
// but not every channel may use every one of the child channels, so
|
108
|
-
// this API will need to change. At minumum, we will need to hold a
|
109
|
-
// ref to the parent channelz node so that we can update its list of
|
110
|
-
// children as the set of xDS channels changes. However, we may also
|
111
|
-
// want to make this a bit more selective such that only those
|
112
|
-
// channels on which a given parent channel is actually requesting
|
113
|
-
// resources will actually be marked as its children.
|
114
|
-
void AddChannelzLinkage(channelz::ChannelNode* parent_channelz_node);
|
115
|
-
void RemoveChannelzLinkage(channelz::ChannelNode* parent_channelz_node);
|
116
|
-
|
117
105
|
void Orphan() override;
|
118
106
|
|
119
107
|
// Start and cancel listener data watch for a listener.
|
@@ -210,12 +198,7 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
210
198
|
private:
|
211
199
|
// Contains a channel to the xds server and all the data related to the
|
212
200
|
// channel. Holds a ref to the xds client object.
|
213
|
-
|
214
|
-
// Currently, there is only one ChannelState object per XdsClient
|
215
|
-
// object, and it has essentially the same lifetime. But in the
|
216
|
-
// future, when we add federation support, a single XdsClient may have
|
217
|
-
// multiple underlying channels to talk to different xDS servers.
|
218
|
-
class ChannelState : public InternallyRefCounted<ChannelState> {
|
201
|
+
class ChannelState : public DualRefCounted<ChannelState> {
|
219
202
|
public:
|
220
203
|
template <typename T>
|
221
204
|
class RetryableCall;
|
@@ -243,9 +226,11 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
243
226
|
void StartConnectivityWatchLocked();
|
244
227
|
void CancelConnectivityWatchLocked();
|
245
228
|
|
246
|
-
void SubscribeLocked(const std::string& type_url,
|
229
|
+
void SubscribeLocked(const std::string& type_url,
|
230
|
+
const XdsApi::ResourceName& resource)
|
247
231
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
248
|
-
void UnsubscribeLocked(const std::string& type_url,
|
232
|
+
void UnsubscribeLocked(const std::string& type_url,
|
233
|
+
const XdsApi::ResourceName& resource,
|
249
234
|
bool delay_unsubscription)
|
250
235
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
251
236
|
|
@@ -260,11 +245,15 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
260
245
|
// The channel and its status.
|
261
246
|
grpc_channel* channel_;
|
262
247
|
bool shutting_down_ = false;
|
263
|
-
StateWatcher* watcher_
|
248
|
+
StateWatcher* watcher_;
|
264
249
|
|
265
250
|
// The retryable XDS calls.
|
266
251
|
OrphanablePtr<RetryableCall<AdsCallState>> ads_calld_;
|
267
252
|
OrphanablePtr<RetryableCall<LrsCallState>> lrs_calld_;
|
253
|
+
|
254
|
+
// Stores the most recent accepted resource version for each resource type.
|
255
|
+
std::map<std::string /*type*/, std::string /*version*/>
|
256
|
+
resource_type_version_map_;
|
268
257
|
};
|
269
258
|
|
270
259
|
struct ListenerState {
|
@@ -302,6 +291,20 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
302
291
|
XdsApi::ResourceMetadata meta;
|
303
292
|
};
|
304
293
|
|
294
|
+
struct AuthorityState {
|
295
|
+
RefCountedPtr<ChannelState> channel_state;
|
296
|
+
std::map<std::string /*listener_name*/, ListenerState> listener_map;
|
297
|
+
std::map<std::string /*route_config_name*/, RouteConfigState>
|
298
|
+
route_config_map;
|
299
|
+
std::map<std::string /*cluster_name*/, ClusterState> cluster_map;
|
300
|
+
std::map<std::string /*eds_service_name*/, EndpointState> endpoint_map;
|
301
|
+
|
302
|
+
bool HasSubscribedResources() {
|
303
|
+
return !listener_map.empty() || !route_config_map.empty() ||
|
304
|
+
!cluster_map.empty() || !endpoint_map.empty();
|
305
|
+
}
|
306
|
+
};
|
307
|
+
|
305
308
|
struct LoadReportState {
|
306
309
|
struct LocalityState {
|
307
310
|
XdsClusterLocalityStats* locality_stats = nullptr;
|
@@ -324,6 +327,9 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
324
327
|
bool send_all_clusters, const std::set<std::string>& clusters)
|
325
328
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
326
329
|
|
330
|
+
RefCountedPtr<ChannelState> GetOrCreateChannelStateLocked(
|
331
|
+
const XdsBootstrap::XdsServer& server) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
332
|
+
|
327
333
|
std::unique_ptr<XdsBootstrap> bootstrap_;
|
328
334
|
grpc_channel_args* args_;
|
329
335
|
const grpc_millis request_timeout_;
|
@@ -333,20 +339,11 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
333
339
|
|
334
340
|
Mutex mu_;
|
335
341
|
|
336
|
-
//
|
337
|
-
|
338
|
-
|
339
|
-
// One entry for each watched LDS resource.
|
340
|
-
std::map<std::string /*listener_name*/, ListenerState> listener_map_
|
341
|
-
ABSL_GUARDED_BY(mu_);
|
342
|
-
// One entry for each watched RDS resource.
|
343
|
-
std::map<std::string /*route_config_name*/, RouteConfigState>
|
344
|
-
route_config_map_ ABSL_GUARDED_BY(mu_);
|
345
|
-
// One entry for each watched CDS resource.
|
346
|
-
std::map<std::string /*cluster_name*/, ClusterState> cluster_map_
|
342
|
+
// Map of existing xDS server channels.
|
343
|
+
std::map<XdsBootstrap::XdsServer, ChannelState*> xds_server_channel_map_
|
347
344
|
ABSL_GUARDED_BY(mu_);
|
348
|
-
|
349
|
-
std::map<std::string /*
|
345
|
+
|
346
|
+
std::map<std::string /*authority*/, AuthorityState> authority_state_map_
|
350
347
|
ABSL_GUARDED_BY(mu_);
|
351
348
|
|
352
349
|
// Load report data.
|
@@ -355,9 +352,17 @@ class XdsClient : public DualRefCounted<XdsClient> {
|
|
355
352
|
LoadReportState>
|
356
353
|
load_report_map_ ABSL_GUARDED_BY(mu_);
|
357
354
|
|
358
|
-
// Stores
|
359
|
-
|
360
|
-
|
355
|
+
// Stores started watchers whose resource name was not parsed successfully,
|
356
|
+
// waiting to be cancelled or reset in Orphan().
|
357
|
+
std::map<ListenerWatcherInterface*, std::unique_ptr<ListenerWatcherInterface>>
|
358
|
+
invalid_listener_watchers_ ABSL_GUARDED_BY(mu_);
|
359
|
+
std::map<RouteConfigWatcherInterface*,
|
360
|
+
std::unique_ptr<RouteConfigWatcherInterface>>
|
361
|
+
invalid_route_config_watchers_ ABSL_GUARDED_BY(mu_);
|
362
|
+
std::map<ClusterWatcherInterface*, std::unique_ptr<ClusterWatcherInterface>>
|
363
|
+
invalid_cluster_watchers_ ABSL_GUARDED_BY(mu_);
|
364
|
+
std::map<EndpointWatcherInterface*, std::unique_ptr<EndpointWatcherInterface>>
|
365
|
+
invalid_endpoint_watchers_ ABSL_GUARDED_BY(mu_);
|
361
366
|
|
362
367
|
bool shutting_down_ ABSL_GUARDED_BY(mu_) = false;
|
363
368
|
};
|
@@ -46,7 +46,7 @@ class XdsLocalityName : public RefCounted<XdsLocalityName> {
|
|
46
46
|
struct Less {
|
47
47
|
bool operator()(const XdsLocalityName* lhs,
|
48
48
|
const XdsLocalityName* rhs) const {
|
49
|
-
if (lhs == nullptr || rhs == nullptr) return
|
49
|
+
if (lhs == nullptr || rhs == nullptr) return QsortCompare(lhs, rhs);
|
50
50
|
return lhs->Compare(*rhs) < 0;
|
51
51
|
}
|
52
52
|
|
@@ -353,12 +353,12 @@ class XdsServerConfigFetcher : public grpc_server_config_fetcher {
|
|
353
353
|
GPR_ASSERT(xds_client_ != nullptr);
|
354
354
|
}
|
355
355
|
|
356
|
-
void StartWatch(std::string listening_address,
|
356
|
+
void StartWatch(std::string listening_address,
|
357
357
|
std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
|
358
358
|
watcher) override {
|
359
359
|
grpc_server_config_fetcher::WatcherInterface* watcher_ptr = watcher.get();
|
360
360
|
auto listener_watcher = absl::make_unique<ListenerWatcher>(
|
361
|
-
std::move(watcher),
|
361
|
+
std::move(watcher), xds_client_, serving_status_notifier_,
|
362
362
|
listening_address);
|
363
363
|
auto* listener_watcher_ptr = listener_watcher.get();
|
364
364
|
listening_address = absl::StrReplaceAll(
|
@@ -396,17 +396,14 @@ class XdsServerConfigFetcher : public grpc_server_config_fetcher {
|
|
396
396
|
explicit ListenerWatcher(
|
397
397
|
std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
|
398
398
|
server_config_watcher,
|
399
|
-
|
399
|
+
RefCountedPtr<XdsClient> xds_client,
|
400
400
|
grpc_server_xds_status_notifier serving_status_notifier,
|
401
401
|
std::string listening_address)
|
402
402
|
: server_config_watcher_(std::move(server_config_watcher)),
|
403
|
-
args_(args),
|
404
403
|
xds_client_(std::move(xds_client)),
|
405
404
|
serving_status_notifier_(serving_status_notifier),
|
406
405
|
listening_address_(std::move(listening_address)) {}
|
407
406
|
|
408
|
-
~ListenerWatcher() override { grpc_channel_args_destroy(args_); }
|
409
|
-
|
410
407
|
// Deleted due to special handling required for args_. Copy the channel args
|
411
408
|
// if we ever need these.
|
412
409
|
ListenerWatcher(const ListenerWatcher&) = delete;
|
@@ -498,7 +495,6 @@ class XdsServerConfigFetcher : public grpc_server_config_fetcher {
|
|
498
495
|
private:
|
499
496
|
std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
|
500
497
|
server_config_watcher_;
|
501
|
-
grpc_channel_args* args_;
|
502
498
|
RefCountedPtr<XdsClient> xds_client_;
|
503
499
|
grpc_server_xds_status_notifier serving_status_notifier_;
|
504
500
|
std::string listening_address_;
|
@@ -524,10 +520,12 @@ grpc_server_config_fetcher* grpc_server_config_fetcher_xds_create(
|
|
524
520
|
grpc_server_xds_status_notifier notifier, const grpc_channel_args* args) {
|
525
521
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
526
522
|
grpc_core::ExecCtx exec_ctx;
|
523
|
+
args = grpc_channel_args_remove_grpc_internal(args);
|
527
524
|
GRPC_API_TRACE("grpc_server_config_fetcher_xds_create()", 0, ());
|
528
525
|
grpc_error_handle error = GRPC_ERROR_NONE;
|
529
526
|
grpc_core::RefCountedPtr<grpc_core::XdsClient> xds_client =
|
530
527
|
grpc_core::XdsClient::GetOrCreate(args, &error);
|
528
|
+
grpc_channel_args_destroy(args);
|
531
529
|
if (error != GRPC_ERROR_NONE) {
|
532
530
|
gpr_log(GPR_ERROR, "Failed to create xds client: %s",
|
533
531
|
grpc_error_std_string(error).c_str());
|
@@ -83,6 +83,7 @@ namespace grpc_core {
|
|
83
83
|
|
84
84
|
grpc_error_handle UnixSockaddrPopulate(absl::string_view path,
|
85
85
|
grpc_resolved_address* resolved_addr) {
|
86
|
+
memset(resolved_addr, 0, sizeof(*resolved_addr));
|
86
87
|
struct sockaddr_un* un =
|
87
88
|
reinterpret_cast<struct sockaddr_un*>(resolved_addr->addr);
|
88
89
|
const size_t maxlen = sizeof(un->sun_path) - 1;
|
@@ -99,6 +100,7 @@ grpc_error_handle UnixSockaddrPopulate(absl::string_view path,
|
|
99
100
|
|
100
101
|
grpc_error_handle UnixAbstractSockaddrPopulate(
|
101
102
|
absl::string_view path, grpc_resolved_address* resolved_addr) {
|
103
|
+
memset(resolved_addr, 0, sizeof(*resolved_addr));
|
102
104
|
struct sockaddr_un* un =
|
103
105
|
reinterpret_cast<struct sockaddr_un*>(resolved_addr->addr);
|
104
106
|
const size_t maxlen = sizeof(un->sun_path) - 1;
|
data/src/core/lib/avl/avl.cc
CHANGED
@@ -23,11 +23,11 @@
|
|
23
23
|
#include <assert.h>
|
24
24
|
#include <stdlib.h>
|
25
25
|
|
26
|
+
#include <algorithm>
|
27
|
+
|
26
28
|
#include <grpc/support/alloc.h>
|
27
29
|
#include <grpc/support/string_util.h>
|
28
30
|
|
29
|
-
#include "src/core/lib/gpr/useful.h"
|
30
|
-
|
31
31
|
grpc_avl grpc_avl_create(const grpc_avl_vtable* vtable) {
|
32
32
|
grpc_avl out;
|
33
33
|
out.vtable = vtable;
|
@@ -63,8 +63,8 @@ static long node_height(grpc_avl_node* node) {
|
|
63
63
|
#ifndef NDEBUG
|
64
64
|
static long calculate_height(grpc_avl_node* node) {
|
65
65
|
return node == nullptr ? 0
|
66
|
-
: 1 +
|
67
|
-
|
66
|
+
: 1 + std::max(calculate_height(node->left),
|
67
|
+
calculate_height(node->right));
|
68
68
|
}
|
69
69
|
|
70
70
|
static grpc_avl_node* assert_invariants(grpc_avl_node* n) {
|
@@ -87,7 +87,7 @@ grpc_avl_node* new_node(void* key, void* value, grpc_avl_node* left,
|
|
87
87
|
node->value = value;
|
88
88
|
node->left = assert_invariants(left);
|
89
89
|
node->right = assert_invariants(right);
|
90
|
-
node->height = 1 +
|
90
|
+
node->height = 1 + std::max(node_height(left), node_height(right));
|
91
91
|
return node;
|
92
92
|
}
|
93
93
|
|
@@ -39,7 +39,7 @@ double generate_uniform_random_number(uint32_t* rng_state) {
|
|
39
39
|
double generate_uniform_random_number_between(uint32_t* rng_state, double a,
|
40
40
|
double b) {
|
41
41
|
if (a == b) return a;
|
42
|
-
if (a > b)
|
42
|
+
if (a > b) std::swap(a, b); // make sure a < b
|
43
43
|
const double range = b - a;
|
44
44
|
return a + generate_uniform_random_number(rng_state) * range;
|
45
45
|
}
|
@@ -25,6 +25,7 @@
|
|
25
25
|
|
26
26
|
#include <vector>
|
27
27
|
|
28
|
+
#include "absl/strings/match.h"
|
28
29
|
#include "absl/strings/str_format.h"
|
29
30
|
#include "absl/strings/str_join.h"
|
30
31
|
|
@@ -72,6 +73,22 @@ grpc_channel_args* grpc_channel_args_copy_and_remove(
|
|
72
73
|
num_to_remove, nullptr, 0);
|
73
74
|
}
|
74
75
|
|
76
|
+
grpc_channel_args* grpc_channel_args_remove_grpc_internal(
|
77
|
+
const grpc_channel_args* src) {
|
78
|
+
if (src == nullptr) return nullptr;
|
79
|
+
// Create result.
|
80
|
+
grpc_channel_args* dst =
|
81
|
+
static_cast<grpc_channel_args*>(gpr_malloc(sizeof(grpc_channel_args)));
|
82
|
+
dst->args =
|
83
|
+
static_cast<grpc_arg*>(gpr_malloc(sizeof(grpc_arg) * src->num_args));
|
84
|
+
dst->num_args = 0;
|
85
|
+
for (size_t i = 0; i < src->num_args; ++i) {
|
86
|
+
if (absl::StartsWith(src->args[i].key, "grpc.internal.")) continue;
|
87
|
+
dst->args[dst->num_args++] = copy_arg(&src->args[i]);
|
88
|
+
}
|
89
|
+
return dst;
|
90
|
+
}
|
91
|
+
|
75
92
|
static bool should_remove_arg(const grpc_arg* arg, const char** to_remove,
|
76
93
|
size_t num_to_remove) {
|
77
94
|
for (size_t i = 0; i < num_to_remove; ++i) {
|
@@ -146,7 +163,7 @@ grpc_channel_args* grpc_channel_args_union(const grpc_channel_args* a,
|
|
146
163
|
}
|
147
164
|
|
148
165
|
static int cmp_arg(const grpc_arg* a, const grpc_arg* b) {
|
149
|
-
int c =
|
166
|
+
int c = grpc_core::QsortCompare(a->type, b->type);
|
150
167
|
if (c != 0) return c;
|
151
168
|
c = strcmp(a->key, b->key);
|
152
169
|
if (c != 0) return c;
|
@@ -154,11 +171,12 @@ static int cmp_arg(const grpc_arg* a, const grpc_arg* b) {
|
|
154
171
|
case GRPC_ARG_STRING:
|
155
172
|
return strcmp(a->value.string, b->value.string);
|
156
173
|
case GRPC_ARG_INTEGER:
|
157
|
-
return
|
174
|
+
return grpc_core::QsortCompare(a->value.integer, b->value.integer);
|
158
175
|
case GRPC_ARG_POINTER:
|
159
|
-
c =
|
176
|
+
c = grpc_core::QsortCompare(a->value.pointer.p, b->value.pointer.p);
|
160
177
|
if (c != 0) {
|
161
|
-
c =
|
178
|
+
c = grpc_core::QsortCompare(a->value.pointer.vtable,
|
179
|
+
b->value.pointer.vtable);
|
162
180
|
if (c == 0) {
|
163
181
|
c = a->value.pointer.vtable->cmp(a->value.pointer.p,
|
164
182
|
b->value.pointer.p);
|
@@ -175,7 +193,7 @@ static int cmp_key_stable(const void* ap, const void* bp) {
|
|
175
193
|
const grpc_arg* const* a = static_cast<const grpc_arg* const*>(ap);
|
176
194
|
const grpc_arg* const* b = static_cast<const grpc_arg* const*>(bp);
|
177
195
|
int c = strcmp((*a)->key, (*b)->key);
|
178
|
-
if (c == 0) c =
|
196
|
+
if (c == 0) c = grpc_core::QsortCompare(*a, *b);
|
179
197
|
return c;
|
180
198
|
}
|
181
199
|
|
@@ -225,7 +243,7 @@ int grpc_channel_args_compare(const grpc_channel_args* a,
|
|
225
243
|
const grpc_channel_args* b) {
|
226
244
|
if (a == nullptr && b == nullptr) return 0;
|
227
245
|
if (a == nullptr || b == nullptr) return a == nullptr ? -1 : 1;
|
228
|
-
int c =
|
246
|
+
int c = grpc_core::QsortCompare(a->num_args, b->num_args);
|
229
247
|
if (c != 0) return c;
|
230
248
|
for (size_t i = 0; i < a->num_args; i++) {
|
231
249
|
c = cmp_arg(&a->args[i], &b->args[i]);
|
@@ -41,6 +41,15 @@ grpc_channel_args* grpc_channel_args_copy_and_add(const grpc_channel_args* src,
|
|
41
41
|
const grpc_arg* to_add,
|
42
42
|
size_t num_to_add);
|
43
43
|
|
44
|
+
/** Remove any channel args prefixed with 'grpc.internal.'
|
45
|
+
* These are used for internal implementation details and are not intended to
|
46
|
+
* be exposed to users.
|
47
|
+
* Returns a new channel args instance.
|
48
|
+
* Does not take ownership of \a src.
|
49
|
+
* Should be called by any public API that receives channel args. */
|
50
|
+
grpc_channel_args* grpc_channel_args_remove_grpc_internal(
|
51
|
+
const grpc_channel_args* src);
|
52
|
+
|
44
53
|
/** Copies the arguments in \a src except for those whose keys are in
|
45
54
|
\a to_remove. */
|
46
55
|
grpc_channel_args* grpc_channel_args_copy_and_remove(
|
@@ -25,6 +25,8 @@
|
|
25
25
|
#include <grpc/support/alloc.h>
|
26
26
|
#include <grpc/support/string_util.h>
|
27
27
|
|
28
|
+
#include "src/core/lib/gprpp/memory.h"
|
29
|
+
|
28
30
|
typedef struct filter_node {
|
29
31
|
struct filter_node* next;
|
30
32
|
struct filter_node* prev;
|
@@ -53,15 +55,13 @@ struct grpc_channel_stack_builder_iterator {
|
|
53
55
|
|
54
56
|
grpc_channel_stack_builder* grpc_channel_stack_builder_create(void) {
|
55
57
|
grpc_channel_stack_builder* b =
|
56
|
-
|
57
|
-
|
58
|
+
grpc_core::Zalloc<grpc_channel_stack_builder>();
|
58
59
|
b->begin.filter = nullptr;
|
59
60
|
b->end.filter = nullptr;
|
60
61
|
b->begin.next = &b->end;
|
61
62
|
b->begin.prev = &b->end;
|
62
63
|
b->end.next = &b->begin;
|
63
64
|
b->end.prev = &b->begin;
|
64
|
-
|
65
65
|
return b;
|
66
66
|
}
|
67
67
|
|
@@ -16,7 +16,7 @@
|
|
16
16
|
*
|
17
17
|
*/
|
18
18
|
|
19
|
-
#include <grpc/
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
21
|
#include "src/core/lib/channel/channelz.h"
|
22
22
|
|
@@ -77,7 +77,7 @@ std::string BaseNode::RenderJsonString() {
|
|
77
77
|
//
|
78
78
|
|
79
79
|
CallCountingHelper::CallCountingHelper() {
|
80
|
-
num_cores_ =
|
80
|
+
num_cores_ = std::max(1u, gpr_cpu_num_cores());
|
81
81
|
per_cpu_counter_data_storage_.reserve(num_cores_);
|
82
82
|
for (size_t i = 0; i < num_cores_; ++i) {
|
83
83
|
per_cpu_counter_data_storage_.emplace_back();
|
@@ -398,7 +398,7 @@ void SecurityArgDestroy(void* p) {
|
|
398
398
|
xds_certificate_provider->Unref();
|
399
399
|
}
|
400
400
|
|
401
|
-
int SecurityArgCmp(void* p, void* q) { return
|
401
|
+
int SecurityArgCmp(void* p, void* q) { return grpc_core::QsortCompare(p, q); }
|
402
402
|
|
403
403
|
const grpc_arg_pointer_vtable kChannelArgVtable = {
|
404
404
|
SecurityArgCopy, SecurityArgDestroy, SecurityArgCmp};
|
@@ -19,7 +19,7 @@
|
|
19
19
|
#ifndef GRPC_CORE_LIB_CHANNEL_CHANNELZ_H
|
20
20
|
#define GRPC_CORE_LIB_CHANNEL_CHANNELZ_H
|
21
21
|
|
22
|
-
#include <grpc/
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
24
|
#include <atomic>
|
25
25
|
#include <set>
|
@@ -41,7 +41,7 @@
|
|
41
41
|
#include "src/core/lib/json/json.h"
|
42
42
|
|
43
43
|
// Channel arg key for channelz node.
|
44
|
-
#define GRPC_ARG_CHANNELZ_CHANNEL_NODE "grpc.channelz_channel_node"
|
44
|
+
#define GRPC_ARG_CHANNELZ_CHANNEL_NODE "grpc.internal.channelz_channel_node"
|
45
45
|
|
46
46
|
// Channel arg key for indicating an internal channel.
|
47
47
|
#define GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL \
|
@@ -232,9 +232,7 @@ static void bind_transport(grpc_channel_stack* channel_stack,
|
|
232
232
|
grpc_transport_stream_size(static_cast<grpc_transport*>(t));
|
233
233
|
}
|
234
234
|
|
235
|
-
bool grpc_add_connected_filter(grpc_channel_stack_builder* builder
|
236
|
-
void* arg_must_be_null) {
|
237
|
-
GPR_ASSERT(arg_must_be_null == nullptr);
|
235
|
+
bool grpc_add_connected_filter(grpc_channel_stack_builder* builder) {
|
238
236
|
grpc_transport* t = grpc_channel_stack_builder_get_transport(builder);
|
239
237
|
GPR_ASSERT(t != nullptr);
|
240
238
|
return grpc_channel_stack_builder_append_filter(
|
@@ -25,8 +25,7 @@
|
|
25
25
|
|
26
26
|
extern const grpc_channel_filter grpc_connected_filter;
|
27
27
|
|
28
|
-
bool grpc_add_connected_filter(grpc_channel_stack_builder* builder
|
29
|
-
void* arg_must_be_null);
|
28
|
+
bool grpc_add_connected_filter(grpc_channel_stack_builder* builder);
|
30
29
|
|
31
30
|
/* Debug helper to dig the transport stream out of a call element */
|
32
31
|
grpc_stream* grpc_connected_channel_get_stream(grpc_call_element* elem);
|
@@ -116,12 +116,12 @@ void grpc_compression_options_init(grpc_compression_options* opts) {
|
|
116
116
|
|
117
117
|
void grpc_compression_options_enable_algorithm(
|
118
118
|
grpc_compression_options* opts, grpc_compression_algorithm algorithm) {
|
119
|
-
|
119
|
+
grpc_core::SetBit(&opts->enabled_algorithms_bitset, algorithm);
|
120
120
|
}
|
121
121
|
|
122
122
|
void grpc_compression_options_disable_algorithm(
|
123
123
|
grpc_compression_options* opts, grpc_compression_algorithm algorithm) {
|
124
|
-
|
124
|
+
grpc_core::ClearBit(&opts->enabled_algorithms_bitset, algorithm);
|
125
125
|
}
|
126
126
|
|
127
127
|
int grpc_compression_options_is_algorithm_enabled(
|
@@ -101,9 +101,9 @@ grpc_channel_args* grpc_channel_args_compression_algorithm_set_state(
|
|
101
101
|
algo_name);
|
102
102
|
} else if (states_arg_found) {
|
103
103
|
if (state != 0) {
|
104
|
-
|
104
|
+
grpc_core::SetBit(reinterpret_cast<unsigned*>(states_arg), algorithm);
|
105
105
|
} else if (algorithm != GRPC_COMPRESS_NONE) {
|
106
|
-
|
106
|
+
grpc_core::ClearBit(reinterpret_cast<unsigned*>(states_arg), algorithm);
|
107
107
|
}
|
108
108
|
} else {
|
109
109
|
/* create a new arg */
|
@@ -114,9 +114,11 @@ grpc_channel_args* grpc_channel_args_compression_algorithm_set_state(
|
|
114
114
|
/* all enabled by default */
|
115
115
|
tmp.value.integer = (1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1;
|
116
116
|
if (state != 0) {
|
117
|
-
|
117
|
+
grpc_core::SetBit(reinterpret_cast<unsigned*>(&tmp.value.integer),
|
118
|
+
algorithm);
|
118
119
|
} else if (algorithm != GRPC_COMPRESS_NONE) {
|
119
|
-
|
120
|
+
grpc_core::ClearBit(reinterpret_cast<unsigned*>(&tmp.value.integer),
|
121
|
+
algorithm);
|
120
122
|
}
|
121
123
|
result = grpc_channel_args_copy_and_add(*a, &tmp, 1);
|
122
124
|
grpc_channel_args_destroy(*a);
|
@@ -207,7 +207,7 @@ grpc_message_compression_algorithm grpc_message_compression_algorithm_for_level(
|
|
207
207
|
}
|
208
208
|
|
209
209
|
const size_t num_supported =
|
210
|
-
|
210
|
+
grpc_core::BitCount(accepted_encodings) - 1; /* discard NONE */
|
211
211
|
if (level == GRPC_COMPRESS_LEVEL_NONE || num_supported == 0) {
|
212
212
|
return GRPC_MESSAGE_COMPRESS_NONE;
|
213
213
|
}
|
@@ -228,7 +228,7 @@ grpc_message_compression_algorithm grpc_message_compression_algorithm_for_level(
|
|
228
228
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(algos_ranking); i++) {
|
229
229
|
const grpc_message_compression_algorithm alg = algos_ranking[i];
|
230
230
|
for (size_t j = 0; j < num_supported; j++) {
|
231
|
-
if (
|
231
|
+
if (grpc_core::GetBit(accepted_encodings, alg) == 1) {
|
232
232
|
/* if \a alg in supported */
|
233
233
|
sorted_supported_algos[algos_supported_idx++] = alg;
|
234
234
|
break;
|
@@ -91,7 +91,7 @@ int grpc_stream_compression_algorithm_parse(
|
|
91
91
|
inline int grpc_compression_options_is_algorithm_enabled_internal(
|
92
92
|
const grpc_compression_options* opts,
|
93
93
|
grpc_compression_algorithm algorithm) {
|
94
|
-
return
|
94
|
+
return grpc_core::GetBit(opts->enabled_algorithms_bitset, algorithm);
|
95
95
|
}
|
96
96
|
|
97
97
|
#endif /* GRPC_CORE_LIB_COMPRESSION_COMPRESSION_INTERNAL_H */
|
@@ -12,13 +12,17 @@
|
|
12
12
|
// See the License for the specific language governing permissions and
|
13
13
|
// limitations under the License.
|
14
14
|
|
15
|
-
#include <grpc/
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
16
|
|
17
17
|
#include "src/core/lib/config/core_configuration.h"
|
18
18
|
|
19
|
+
#include <grpc/support/log.h>
|
20
|
+
|
19
21
|
namespace grpc_core {
|
20
22
|
|
21
23
|
std::atomic<CoreConfiguration*> CoreConfiguration::config_{nullptr};
|
24
|
+
std::atomic<CoreConfiguration::RegisteredBuilder*> CoreConfiguration::builders_{
|
25
|
+
nullptr};
|
22
26
|
|
23
27
|
CoreConfiguration::Builder::Builder() = default;
|
24
28
|
|
@@ -27,11 +31,42 @@ CoreConfiguration* CoreConfiguration::Builder::Build() {
|
|
27
31
|
}
|
28
32
|
|
29
33
|
CoreConfiguration::CoreConfiguration(Builder* builder)
|
30
|
-
:
|
34
|
+
: channel_init_(builder->channel_init_.Build()),
|
35
|
+
handshaker_registry_(builder->handshaker_registry_.Build()) {}
|
36
|
+
|
37
|
+
void CoreConfiguration::RegisterBuilder(std::function<void(Builder*)> builder) {
|
38
|
+
GPR_ASSERT(config_.load(std::memory_order_relaxed) == nullptr &&
|
39
|
+
"CoreConfiguration was already instantiated before builder "
|
40
|
+
"registration was completed");
|
41
|
+
RegisteredBuilder* n = new RegisteredBuilder();
|
42
|
+
n->builder = std::move(builder);
|
43
|
+
n->next = builders_.load(std::memory_order_relaxed);
|
44
|
+
while (!builders_.compare_exchange_weak(n->next, n, std::memory_order_acq_rel,
|
45
|
+
std::memory_order_relaxed)) {
|
46
|
+
}
|
47
|
+
GPR_ASSERT(config_.load(std::memory_order_relaxed) == nullptr &&
|
48
|
+
"CoreConfiguration was already instantiated before builder "
|
49
|
+
"registration was completed");
|
50
|
+
}
|
31
51
|
|
32
52
|
const CoreConfiguration& CoreConfiguration::BuildNewAndMaybeSet() {
|
33
53
|
// Construct builder, pass it up to code that knows about build configuration
|
34
54
|
Builder builder;
|
55
|
+
// The linked list of builders stores things in reverse registration order.
|
56
|
+
// To get things registered as systems relying on this expect however, we
|
57
|
+
// actually need to run things in forward registration order, so we iterate
|
58
|
+
// once over the linked list to build a vector of builders, and then iterate
|
59
|
+
// over said vector in reverse to actually run the builders.
|
60
|
+
std::vector<RegisteredBuilder*> registered_builders;
|
61
|
+
for (RegisteredBuilder* b = builders_.load(std::memory_order_acquire);
|
62
|
+
b != nullptr; b = b->next) {
|
63
|
+
registered_builders.push_back(b);
|
64
|
+
}
|
65
|
+
for (auto it = registered_builders.rbegin(); it != registered_builders.rend();
|
66
|
+
++it) {
|
67
|
+
(*it)->builder(&builder);
|
68
|
+
}
|
69
|
+
// Finally, call the built in configuration builder.
|
35
70
|
BuildCoreConfiguration(&builder);
|
36
71
|
// Use builder to construct a confguration
|
37
72
|
CoreConfiguration* p = builder.Build();
|
@@ -49,6 +84,13 @@ const CoreConfiguration& CoreConfiguration::BuildNewAndMaybeSet() {
|
|
49
84
|
|
50
85
|
void CoreConfiguration::Reset() {
|
51
86
|
delete config_.exchange(nullptr, std::memory_order_acquire);
|
87
|
+
RegisteredBuilder* builder =
|
88
|
+
builders_.exchange(nullptr, std::memory_order_acquire);
|
89
|
+
while (builder != nullptr) {
|
90
|
+
RegisteredBuilder* next = builder->next;
|
91
|
+
delete builder;
|
92
|
+
builder = next;
|
93
|
+
}
|
52
94
|
}
|
53
95
|
|
54
96
|
} // namespace grpc_core
|